preg_replace на xss код - PullRequest
       40

preg_replace на xss код

2 голосов
/ 31 мая 2010

Может ли этот код помочь обезопасить вредоносный код в форме отправки пользователем?

function rex($string) {
$patterns = array();
$patterns[0] = '/=/i';
$patterns[1] = '/javascript:/i';
$replacements = array();
$replacements[0] = '';
$replacements[1] = '';
return preg_replace($patterns, $replacements, $string);

Я включил htmlentities () для предотвращения XSS на стороне клиента, является ли весь приведенный код достаточно безопасным для предотвращения атаки?

Ответы [ 5 ]

2 голосов
/ 31 мая 2010

Вам это не нужно, если вы используете htmlentities. Для предотвращения XSS вы можете просто использовать htmlspecialchars.

Просто убедитесь, что вы используете htmlspecialchars для всех данных, которые печатаются в виде простого текста в вашем HTML-ответе.

См. Также: ответы на " Защищает ли этот набор регулярных выражений ПОЛНОСТЬЮ защиту от межсайтовых скриптов? "

2 голосов
/ 31 мая 2010

ваши замены могут помочь. Но вам лучше использовать готовое решение, такое как PHP data filters . Тогда вы можете легко ограничить тип данных тем, что вы ожидаете.

0 голосов
/ 31 мая 2010

Ваше первое правило замены бесполезно, поскольку его можно легко обойти, используя eval и кодировку символов (и знак равенства в любом случае не нужен для атак XSS).

Скорее всего, ваше второе правило можно обойти хотя бы в некоторых браузерах, используя такие вещи, как javascript : или java\script:.

Короче говоря, это не очень помогает. Если вы хотите показывать простой текст, htmlentities, вероятно, хорошо (есть экзотические атаки, которые используют необычные кодировки символов и глупость браузера для запуска XSS-атак без каких-либо специальных символов, но это работает только в определенных браузерах - кашель IE кашель - в определенных ситуациях). Если вы хотите поместить пользовательский ввод в URL или другие атрибуты, этого не обязательно достаточно.

0 голосов
/ 31 мая 2010
0 голосов
/ 31 мая 2010

htmlentities один сделает свое дело. Не нужно ничего менять вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...