web-dev-qa-db-fra.com

PHP setcookie "SameSite = Strict"?

J'ai récemment lu "RFC 6265" sur l'attribut "Même site", j'ai regardé certains articles qui en parlaient en avril 2016, l'attribut "même site" a été implémenté pour Chrome 51 et Opera 39 ...

Je me demande si le courant PHP supporte la création de cookies avec cet attribut?

Référence:

22
Lauro Moraes

[ Mise à jour importante: Comme @caw l'a souligné ci-dessous, ce piratage S'INTERROMPURA PHP 7. . Arrêtez de l'utiliser maintenant pour vous éviter des surprises désagréables! Ou au moins envelopper dans un PHP contrôle de version comme if (PHP_VERSION_ID < 70300) { ... } else { ... }.]

Il semble que vous puissiez abuser du paramètre "path" ou "domain" de la fonction "setcookie" de PHP pour se faufiler dans l'attribut SameSite car PHP n'échappe pas aux points-virgules:

setcookie('samesite-test', '1', 0, '/; samesite=strict');

Ensuite PHP envoie l'en-tête HTTP suivant:

Set-Cookie: samesite-test = 1; chemin = /; samesite = strict

Je viens de le découvrir il y a quelques minutes, alors faites vos propres tests! J'utilise PHP 7.1.11.

17
Steffen

1. Pour PHP> = v7.3

Vous aurez le paramètre $samesite Dans la fonction setcookie

bool setcookie ( 
    string $name 
    string $value = ""
    int $expire = 0,
    string $path = "",
    string $domain = "",
    bool $secure = false,
    bool $httponly = false,
    string $samesite = "" // Lax or Strict
)

Voir plus ici - PHP RFC: même cookie de site

2. Pour PHP <v7.3

Vous pouvez utiliser l'une des solutions/solutions suivantes en fonction de votre base de code/besoins

2.1 Définition des cookies SameSite à l'aide de la configuration Apache

Vous pouvez ajouter la ligne suivante à votre configuration Apache

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"

et cela mettra à jour tous vos cookies avec le drapeau SameSite=Lax

Voir plus ici: https://blog.giantgeek.com/?p=1872

2.2 Définition des cookies SameSite à l'aide de la configuration Nginx

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}

De même ici, cela mettra également à jour tous vos cookies avec le drapeau SameSite=Lax

Voir plus ici: https://serverfault.com/questions/849888/add-samesite-to-cookies-using-nginx-as-reverse-proxy

2.3 Configuration des cookies SameSite à l'aide de la méthode header

Comme nous le savons, les cookies ne sont qu'un en-tête dans une requête HTTP avec la structure suivante

Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax

afin que nous puissions simplement définir les cookies avec la méthode header

header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");

En fait, Symphony n'attend pas PHP 7.3 et le fait déjà sous le capot, voir ici

???? Vous pouvez utiliser la même chose dans Laravel aussi parce que Laravel sous le capot en utilisant la classe Symfony\Component\HttpFoundation\Cookie De Symphony)

2.4 Définition des cookies SameSite à l'aide d'un bogue dans la méthode setcookie

setcookie('cookie-name', '1', 0, '/; samesite=strict');

Attention à celui-ci, c'est un bug connu dans la méthode PHP setcookie et déjà résolu dans la version PHP7.3, voir ici - https: // github. com/php/php-src/commit/5cb825df7251aeb28b297f071c35b227a3949f01

23
Marty Aghajanyan

Selon ce site , il semble qu'il s'agisse de PHP 7.3. En ce qui concerne les résultats du vote, une extension plus générale des fonctions liées aux cookies est en cours d'implémentation + il pourrait également y avoir une nouvelle clé dans le fichier php.ini.

Mais comme Marc B l'a déjà écrit, vous pouvez utiliser l'appel de fonction header () à la place, je le ferais dans un fichier avec utilisé pour l'inclusion d'autres choses initiales.

2
David Komanek