定义ValidateAntiForgeryToken属性时。应该给盐多大程度的复杂性?
例如是一个字母数字超过X个字符的字符好吗?是否应该有符号。
[ValidateAntiForgeryToken(Salt = "How complex is good")]
public virtual ActionResult SaveDetail(UserDetails details)
{
.
.
.
}
答案 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)]
似乎对我有用。
吉姆