Ce sont les informations envoyées par le client. Il est généralement défini comme la page à partir de laquelle vous avez cliqué sur le lien.
Il peut également absolument être spoofé. Vous pouvez le faire vous-même en définissant HEADER dans une requête PHP cURL. Le serveur de réception verra ceux de l'en-tête, même s'ils n'ont jamais été envoyés depuis google.com. Vous pouvez également usurper tout ce que vous verriez dans l'en-tête (agents d'utilisateur, cookies, etc.).
Vous allez avoir du mal à détecter les en-têtes usurpés à moins que vous ne sachiez exactement à quoi chacun devrait ressembler à partir de chaque source. La meilleure chose à faire est de travailler avec des adresses IP et de limiter les types d'en-tête que vous acceptez (par exemple, si une page ne peut utiliser que des requêtes GET, rejetez toutes les requêtes POST). Même si quelqu'un veut vous parodier, il y a des chances qu'il le fasse et vous ne le saurez pas.
Si vous essayez de sécuriser une connexion entre 2 sites de votre site, vous devriez limiter la connexion avec plus qu'un simple en-tête, ce qui n'est pas sécurisé du tout.
Editer: Vous pouvez même envoyer des en-têtes vraiment faux. J'ai mis à jour l'exemple pour montrer ce que je veux dire. Certains sites utilisent des en-têtes personnalisés (comme le faux) pour passer l'authentification.
Oui, pour des raisons fonctionnelles, il est bon de l'utiliser. Pour des raisons de sécurité, il ne devrait pas être utilisé. – Brad
Si c'était 99%, ce serait plus ou moins un non-problème; hélas, il est plus proche de 90% (ou l'habitude d'être, je l'ai vérifié en 2009) - donc ce n'est pas vraiment un cas limite. – Piskvor