misc.log

日常茶飯事とお仕事と

クロスサイトリクエストフォージェリ(CSRF)

昨夜、ASP.NETのページでボタンなどが押されてポストバックが起きる際に、最初に「Anti-CSRF Token」とタグ付された文字列を含むPOSTが飛んでいるのを見つけて、「なんだっけ?」と思ったのをとりあえず片づけておきます。

CRSFはクロスサイトリクエストフォージェリ、Cross Site Request Forgeries」の略で、ボタンなどの部品を使ってメッセージを投稿するようなサイトを悪用して、閲覧者や利用者が意図しないメッセージや情報をサーバーに飛ばしてしまうという攻撃?いたずらでした。思い出しました。

これですが、Wikipediaにわかりやすく説明されています。

クロスサイトリクエストフォージェリ / Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%AA

要約すると、

  1. いたずら用のページを作成する。ページには、開かれると同時に別の掲示板や投稿機能を持ったサイトの「ボタンを押した」のと同じ処理を実行する仕組みが仕掛けられている。
  2. ひっかかった人が、HTMLメールやURL貼付による誘導でいたずらページを開く。
  3. 本人が意図しないうちに、別のサイトの掲示板などにメッセージが投稿される(もちろん、投稿者は引っかかった本人)。

別に引っかかった人の名前が出るとかそういうわけではないでしょうが、投稿したIPアドレスなどから、問題がある場合、自宅までを突き止められる可能性はありますし、そうすると、とりあえず「犯人」とされてしまう可能性があります。

これを防止する方法はいくつかあるようですが、そのうちの1つが、

  1. Webサーバー側から、最初にブラウザに対して特定の暗証文字列を伝える。
  2. その後、ブラウザからの通信にはその暗証文字列を付随させる。
  3. 最初の暗証と異なるものを送ってきたり、暗証がついていないメッセージはCRSFの疑いがあるとして排除する。

というもの。前述のように、メール添付などでいきなり送信されるメッセージは、上記の1にあたるサーバーからの暗証文字列を受け取っていないので、いわば「部外者が通信に割り込んだ」とみなされるわけで……。

おそらくASP.NETのWebアプリによる通信や、IISによるWebページ運用では、この機能が盛り込まれていて、ブラウザからの通信(具体的にはポスト処理)の前には必ず「Anti-CSRF用暗証文字列」のやりとりがあるのでしょう………たぶん。

たぶん、です。

めんどうくさいWebセキュリティ

めんどうくさいWebセキュリティ