PHP_SELF и XSS

Я нашел статью, утверждающую, что $_SERVER['PHP_SELF'] уязвим для XSS.

Я не уверен, правильно понял ли я, но я почти уверен, что это неправильно.

Как это может быть уязвимо для атак XSS !?

 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <!-- form contents --> </form> 

Чтобы сделать его безопасным для использования, вам нужно использовать htmlspecialchars() .

 <?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?> 

См . Уязвимость XSS почти во всех PHP-формах, которые я когда-либо $_SERVER["PHP_SELF"] можно атаковать $_SERVER["PHP_SELF"] .

Это действительно уязвимость XSS. Я понимаю, что вы считаете, что это может не нанести вреда вашему сайту, но это не значит, что это не реально.

Если вы не верите, попробуйте следующее:

Мы предполагаем, что у вас есть такая страница, как «registration.php». Мы предполагаем, что у вас есть форма, в которой действие:

 <?php echo $_SERVER['PHP_SELF']; ?> 

как вы это положили:

 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <!-- form contents --> </form> 

Теперь просто добавьте строку ниже

 %27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E 

Это на самом деле трудно понять, потому что PHP_SELF это отражение URL-адреса, ваше приложение будет читать все, что вы помещаете в URL-адрес, и эхо-сигнал. Это просто.

htmlspecialchars должны позаботиться об этом, нет причин оспаривать доказательства.

 <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>"> <!-- form contents --> </form> 

Однако даже это первый шаг в создании куки-файлов, но не потому, что это происходит автоматически. Даже если атаковать достаточно просто (поскольку злоумышленник зарегистрируется на вашем сайте и увидит, как выглядит файл cookie … и т. Д.), Ряд других факторов должен быть правдой, чтобы добраться до того, ситуация. Например, cookie не должен быть истек. Чем это зависит от того, насколько сложным является файл cookie. Чем, возможно, у вас есть другие меры предосторожности, размещенные на сервере, это не обязательно должна быть аутентификация на основе наличия cookie!

Хотя я считаю, что это довольно сложное и очень плохое программирование для всех условий (даже если у yahoo.mail была такая уязвимость, и если вы посмотрите в Интернете, вы найдете даже эксплойт и декодер файлов cookie), XSS реальный, и кто знает, что может сделать хитрый злоумышленник, если ваш сайт страдает от него. Лечение прост …

Сама статья, которую вы связали, дает вам:

 http://www.example.com/form.php/%22%3E%3Cscript%3Ealert('xss attack')%3C/script%3E%3Cbr%20class=%22irrelevant 

Что не ясно?

Изменить: это атака XSS, потому что я могу скрыть ссылку с моего сайта на ваш, добавив JS в URL-адрес, который отправляет мне ваши файлы cookie, поэтому, как только вы нажмете на эту ссылку, вы будете pwnd.

Вы должны использовать filter_input () для доступа к суперглобалам в PHP. Если вы установите фильтр в FILTER_SANITIZE_FULL_SPECIAL_CHARS, он разделит небезопасные символы, обычно используемые в XSS. Учитывая ваш пример:

 <form method="post" action="<?php filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_FULL_SPECIAL_CHARS); ?>"> <!-- form contents --> </form>