これが古い投稿であることは知っていますが、Google で「PHP $_SERVER セキュリティ」をすばやく検索すると、この投稿が表示され、信じられませんでした。
どの程度安全だと考えているかに関係なく、すべての入力をエンコードしてチェックする必要があります。たとえば、HTTP_HOST サーバー変数は、クライアントから送信された要求のヘッダーから読み取られます。「クライアント」は、ブラウザーだけでなく、何でもかまいません...たとえば、誰かがこれらのヘッダーをファジングするために特別に作成した PERL/python スクリプトなどです。
PHPドキュメントから(再び)...
「HTTP_ホスト」
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;
?>
アプリケーションへの入力が安全であると思い込まないでください。怠け者になる価値はありません。他の人の考えに関係なく、すべてをエンコードしてチェックしてください。