ShVad
JSmart CMS
Начал писать сегодня xss фильтр, хотелось бы услышать Ваши предложения и замечания.
Для защиты от пхп кода планирую добавить:
Скобки у данных тегов менять на сущности:
Хватит этого для фильтрации? Может что то упустил, или что лишнее даже.
Спасибо за советы.
PHP:
class Security {
var $token_hash = '';
var $find = array(
'/data:/i' => 'data:',
'/about:/i' => 'about:',
'/vbscript:/i' => 'vbscript<b></b>:',
'/onclick/i' => 'onclick',
'/onload/i' => 'onload',
'/onunload/i' => 'onunload',
'/onabort/i' => 'onabort',
'/onerror/i' => 'onerror',
'/onblur/i' => 'onblur',
'/onchange/i' => 'onchange',
'/onfocus/i' => 'onfocus',
'/onreset/i' => 'onreset',
'/onsubmit/i' => 'onsubmit',
'/ondblclick/i' => 'ondblclick',
'/onkeydown/i' => 'onkeydown',
'/onkeypress/i' => 'onkeypress',
'/onkeyup/i' => 'onkeyup',
'/onmousedown/i' => 'onmousedown',
'/onmouseup/i' => 'onmouseup',
'/onmouseover/i' => 'onmouseover',
'/onmouseout/i' => 'onmouseout',
'/onselect/i' => 'onselect',
'/javascript/i' => 'javascript',
'#<script#i' => '<script'
);
public function xss_clean($str)
{
if (is_array($str))
{
while (list($key) = each($str))
{
$str[$key] = $this->xss_clean($str[$key]);
}
return $str;
}
$str = rawurldecode($str);
foreach ($this->find as $key => $value)
{
$str = preg_replace ($key, $value, $str);
}
return $str;
}
PHP:
$str = preg_replace('#(alert|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)#si', "\\1\\2(\\3)", $str);
PHP:
$no = 'alert|applet|audio|basefont|base|behavior|bgsound|blink|body|embed|expression|form|frameset|frame|head|html|ilayer|iframe|input|isindex|layer|link|meta|object|plaintext|style|script|textarea|title|video|xml|xss';
Спасибо за советы.