私のサイトでJavaScriptを使用してSameSite属性を設定しようとしています。コードは
<script type="text/javascript">
document.cookie = "AC-C=ac-c;expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;HttpOnly;SameSite=Lax";
</script>
Cookieは設定されていますが、SameSite属性は設定されていません。私はどこに行方不明ですか?
ありがとう
あなたの問題はSameSite
ではなくHttpOnly
にあります。 HttpOnly
とSameSite
は2つの独立したものであり、HttpOnly
を削除すると機能します。CookieにはSameSite
が設定されます。
<script>
document.cookie = "AC-C=ac-c;expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;SameSite=Lax";
alert( document.cookie );
</script>
JavaScript API document.cookieを介してHttpOnlyフラグを設定することはできません。フラグHttpOnly
は、サーバー応答のCookieヘッダーを介してのみ設定できます。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CookiesCookies created via JavaScript cannot include the HttpOnly flag.
を参照してください
あなたはThe cookie is being set but the SameSite attribute is not being set
を書いたが、それは真実ではないと思う。属性HttpOnlyでJSを介して設定されたCookieはまったく拒否されるか、ブラウザによっては設定されますが、HttpOnlyフラグは無視されます-したがって、最終的にCookieはHTTPだけではありません。
これは、ブラウザに送信するCookieの応答でサーバー(HttpOnly
など)のみが設定できる属性です。クライアント側のコードが設定を許可されていて、その目的について本当に考えている場合は同じです(同じOriginリクエストに対してのみブラウザーに強制的に送信させることでCSRFを防ぎます)。
SameSite Cookieを使用すると、サーバーはCookieをクロスサイトリクエストと共に送信しないように要求できます。これにより、クロスサイトリクエストフォージェリ攻撃(CSRF)からある程度保護されます。 SameSite Cookieはまだ実験段階であり、まだすべてのブラウザーでサポートされていません。