PHP [& quot; XSS & quot; внедрение] с использованием str_replace против нулевого символа (\ 0), т.е. java \ 0script: alert (\ & quot; XSS \ & quot;)

Около 2 некоторых из наших веб-сайтов были взломаны. Мы часами пытались понять, что пошло не так. Лазейка была str_replace против \0 [Null Char] .

При использовании str_replace с Single Quotes ['],

Что-то вроде:

    $str = 'java\0scr\0ip\0t:alert(\"XSS\")';
$clean_null_chars = str_replace('\\0','_[_blabla_]_',$str);

//Show the cleaned version
var_dump($clean_null_chars); // string 'java_[_blabla_]_scr_[_blabla_]_ip_[_blabla_]_t:alert(\"XSS\")' (length=62);

echo $clean_null_chars; //java_[_blabla_]_scr_[_blabla_]_ip_[_blabla_]_t:alert(\"XSS\")

Однако, используя str_replace с Double Quotes ["], Ничего не произошло

Что-то вроде:

 $str= "java\0scr\0ip\0t:alert(\"XSS\")";
$clean_null_chars = str_replace('\\0','_[_blabla_]_',$str);

//Show the cleaned version
var_dump($clean_null_chars); //string 'java�scr�ip�t:alert("XSS")' (length=26);
// ....[Notice the _Null Char_  rendered as question marks in var_dump]

echo $clean_null_chars;// javascript:alert("XSS")

Таким образом, некоторый гений сумел злоупотребить лазейкой.

Это нормальное поведение для str_replace когда либо Single Quotes или же Double Quotes вовлечены?

Вот http://php.net/manual/en/function.str-replace.php они используют оба ['] а также ["] нет упоминаний о различных видах поведения.

Есть идеи??

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]