2016-10-13 5 views
1

セキュリティ専門家ではないことを明確にしたいのですが、私は倫理的または黒人帽子ハッカーでもなく、セキュリティ分野にも関係しています。クロスサイトリクエスト偽造「CSRF」からフォームを保護するための測定が行われますが、一部のシナリオでは、入力要素とボタンまたはクリック可能なdivを含むdiv要素を使用して正確な作業を行うことができます。CSRFに対する入力でdivを保護する必要があります

通常、かみそりのページにフォーム宣言内

@Html.Antiforgerytoken() 

を使用して、それはASP.NETでCSRFから保護される形

質問がされてコーディングする場合:それが有用であるか、それが動作しますが入力とAJAX呼び出しを実行するボタンが含まれている特定のdivで同じ手順を実行しますか?

答えて

0

はい、クライアント側の解決策はまったく重要ではありません。 CSRFはサーバー側の脆弱性であり、サーバー状態(データ、基本的にはログイン、特権レベルの変更など)を変更するサーバーへの呼び出しは、保護されていなければCSRFに対して脆弱です。

AJAXリクエストでは、自分でトークンを送信する必要があります。 jQueryを使用すると、$.ajaxSetup()フックとbeforeSendフックを使用して任意の状態チェイン要求を取得し、トークンを自動的に追加することができます(POSTは一般的に適用されますが、アプリケーションがGETを使用していればPUT、DELETE、 。 beforeSendを使用する利点は、一度だけ行う必要があり、もう覚えておく必要がないことです。この場合のトークンは、普通は@Html.AntiforgeryToken()というページで生成できますが、javascriptはそこから取得できます。

jsonデータを送信するとき(リクエストのコンテンツタイプがapplication/jsonであり、www-urlでエンコードされていない)というわずかなケースがあります。標準属性[ValidateAntiForgeryToken]は、jsonからトークンを受け取ることができません(また、それを渡すのが最適なオプションであると判断した場合は、要求ヘッダーからトークンを受け取ることもできません)。この場合、カスタム検証属性を実装できますが、簡単です。トークンを取得する場所を実装するだけで済みます。実際の検証では、標準のAntiForgery.Validate()メソッドを使用できます。

+0

ありがとうたくさんの素晴らしい説明と意味があります(y) – maces

関連する問題