diff options
author | Andrey Andreev <narf@devilix.net> | 2015-09-14 15:06:37 +0200 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2015-09-14 15:06:37 +0200 |
commit | 1e6d4d611d80dc7f20566ecc125354d84deebd1c (patch) | |
tree | 8891f690a863c091130c1a62990fc79c9f834932 | |
parent | 392f8da2ebc22efeb1b688a75c49c1a52e12f0f2 (diff) |
Another addition to tag detection patterns in xss_clean()
-rw-r--r-- | system/core/Security.php | 5 | ||||
-rw-r--r-- | tests/codeigniter/core/Security_test.php | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/system/core/Security.php b/system/core/Security.php index 3142f7da2..9e5e72576 100644 --- a/system/core/Security.php +++ b/system/core/Security.php @@ -493,6 +493,7 @@ class CI_Security { */ $pattern = '#' .'<((/*\s*)([a-z0-9]+)(?=[^a-z0-9])' // tag start and name, followed by a non-tag character + .'[^>a-z0-9]*' // a valid attribute character immediately after the tag would count as a separator // optional attributes .'([\s\042\047/=]+' // non-attribute characters, excluding > (tag close) for obvious reasons .'[^\s\042\047>/=]+' // attribute characters @@ -804,6 +805,7 @@ class CI_Security { $pattern = '#(' // catch everything in the tag preceeding the evil attribute .'<[a-z0-9]+(?=[^>a-z0-9])' // tag start and name, followed by a non-tag character + .'[^>a-z0-9]*' // a valid attribute character immediately after the tag would count as a separator // optional attributes .'([\s\042\047/=]+' // non-attribute characters, excluding > (tag close) for obvious reasons .'[^\s\042\047>/=]+' // attribute characters @@ -821,7 +823,8 @@ class CI_Security { .')' // end evil attribute .'#isS'; - do { + do + { $count = 0; $str = preg_replace($pattern, '$1 [removed]', $str, -1, $count); } diff --git a/tests/codeigniter/core/Security_test.php b/tests/codeigniter/core/Security_test.php index 2e9cd01c4..ee5b82cbc 100644 --- a/tests/codeigniter/core/Security_test.php +++ b/tests/codeigniter/core/Security_test.php @@ -174,6 +174,11 @@ class Security_test extends CI_TestCase { '<img src="x"> on=\'x\' onerror=``,alert(1)>', $this->security->remove_evil_attributes('<img src="x"> on=\'x\' onerror=``,alert(1)>', FALSE) ); + + $this->assertEquals( + '<a< [removed]>', + $this->security->remove_evil_attributes('<a< onmouseover="alert(1)">', FALSE) + ); } // -------------------------------------------------------------------- |