【CSRF】クロスサイトリクエストフォージェリについて調べてみた(Rails)

CSRF

Ruby on Railsを勉強していると必ずどこかで「CSRF(クロスサイトリクエストフォージェリ)」という言葉に当たります。

セキュリティ関係の用語で、RailsでWebアプリケーションを開発するために欠かせない知識です。

Rails チュートリアルでも度々出てくるのですが、CSRFそれ自体について、詳しく勉強したことが無かったのでこの機会にまとめてみました。

スポンサードリンク

CSRFとは

CSRFとは「クロスサイトリクエストフォージェリ」の略で、直訳するとクロスサイト(他のサイト)からのリクエストを偽装するという意味になります。もう少し分かりやすい言葉で言うと、要は外部からのリクエストを受け入れ、処理してしまうことで起きる脆弱性または攻撃方法の事です。トレンドマイクロのHPに分かりやすい例があったのでこちらをご覧ください。

クロスサイトリクエストフォージェリ(CSRF)とは、Webアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のことです。掲示板や問い合わせフォームなどを処理するWebアプリケーションが、本来拒否すべき他サイトからのリクエストを受信し処理してしまいます。
トレンドマイクロより引用)

攻撃方法としては、攻撃者が細工したWebページのリンクを対象者に踏ませ、このページに埋め込まれた悪意のあるリクエストが本来のWebページに送信されログインを可能にさせることによって、対象者の意図しない別のユーザーからのアクセスを許可してしまうという流れです。

もっと簡単に言うと、AさんしかログインできないはずのページにBさんがログインできてしまう、という事です。アカウントの乗っ取り等が主な例であると言えるでしょう。攻撃者がユーザになりすますことで、意図しない被害が出てくるという恐ろしい攻撃です。

CSRFによる被害

CSRFによる被害は常に報告されています。

・不正サイトへの誘導

・掲示板等による不正な書き込み

・犯罪予告/アンケート等への不正な書き込み

・不正な書き込みを大量に行うことによる「DoS攻撃」を可能にする

CSRFによってこれらの被害が発生します。ユーザ自体には直接的な被害はありませんが、サーバがダウンしたり、意図しない書き込みによる責任の転嫁等が起こる可能性があるため被害が起こる前に十分に注意したい攻撃です。

CSRFへの対策

対策としては、ユーザが「攻撃用のサイトにアクセスしない」事が大前提です。つまりユーザの意識の違いで被害を防ぐことができます。とはいっても間違えたり、本当に意図しないクリックをしてしまうかもしれません。最近は巧妙に誘導する手口も増えています。

そういったときにWeb管理者側で対策が必要になります。サイト外からのリクエストを受信し、処理しないような設定をしておくべきです。また、トークンなどを用いて攻撃者に推測されにくい機構を作成することも必要でしょう。これら最低限の項目はRails チュートリアルで一通り学ぶことが出来ます。

Railsにおける自動CSRF対策

RailsではCSRF対策として標準で自動生成してくれるコードがあります。それが、app/views/layouts/application.html.erbに記述されているので一度は見ておくべきです。

<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

この部分に注目してください。

<%= csrf_meta_tags %>

このコードはCSRFを防ぐために使われるRailsメソッドです。
初学者がこのコードの中身を見て意味を理解するのは難解ですが、もし気になる方が居れば良い記事を見つけたのでこちら(外部リンクとなります)をご覧ください。

まとめ

CSRF(クロスサイトリクエストフォージェリ)について見ていきました。仕組みを理解するのは簡単でも、セキュリティの世界は奥深いのでまだまだ勉強する必要がありそうです。

そして、Railsは便利。これに尽きます。

だからと言って安心すると足元をすくわれそうなので常にこういったセキュリティ面では意識するようにしようと思います。。。

スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です