1

MVC3が提供するAntiForgeryTokenの使用について1つ質問があります。

私の考えを説明しようと思います。

基本的な考え方は、カタログから1つ(または複数)のアイテムを「お気に入りとしてマーク」するためのAjaxボタンです。だから私はアイテムの全リストを含むグリッドを持っています、そしてこのアイテムのそれぞれはお気に入りとして作るためのボタンを持っています。

さて...私のアイデアの実装はこれです:

ユーザーがお気に入りボタンを押すと、サーバーにGETリクエストが送信され、AntiForgeryTokenを使用してpartialViewが取得されます(これはすべて、バックグラウンドで発生するため、ユーザーには透過的です)。

そのため、フォームが読み込まれると、サイトはデータ(アイテムのIDと偽造防止トークン)を自動的に送信(POST)して、このアイテムをお気に入りとしてマークします(これもバックグラウンドで行われるため、ユーザーには何も表示されません)。

これは、Firebugでの要求/応答に関する考え方です。

GET http://localhost/User/Favorite/Mark?url=156

Response from GET:

<form action="/User/Favorite/Mark?url=156" method="post">
<input name="__RequestVerificationToken" type="hidden" value="WVXhVJJ3VNB8HrZQ6CZBPt35z2zvDjaHmlYWrnCvJoDUgeWMEGUGwm3clCD27vFAsxbs0upiRdVdo9Wsus Z7B6SU NQgV3iSYTUtE/EREWqT1Is/kwNZpdNf/3Pi7fD572pO89lTdYEjL0OlzmPJ5tmRQEUq/oMbuj0MnmPZskykGz6HzRmgC4Ez2bBoCp4" />
</form>

-----------------------------

Then Submit the form with the AntiForgeryToken:

POST http://localhost/User/Favorite/Mark?url=156

__RequestVerificationToke...    WVXhVJJ3VNB8HrZQ6CZBPt35z2zvDjaHmlYWrnCvJoDUgeWMEGUGwm3clCD27vFAsxbs0upiRdVdo9Wsus Z7B6SU NQgV3iSYTUtE/EREWqT1Is/kwNZpdNf/3Pi7fD572pO89lTdYEjL0OlzmPJ5tmRQEUq/oMbuj0MnmPZskykGz6HzRmgC4Ez2bBoCp4

私の質問は簡単です。これは、AjaxリクエストのAntiForgeryTokenを取得するための良い習慣ですか?または悪い考えですか?

このアイデアがこの特定のアクションで私のサイトに悪用するバグホールを作ることができるかどうかわからないので、私はこの質問があります。

ありがとう

4

1 に答える 1

0

ユーザーが「お気に入り」を押して、ページにすでにあるAntiForgeryトークンを使用したときに、(AJAXを使用して)サーバーにリクエストをPOSTしてみませんか?あなたのアプローチは不必要に複雑すぎます。

トークンをAjaxリクエストに取り込む方法については、MVC4RCを使用したWebAPIのValidatingAntiForgeryToken属性の実装に関する問題と関連リンクを参照してください。

于 2013-01-30T22:20:09.213 に答える