1

我有一个关于使用 MVC 3 提供的 AntiForgeryToken 的问题。

我将尝试解释我的想法。

基本思想是一个 Ajax 按钮,用于“标记为收藏”目录中的一个(或多个)项目。所以我有一个包含整个项目列表的网格,每个项目都有一个按钮可以设为收藏夹。

嗯......我的想法实现是这样的:

当用户按下最喜欢的按钮时,这会向服务器发送一个 GET 请求以检索带有 AntiForgeryToken 的 partialView(所有这些对用户都是透明的,因为发生在后台)。

因此,当加载表单时,站点会自动提交(POST)数据(项目的 id 和 antiforgerytoken)以将此项目标记为收藏(再次......这发生在后台,因此用户永远看不到任何东西)。

这是 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)?您的方法不必要地过于复杂。

请参阅使用 MVC 4 RC 为 Web API 实现 ValidatingAntiForgeryToken 属性的问题以及如何将令牌放入 Ajax 请求的相关链接。

于 2013-01-30T22:20:09.213 回答