通过several threads我可以看到,使用MVC防伪令牌对用户未经过身份验证的网站区域来说太过分了。
我有一个应用程序从site1,site2,site3等向mysite.com发布一些信息。每个站点都有一个唯一的标识符,通过异步Javascript POST在POST请求中发送。在site1-3上执行的Javascript在mysite.com上生成,然后返回到填充了一些Javascript变量的站点。
所以生命周期如下:
我可以在JS POST请求的接受控制器中读取POST参数,但是,我想知道的是在参数列表中添加防伪标记是否有任何意义。
如果是这样,我将不得不在初始请求中生成它,并将其作为JS中的JS变量传回给site1,然后在第二个请求中将其与表单POST一起传回。
由于只有找到有效的帐户才能在mysite.com上进行任何处理,是否还有任何意义?
如果是这样,我将如何在控制器级别生成防伪令牌?
答案 0 :(得分:0)
我想说这取决于所发布数据的敏感性。如果另一个用户可能通过制作伪造的请求并提交它们来造成伤害(或烦恼),那么我会说这是合适的。听起来你只是在收集一些使用信息,所以情况可能并非如此。
一次性随机随机数可能是更好的解决方案。这将使得难以伪造请求并防止错误的多次提交,例如来自用户使用缓存的副本。在mysite.com上生成随机值(GUID可能有效),将其插入数据库并将其标记为未使用。使用POST将其发回。检查是否已使用。如果未使用,请将其标记为已使用并执行日志记录操作。如果已经使用过,请将请求作为重复提交放弃。
请注意,您不需要POST,使用URL参数的简单GET就足够了,因为nonce会阻止它被意外重复。