事前知識
csrfとは
クロスサイトリクエストフォージェリの略。悪意あるリクエストを投げてユーザが意図しないアプリケーション操作をさせる攻撃のこと
例: snsログイン状態でWebサイト閲覧中に悪意のあるURLをクリック。ログインしていたsnsにリクエストが送られ勝手にsns投稿されてしまった。
Railsの対策
form_for、form_tagなどを使用すると自動で認証用のトークンをhtmlに差し込んでくれる。セッションにも保存する。 リクエスト時には生成したトークンを差し込む。サーバ側はそのトークンを確認することで悪意あるリクエストを阻むことができる。 利用には以下の設定が必要
application_controller.rb
protect_from_forgery with: :exception
application.html.erb
<%=csrf_meta_tags%>
開発中に起こりうるケース
外部からのリクエスト
curlなどでWebアプリに向けてリクエストを投げる。認証トークンがないためエラー
別タブでリクエスト
例:ログインの場合
-
タブA、タブBを開く →セッションに認証用のトークンが保持される
-
タブAでログイン、ログアウトする →セッション終了し認証用のトークンが更新される。タブBは古いトークンのまま
-
タブBでログイン →トークンに差異があるのでエラー
0 件のコメント:
コメントを投稿