...Mi sono buttato subito su $_SERVER['HTTP_REFERER'] ma già la documentazione non da grandi garanzie...

Se stiamo parlando della documentazione di php.net, allora la documentazione da tutte le garanzie che vuoi.

In più, provando, vedo che in_array('HTTP_REFERER', $_SERVER) mi da sempre false, sia che io scriva direttamente il link nel browser sia che io usi un link su un'altra pagina.

Se la pagina da cui proviene il link è in locale o addirittura un file .html hostato sul pc e non eseguito tramite server, allora $_SERVER['HTTP_REFERER'] sarà vuota, prova a modificare questi due aspetti e ritentare, se non hai i problemi citati da .Kurt dubito difficilmente che non funzioni.