2016-12-14 16 views
1

Everyoneは、CORSはCSRF攻撃から防御するために何もしないと言います。これはCORSがドメイン外のドメインからドメインのリソースへのアクセス(読み取り)をブロックするためですが、ではが要求の処理を妨げていません。そのため、悪質なサイトは、結果を読み取ることができないことを気にせずに、状態を変更するDELETE要求を送信することができます。なぜCORS前線はCSRF攻撃を阻止しないのですか?

これはすべてうまくいいです。

pre-flight CORSを除く。

CORSは、この要求が送信される前にその要求を調べ、正当なものかどうかをチェックします。そうでない場合、要求は拒否されます。

だからCSRFの攻撃者が送信しようとDELETE要求が飛行前チェックに失敗したため、拒否されます。 CSRF攻撃は失敗します。

私はここで何が欠けていますか?

答えて

0

通常の飛行前のリクエストでは、CSRF が一般的には防止されません。たとえば、すべてのクロスドメインajax呼び出しがフライト前リクエストを生成するわけではなく、プレーンなPOSTはそうではありません。飛行前のリクエストが本当にリスクを軽減するのに役立つ特別なケースがあるかもしれません。

referer/originのチェックと同じ問題があります。攻撃者は悪質なウェブサイトに、プレーンJavaScriptでリファラや起源を上書きすることはできませんが、例えば、Flashの古いバージョンのように、適切なブラウザプラグインを使用してそうするpossibbleかもしれません。ブラウザプラグインが許可している場合、攻撃者は飛行前の飛行なしに原点通過要求を送信できる可能性があります。だから、あなたは飛行前のリクエストだけに頼ることは望まない。

+0

「すべてのクロスドメインAjaxの呼び出しは、プリフライトリクエストを生成しないたとえばは、無地のPOSTにはありません。」何故なの? – ineedahero

+1

単純なクロスオリジン投稿を行うには、ajaxは必要ありません。あなたは普通の書式の投稿を使うこともできるので、それを制限する上で大きな価値はありません。 –

+0

ああ。私はあなたが何を言っているのかを見ます。私はそれを疑問に思っていた。なぜCORSのプリフライトはPUTリクエストでは有効になるが、POSTリクエストでは有効にならないのだろうか?あなたが言うように、POSTはちょうど危険なことができます.... – ineedahero

関連する問題