【发布时间】: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