はじめに
社内でcookieのセキュリティに関する勉強会があったので、学んだことをまとめておきます〜〜
Railsは優秀なフレームワークなので、そこそこのセキュリティ対策が標準装備されているんですよねえ。
セキュリティについてはあまり考えなくても、実装できてしまうんですよねえ。
良いことでもあり、悪いことでもありますね
GoogleChrome80のリリース
2020年2月4日(現地時間)にGoogleChrome80が正式にリリースされました。
https://developers-jp.googleblog.com/2019/11/cookie-samesitenone-secure.html
今回のバージョンアップでデフォルトのCookieのSameSite属性がNone⇒Laxに変更されました。
またSameSite属性をNoneにする場合、Secure属性を付与しなければならない仕様になりました。
???
なにそれ??
私もピンと来ませんでしたし、よくわからない方もいるかも知れないので、ざっくり解説します。
SameSite属性
SameSite属性とは、CSRF(クロスサイトリクエストフォージェリ)というサイバー攻撃からユーザーを守るために、Cookieに付与される属性のことです。
安全のためのCookieのオプション設定みたいに考えておいてください。
GoogleChrome80からこれのデフォルト値がNone⇒Laxに変更になったのです。
簡単に言うとセキュリティが強化されましたということです。
最近、Googleはセキュリティ対策に厳しいですからね〜
SameSite属性は三段階にわかれています。
属性 | 内容 |
---|---|
None | ドメインをまたいでCookieの受け渡しが可能 |
Lax | (GETでのリクエストのみ)ドメインをまたいでCookieの受け渡しが可能 |
Strict | ドメインをまたいでCookieの受け渡しが不可 |
セキュリティのレベル的には
None < Lax < Strictですね。
つまり、ドメインをまたいでCookieの受け渡しができるか?できないのか?という違いを設定する設定のことですね!
secure属性
Secure属性はHTTPS化していないCookieの動作を制御する属性のことです。
Secure属性が付与されているCookieはHTTPS通信の場合のみ送信できます。
要はCookieが盗まれにくくなります。
GoogleChrome80からはSameSiteがNoneのときはSecure属性を付与しなければならない仕様に変更になりました。
つまり「SameSiteがNoneなんだろ?セキュリティー不安だからせめてSecure属性くらいつけておけよ〜」というGoogle様からのお達しということですね。
Railsでの設定
ではGoogleChrome80の仕様もSameSite属性・secure属性も理解したところで、Railsで設定をしてみましょう!
gem 'rails_same_site_cookie'
bundle install
はい。これだけです。
特に設定等もいりません。gem「rails_same_site_cookie」をインストールするだけです。
めちゃめちゃ簡単ですね。
自動的に全cookieにSameSite=None; Secure属性が追加してくれます。
確認方法
確認方法も簡単です。
chromeの検証からApplicationをクリックして、使用中のCookieの中身を見ます。
secure属性にチェックが入っていて、SameSite属性がNoneになっていたらOKです。
※ローカル環境では確認できないことがあるので注意してくださいね〜
おわりに
勉強会でとんでもないハッカーに出会ってしまったので、毎日震えながら開発しています