ユーザーに文章を書いてもらって、それをDBに保存するシステムを作りたいです。(掲示板・ブログ等)write.phpにフォームがあってそこでユーザーに文章を書いてもらい、そのデータをPOSTでsql.phpに送ってDBに登録するとします。
とある書籍に以下のような事が書いてありました。
「悪意のあるクラッカーがwrite.phpを介さないで別のドメインから直接sql.phpにデータを送り続けるような事があるので、それを防がなくてはならない」
これを防ぐにはどのようなセキュリティ対策を施せばいいでしょうか。XSSやインジェンクションについてはきちんと対策すると仮定して、上記のセキュリティ対策のみ教えていただきたいと思います。
POSTされたデータがwrite.phpから送られたかどうかを判別すればいいんだと思うのですが、偽装するのも簡単なような気がします。どなたかよろしくお願い致します。
セッション開始時に暗号キーを生成し、それを鍵として使う。
↓
そんなのは面倒だからSSLを使う。
↓
コストを抑えたければ共用SSLの使えるサーバーを選択。
共用SSLであれば利用開始までの面倒な手続きや設定も不要。
そういうのは CSRF と言います。
基本的な考え方は「正規のフォームから投げられたかどうかをチェックする」と言う事に尽きます。
はてなキーワードからのリンクにも色々と対策方法が載っています。
>CSRF
キーワードを示していただいてありがとうございます。CSRFという単語はたまに見かけていたのですが、こういう事だったのですね。後は自分で調べられると思います。情報ありがとうございました。
こういうことがあるということです。
http://www.atmarkit.co.jp/fsecurity/column/ueno/33.html
対策としては
・Cookieを使ったセッションの追跡
・リファラーで発信元をチェック
・チェックコードを利用
あげられてます。
実際問題としては、
セッションIDににたチェック用のコードをPOSTデータに埋め込む
というやり方が多いと思います。
5分以内しか有効でないチェックコード(文字列)です。
そのチェックコードがあっていない場合は、5分以上たったか
外部から不正にアクセスされたと判断します。
mixiですら対策していなかったというのが驚きです。当時はまだ珍しい攻撃方法だったのでしょうか。
回答ありがとうございます。これからセッションを実装してみようと思います。
SSLは旧ジオトラスト(現グローバルサイン)ならそんなに高くないですね。ただ個人で、となると別問題ですが。勉強と趣味を兼ねてローカル内で作っているもので実際に公開するつもりは無いので、とりあえずセッションを使ってみようと思います。
回答ありがとうございました。