Я знаю, что это старый пост, но при быстром поиске в Google безопасности PHP $ _SERVER я нашел его, и я не мог поверить в то, что вижу.
Вам следует кодировать и проверять все входные данные, независимо от того, насколько вы считаете это безопасным. Например, серверная переменная HTTP_HOST считывается из заголовков запроса, отправленного клиентом. Клиентом может быть что угодно ... не только браузеры ... например, сценарий PERL / python, который кто-то написал специально для фазирования этих заголовков.
Из документации PHP (снова) ...
HTTP_HOST
Contents of the Host: header from the current request, if there is one.
В запросе клиента почти всегда есть HTTP_HOST. Это не единственная переменная, Apache и PHP не очищают / не кодируют эти переменные за вас. Вы должны ВСЕГДА кодировать и проверять ВСЕ входные данные, включая сгенерированные сервером.
<?php
$server = array();
foreach($_SERVER as $k => $v)
$server[urlencode($k)] = urlencode($v);
if(!preg_match("...", "...", $server["X"]))
exit;
?>
Помните, никогда не предполагайте, что входные данные в ваши приложения безопасны. Не стоит лениться - просто кодируйте и проверяйте все независимо от того, что думают другие.
person
Morbo
schedule
27.09.2013
$_SERVER
назначается сервером .. отсюда глобальная переменная? - person Daryl Gill   schedule 22.04.2013