最近、「Same Site」属性で「RFC 6265」を読みました。2016年4月に「Chrome 51とOpera 39 ...
現在のPHPはこの属性でCookieの作成をサポートしていますか?
参照:
[重要な更新:@cawが下で指摘したように、このハック PHP 7. 。不愉快な驚きからあなたを救うために今それを使用するのを止めてください!または少なくともif (PHP_VERSION_ID < 70300) { ... } else { ... }
のようなPHPバージョンチェック)でラップしてください]
PHPはセミコロンをエスケープしないため、SameSite属性に潜入するために、PHPの「setcookie」関数の「path」または「domain」パラメーターを悪用できるようです。
setcookie('samesite-test', '1', 0, '/; samesite=strict');
次に、PHPは次のHTTPヘッダーを送信します。
Set-Cookie:samesite-test = 1; path = /; samesite = strict
数分前にこれを発見したばかりなので、独自のテストを行ってください!私はPHP 7.1.11。
setcookie
関数に$samesite
パラメーターがあります
bool setcookie (
string $name
string $value = ""
int $expire = 0,
string $path = "",
string $domain = "",
bool $secure = false,
bool $httponly = false,
string $samesite = "" // Lax or Strict
)
詳細はこちら- PHP RFC:Same Site Cookie
コードベース/ニーズに応じて、次の解決策/回避策のいずれかを使用できます
Apache設定に次の行を追加できます。
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
これにより、すべてのCookieがSameSite=Lax
フラグで更新されます
詳細はこちら: https://blog.giantgeek.com/?p=1872
location / {
# your usual config ...
# hack, set all cookies to secure, httponly and samesite (strict or lax)
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
ここでも同じですが、これはすべてのCookieをSameSite=Lax
フラグで更新します
詳細はこちら: https://serverfault.com/questions/849888/add-samesite-to-cookies-using-nginx-as-reverse-proxy
header
メソッドを使用してSameSite Cookieを設定する私たちが知っているように、Cookieは次の構造を持つHTTPリクエストの単なるヘッダーです
Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
header
メソッドでCookieを設定するだけです
header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");
実際、SymphonyはPHP 7.3を待っていません。すでに内部でそれを実行しています。 こちらを参照
???? Laravelでも同じように使用できます。なぜなら、Laravel SymphonyのSymfony\Component\HttpFoundation\Cookie
クラスを使用してボンネットの下で
setcookie
メソッドのバグを使用してSameSite Cookieを設定するsetcookie('cookie-name', '1', 0, '/; samesite=strict');
これに注意してください。これはPHP setcookie
メソッドの既知のバグであり、PHP7.3バージョンで既に解決済みです。こちらを参照してください- https:// github。 com/php/php-src/commit/5cb825df7251aeb28b297f071c35b227a3949f01
このサイト によると、PHP 7.3。投票結果の時点で、Cookie関連機能のより一般的な拡張が実装されている+ php.iniファイルに新しいキーがある場合もあります。
しかし、Marc Bがすでに書いたように、代わりにheader()関数呼び出しを使用できます。他の初期のものを含めるために使用するファイルでそれを行います。