Я нашел статью, утверждающую, что $_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>