Clean up namespaces

This commit is contained in:
Kijin Sung 2016-03-14 21:04:27 +09:00
parent 4407af2b0f
commit cb229c2d66
26 changed files with 205 additions and 200 deletions

View file

@ -1483,7 +1483,7 @@ class Context
}
// Allow if the current user is in the list of allowed IPs.
if (Rhymix\Framework\Security\IpFilter::inRanges(RX_CLIENT_IP, config('lock.allow')))
if (Rhymix\Framework\Filters\IpFilter::inRanges(RX_CLIENT_IP, config('lock.allow')))
{
return;
}

View file

@ -24,22 +24,22 @@ class EmbedFilter
public function getWhiteUrlList()
{
return Rhymix\Framework\Security\MediaFilter::getObjectWhitelist();
return Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist();
}
public function getWhiteIframeUrlList()
{
return Rhymix\Framework\Security\MediaFilter::getIframeWhitelist();
return Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist();
}
function isWhiteDomain($urlAttribute)
{
return Rhymix\Framework\Security\MediaFilter::matchObjectWhitelist($urlAttribute);
return Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist($urlAttribute);
}
function isWhiteIframeDomain($urlAttribute)
{
return Rhymix\Framework\Security\MediaFilter::matchIframeWhitelist($urlAttribute);
return Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist($urlAttribute);
}
function isWhiteMimetype($mimeType)

View file

@ -6,12 +6,12 @@ class IpFilter
public function filter($ip_list, $ip = NULL)
{
if(!$ip) $ip = $_SERVER['REMOTE_ADDR'];
return Rhymix\Framework\Security\IpFilter::inRanges($ip, $ip_list);
return Rhymix\Framework\Filters\IpFilter::inRanges($ip, $ip_list);
}
public function validate($ip_list = array())
{
return Rhymix\Framework\Security\IpFilter::validateRanges($ip_list);
return Rhymix\Framework\Filters\IpFilter::validateRanges($ip_list);
}
}

View file

@ -10,7 +10,7 @@ class Purifier
public function purify(&$content)
{
$content = Rhymix\Framework\Security\HTMLFilter::clean($content);
$content = Rhymix\Framework\Filters\HTMLFilter::clean($content);
}
}

View file

