当前位置:  开发笔记 > 后端 > 正文

运行时加载ValidateAntiForgeryToken Salt值

如何解决《运行时加载ValidateAntiForgeryTokenSalt值》经验,为你挑选了2个好方法。

考虑使用指令中的Salt参数的ASP.NET MVC应用程序[ValidateAntiForgeryToken].

该场景使得该应用程序将被许多客户使用.Salt在编译时知道它是非常可取的.

当前的策略是在web.config中找到Salt值.

[ValidateAntiForgeryToken(Salt = Config.AppSalt)]
//Config.AppSalt is a static property that reads the web.config.

这导致编译时异常,表明Salt在编译时必须是const.

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

如何修改应用程序以允许运行时加载,Salt以便不必为每个客户重新安装和重新编译应用程序?

考虑到Salt不会经常改变,如果有的话,从而消除了使表格无效的可能性



1> Levi..:

Salt属性是一个编译时常量.它只是将特定表单链接到特定操作方法的一种方法.例如,如果您有登录表单,您可能希望对此表单使用salt"Login",以便对登录表单有效的令牌不能用于更改密码表单等.

在所有情况下,应用程序的机器密钥都会自动用作额外的盐值.因此,即使两个salt值都显示为"Login",一个应用程序的反XSRF令牌也不能用于其他应用程序.机器密钥可在Web.config 部分中设置.



2> p.campbell..:

我有要求为不同的客户提供不同的盐.在这种情况下,我使用Dixin的解决方案在运行时注入盐.

针对ASP.NET MVC和AJAX的防伪请求配方标题为" 在运行时指定非常量盐 "一节.

使用新属性装饰您的控制器:

[ValidateAntiForgeryTokenWrapper(HttpVerbs.Post)]
public class ProductController : Controller
{     
    // Only HTTP POST requests are validated.
}

此新属性定义为:

public class ValidateAntiForgeryTokenWrapperAttribute : FilterAttribute, IAuthorizationFilter
{
    public ValidateAntiForgeryTokenWrapperAttribute(HttpVerbs verbs)
    {
        this._verbs = new AcceptVerbsAttribute(verbs);
        this._validator = new ValidateAntiForgeryTokenAttribute()
            {
                //load from web.config or anywhere else
                Salt = Configurations.AntiForgeryTokenSalt
            };
    }

    // Other members.
}

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有