PHP_SELF и XSS - PullRequest
       23

PHP_SELF и XSS

30 голосов
/ 21 мая 2011

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

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

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

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

Ответы [ 4 ]

32 голосов
/ 21 мая 2011

Для безопасного использования необходимо использовать htmlspecialchars().

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

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

26 голосов
/ 22 января 2013

Это действительно уязвимость 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 не должен истекать. Чем это зависит от того, насколько сложным является cookie. Чем, возможно, у вас есть другие меры предосторожности при размещении на сервере, это не обязательно должна быть вся аутентификация, основанная на наличии куки!

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

17 голосов
/ 21 мая 2011

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

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

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

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

4 голосов
/ 25 января 2017

Вы должны использовать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...