MVC.net表单post / anti伪造

时间:2010-08-10 18:10:34

标签: c# asp.net-mvc

定义ValidateAntiForgeryToken属性时。应该给盐多大程度的复杂性?

例如是一个字母数字超过X个字符的字符好吗?是否应该有符号。

[ValidateAntiForgeryToken(Salt = "How complex is good")]
public virtual ActionResult SaveDetail(UserDetails details)
{
.
.
.
}

2 个答案:

答案 0 :(得分:3)

我认为这是盐长度的问题,而不是字符类型。简单地说,盐越长,AntiForgeryToken就越难破解。诸如md5-crypt和bcrypt的现代方法分别使用48和128位的盐。也许你想跟随他们的领先。

如果您真的担心,请为每个视图添加不同的盐。这将为您的网站提供额外的安全性,因为黑客将无法从视图重用受损的令牌来查看。希望这是有道理的。

桑德森在this post中说到这一点。

答案 1 :(得分:2)

我已经将'salt'添加到配置文件中并使用guid获取它的值(沿着这一行):

public const string AntiforgeryToken = "{F161FDA9-D1F0-43D2-85D0-F7051F12E7B8}"; 

我在控制器中引用它,如:

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken(Salt = Config.AntiforgeryToken)] 

似乎对我有用。

吉姆