在非认证方案中使用MVC3 AntiForgeryToken?

时间:2012-01-02 15:05:57

标签: javascript asp.net-mvc-3 antiforgerytoken

通过several threads我可以看到,使用MVC防伪令牌对用户未经过身份验证的网站区域来说太过分了。

我有一个应用程序从site1,site2,site3等向mysite.com发布一些信息。每个站点都有一个唯一的标识符,通过异步Javascript POST在POST请求中发送。在site1-3上执行的Javascript在mysite.com上生成,然后返回到填充了一些Javascript变量的站点。

所以生命周期如下:

  1. site1上的页面包含对mysite.com的Javascript引用。
  2. 该链接引用是指生成Javascript以返回到site1的控制器路由。
  3. 返回的JS的结尾包含一个POST请求,该请求返回到包含Url,浏览器等的mysite.com,以及site1上页面访问者的详细信息。
  4. 我可以在JS POST请求的接受控制器中读取POST参数,但是,我想知道的是在参数列表中添加防伪标记是否有任何意义。

    如果是这样,我将不得不在初始请求中生成它,并将其作为JS中的JS变量传回给site1,然后在第二个请求中将其与表单POST一起传回。

    由于只有找到有效的帐户才能在mysite.com上进行任何处理,是否还有任何意义?

    如果是这样,我将如何在控制器级别生成防伪令牌?

1 个答案:

答案 0 :(得分:0)

我想说这取决于所发布数据的敏感性。如果另一个用户可能通过制作伪造的请求并提交它们来造成伤害(或烦恼),那么我会说这是合适的。听起来你只是在收集一些使用信息,所以情况可能并非如此。

一次性随机随机数可能是更好的解决方案。这将使得难以伪造请求并防止错误的多次提交,例如来自用户使用缓存的副本。在mysite.com上生成随机值(GUID可能有效),将其插入数据库并将其标记为未使用。使用POST将其发回。检查是否已使用。如果未使用,请将其标记为已使用并执行日志记录操作。如果已经使用过,请将请求作为重复提交放弃。

请注意,您不需要POST,使用URL参数的简单GET就足够了,因为nonce会阻止它被意外重复。