0

哲学的に、私は常に、状態を変更しない HTTP リクエストには GET を使用し、変更するリクエストには POST を使用することに慣れています。ただし、最近、これに関していくつかの問題に遭遇したため、例外が発生しました。クロスサイト攻撃のようなセキュリティ上の懸念など、間違った HTTP 動詞を使用することによる非哲学的なマイナス面があるかどうか、私は興味がありました。

例外 #1

アーカイブに動的にパッケージ化された、要求されたファイルのリストのダウンロードをトリガーしたいと考えていました。ただし、ファイルのリストが非常に大きくなり、URL でクエリ文字列パラメーターとしてエンコードされると、Internet Explorer の URL の長さの制限を超える可能性がありました。これを回避するために、POST でダウンロードをトリガーすることになりました。

例外 2

ログインしているかどうかに関係なく常に表示されるボタンがありますが、ログインしている場合にのみ状態を変更できます。ログインしていないときに押すと、ログインページに移動します次に行く予定の場所を示すクエリ文字列パラメーター。ログインすると、そこにリダイレクトされ、アクションが完了します。ただし、リダイレクトは GET のみを生成でき、POST は生成できません。したがって、この状況で GET が状態を変更できるようにしました。

これらの例外の悪用や欠点はありますか? これらは、リファラー ヘッダーをチェックしても防止できないクロスサイト リクエスト フォージェリ シナリオを許可しますか?

4

1 に答える 1

0

件名の質問への回答: はい

例外 #1: GET 要求は本文を持つことができます。URLにすべてを入れる必要はありません

例外 #2: ログインしていない場合は GET を使用し、ログインしている場合は POST を使用するようにフォームを変更します。

リファラーの使用はお勧めしません。あらゆる種類の回避策があり、一部の企業ソフトウェアはプライバシーの問題からそれを取り除きます. CSRF 緩和にはトークンベースのアプローチを強くお勧めします。

于 2013-04-27T15:34:24.317 に答える