Достаточно ли этой функции для обнаружения xss?

Я нашел его в приложении «symphony CMS», оно очень маленькое:

https://github.com/symphonycms/xssfilter/blob/master/extension.driver.php#L100

И я думал о том, чтобы украсть его и использовать в своем собственном приложении для очистки строки с помощью HTML для отображения. Как вы думаете, это делает хорошую работу?

ps: я знаю, что есть HTML Purifier, но он огромен. И я бы предпочел что-то менее либеральное, но все же хочу, чтобы оно было эффективным.


Я тестировал его на основе строк с этой страницы: http://ha.ckers.org/xss.html. . Но если не работает с «локатором XSS 2». Не уверен, как кто-то может использовать эту строку для взлома сайта :)


person thelolcat    schedule 18.02.2012    source источник
comment
В нем говорится: «[…] определит, потенциально [является] ли это XSS-атакой».   -  person Gumbo    schedule 18.02.2012


Ответы (2)


Нет, я бы не использовал его. Существует множество различных атак, все они зависят от контекста, в который вставляются данные. Одна-единственная функция не может покрыть их все. Если присмотреться, то на самом деле тестов всего четыре:

// Set the patterns we'll test against
$patterns = array(
    // Match any attribute starting with "on" or xmlns
    '#(<[^>]+[\x00-\x20\"\'\/])(on|xmlns)[^>]*>?#iUu',

    // Match javascript:, livescript:, vbscript: and mocha: protocols
    '!((java|live|vb)script|mocha):(\w)*!iUu',
    '#-moz-binding[\x00-\x20]*:#u',

    // Match style attributes
    '#(<[^>]+[\x00-\x20\"\'\/])style=[^>]*>?#iUu',

    // Match unneeded tags
    '#</*(applet|meta|xml|blink|link|style|script|embed|object|iframe|frame|frameset|ilayer|layer|bgsound|title|base)[^>]*>?#i'
);

Больше ничего не тестируется. Помимо атак, которые эти тесты не обнаруживают (ложноотрицательные), он также может ошибочно сообщать о некоторых входных данных как об атаке (ложноположительные).

Поэтому вместо того, чтобы пытаться обнаруживать XSS-атаки, просто используйте надлежащую очистку.

person Gumbo    schedule 18.02.2012

Я думаю, что он хорошо справляется с тестированием строк, по крайней мере, это то, что я могу сказать по своим тестам.

person wadie    schedule 18.02.2012
comment
это не дезинфицирует их, это только для тестирования - person thelolcat; 18.02.2012
comment
Ага, именно это я и имел в виду. извините за путаницу. - person wadie; 18.02.2012