39 votes

Quel est le niveau de sécurité de HTTP_ORIGIN ?

Je veux savoir si un appel HTTP_REQUEST entrant d'un site web tiers provient de la liste de domaines que j'ai définie.

Je sais que HTTP_REFERER peut être utilisé pour savoir où se trouve le domaine du tiers, mais ce n'est pas assez sûr. Les gens peuvent l'usurper ou utiliser Telnet pour le falsifier.

Qu'en est-il de HTTP_ORIGIN ? Est-il envoyé par tous les navigateurs ? Est-il sécurisé ?

Par ailleurs, peut-on falsifier le REMOTE_ADDR dans un appel HTTP_REQUEST ?

6voto

Sergey Karasev Points 3253

Amélioré :

function isOriginAllowed($incomingOrigin, $allowOrigin)
{
    $pattern = '/^http:\/\/([\w_-]+\.)*' . $allowOrigin . '$/';

    $allow = preg_match($pattern, $incomingOrigin);
    if ($allow)
    {
        return true;
    }
    else
    {
        return false;
    }
}

$incomingOrigin = array_key_exists('HTTP_ORIGIN', $_SERVER) ? $_SERVER['HTTP_ORIGIN'] : NULL;
    $allowOrigin    = $_SERVER['HTTP_HOST'];

    if ($incomingOrigin !== null && isOriginAllowed($incomingOrigin, $allowOrigin))
    {
        exit("CSRF protection in POST request: detected invalid Origin header: " . $incomingOrigin);
    }

Exemple :

  • http:// media.mydomain.com VRAI
  • http:// offline.mydomain.com VRAI
  • http:// domen1.mydomain.com VRAI
  • http:// domen_1.mydomain.com VRAI
  • http:// domen-1.mydomain.com VRAI
  • http:// ololomydomain.com FALSE
  • http:// mydomain.com VRAI
  • http:// pro.mydomain.com VRAI
  • http:// super.pro.mydomain.com VRAI
  • http:// super.pro.fakemydomain.com FALSE
  • http:// pro.fakemydomain.com FALSE

1voto

Mise à jour, à partir de 2021 :

HTTP_ORIGIN est presque entièrement pris en charge par tous les navigateurs, voir : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin#browser_compatibility

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X