Такая защита от XSS сработает?

Добрый день! Наткнулся на статью, где автор приводит такую функцию
function defender_xss($arr){
   $filter = array("<", ">","="," (",")",";","/");
     foreach($arr as $num=>$xss){
        $arr[$num]=str_replace ($filter, "|", $xss);
     }
       return $arr;
} 
//используйте  функцию перед обработкой входящих данных:
$_REQUEST=defender_xss($_REQUEST);

так же пишет что кусок
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

вставленный в htaccess тоже даст плюс.

Вопрос вот в чём. Будет ли нормально работать такая защита? Если да, то обязательно ли использовать htaccess, или достаточно будет пропускать данные через функцию на php и всё? Какие косяки могут вылезти при использовании данной функции?
  • Вопрос задан
  • 2982 просмотра
Пригласить эксперта
Ответы на вопрос 4
Hakkunamatata
@Hakkunamatata
Зефирный-человек
array("<", ">","="," (",")",";","/") - ну а если у Вас действительно на входе текст с кавычками и скобками?

Да и саму фильтрацию лучше делать перед выводом на страницу, дабы в БД хранились актуальные данные.
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
www.php.net/manual/ru/function.htmlspecialchars.php

// upd

Защита от XSS происходит исключительно в момент рендеринга данных.
Ответ написан
Комментировать
denissov
@denissov Автор вопроса
@Hakkunamatata @Miraage т.е. получается в базу всё можно писать спокойно, проверять только на SQL инъекции, а уже при выводе во избежании недоразумений ставить htmlspecialchars? и это спасёт от XSS?
Ответ написан
Подход совершенно правильный. Причина XSS и SQL Inj - отсутствие фильтрации пользовательских данных.

Приведённый пример фильтрации поможет только от элементарных атак, т.к. можно передавать данные используя спецсимволы и сущности.

Я лично предпочитаю строить защиту на основе "белых списков" и экранирования
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы