1

我是 mvc 的新手。所以我浏览了几篇关于 AntiForgeryToken 使用的文章。AntiForgeryToken 在页面中发出一个加密值,当表单发布时,AntiForgeryToken 的加密值和 cookie 进入服务器端并比较两个值以检查两者是否相同。如果不是,则会引发错误。

我对 AntiForgeryToken 没有什么疑问

1)在服务器端如何进行比较。我需要编写任何代码来比较值还是在具有 [ValidateAntiForgeryToken()] 之类的属性的操作方法时自动完成?

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

}

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

3)人们使用什么盐概念?如何实施盐概念AntiForgeryToken()

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() 那么它总是会给出一个动态组合。那它。

4

1 回答 1

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