高木先生からの今夜分かるSQLインジェクション対策への意見

こちらの方でかなり厳しく言われてしまったので、反省する点は反省して見直し作業も進めることにする。



とりいそぎ、高木先生が最後の方で言っている下記の点は本当に忘れていたので、早速修正することにしました。申し訳ありません。

「100%」て何? 攻撃を防ぐ話をしているのだから、防げないなら対策じゃないでしょ。(しかも、CSRFの文脈でRefererは偽装できないと言ったのに、まだ直してないね。去年会ったときに、「直します」って約束してたよね?) 


以下の文脈です。

リファラーで発信元をチェック
 HTTPリクエストを受けたとき、そのリクエストがどこのWebページから発行されたものかを示すリファラー(REFERER)と呼ばれる情報を得ることができる。この情報を活用し、本来意図したWebページ以外からのリクエストを拒否することで、CSRFによる外部からのリクエストを防ぐことができる。

 この方法は簡単に実装できて比較的効果の高い方法である。しかし、リファラー情報はリクエスト発信者が自由に発行できる情報であるので、偽装されてしまう恐れもあり100%防ぐといった効果はない。

これをの後半を以下のように修正します。

 リファラー情報はリクエスト発信者が自由に発行できる情報であるため、偽装されることを懸念するかもしれない。しかし、CSRFの場合には踏んでしまった自分自身がリクエストを発信するので、自分自身でリファラー情報を偽装する余地はない。
 ただし、ユーザーがリファラー情報を出力しないブラウザを使っている場合、このチェックを導入すると正当な操作でも受け付けなくなってしまう。

編集部にも依頼だしておきました。

追記(2006年11月6日)

リファラー情報の活用はCSRF対策として安全であるとは言えないようです。