CSRFが来る来る
Monday, February 11, 2008
明らかにCSRFと思われる書き込みが来る。
仕方ないので、設定を発動してみた。(このgakibloで、唯一、CSRF対策っぽくなるのは、これだけ。完全ではないけどね。)
で、1ヶ月以上前の、エントリーにコメントするには、秘密の質問に答えなきゃいけないよ。
以下、コンピューターチック話。
このブログ作ったときは、botからかなあ、、、という攻撃が多かった。
で、このブログのデフォルトの仕様は、
comment_update.php?entry=[entry番号]&rand=[パスワード]
にリダイレクトする、というもので、このリダイレクトが、もとの投稿と、
IPが同じ場合はOK。
IPが違う場合は、ドメインが同じであればOK。
OKでない場合は検閲対象。
というもので、これで、当初は、全然はじけてたんだけどね。
CSRF対策という意味では、普通に、ブラウザが、リダイレクトに反応しちゃうので、ダメポー。
実は簡単な改造で、対応できるんだが、
> comment_update.php?entry=[entry番号]&rand=[パスワード]
> にリダイレクトする
というのをやめて、
comment_update_confirm.php?entry=[entry番号]
とかに、リダイレクトさせて、
randをポストさせるように、ユーザーにボタンを押させればいいんだけどねえ、、、、これも、コメントしてくれる人に、悪い気がする。
実際、その画面で、ボタンをおさせるための説明がややこしい。
「コメント投稿を受け付けました。すぐに反映させるには、確認ボタンを、押してください。押さない場合は、検閲対象となります。」
いや、、、、わけわからん説明になるもんなあ。
で、CSRFの王道である、コメント投稿画面に、ワンタイムトークン埋め込む方法は、いろんな理由で、やりたくないんだよな。
クッキーで、セッション使って、そのセッションごとに、トークン作るのが簡単だけど、携帯からの書き込みが、すべて引っかかっちゃう(検閲対象になっちゃう)し、
(もちろん、端末台数分のセッション管理するのは、サーバーの負荷になるし)
クッキー使わず、セッションごとじゃないトークン作るのは、もっともっと、サーバーの負荷になるし、、、
レファラー使うのがいいかなあ。これも、ホントのお客さんに申し訳ない気がするしなあ。
で、当面、秘密の質問で対応。一ヶ月以上前のエントリーに答えるには、秘密の質問に答えなきゃいけない。ってふうに、設定しました。
実際問題、CSRFを仕組まれるには、どうやら今のところ、時間がかかるみたい。
1ヶ月以上前のエントリーぐらいの古いエントリーに対するコメントを仕組む、ってのが、彼らの技術的には限界のようだから。
で、一ヶ月おきに、秘密の質問を変えれば、まあ、大丈夫っぽい。
でもこれも今のところ、、、ですが。
**********1時間後、追記***************
apacheのログ見てたら、Reffererも合ってる。
つまり、コメント投稿画面から、コメントを送信する、を押して来てるように見える。
可能性1: CSRFで、Reffererを偽造している。
どっかの、Flashに埋め込んでるのかな?手の込んだことを、、、
可能性2: CSRFではない。
これだと、botとしか考えられないな。毎回違うIPから来るので。
(一連の画面遷移するIPは同じ)
ちなみに、Reffererは、コメント投稿画面だが、そのコメント投稿画面自体を表示させたログが残ってないんで、可能性1が強いなあ。
(昔、Botで来てたときは、ちゃんと、遷移して、来てました。)
仕方ないので、設定を発動してみた。(このgakibloで、唯一、CSRF対策っぽくなるのは、これだけ。完全ではないけどね。)
で、1ヶ月以上前の、エントリーにコメントするには、秘密の質問に答えなきゃいけないよ。
以下、コンピューターチック話。
このブログ作ったときは、botからかなあ、、、という攻撃が多かった。
で、このブログのデフォルトの仕様は、
comment_update.php?entry=[entry番号]&rand=[パスワード]
にリダイレクトする、というもので、このリダイレクトが、もとの投稿と、
IPが同じ場合はOK。
IPが違う場合は、ドメインが同じであればOK。
OKでない場合は検閲対象。
というもので、これで、当初は、全然はじけてたんだけどね。
CSRF対策という意味では、普通に、ブラウザが、リダイレクトに反応しちゃうので、ダメポー。
実は簡単な改造で、対応できるんだが、
> comment_update.php?entry=[entry番号]&rand=[パスワード]
> にリダイレクトする
というのをやめて、
comment_update_confirm.php?entry=[entry番号]
とかに、リダイレクトさせて、
randをポストさせるように、ユーザーにボタンを押させればいいんだけどねえ、、、、これも、コメントしてくれる人に、悪い気がする。
実際、その画面で、ボタンをおさせるための説明がややこしい。
「コメント投稿を受け付けました。すぐに反映させるには、確認ボタンを、押してください。押さない場合は、検閲対象となります。」
いや、、、、わけわからん説明になるもんなあ。
で、CSRFの王道である、コメント投稿画面に、ワンタイムトークン埋め込む方法は、いろんな理由で、やりたくないんだよな。
クッキーで、セッション使って、そのセッションごとに、トークン作るのが簡単だけど、携帯からの書き込みが、すべて引っかかっちゃう(検閲対象になっちゃう)し、
(もちろん、端末台数分のセッション管理するのは、サーバーの負荷になるし)
クッキー使わず、セッションごとじゃないトークン作るのは、もっともっと、サーバーの負荷になるし、、、
レファラー使うのがいいかなあ。これも、ホントのお客さんに申し訳ない気がするしなあ。
で、当面、秘密の質問で対応。一ヶ月以上前のエントリーに答えるには、秘密の質問に答えなきゃいけない。ってふうに、設定しました。
実際問題、CSRFを仕組まれるには、どうやら今のところ、時間がかかるみたい。
1ヶ月以上前のエントリーぐらいの古いエントリーに対するコメントを仕組む、ってのが、彼らの技術的には限界のようだから。
で、一ヶ月おきに、秘密の質問を変えれば、まあ、大丈夫っぽい。
でもこれも今のところ、、、ですが。
**********1時間後、追記***************
apacheのログ見てたら、Reffererも合ってる。
つまり、コメント投稿画面から、コメントを送信する、を押して来てるように見える。
可能性1: CSRFで、Reffererを偽造している。
どっかの、Flashに埋め込んでるのかな?手の込んだことを、、、
可能性2: CSRFではない。
これだと、botとしか考えられないな。毎回違うIPから来るので。
(一連の画面遷移するIPは同じ)
ちなみに、Reffererは、コメント投稿画面だが、そのコメント投稿画面自体を表示させたログが残ってないんで、可能性1が強いなあ。
(昔、Botで来てたときは、ちゃんと、遷移して、来てました。)
コメントする
トラックバック
この記事へのトラックバックURL:
これまでに受信したトラックバックはありません。