@ -53,8 +53,8 @@ else
*/
if (isset($_SERVER['HTTP_CF_CONNECTING_IP']))
{
include_once __DIR__ . '/framework/security/ipfilter.php';
Rhymix\Framework\Security\IpFilter::getCloudFlareRealIP();
include_once __DIR__ . '/framework/filters/ipfilter.php';
Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP();
}
if (isset($_SERVER['REMOTE_ADDR']) && preg_match('/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/', $_SERVER['REMOTE_ADDR'], $matches))
{

View file

@ -34,7 +34,7 @@ class Config
}
else
{
if (self::$_config = Compat\ConfigParser::convert())
if (self::$_config = Parsers\ConfigParser::convert())
{
self::save();
}

View file

@ -445,7 +445,7 @@ class Debug
return $cache = true;
case 'ip':
if (Security\IpFilter::inRanges(RX_CLIENT_IP, Config::get('debug.allow')))
if (Filters\IpFilter::inRanges(RX_CLIENT_IP, Config::get('debug.allow')))
{
return $cache = true;
}

View file

@ -1,6 +1,6 @@
<?php
namespace Rhymix\Framework\Security;
namespace Rhymix\Framework\Filters;
/**
* The filename filter class.

View file

@ -1,6 +1,8 @@
<?php
namespace Rhymix\Framework\Security;
namespace Rhymix\Framework\Filters;
use Rhymix\Framework\Security;
/**
* The HTML filter class.
@ -462,7 +464,7 @@ class HTMLFilter
{
$html = substr($html, 0, 4) . ' src=""' . substr($html, 4);
}
$encoded_properties = \Rhymix\Framework\Security::encrypt(json_encode($attrs));
$encoded_properties = Security::encrypt(json_encode($attrs));
return substr($html, 0, 4) . ' rx_encoded_properties="' . $encoded_properties . '"' . substr($html, 4);
}, $content);
}
@ -477,7 +479,7 @@ class HTMLFilter
{
return preg_replace_callback('!<(div|img)([^>]*)(\srx_encoded_properties="([^"]+)")!i', function($match) {
$attrs = array();
$decoded_properties = \Rhymix\Framework\Security::decrypt($match[4]);
$decoded_properties = Security::decrypt($match[4]);
if (!$decoded_properties)
{
return str_replace($match[3], '', $match[0]);

View file

@ -1,6 +1,6 @@
<?php
namespace Rhymix\Framework\Security;
namespace Rhymix\Framework\Filters;
/**
* The IP filter class.

View file

@ -1,6 +1,8 @@
<?php
namespace Rhymix\Framework\Security;
namespace Rhymix\Framework\Filters;
use Rhymix\Framework\Config;
/**
* The media filter class.
@ -35,8 +37,8 @@ class MediaFilter
if ($permanently)
{
\Rhymix\Framework\Config::set('mediafilter.iframe', self::$_iframe_whitelist);
\Rhymix\Framework\Config::save();
Config::set('mediafilter.iframe', self::$_iframe_whitelist);
Config::save();
}
}
}
@ -63,8 +65,8 @@ class MediaFilter
if ($permanently)
{
\Rhymix\Framework\Config::set('mediafilter.object', self::$_object_whitelist);
\Rhymix\Framework\Config::save();
Config::set('mediafilter.object', self::$_object_whitelist);
Config::save();
}
}
}

View file

@ -156,7 +156,7 @@ class Lang
}
elseif (file_exists("$dir/lang.xml"))
{
$filename = Compat\LangParser::compileXMLtoPHP("$dir/lang.xml", $language === 'ja' ? 'jp' : $language);
$filename = Parsers\LangParser::compileXMLtoPHP("$dir/lang.xml", $language === 'ja' ? 'jp' : $language);
}
elseif (file_exists($dir . '/' . ($language === 'ja' ? 'jp' : $language) . '.lang.php'))
{

View file

@ -1,9 +1,10 @@
<?php
namespace Rhymix\Framework\Compat;
namespace Rhymix\Framework\Parsers;
use Rhymix\Framework\Config;
use Rhymix\Framework\DateTime;
use Rhymix\Framework\Security;
/**
* Config parser class for XE compatibility.
@ -151,9 +152,9 @@ class ConfigParser
}
// Create new crypto keys.
$config['crypto']['encryption_key'] = \Rhymix\Framework\Security::getRandom(64, 'alnum');
$config['crypto']['authentication_key'] = \Rhymix\Framework\Security::getRandom(64, 'alnum');
$config['crypto']['session_key'] = \Rhymix\Framework\Security::getRandom(64, 'alnum');
$config['crypto']['encryption_key'] = Security::getRandom(64, 'alnum');
$config['crypto']['authentication_key'] = Security::getRandom(64, 'alnum');
$config['crypto']['session_key'] = Security::getRandom(64, 'alnum');
// Convert language configuration.
if (isset($db_info->lang_type))

View file

@ -1,6 +1,6 @@
<?php
namespace Rhymix\Framework\Compat;
namespace Rhymix\Framework\Parsers;
use Rhymix\Framework\Lang;

View file

@ -31,12 +31,12 @@ class Security
// Clean up HTML content to prevent XSS attacks.
case 'html':
if (!utf8_check($input)) return false;
return Security\HTMLFilter::clean($input);
return Filters\HTMLFilter::clean($input);
// Clean up the input to be used as a safe filename.
case 'filename':
if (!utf8_check($input)) return false;
return Security\FilenameFilter::clean($input);
return Filters\FilenameFilter::clean($input);
// Unknown filters return false.
default: return false;

View file

@ -822,7 +822,7 @@ function url_decode($str)
*/
function removeHackTag($content)
{
return Rhymix\Framework\Security\HTMLFilter::clean($content);
return Rhymix\Framework\Filters\HTMLFilter::clean($content);
}
/**
@ -833,7 +833,7 @@ function removeHackTag($content)
*/
function purifierHtml(&$content)
{
$content = Rhymix\Framework\Security\HTMLFilter::clean($content);
$content = Rhymix\Framework\Filters\HTMLFilter::clean($content);
}
/**
@ -1036,7 +1036,7 @@ function stripEmbedTagForAdmin(&$content, $writer_member_srl)
$security_msg = '<div style="border: 1px solid #DDD; background: #FAFAFA; text-align:center; margin: 1em 0;">' .
'<p style="margin: 1em;">' . lang('security_warning_embed') . '</p></div>';
$content = Rhymix\Framework\Security\MediaFilter::removeEmbeddedMedia($content, $security_msg);
$content = Rhymix\Framework\Filters\MediaFilter::removeEmbeddedMedia($content, $security_msg);
}
return;

View file

@ -561,7 +561,7 @@ class adminAdminController extends admin
return $item !== '';
});
$iframe_whitelist = array_unique(array_map(function($item) {
return Rhymix\Framework\Security\MediaFilter::formatPrefix($item);
return Rhymix\Framework\Filters\MediaFilter::formatPrefix($item);
}, $iframe_whitelist));
natcasesort($iframe_whitelist);
Rhymix\Framework\Config::set('mediafilter.iframe', array_values($iframe_whitelist));
@ -572,7 +572,7 @@ class adminAdminController extends admin
return $item !== '';
});
$object_whitelist = array_unique(array_map(function($item) {
return Rhymix\Framework\Security\MediaFilter::formatPrefix($item);
return Rhymix\Framework\Filters\MediaFilter::formatPrefix($item);
}, $object_whitelist));
natcasesort($object_whitelist);
Rhymix\Framework\Config::set('mediafilter.object', array_values($object_whitelist));
@ -587,7 +587,7 @@ class adminAdminController extends admin
$allowed_ip = array_unique(array_filter($allowed_ip, function($item) {
return $item !== '';
}));
if (!Rhymix\Framework\Security\IpFilter::validateRanges($allowed_ip)) {
if (!Rhymix\Framework\Filters\IpFilter::validateRanges($allowed_ip)) {
return new Object(-1, 'msg_invalid_ip');
}
@ -595,7 +595,7 @@ class adminAdminController extends admin
$denied_ip = array_unique(array_filter($denied_ip, function($item) {
return $item !== '';
}));
if (!Rhymix\Framework\Security\IpFilter::validateRanges($denied_ip)) {
if (!Rhymix\Framework\Filters\IpFilter::validateRanges($denied_ip)) {
return new Object(-1, 'msg_invalid_ip');
}
@ -745,7 +745,7 @@ class adminAdminController extends admin
$allowed_ip = array_unique(array_filter($allowed_ip, function($item) {
return $item !== '';
}));
if (!Rhymix\Framework\Security\IpFilter::validate($allowed_ip)) {
if (!Rhymix\Framework\Filters\IpFilter::validate($allowed_ip)) {
return new Object(-1, 'msg_invalid_ip');
}
Rhymix\Framework\Config::set('debug.allow', array_values($allowed_ip));
@ -771,17 +771,17 @@ class adminAdminController extends admin
if ($vars->sitelock_locked === 'Y')
{
if (!Rhymix\Framework\Security\IpFilter::inRanges('127.0.0.1', $allowed_ip))
if (!Rhymix\Framework\Filters\IpFilter::inRanges('127.0.0.1', $allowed_ip))
{
array_unshift($allowed_ip, '127.0.0.1');
}
if (!Rhymix\Framework\Security\IpFilter::inRanges(RX_CLIENT_IP, $allowed_ip))
if (!Rhymix\Framework\Filters\IpFilter::inRanges(RX_CLIENT_IP, $allowed_ip))
{
array_unshift($allowed_ip, RX_CLIENT_IP);
}
}
if (!Rhymix\Framework\Security\IpFilter::validateRanges($allowed_ip))
if (!Rhymix\Framework\Filters\IpFilter::validateRanges($allowed_ip))
{
return new Object(-1, 'msg_invalid_ip');
}

View file

@ -418,8 +418,8 @@ class adminAdminView extends admin
function dispAdminConfigSecurity()
{
// Load embed filter.
context::set('mediafilter_iframe', implode(PHP_EOL, Rhymix\Framework\Security\MediaFilter::getIframeWhitelist()));
context::set('mediafilter_object', implode(PHP_EOL, Rhymix\Framework\Security\MediaFilter::getObjectWhitelist()));
context::set('mediafilter_iframe', implode(PHP_EOL, Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist()));
context::set('mediafilter_object', implode(PHP_EOL, Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist()));
// Admin IP access control
$allowed_ip = Rhymix\Framework\Config::get('admin.allow');
@ -518,11 +518,11 @@ class adminAdminView extends admin
Context::set('sitelock_message', escape(Rhymix\Framework\Config::get('lock.message')));
$allowed_ip = Rhymix\Framework\Config::get('lock.allow') ?: array();
if (!Rhymix\Framework\Security\IpFilter::inRanges('127.0.0.1', $allowed_ip))
if (!Rhymix\Framework\Filters\IpFilter::inRanges('127.0.0.1', $allowed_ip))
{
array_unshift($allowed_ip, '127.0.0.1');
}
if (!Rhymix\Framework\Security\IpFilter::inRanges(RX_CLIENT_IP, $allowed_ip))
if (!Rhymix\Framework\Filters\IpFilter::inRanges(RX_CLIENT_IP, $allowed_ip))
{
array_unshift($allowed_ip, RX_CLIENT_IP);
}

View file

@ -732,7 +732,7 @@ class fileController extends file
}
// Sanitize filename
$file_info['name'] = Rhymix\Framework\Security\FilenameFilter::clean($file_info['name']);
$file_info['name'] = Rhymix\Framework\Filters\FilenameFilter::clean($file_info['name']);
// Set upload path by checking if the attachement is an image or other kinds of file
if(preg_match("/\.(jpe?g|gif|png|wm[va]|mpe?g|avi|swf|flv|mp[1-4]|as[fx]|wav|midi?|moo?v|qt|r[am]{1,2}|m4v)$/i", $file_info['name']))

View file

@ -298,12 +298,12 @@ class memberAdminModel extends member
{
if ($allow_list = ($allow_list === null) ? config('admin.allow') : $allow_list)
{
return Rhymix\Framework\Security\IpFilter::inRanges(RX_CLIENT_IP, $allow_list);
return Rhymix\Framework\Filters\IpFilter::inRanges(RX_CLIENT_IP, $allow_list);
}
if ($deny_list = ($deny_list === null) ? config('admin.deny') : $deny_list)
{
return !Rhymix\Framework\Security\IpFilter::inRanges(RX_CLIENT_IP, $deny_list);
return !Rhymix\Framework\Filters\IpFilter::inRanges(RX_CLIENT_IP, $deny_list);
}
return true;

View file

@ -35,7 +35,7 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
foreach ($tests as $from => $to)
{
$result = Rhymix\Framework\Security\FilenameFilter::clean($from);
$result = Rhymix\Framework\Filters\FilenameFilter::clean($from);
$this->assertEquals($to, $result);
}
}

View file

@ -61,7 +61,7 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
foreach ($tests as $test)
{
$this->assertEquals($test[1], Rhymix\Framework\Security\HTMLFilter::clean($test[0]));
$this->assertEquals($test[1], Rhymix\Framework\Filters\HTMLFilter::clean($test[0]));
}
}
@ -69,41 +69,41 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
{
$source = '<div><audio autoplay="autoplay" src="./foo/bar.mp3"></audio></div>';
$target = '<div><audio src="./foo/bar.mp3"></audio></div>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<video autoplay="autoplay" width="320" height="240"><source src="./foo/bar.mp4" type="video/mp4" /></video>';
$target = '<video width="320" height="240"><source src="./foo/bar.mp4" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
$target = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterCSS3()
{
$source = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
$target = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
$target = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="overflow-x:auto;overflow-y:scroll;left:-500px;"></div>';
$target = '<div style="overflow-x:auto;overflow-y:scroll;"></div>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterEmbeddedMedia()
{
$source = '<iframe title="Video Test" width="640" height="360" src="http://videofarm.daum.net/controller/video/viewer/Video.html?vid=s474b7BR2zzREo0g7OT7EKo&amp;play_loc=undefined&amp;alert=true" frameborder="0" scrolling="no"></iframe>';
$target = '<iframe title="Video Test" width="640" height="360" src="http://videofarm.daum.net/controller/video/viewer/Video.html?vid=s474b7BR2zzREo0g7OT7EKo&amp;play_loc=undefined&amp;alert=true" frameborder="0" scrolling="no"></iframe>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<iframe title="Video Test" width="640" height="360" src="http://not-allowed.com/whatever-video.mp4" frameborder="0" scrolling="no"></iframe>';
$target = '<iframe title="Video Test" width="640" height="360" frameborder="0" scrolling="no"></iframe>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<object type="application/x-shockwave-flash" id="DaumVodPlayer_s474b7BR2zzREo0g7OT7EKo" width="640px" height="360px" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,3,0,0">' .
'<param name="movie" value="http://videofarm.daum.net/controller/player/VodPlayer.swf" />' .
@ -123,33 +123,33 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
'<param name="flashvars" value="vid=s474b7BR2zzREo0g7OT7EKo&amp;playLoc=undefined&amp;alert=true" />' .
'<embed src="http://videofarm.daum.net/controller/player/VodPlayer.swf" width="640" height="360" type="application/x-shockwave-flash" flashvars="vid=s474b7BR2zzREo0g7OT7EKo&amp;playLoc=undefined&amp;alert=true" allowscriptaccess="never" allownetworking="internal" />' .
'</object>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<audio src="https://www.youtube.com/whatever"></audio>';
$target = '<audio src="https://www.youtube.com/whatever"></audio>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<audio src="https://www-youtube.com/whatever"></audio>';
$target = '<audio src=""></audio>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<video width="320" height="240"><source src="http://api.v.daum.net/something" type="video/mp4" /></video>';
$target = '<video width="320" height="240"><source src="http://api.v.daum.net/something" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<video width="320" height="240"><source src="http://wrong-site.net/" type="video/mp4" /></video>';
$target = '<video width="320" height="240"><source src="" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterEditorComponent()
{
$source = '<img somekey="somevalue" otherkey="othervalue" onmouseover="alert(\'xss\');" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
$target = '<img somekey="somevalue" otherkey="othervalue" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />';
$target = '<img somekey="somevalue" otherkey="othervalue" src="" editor_component="component_name" alt="" />';
$this->assertEquals($target, Rhymix\Framework\Security\HTMLFilter::clean($source));
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
}

View file

@ -0,0 +1,77 @@
<?php
class IpFilterTest extends \Codeception\TestCase\Test
{
public function testIPv4CIDR()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('10.0.127.191', '10.0.127.191'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('10.1.131.177', '10.1.131.178'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('127.0.0.1', '127.0.0.0/8'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('172.34.0.0', '172.16.0.0/12'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.16.0/22'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.16.0/23'));
}
public function testIPv6CIDR()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('::1', '::1/128'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('::1', '::2'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('2400:cb00::1234', '2400:cb00::/32'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('2405:8100::1234', '2400:cb00::/32'));
}
public function testIPv4Wildcard()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.*'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.*.*'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.136.*'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.172.*.*'));
}
public function testIPv4Hyphen()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.0-192.168.134.255'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.128.16-192.168.145.0'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.242-192.168.244.7'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.100.255-192.168.133.19'));
}
public function testValidator()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.1'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0/16'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.*.*'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.*'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0-192.168.255.255'));
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('2400:cb00::/32'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0~192.168.255.255'));
}
public function testLegacy()
{
$this->assertTrue(\IpFilter::filter(array('192.168.134.241'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('192.168.134.0-192.168.134.255'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('127.0.0.1', '192.168.134.241'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('192.168.134.*'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('192.168.*'), '192.168.134.241'));
$this->assertFalse(\IpFilter::filter(array('127.0.0.1'), '192.168.134.241'));
}
public function testCloudFlareRealIP()
{
$_SERVER['HTTP_CF_CONNECTING_IP'] = '192.168.134.241';
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
$_SERVER['REMOTE_ADDR'] = '108.162.192.121';
$this->assertEquals('192.168.134.241', Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.134.241', $_SERVER['REMOTE_ADDR']);
unset($_SERVER['HTTP_CF_CONNECTING_IP']);
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
}
}

View file

@ -0,0 +1,58 @@
<?php
class MediaFilterTest extends \Codeception\TestCase\Test
{
public function testWhitelists()
{
// iframe whitelist as array.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist()));
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist()));
// iframe whitelist as regex.
$this->assertTrue(strpos(Rhymix\Framework\Filters\MediaFilter::getIframeWhitelistRegex(), '|www\.youtube\.com/') !== false);
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getIframeWhitelistRegex(), 'www.youtube.com/') !== false);
// Match individual URL against iframe whitelist.
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('https://www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('http://www-youtube.com/v'));
// object whitelist as array.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist()));
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getObjectWhitelist()));
// object whitelist as regex.
$this->assertTrue(strpos(Rhymix\Framework\Filters\MediaFilter::getObjectWhitelistRegex(), '|www\.youtube\.com/') !== false);
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getObjectWhitelistRegex(), 'www.youtube.com/') !== false);
// Match individual URL against object whitelist.
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('https://www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('http://www-youtube.com/v'));
}
public function testAddPrefix()
{
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('http://some.custom.website.com/video.mp4'));
Rhymix\Framework\Filters\MediaFilter::addIframePrefix('*.custom.website.com/');
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('http://some.custom.website.com/video.mp4'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('http://some.custom.website.com/video.mp4'));
Rhymix\Framework\Filters\MediaFilter::addObjectPrefix('*.custom.website.com/');
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('http://some.custom.website.com/video.mp4'));
}
public function testRemoveEmbeddedMedia()
{
$tests = array(
'<div><object></object></div>' => '<div></div>',
'<div><object><embed></embed></object></div>' => '<div></div>',
'<div><object><param /></object></div>' => '<div></div>',
'<div><img class="foo" editor_component="multimedia_link" /></div>' => '<div></div>',
'<div><img editor_component="multimedia_link"></img></div>' => '<div></div>',
);
foreach ($tests as $from => $to)
{
$this->assertEquals($to, Rhymix\Framework\Filters\MediaFilter::removeEmbeddedMedia($from));
}
}
}

View file

@ -1,77 +0,0 @@
<?php
class IpFilterTest extends \Codeception\TestCase\Test
{
public function testIPv4CIDR()
{
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('10.0.127.191', '10.0.127.191'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('10.1.131.177', '10.1.131.178'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('127.0.0.1', '127.0.0.0/8'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('172.34.0.0', '172.16.0.0/12'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('192.168.18.214', '192.168.16.0/22'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('192.168.18.214', '192.168.16.0/23'));
}
public function testIPv6CIDR()
{
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('::1', '::1/128'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('::1', '::2'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('2400:cb00::1234', '2400:cb00::/32'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('2405:8100::1234', '2400:cb00::/32'));
}
public function testIPv4Wildcard()
{
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.134.*'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.*.*'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.136.*'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.172.*.*'));
}
public function testIPv4Hyphen()
{
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.134.0-192.168.134.255'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.128.16-192.168.145.0'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.134.242-192.168.244.7'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::inRange('192.168.134.241', '192.168.100.255-192.168.133.19'));
}
public function testValidator()
{
$this->assertTrue(Rhymix\Framework\Security\IpFilter::validateRange('192.168.0.1'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::validateRange('192.168.0.0/16'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::validateRange('192.168.*.*'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::validateRange('192.168.*'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::validateRange('192.168.0.0-192.168.255.255'));
$this->assertTrue(Rhymix\Framework\Security\IpFilter::validateRange('2400:cb00::/32'));
$this->assertFalse(Rhymix\Framework\Security\IpFilter::validateRange('192.168.0.0~192.168.255.255'));
}
public function testLegacy()
{
$this->assertTrue(\IpFilter::filter(array('192.168.134.241'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('192.168.134.0-192.168.134.255'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('127.0.0.1', '192.168.134.241'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('192.168.134.*'), '192.168.134.241'));
$this->assertTrue(\IpFilter::filter(array('192.168.*'), '192.168.134.241'));
$this->assertFalse(\IpFilter::filter(array('127.0.0.1'), '192.168.134.241'));
}
public function testCloudFlareRealIP()
{
$_SERVER['HTTP_CF_CONNECTING_IP'] = '192.168.134.241';
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Security\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
$_SERVER['REMOTE_ADDR'] = '108.162.192.121';
$this->assertEquals('192.168.134.241', Rhymix\Framework\Security\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.134.241', $_SERVER['REMOTE_ADDR']);
unset($_SERVER['HTTP_CF_CONNECTING_IP']);
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Security\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
}
}

View file

@ -1,58 +0,0 @@
<?php
class MediaFilterTest extends \Codeception\TestCase\Test
{
public function testWhitelists()
{
// iframe whitelist as array.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Security\MediaFilter::getIframeWhitelist()));
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Security\MediaFilter::getIframeWhitelist()));
// iframe whitelist as regex.
$this->assertTrue(strpos(Rhymix\Framework\Security\MediaFilter::getIframeWhitelistRegex(), '|www\.youtube\.com/') !== false);
$this->assertFalse(strpos(Rhymix\Framework\Security\MediaFilter::getIframeWhitelistRegex(), 'www.youtube.com/') !== false);
// Match individual URL against iframe whitelist.
$this->assertTrue(Rhymix\Framework\Security\MediaFilter::matchIframeWhitelist('https://www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Security\MediaFilter::matchIframeWhitelist('http://www-youtube.com/v'));
// object whitelist as array.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Security\MediaFilter::getObjectWhitelist()));
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Security\MediaFilter::getObjectWhitelist()));
// object whitelist as regex.
$this->assertTrue(strpos(Rhymix\Framework\Security\MediaFilter::getObjectWhitelistRegex(), '|www\.youtube\.com/') !== false);
$this->assertFalse(strpos(Rhymix\Framework\Security\MediaFilter::getObjectWhitelistRegex(), 'www.youtube.com/') !== false);
// Match individual URL against object whitelist.
$this->assertTrue(Rhymix\Framework\Security\MediaFilter::matchObjectWhitelist('https://www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Security\MediaFilter::matchObjectWhitelist('http://www-youtube.com/v'));
}
public function testAddPrefix()
{
$this->assertFalse(Rhymix\Framework\Security\MediaFilter::matchIframeWhitelist('http://some.custom.website.com/video.mp4'));
Rhymix\Framework\Security\MediaFilter::addIframePrefix('*.custom.website.com/');
$this->assertTrue(Rhymix\Framework\Security\MediaFilter::matchIframeWhitelist('http://some.custom.website.com/video.mp4'));
$this->assertFalse(Rhymix\Framework\Security\MediaFilter::matchObjectWhitelist('http://some.custom.website.com/video.mp4'));
Rhymix\Framework\Security\MediaFilter::addObjectPrefix('*.custom.website.com/');
$this->assertTrue(Rhymix\Framework\Security\MediaFilter::matchObjectWhitelist('http://some.custom.website.com/video.mp4'));
}
public function testRemoveEmbeddedMedia()
{
$tests = array(
'<div><object></object></div>' => '<div></div>',
'<div><object><embed></embed></object></div>' => '<div></div>',
'<div><object><param /></object></div>' => '<div></div>',
'<div><img class="foo" editor_component="multimedia_link" /></div>' => '<div></div>',
'<div><img editor_component="multimedia_link"></img></div>' => '<div></div>',
);
foreach ($tests as $from => $to)
{
$this->assertEquals($to, Rhymix\Framework\Security\MediaFilter::removeEmbeddedMedia($from));
}
}
}