人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

FORM をローカルで書き換えて送信するのをふせぐ対策は、どんなものがあるのでしょうか? クッキーとかハッシュで対応するものがあったら教えてください。
参考
http://www.sound-uz.jp/php/tips/security.html

●質問者: isogaya
●カテゴリ:インターネット ウェブ制作
✍キーワード:クッキー ハッシュ ローカル 対応
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Sampo
●27ポイント

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

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

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

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

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

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

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

◎質問者からの返答

ありがとうございます。

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


2 ● llusall
●27ポイント

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

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


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

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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

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

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


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


3 ● kurukuru-neko
●26ポイント

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

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

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

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

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

等が考えられる。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