Я знаю, что это старый пост, но быстрый поиск в Google по запросу "PHP $ _SERVER security" придумал этот пост, и я не мог поверить в то, что вижу.
Вы должны кодировать и проверить все входы независимо от того, насколько вы думаете, это безопасно. Например, переменная сервера 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;
?>
Помните, никогда не думайте, что входные данные в ваших приложениях безопасны. Не стоит лениться - просто закодируйте и проверьте все, что бы ни думали другие.