何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 35955
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

ネタもと:CSRF対策に「ワンタイムトークン」方式を推奨しない理由 from 高木浩光@自宅の日記

CSRF対策に「ワンタイムトークン」を用いるという話が出ると、本物のプログラマ達は、まず図5の実装(でwinidを乱数にする)を頭に浮かべるのではなかろうか。

なるほど。本物のプログラマは、そういう風に考えるのかぁ。

でも、ごめんなさい。エセプログラマな私が意見するのもなんですが、やっぱり、ワンタイム・トークンを使います。もとい。ワンタイム・トークン“も”使います。

なぜなら、対策しなければならないのは CSRF だけではないので、グローバル変数1個に「トークン」を入れる方法なので、これでは同時編集ができなくなるように“したい”からです。

Windows アプリケーション(またはスタンドアロン アプリケーション)の場合、ウインドウの生成は、作り込むわけですから、好きなように制御できます。編集画面を1枚だけしか開きたくない場合、そのように実装できます。

ところが、Web アプリケーションの場合、そのような制御は出来ません。複数のブラウザを起動して、別々にリクエストを投げれば、何枚でも編集画面が開きます。すでに別のアプリケーションとして存在しているものを使うわけですから、それの制御までは出来ません。

ログインの箇所で制御しようとしても、ユーザが明示的にログアウトしてくれるかどうかわからないので、あまり期待できません。Internet Explorer の場合、[ファイル]メニューから[新規作成]すれば、表示されているのと同じセッション、同じ URL で画面が開きます。

このように、ウインドウの生成を制御する方法で、編集画面を1枚だけに抑制することは困難です。なので、他の方法を探さなければなりません。

高木氏は今回、“更新”処理を取り上げています。しかし、“追加”処理の場合はどうでしょうか。

更新処理の場合、何度ポストされても、同じデータが送られてくるので、何度更新してもデータは変わりません。しかし、追加処理の場合、同じデータが何度も送られてくるのは、喜ばしくありません。様々なサイトで、「送信ボタンを押すのは1度だけにしてください」と、注意書きがあるように、ここは1度に制限したいところです。

実際、コミュニティには、「複数回のリクエストを1回だけに制御したい」という質問が、チラホラあります。記事の方に「ASP.NET 1.1 「リロード」で、データを2重登録させない」というエントリを設けていますが、参照回数が 570 回程度。検索キーワードは「リロード ポストバック 戻る」が多いですが、「多重投稿+防止 連続+ボタン 連続要求 連続ポスト」というキーワードもあります。

クリックでいいところを、誤ってダブル・クリックするかもしれない。サーバでの処理がもたつき、ユーザがイラついて複数回クリックするかもしれない。全然回答がないので、大量に送りつけてやれ。

十分に考えられるシナリオではないでしょうか。

Windows アプリケーションの場合、イベントハンドラの出口で待機イベントをキャンセルすることで、イベントの発生を1回だけに抑制することが出来ます。しかし、Web アプリケーションの場合、サーバ側でクライアントで発生してしまったイベントを制御することが出来ません。

同じように更新も、高木氏が例に挙げられているように、違うデータを更新するなら、それはそれでいいでしょう。しかし、同じデータが表示されていたら?片方は書き換えて更新、もう一方はそのまま更新されたら、どの様にデータを扱えばいいのでしょう?あるいは、ユーザはどうしたかったのでしょうか?ここでセッション ID だけが判別 ID として用いられていたら、このような(開発者として、かもしれませんが)イリーガルな更新処理を防げません。

ここで防ぎたいのは、連続しない画面遷移、悪意ある人からの攻撃だけではありません。連続した画面遷移であっても、同じ内容での複数回の要求、矛盾する複数の要求、悪意のない人の操作ミスなどによる、データ破損(汚損)も防ぎたいのです。

データが破損(汚損)することを防ぐ。その為に、同じセッションからのリクエストを1回だけに絞る。その実現方法としてワンタイム・トークンを使う。その弊害として、同時編集できなくなる。どうしてもやりたいなら、セッションが別々になるような接続をして、やってくれ。いかがでしょうか?

