#概要
現在ローカル環境で作成している投稿型webアプリケーションでTwitterのシェア機能を実装しようと思って、以下のQiita記事を参考に実装していました。
[HowTo]Twitterへのリンクシェア機能をお手軽に実装する!
とても簡単そうだったのですが、何故かページが表示されなくなってしまいました。
#原因
google consoleを開いてissueを確認すると以下のメッセージがきておりました。
Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute
Because a cookie’s SameSite attribute was not set or is invalid, it defaults to SameSite=Lax, which prevents the cookie from being sent in a cross-site request. This behavior protects user data from accidentally leaking to third parties and cross-site request forgery.
Resolve this issue by updating the attributes of the cookie:
Specify SameSite=None and Secure if the cookie should be sent in cross-site requests. This enables third-party use.
Specify SameSite=Strict or SameSite=Lax if the cookie should not be sent in cross-site requests.
読めないので翻訳
SameSite属性を指定して、クロスサイトリクエストでCookieを送信するかどうかを示します。CookieのSameSite属性が設定されていないか無効であるため、デフォルトでSameSite = Laxに設定され、クロスサイトリクエストでCookieが送信されなくなります。この動作により、ユーザーデータが誤ってサードパーティに漏洩したり、クロスサイトリクエストフォージェリが発生したりするのを防ぎます。 Cookieの属性を更新して、この問題を解決します。クロスサイトリクエストでCookieを送信する必要がある場合は、SameSite = NoneおよびSecureを指定します。これにより、サードパーティによる使用が可能になります。クロスサイトリクエストでCookieを送信しない場合は、SameSite = StrictまたはSameSite = Laxを指定します。
SameSiteがわからなかったのでググってみると、
cookie設定の属性でCSRFへのセキュアレベルの設定
ができるようになるみたいです。
設定値はStrict,Lax,Noneで、StrictとLaxを指定するとCSRFをブラウザレベルで防げるようになります。
そんなん設定してたっけ?とさらにググっていくとLaravel8.12では初期設定されていたみたいです。
config/session.php
を開いてみると
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" since this is a secure default value.
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => 'lax',
];
laxになっていました。
Noneに変更する場合は、secure属性を有効にする
必要があるみたいですが、ローカル環境なのでhttps化をしておりません。
つまりサーバにアップしてから実装しろってことなんだと思います。
#まとめ
サーバに公開してから実装することにします!
#参考文献
Chrome 80が密かに呼び寄せる地獄 ~ SameSite属性のデフォルト変更を調べてみた
LaravelでCookieのSameSite属性を設定する