【问题标题】:Need some guide line for AntiForgeryToken use in MVC [closed]需要一些在 MVC 中使用 AntiForgeryToken 的指南 [关闭]
【发布时间】:2013-09-24 22:56:30
【问题描述】:

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

【问题讨论】:

标签: asp.net-mvc-3 antiforgerytoken


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

【讨论】:

  • 我更新了我的问题。还告诉 ValidateMyAntiForgeryToken 自定义 AntiForgeryToken 是否有任何好的文章?
猜你喜欢
  • 2017-09-17
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 2010-10-13
  • 2015-08-12
相关资源
最近更新 更多