需要一些在MVC中使用AntiForgeryToken的指南

时间:2013-09-24 14:36:46

标签: asp.net-mvc-3 antiforgerytoken

我是mvc的新手。所以我会阅读一些关于AntiForgeryToken用法的文章。 AntiForgeryToken在页面中发出加密值,当表单发布时,加密值& AntiForgeryToken的cookie进入服务器端,比较两个值来检查两者是否相同。如果没有,则抛出错误。

我对AntiForgeryToken的问题很少

1)服务器端如何进行比较。我是否需要编写任何代码来比较值,或者当动作方法具有[ValidateAntiForgeryToken()]等属性时自动完成?

[ValidateAntiForgeryToken()] public ActionResult Edit(ProductDetails productdetails) {

}

2)如果我想在页面显示时加密用户ID,那么可以编写像@Html.AntiForgeryToken(m=> m.userid)这样的代码吗?如果有可能,那么当表单发布时,如何从服务器端获取用户标识值,因为用户标识将被加密。

3)人们使用的盐概念是什么?如何使用AntiForgeryToken()实现salt概念?

4)我可以将多个AntiForgeryToken()以单一形式加密多个敏感数据吗?如果不可能那么请告诉我原因。

5)如何对密钥进行AntiForgeryToken()加密......密钥将由我提供,每次都是动态的?

请明智地给出答案。感谢

更新

关于动态盐

要生成随机字符串,请使用RNGCryptoServiceProvider。

public string GenerateSalt(int length)
{
    var rng = new RNGCryptoServiceProvider();
    var buffer = new byte[length];
    rng.GetBytes(buffer);
    return Convert.ToBase64String(buffer);
}

如果我调用GenerateSalt(),它将始终提供动态组合。它。

1 个答案:

答案 0 :(得分:0)

  1. 自动完成。这就是[validateAntiForgeryToken]属性(过滤器)的作用。
  2. 这不在令牌的范围内;它只是为了防止垃圾邮件和某些形式的黑客攻击,而不是加密数据。如果需要考虑安全性,请考虑创建自己的Data Annotation属性以及DisplayTemplate / EditorTemplate(然后还有一个自定义过滤器来预处理传入的值)。
  3. Salt就像任何形式的加密;它会使欺骗传入的值变得更加困难。通过使用salt,您将为哈希添加另一级别的复杂性,因此解密现在需要该值。
  4. 同样,它不是用来加密您的数据,只是为了确保表单形式被误用。
  5. 不确定你的意思 - 动态盐?您可以创建自定义实现(ValidateMyAntiForgeryToken : ValidateAntiForgeryToken)。