Насколько «защищенным от взлома» является переменная $ _SERVER в php? - PullRequest
8 голосов
/ 22 ноября 2010

Буду ли я рисковать безопасностью, доверяя содержимому массива переменных $ _SERVER, чтобы получить имя php-файла, используя $ _SERVER ['PHP_SELF']??

Ответы [ 4 ]

3 голосов
/ 22 ноября 2010

Многие, но не все переменные $ _SERVER контролируются злоумышленником .Например, $_SERVER['SCRIPT_NAME'] безопасен, так как $_SEVER['PHP_SELF'] является переменной опасной переменной и часто является источником xss:

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

PoC:

http://localhost/self.php/<script>alert(/xss/)</script>

Это легко увидетьЭта уязвимость в действии, глядя на phpinfo .

1 голос
/ 22 ноября 2010

С руководство php.net :

Записи в этом массиве создаются веб-сервером. Нет никакой гарантии, что каждый веб-сервер предоставит какой-либо из них; серверы могут пропустить некоторые или предоставить другие, не перечисленные здесь.

Итак, если вам известны все пользователи, которые имеют доступ к изменению конфигурации сервера (и все сценарии в вашем сеансе, которые могут изменять содержимое переменной), вы можете быть достаточно уверены в данных переменной $_SERVER. 1010 *

1 голос
/ 22 ноября 2010

Не существует специального механизма для защиты этой переменной.Вы можете написать в него, как вы можете в любой другой переменной.Таким образом, вы должны защитить его от несанкционированного доступа, как и любая другая переменная (отключите register_globals, избегайте переменных переменных и т. Д.).Тогда вы можете доверять этому.

В качестве обходного пути, чтобы быть уверенным, вы можете определить свои собственные константы в начале своей программы:

define('SCRIPT_FILENAME',$_SERVER['SCRIPT_FILENAME']);

и использовать предопределенные константы, где они доступны, например, __FILE__.

0 голосов
/ 22 ноября 2010

Вовсе нет, это вообще не может быть риском, если вы не используете данные пользователя.То есть используйте один из них:

echo __FILE__;
// is the same as
echo $_SERVER["SCRIPT_FILENAME"];

echo $_SERVER["SCRIPT_NAME"];
// SCRIPT_NAME contains just the path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...