XSS фильтр

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'     => '&#111;nclick',
        '/onload/i'      => '&#111;nload',
        '/onunload/i'    => '&#111;nunload',
        '/onabort/i'     => '&#111;nabort',
        '/onerror/i'     => '&#111;nerror',
        '/onblur/i'      => '&#111;nblur',
        
        '/onchange/i'    => '&#111;nchange',
        '/onfocus/i'     => '&#111;nfocus',
        '/onreset/i'     => '&#111;nreset',
        '/onsubmit/i'    => '&#111;nsubmit',
        '/ondblclick/i'  => '&#111;ndblclick',
        '/onkeydown/i'   => '&#111;nkeydown',
        '/onkeypress/i'  => '&#111;nkeypress',
        '/onkeyup/i'     => '&#111;nkeyup',
        '/onmousedown/i' => '&#111;nmousedown',
        '/onmouseup/i'   => '&#111;nmouseup',
        '/onmouseover/i' => '&#111;nmouseover',
        '/onmouseout/i'  => '&#111;nmouseout',
        '/onselect/i'    => '&#111;nselect',
        
        '/javascript/i'  => 'j&#097;vascript',
        '#<script#i'     => '&lt;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&#40;\\3&#41;", $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';
Хватит этого для фильтрации? Может что то упустил, или что лишнее даже.

Спасибо за советы.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ShVad
то есть ты считаешь, что если там будет вывод кода типа echo '<?php exit;?>'; то это будет вредно для шаблона?
 

ShVad

JSmart CMS
Я считаю что функции:
PHP:
cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink
будут лишними для шаблона (для безопасности).
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ShVad
хорошо, перефразирую свой вопрос.

Что у тебя случится, если ты напишешь в шаблоне:
PHP:
echo "unlink('/etc/passwd');";
 

ShVad

JSmart CMS
ShVad
Что у тебя случится, если ты напишешь в шаблоне:
PHP:
echo "unlink('/etc/passwd');";
Так ничего, а если так:
PHP:
<?php unlink('index.php'); ?>
То может случится. Если эти функции не убрать через шаблон можно будет шел залить (если допустим есть доступ в админку - редактирование шаблонов).
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ShVad
Ты понимаешь, что даже если ввести в форму и записать в базу эти твои страхи в виде: <?php unlink('index.php'); ?>, то они все равно выведутся как текст и ничего не удалится. PS: Это я даже не говорю о том, что процесс, под которым работает php не должен иметь возможности изменять файловую систему, окромя папки upload и т.д.
 

ShVad

JSmart CMS
ShVad
Ты понимаешь, что даже если ввести в форму и записать в базу эти твои страхи в виде...
Я говорю не про запись в базу, а про онлайн редактирование файла шаблона через админку)

А по поводу фильтрации html какие предложения будут?
 

damner2

Новичок
ShVad
Я говорю не про запись в базу, а про онлайн редактирование файла шаблона через админку)
Если шаблоны в админке будут "эвалиться", то никакая фильтрация опасных функций php не спасёт.
Ваще, есть подозрение(почти 100%), что ты придумал себе проблему, которую в реальности тебе не нужно решать, так как кроме тебя и, возможно, секретарш клиента, с админкой никто работать не будет и, тем более, никто не будет пытаться править шаблоны сайта.
 

ShVad

JSmart CMS
С шаблонами ладно, больше интересует фильтрация html от xss
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Какая разница, HTML или шаблоны, в шаблонах не HTML лежит что ли?
Ты придумал себе геморрой, пытаешься его решить. Флаг тебе в руки. Дело полезное, хотя и безперспективное.

Чтобы тебе не писали левого кода юзеры, есть bbcode
 

ShVad

JSmart CMS
Будет только визуальный редактор. Входящие пост данные надо будет чистить от xss
 
Сверху