クロスサイトリクエストフォージェリ―とは何ですか?
ブログの投稿、写真の削除、サイトへの登録、銀行口座にお金を振り込むなどをオンライン上で行うときは、そのアクションをサイトに依頼します。 サイトへのリクエストを行うと、以下のように、自動的にいくつかのことが起こります。
データはHTTPプロトコルのPOSTまたはGETメソッドを使用して送信され、ブラウザが保有するそのサイトのCookieが送信されます。
クッキーには、サイトがあなたを識別するための情報や、どのようなアクセス許可を持っているかなどのサイトのセッション識別情報が含まれています。
悪意のあるユーザーは、サイトへあなたが意図しないある特定の種類のリクエストを行うように仕向けます。そして、サイトがあなたの意図を確認せずにその操作を実行した場合に、CSRFが発生します。 簡単な例を次に示します。
CSRFは、悪意のあるユーザーがあなたが意図しないサイトへの特定の種類の要求を行うように仕向け、サイトがあなたの意図を確認せずにその操作を実行した場合に発生します。簡単な例を次に示します。
-
サイトにはアカウントの一覧があり、アカウントを削除するためのリンクが表示されています。
このリンクは以下のような、削除するアカウントの識別子(この例ではユーザーIDが2のアカウント)を含むURLが指定されています。
例 : http://example.com/admin/delete/user/2
-
攻撃者はあなたがサイトの管理者であると確認します。そして、あなたとSNSサイト(Twitterなど)上で
「友人」になります。 そして、Twitterのメッセージ機能を利用して、http://example.com/admin/delete/user/2 にリダイレクトする短縮URLをメッセージします。 -
メッセージに記載されている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 (次の翻訳記事へのリンク) を参照してください。
関連コンテンツ
- Drupal 導入前に必ず考えたい「保守」のこと
- 手軽に本格的な Drupal のローカル開発環境を構築してみよう
- 9 つのシンプルなステップで Drupal 9 のテーマを作成してみよう
- Drupal 9: 一般的なエクスプロイトの経路をブロックする方法
- エンジニア新人研修のご紹介
- Headless CMS というトレンドに Drupal は適応している!?
- Drupal 9.1 が登場!アップグレードの準備はできていますか?
- Drupal 9 におすすめのモジュール
- State of Drupalプレゼンテーション(2021年4月)
- 第 16 回 Drupal をもっと知りたい方に向けた各種情報
Drupal 初心者講座バックナンバー
- Drupal 9/10 初心者講座
- 第 1 回 歴史に見る Drupal の DNA
- 第 2 回 Drupal はフレームワークか?CMS か?他の CMS との比較
- 第 3 回 Drupal の特徴
- 第 4 回 Drupal 9 / 10 のインストール (1)
- 第 5 回 Drupal 9 / 10 のインストール (2)
- 第 6 回 Drupal にコンテンツを投稿してみる
- 第 7 回 Drupal のボキャブラリとタクソノミーの使い方
- 第 8 回 コンテンツ管理における Drupal と他の CMS との比較
- 第 9 回 Drupal のブロックシステム
- 第 10 回 Drupal の標準クエリビルダー Views の使い方
- 第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
- 第 12 回 Drupal の多言語機能と他の CMS やサービスとの比較
- 第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
- 第 14 回 Drupal のテーマシステムについて
- 第 15 回 Drupal の拡張モジュールの選定と使い方
- 第 16 回 Drupal をもっと知りたい方に向けた各種情報