ANNAIマガジン
Introduction to cross-site request forgery
この記事は「 Introduction to cross-site request forgery 」の翻訳です。
この記事の目次

クロスサイトリクエストフォージェリ―とは何ですか?

ブログの投稿、写真の削除、サイトへの登録、銀行口座にお金を振り込むなどをオンライン上で行うときは、そのアクションをサイトに依頼します。 サイトへのリクエストを行うと、以下のように、自動的にいくつかのことが起こります。

データはHTTPプロトコルのPOSTまたはGETメソッドを使用して送信され、ブラウザが保有するそのサイトのCookieが送信されます。

クッキーには、サイトがあなたを識別するための情報や、どのようなアクセス許可を持っているかなどのサイトのセッション識別情報が含まれています。

悪意のあるユーザーは、サイトへあなたが意図しないある特定の種類のリクエストを行うように仕向けます。そして、サイトがあなたの意図を確認せずにその操作を実行した場合に、CSRFが発生します。 簡単な例を次に示します。

CSRFは、悪意のあるユーザーがあなたが意図しないサイトへの特定の種類の要求を行うように仕向け、サイトがあなたの意図を確認せずにその操作を実行した場合に発生します。簡単な例を次に示します。

  1. サイトにはアカウントの一覧があり、アカウントを削除するためのリンクが表示されています。

    このリンクは以下のような、削除するアカウントの識別子(この例ではユーザーIDが2のアカウント)を含むURLが指定されています。

    例 : http://example.com/admin/delete/user/2

  2. 攻撃者はあなたがサイトの管理者であると確認します。そして、あなたとSNSサイト(Twitterなど)上で
    「友人」になります。 そして、Twitterのメッセージ機能を利用して、http://example.com/admin/delete/user/2 にリダイレクトする短縮URLをメッセージします。

  3. メッセージに記載されているURLをクリックするとアカウントの削除が実行され、リダイレクト先を認識する前に、ID2のアカウントが削除されてしまいます。 サイトの設定によっては、ユーザーアカウントに関連するすべてのコンテンツを削除する事も可能です。

この問題に対する解決策としては、トークンと呼ばれる、推定されにくい、アクションに関連付けられた任意の文字列を使用する事です。アクションを実行するためのフォームやリンク(アカウントの削除など)がブラウザに送信されると、サイトはユーザーとサイトのみが知っているユニークな文字列を同時に送信します。

リクエストが提出されると、サイトはトークンがまだ有効であるか検証します。また、実行されているアクションが適切であるかも検証します。 トークンが有効でないと判断された場合、そのアクションは拒否されます。

CSRFのビデオ

このビデオはCSRFの例です。 この問題はDrupalではなく、Tumblr側のものでした。(すで修正済みです)。 この例ではTumblrは、ユーザが投稿した質問を削除する時に、CSRFトークンを使用しないため、ユーザーが意図的に質問を削除しようとしたか確認できません。

Introduction to Cross Site Request Forgeries from Greg Knaddison on Vimeo.

サイト上の他の操作では、Tumblrはセッション全体で同じセッション固有のトークンを使用します。 このトークンはPOSTパラメータとして送信され、操作を受け入れる前にサーバー側で確認されます。

Drupalでのクロスサイトリクエストフォージェリ―からの保護


次のステップは、DrupalモジュールをCSRFから保護することです。

この記事に対するANNAIからのコメント

CSRFもXSSと同様にDrupalに限らずWebシステム、Webサイト全般で対処が必要な問題です。

Drupalの場合は Form API を利用することにより、自動的にCSRFへの対策を行うことが可能です。

詳しくは xxx (次の翻訳記事へのリンク) を参照してください。

この記事を書いた人 : Satoshi Kino

ANNAI 株式会社 CEO
 

関連コンテンツ