FORM をローカルで書き換えて送信するのをふせぐ対策は、どんなものがあるのでしょうか? クッキーとかハッシュで対応するものがあったら教えてください。

参考
http://www.sound-uz.jp/php/tips/security.html

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/07/28 13:34:50
  • 終了:2006/08/04 13:35:18

回答(3件)

id:Sampo No.1

Sampo回答回数556ベストアンサー獲得回数1042006/07/28 15:00:23

ポイント27pt

お示しのURLのように、register_globals によって意図しない変数データを注入されることへの対策なら、そのページに書いてあるとおり、変数の初期化の徹底が唯一の処方箋です。

ただ、不正なFORMからの送信に関して最近よく言われている問題はCSRF脆弱性と呼ばれるもので、要は不正なFORMをユーザーに踏ませることで、ユーザーの意図しない操作をさせてしまう攻撃のことです。

これに対する有効な対策はワンタイムトークンを設置することで、

http://www.jumperz.net/texts/csrf.htm

FORM内に、毎回サーバで生成したランダムな数値をhiddenフィールドで埋め込んでおくというものです。

送信されてきたFORMデータに、自分で生成したランダム数が入っていなければ不正FORMからの送信と判断できるのです。

具体的に用意するランダム数としては、セッションIDをハッシュ関数に通したものなどがよいでしょう。

id:isogaya

ありがとうございます。

権限をもった悪意な人が何か不正なことをしようとする場合にはまた別の対応が必要ということですね。

2006/07/28 15:31:23
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/07/28 16:28:40

ポイント27pt

■クッキーで判断する方法

仮に、対策するフォームの画面をログイン画面とします。


1.サーバサイドで、ログイン画面を出力の際に、クッキーをセットします。

2.フォームからPOSTされて来たときに、1で送り込んだクッキーが返ってきているかチェックします。


※ローカルでフォームを改ざんされてPOSTされた場合は、クッキーが返ってきません。

※簡単で一番効果的なのではないかと思います。

※クッキーが有効でなければなりません。

※クッキーを偽装して送るような事をされれば当然アウトですね。


■リクエストヘッダで判断する方法

リクエストヘッダ中のリファラで判断することもできると思いますが、セキュリティソフトによっては、リファラが送られて来なかったりするので完全ではないですね。

また、リファラの偽装もできるようです。


■MD5などのハッシュ値で改ざんを防ぐ

 上記2つは、ローカルからフォームでPOSTされたかどうかを知る方法です。

 ハッシュ値を使う場合は、フォームに埋め込んだhiddenなどの隠し要素の値や、AタグのURL(パラメータを含む)などの改ざん対策に使うことができると思います。

 たとえば、フォーム中のhidden要素に、IDや区分などをセットする場合は、それらの値から生成したハッシュ値もhidden要素としてフォームに織り込みます。

 サーバサイドでは、POSTされてきたとき、同様にIDや区分などのハッシュ値を生成し、hidden要素のハッシュ値と比較することによって改ざんされたかどうかを判断をします。


 ※その他、ハッシュ値を認証チケットのような役割で、hidden要素に入れておけば、正規にサーバから送信されたフォームかどうかを判断することができます。

  その際のハッシュ値は、セッションレベルでリクエスト毎にシーケンスに採番した値などで生成すると良いと思います。

  サーバ側では採番した値をセッションで保持しておき、次回リクエスト時に照合します。

  ただし、セッションレスの状況では実装できません。

  また、ハッシュ値の付加だけでは、ローカルに保存され、入力チェックなどのスクリプトを解除されたり改ざんされる可能性もあります。

 ※ハッシュ値の生成は、鍵(サーバサイドで保持)や時刻を組み合わせたり、いろいろ工夫すると良いかと思います。


http://www.yahoo.co.jp //ダミー

id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/07/28 16:56:37

ポイント26pt

クッキーとかハッシュでは

本格的に悪意がある場合は、抑止効果はありますが完全に

阻止することはできません。

ハードウェアトークン簡単ですが

 http://www.tokyo.metro.co.jp/security/otp/securid.html

そんなこともできないので

ソフトウェアで行う場合

1. FORMに埋め込まれたキー1(サーバ)

2. cookieに保存されたキー2

3. FORMの表示時 JavaScriptでサーバからクライアント用に

  キー3割り当て

4. FORMのPOST時JavaScriptでサーバからクライアント用に

  キー4割り当て

5. FORMのPOST時JavaScriptでサーバ側で変数の一部を

暗号化処理する。

http://labs.cybozu.co.jp/blog/hata/archives/2006-06-09-1.html

等が考えられる。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません