В чем преимущество использования суперглобального `$ _SERVER ['PHP_SELF']` в PHP? - PullRequest
0 голосов
/ 10 августа 2010

В чем преимущество использования суперглобального $_SERVER['PHP_SELF']?

1 Ответ

14 голосов
/ 10 августа 2010

$_SERVER['PHP_SELF'] не включает (или не должно включать) доменное имя.Он включает в себя компонент пути URL-адреса, из которого был вызван скрипт.

Он используется главным образом для выявления уязвимостей межсайтового скриптинга.

вы можете использовать его, чтобы заполнить атрибут действия тега формы:

<form method="post" action="<?=$_SERVER['PHP_SELF']?>"></form> 

Если я затем вызову вашу страницу с:

your-file-that-uses-php-self.php/("><script>eval-javascript-here</script>)

, где все вПаренс кодируется, тогда я могу ввести код на вашу страницу.Если я отправлю эту ссылку кому-то другому, то я выполняю этот код в их браузере с вашего сайта.

Редактировать: Чтобы обезопасить себя от атак XSS, используйте htmlspecialchars:

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

Редактировать 2: Поскольку эта переменная $_SERVER так часто используется неправильно в примерах через интернет, не пропустите чтение вашей ссылки на HTML: так как этот URI являетсясамый короткий относительный URI, вы можете просто оставить атрибут действия пустым:

<form action="" method="post" >...</form>
...