金利0無利息キャッシング – キャッシングできます

 | 

2012-10-18

リファラとCSRF対策の話

18:14 | リファラとCSRF対策の話 - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - リファラとCSRF対策の話 - 金利0無利息キャッシング – キャッシングできます

リファラを使ったCSRF対策では多くの場合、想定していない、外部サイトのリファラが付いていたらエラーにする、ということが行われます。

一方で、ブラウザ側の設定に関わらず、リファラはいくつかの方法で消せます。

なので、「リファラのみ」使ってCSRF対策をしているときに、正規の手順以外でのフォーム送信を完全に塞ぎたいのであれば、リファラが空の場合でもリクエストを拒否しなくてはいけません。

そして、リファラは送信が必須のヘッダではありません。RFC2616では、UserAgentにはリファラを送信するかどうか選択する設定を作ることが推奨されています。

しかし現状、設定自体が存在しなかったり、about:configであったり、起動オプションであったり、拡張機能が必要であったりします。ユーザーに見える場所に設定があるのはモダンブラウザの中ではOperaだけです。

リファラを使ってCSRF対策をするということは、確実に「リファラを送信しない設定にしている人がサービスを使えなくなる」という不便を強いることになります。すでにリファラを送信しないと使えないサービスや、何の脈絡もなく唐突にエラーページを返してくるサービスが数多くあります。tokenによるCSRF対策が行われていながらも「念のため」といってリファラのチェックも行われていることもあります。ログに残しておけば十分です。

良くある間違い

Flash Playerでリファラが偽装できる

いつの話だよ。それは、ずいぶん昔の話です。

リファラを偽装するのは簡単にできるという主張

多分何かと勘違いしています。例えばあなたがpixivから画像をダウンロードしたかったり、i-driveからワレズしたり、Proxomitron少年ナイフしたり、そういうので任意リファラを「自分の意志」でセット出来るのは何の問題もないのです。自分の意思で、自分の送信するリクエストを任意に書き換えられるのは、当たり前です。

罠を踏ませて任意リファラを送出できることが問題なのです。

リファラを使ってCSRF対策をしているサイトが数多く有るために」リファラの誤送信や、偽装が出来るのは、クリティカルバグと見なされています。もしあなたが、そういうことが出来るブラウザプラグインを把握しているならば、バグ報告してください、すべきです。FirefoxChromeだったら報奨金がもらえるでしょう。「クックック、リファラを偽装するのは簡単にできるのだよ、おっと悪用されるといけないので方法は公開できないのだが」と言ってる人がいたら、多分その人は中二病か偽物です。

まとめ

自分はリファラを使ったCSRF対策を推奨しません。それは「対策として不完全だから」ではありません。リファラを使ったCSRF対策は、(任意リファラを送信できるようなUserAgentが無いという前提で)安全です。そしてとても簡単に実装することができます。何らかの事情でサービスのコード自体を書き換えられなくても、例えばApacheの設定ファイルでも対策ができます。(POSTリクエスト時に想定外のリファラだったら403)

リファラを使ったCSRF対策は無意味ではなく、ちゃんと対策になります。だからこそやめるべきです。リファラを使ったCSRF対策が「ちゃんと機能する」状態を保ち続けるために、本来気軽にオンオフできるはずだったリファラを送信するかどうかの設定が、奥深くに覆い隠され、あるいは完全になくなっています。ユーザーから選択肢を奪うから良くないのです。

こんなこといってWebの未来を憂いたところで実際のところ大半のユーザーのデフォルト設定で動けば別にいいじゃん、設定変える人は自己責任、みたいな開発者も多くいると思います。

なので現実的な話をすると、奥野みたいな面倒くさい人間にイチャモンつけられるのでやめたほうがいいです。 http://oquno.com/log/eid2593.html

asfaasfa2012/10/19 01:06なんだこの技術論破しましたみたいな厨二記事。リファラーが偽装出来ようが出来るまいが、ユーザーから送られてきたデータを信用してチェックに使うこと自体が誤りだろーがカス。おまえはユーザーからのデータを性善説でチェックしてんだろ。つーかやってるぞこいつ。

s_hskzs_hskz2012/10/19 10:41なんなんだ、このコメント。www ↑

fukkenfukken2012/10/26 18:18↑↑

UbaldoUbaldo2013/03/06 03:49It's great to read something that's both enojabyle and provides pragmatisdc solutions.

ekqnjwekqnjw2013/03/08 23:29UfN11G , [url=http://oslcudlbcavd.com/]oslcudlbcavd[/url], [link=http://kumvqqjvverq.com/]kumvqqjvverq[/link], http://ducsoygsabkk.com/

kbsgkajkbsgkaj2013/03/09 09:18n7lgpZ <a href="http://kaprvambejje.com/">kaprvambejje</a>

auffkuhmwnnauffkuhmwnn2013/03/10 23:43W0inI9 , [url=http://xrpcgwpqkhrd.com/]xrpcgwpqkhrd[/url], [link=http://eabkxociyamt.com/]eabkxociyamt[/link], http://rbsdqoddvthc.com/

gzaqvxxpaegzaqvxxpae2013/03/10 23:43YaoVfd , [url=http://dhkqeqjlklyt.com/]dhkqeqjlklyt[/url], [link=http://szxvvxjajgaj.com/]szxvvxjajgaj[/link], http://snfmuuxewozw.com/

さびねこにゃさびねこにゃ2014/07/01 00:50httpソケットを作ればヘッダーでリフェラーを指定できるので、あまり意味はないかと。

トラックバック - http://subtech.g.hatena.ne.jp/mala/20121018
 |