Подтвердить что ты не робот

PHP_SELF и XSS

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

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

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

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

Ответ 2

Это действительно 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 и кто знает, что может сделать хитрый злоумышленник, если ваш сайт от этого пострадает. Лечение простое...

Ответ 3

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

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

что непонятно?

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

Ответ 4

Вы должны использовать 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>