web-dev-qa-db-ja.com

PHP setcookie "SameSite = Strict"?

最近、「Same Site」属性で「RFC 6265」を読みました。2016年4月に「Chrome 51とOpera 39 ...

現在のPHPはこの属性でCookieの作成をサポートしていますか?

参照:

22
Lauro Moraes

[重要な更新:@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。

17
Steffen

1. PHP> = v7.3の場合

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

2. PHP <v7.3

コードベース/ニーズに応じて、次の解決策/回避策のいずれかを使用できます

2.1 Apache構成を使用してSameSite Cookieを設定する

Apache設定に次の行を追加できます。

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

これにより、すべてのCookieがSameSite=Laxフラグで更新されます

詳細はこちら: https://blog.giantgeek.com/?p=1872

2.2 Nginx構成を使用してSameSite Cookieを設定する

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

2.3 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クラスを使用してボンネットの下で

2.4 setcookieメソッドのバグを使用してSameSite Cookieを設定する

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

これに注意してください。これはPHP setcookieメソッドの既知のバグであり、PHP7.3バージョンで既に解決済みです。こちらを参照してください- https:// github。 com/php/php-src/commit/5cb825df7251aeb28b297f071c35b227a3949f01

23

このサイト によると、PHP 7.3。投票結果の時点で、Cookie関連機能のより一般的な拡張が実装されている+ php.iniファイルに新しいキーがある場合もあります。

しかし、Marc Bがすでに書いたように、代わりにheader()関数呼び出しを使用できます。他の初期のものを含めるために使用するファイルでそれを行います。

2
David Komanek