投稿日時 : 2006年4月13日 21:44
コメント
  • # re: なるほど:CSRF対策に「ワンタイムトークン」方式を推奨しない理由
    買太郎
    Posted @ 2006/04/14 13:06
    CSRFって知らなかったです。
    とりあえず、高木さん所やJittaさんの所で調べてみます。

    そんな私は 何プログラマでしょうか(T_T)
  • # re: なるほど:CSRF対策に「ワンタイムトークン」方式を推奨しない理由
    Jitta
    Posted @ 2006/04/14 21:19
    買太郎さん、コメントありがとうございます。

     いえいえ、私も「ぼくはまちちゃん」まで、知りませんでしたから。
  • # re: なるほど:CSRF対策に「ワンタイムトークン」方式を推奨しない理由
    ss
    Posted @ 2006/04/15 21:45
    高木さんは「CSRF対策として」勧めてないだけで、その他の目的に使う分には自由に使えばいいのでは?
  • # re: なるほど:CSRF対策に「ワンタイムトークン」方式を推奨しない理由
    Jitta
    Posted @ 2006/04/16 10:51
    ssさん、コメントありがとうございます。

    そうですね。でも、ワンタイム・トークンなら、両方を一度に兼ねられると思いませんか?
  • # I have read several good stuff here. Definitely value bookmarking for revisiting. I surprise how so much attempt you set to create the sort of wonderful informative website.
    I have read several good stuff here. Definitely va
    Posted @ 2019/04/10 10:54
    I have read several good stuff here. Definitely value bookmarking
    for revisiting. I surprise how so much attempt you set to create
    the sort of wonderful informative website.
  • # Great post. I will be experiencing a few of these issues as well..
    Great post. I will be experiencing a few of these
    Posted @ 2019/05/05 5:25
    Great post. I will be experiencing a few of these issues as
    well..
  • # Have you ever thought about writing an e-book or guest authoring on other sites? I have a blog centered on the same information you discuss and would love to have you share some stories/information. I know my viewers would appreciate your work. If you
    Have you ever thought about writing an e-book or g
    Posted @ 2019/06/17 0:32
    Have you ever thought about writing an e-book or guest authoring on other sites?
    I have a blog centered on the same information you discuss
    and would love to have you share some stories/information. I know
    my viewers would appreciate your work. If you are even remotely interested,
    feel free to shoot me an e mail.
  • # Great article! This is the type of information that are meant to be shared around the net. Disgrace on Google for now not positioning this submit higher! Come on over and consult with my site . Thanks =)
    Great article! This is the type of information tha
    Posted @ 2019/08/24 7:25
    Great article! This is the type of information that
    are meant to be shared around the net. Disgrace on Google for now not
    positioning this submit higher! Come on over and consult with my site .
    Thanks =)
  • # OUkBRSMvczYthgNB
    https://amzn.to/365xyVY
    Posted @ 2021/07/03 3:13
    I want to encourage you to definitely continue your great
  • # JQjOFOtsyIe
    https://www.blogger.com/profile/060647091882378654
    Posted @ 2021/07/03 4:43
    I really liked your article post.Much thanks again. Really Great.
  • # re: ????:CSRF????????????????????????
    hydrocloroquine
    Posted @ 2021/07/18 8:39
    is chloroquine safe https://chloroquineorigin.com/# hydroxychloroquine side effect
  • # re: ????:CSRF????????????????????????
    hydroclorizine
    Posted @ 2021/07/27 19:23
    chlooquine https://chloroquineorigin.com/# hydroxychlor 200mg
  • # fyqahtjdtyoe
    dwedaysnpz
    Posted @ 2021/12/01 13:17
    https://hydro-chloroquine.com/ hydroxychloroquine sulfate
  • # doxylin https://doxycyline1st.com/
    where to get doxycycline
    Doxycycline
    Posted @ 2022/02/26 9:21
    doxylin https://doxycyline1st.com/
    where to get doxycycline
  • # eYlKkWsNurKzmME
    johnanz
    Posted @ 2022/04/19 13:06
    http://imrdsoacha.gov.co/silvitra-120mg-qrms
  • # bwaglaplipjo
    ztdxnw
    Posted @ 2022/05/07 18:58
    hcqs tablet https://keys-chloroquinehydro.com/
  • # pills erectile dysfunction https://erectionpills.best/
    cure ed
    ErectionPills
    Posted @ 2022/06/28 10:45
    pills erectile dysfunction https://erectionpills.best/
    cure ed
  • # paxlovid ema https://paxlovid.best/
    covid medikament
    Paxlovid
    Posted @ 2022/09/07 22:35
    paxlovid ema https://paxlovid.best/
    covid medikament
  • # aralen chloroquine
    MorrisReaks
    Posted @ 2022/12/30 21:11
    chloroquine uk buy http://hydroxychloroquinex.com/
  • # doors2.txt;1
    sufjykMCax
    Posted @ 2023/03/14 14:56
    doors2.txt;1
  • # doors2.txt;1
    GFQPDRAjjIguNwSGxHd
    Posted @ 2023/03/14 16:30
    doors2.txt;1
タイトル
名前
Url
コメント