2010-12-12 5 views
3

私はGETで送信しているフォームを持っています。つまり、データがURLに追加されます。フォームはセキュリティトークンで保護されています。GETでフォームを送信しない理由

私はいつもフォームがPOSTで提出されるべきだと言われました。私の場合、フォームがGETで提出された場合はどうなりますか?セキュリティリスクは何ですか?

+0

フォームの目的によって異なります。 **あなたが話している具体的な形式は何ですか?** –

+0

これは、データベース内のエントリを作成または更新するフォームです。 – sami

+1

常にPOSTメソッドである必要があります。ちょうどHTTPの標準と常識によると –

答えて

4

本当に危険なのは、ユーザーがサーバーに送信されているパラメータを正確に見ることができ、そのURLをブックマークする(再送信する)だけでなく、URLを改訂して、サーバーサイドスクリプト。

これは望ましいことです(Googleは検索にブックマークを付けるためにGETを使用します)。そうでないと、リスクが発生します(ログインフォームなど)。

「セキュリティトークン」の性質と、サイト/アプリケーションのユーザーがそのトークンを表示(および修正可能)する可能性がある場合は、危険性があります。ただし、POSTを使用してフォームを送信しても、送信元ページのhtmlソースにも表示されることに注意してください。

サーバーサイドスクリプトによる受信時のデータに応じて、送信された情報のサニタイズ、SQLインジェクションのスコープの縮小などが必要です(+1から@Switz)。

+0

DTが言ったように、http://en.wikipedia.org/wiki/Session_fixationを参照してください。 – TBH

+1

@ダウン投票者:私は気にしません。 *なぜ*それが評価されるコメントを残しておけば、OPは/に対する反対の丸められた議論を得て、私は何かを学ぶこともできます。 * sigh ... * –

+1

もちろん、POSTの提出物はGETバールのように変更したり改ざんしたりすることができるので、それは実際の理由ではありません。ただし、ユーザーが認証されていなくてもURLが公開(認証されていない)されない限り、フォーム自体はページに表示されない場合、攻撃者はフォームキーも見ることができます。 – Kissaki

3

トークンがうまく実装されている場合、ブックマークの問題を除いて違いはありません。 GETを実行すると、送信されたパラメータでURLをブックマークすることができます。POSTは実行されません。 よく実装されているトークンについては、MD5にハッシュされた12〜15文字の長さのランダムな文字列がその仕事をしなければならないと言います。

一般的にGETは、Cross Site Scripting Forgeryで悪用する方が簡単ですが、トークンが問題でない場合はもう一度トークンを使用してください。

すべてのユーザーは、データの送信方法(POSTまたはGET)に関係なく、サーバー側のスクリプトに無意味なデータを送信したり、再送信したりすることができます。これは有効な考慮事項ではありません。送信されたデータを検証し、それを処理するかどうかを決定するサーバー側スクリプト。機密情報がサーバーに送信される場合は、POSTを使用して、ユーザーがブックマークを付けないようにする必要があります。ブラウザーがブラウザー履歴に保存するのを避けるため、誰でもユーザーのパスワードなどを探す可能性があります。

データのサニタイズしかし、フォームメソッドとは関係ありません。一般的に、XSS(htmlentities)に対する保護、SQLインジェクション(mysql_real_escape_string)は、ユーザーの入力に実装する必要がある最も基本的な保護と考えられます(前者は、ユーザーの送信データがhtmlソースに表示されます。後者は、 SQLアクセスによるデータ)。

4

あなたがBIGフォームを持っている場合は、セキュリティ上の懸念については、各ブラウザ

URL Length = protocol+domain+port+query_string (GET)

のためのURLの長さの制限に注意してください、他の答えhaそれをかなりうまくカバーしました。
をメモ、フォーム送信をブックマーク可能な

+0

OperaのURLの最大長:2147483647バイト – mario

3

である必要はありませんIMO POSTを使用する主な理由は、セキュリティ(あなたがGETを確保することができます)ではありませんが、それは正しい意味を持つの問題です。

GETリクエストには副作用がありません。たとえば、GETを使用する検索フォームは完全にうまくいきます。 ユーザが戻るボタンを使用するか、またはユーザが実際に訪問する前に何らかのウイルス対策または内部アクセラレータが実行する可能性がある場合は、GETリクエストが繰り返される可能性があります...

GETのセキュリティ問題の1つは、したがってトークン)はサーフ履歴の一部になります。したがって、GETリクエストにはワンタイムトークンを使用する必要があります。