mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-02-07 12:36:25 +00:00
Adding Helper::clean() to strip all harmful tags from output.
CHanged Sanitize::escape() to strip off the beginning and ending ' that is added by Dbo*::value() git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4588 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
9b19833273
commit
59908ac629
2 changed files with 73 additions and 1 deletions
|
@ -68,7 +68,8 @@ class Sanitize{
|
||||||
*/
|
*/
|
||||||
function escape($string, $connection = 'default') {
|
function escape($string, $connection = 'default') {
|
||||||
$db = ConnectionManager::getDataSource($connection);
|
$db = ConnectionManager::getDataSource($connection);
|
||||||
return $db->value($string);
|
$value = trim($db->value($string), '\'');
|
||||||
|
return $value;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Returns given string safe for display as HTML. Renders entities.
|
* Returns given string safe for display as HTML. Renders entities.
|
||||||
|
|
|
@ -123,6 +123,20 @@ class Helper extends Overloadable {
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
var $tags = array();
|
var $tags = array();
|
||||||
|
/**
|
||||||
|
* Holds the content to be cleaned.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var mixed
|
||||||
|
*/
|
||||||
|
var $__tainted = null;
|
||||||
|
/**
|
||||||
|
* Holds the cleaned content.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var mixed
|
||||||
|
*/
|
||||||
|
var $__cleaned = null;
|
||||||
/**
|
/**
|
||||||
* Default overload methods
|
* Default overload methods
|
||||||
*
|
*
|
||||||
|
@ -187,6 +201,25 @@ class Helper extends Overloadable {
|
||||||
return $webPath;
|
return $webPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to remove harmful tags from content
|
||||||
|
*
|
||||||
|
* @param mixed $output
|
||||||
|
* @return cleaned content for output
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function clean($output){
|
||||||
|
$this->__reset();
|
||||||
|
if (is_array($output)) {
|
||||||
|
foreach ($output as $key => $value) {
|
||||||
|
$return[$key] = $this->clean($value);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
$this->__tainted = $output;
|
||||||
|
$this->__clean();
|
||||||
|
return $this->__cleaned;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Returns a space-delimited string with items of the $options array. If a
|
* Returns a space-delimited string with items of the $options array. If a
|
||||||
* key of $options array happens to be one of:
|
* key of $options array happens to be one of:
|
||||||
|
@ -533,5 +566,43 @@ class Helper extends Overloadable {
|
||||||
}
|
}
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Resets the vars used by Helper::clean() to null
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function __reset(){
|
||||||
|
$this->__tainted = null;
|
||||||
|
$this->__cleaned = null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Removes harmful content from output
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function __clean(){
|
||||||
|
if (get_magic_quotes_gpc()) {
|
||||||
|
$this->__cleaned = stripslashes($this->__tainted);
|
||||||
|
} else {
|
||||||
|
$this->__cleaned = $this->__tainted;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->__cleaned = str_replace(array("&","<",">"),array("&amp;","&lt;","&gt;"), $this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#(&\#*\w+)[\x00-\x20]+;#u',"$1;", $this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#(&\#x*)([0-9A-F]+);*#iu',"$1$2;", $this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#(<[^>]+[\x00-\x20\"\'])(on|xmlns)[^>]*>#iUu',"$1>", $this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*)[\\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu','$1=$2nojavascript...', $this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#([a-z]*)[\x00-\x20]*=([\'\"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu','$1=$2novbscript...', $this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#(<[^>]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*expression[\x00-\x20]*\([^>]*>#iU',"$1>",$this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#(<[^>]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*behaviour[\x00-\x20]*\([^>]*>#iU',"$1>",$this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#(<[^>]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*>#iUu',"$1>",$this->__cleaned);
|
||||||
|
$this->__cleaned = preg_replace('#</*\w+:\w[^>]*>#i',"",$this->__cleaned);
|
||||||
|
do {
|
||||||
|
$oldstring = $this->__cleaned;
|
||||||
|
$this->__cleaned = preg_replace('#</*(applet|meta|xml|blink|link|style|script|embed|object|iframe|frame|frameset|ilayer|layer|bgsound|title|base)[^>]*>#i',"",$this->__cleaned);
|
||||||
|
} while ($oldstring != $this->__cleaned);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
Loading…
Add table
Reference in a new issue