идея с 'HTTP_HOST' мне нравится (ведь 'HTTP_HOST' и 'HTTP_REFERER' находятся на одном уровне по способу получения).. главное только помнить что 'HTTP_HOST' в некоторых случаях содержит только <Имя> а в некоторых <Имя:Порт> ('SERVER_NAME' как показала моя практика содержит имя без номера порта)
тоесть в случае с 'HTTP_HOST' -- наверно усложнение будет заключаться в следущей чуток-усложнённой проверке (вместо простой прошлой) :-) :
$http_referer_host = array_key_exists('host', $parsed_http_referer)?$parsed_http_referer['host']:'';
$http_referer_port = array_key_exists('port', $parsed_http_referer)?$parsed_http_referer['port']:'';
if($http_referer_host.':'.$http_referer_port != $_SERVER['HTTP_HOST'] &&
$http_referer_host != $_SERVER['HTTP_HOST'])
{
@header('Content-Type: text/plain;charset=utf-8');
die('Suspected to CSRF');
}