ASP.NET Core如何在Kestrel服务器中将allowDoubleEscaping设置为true
Kestrel 配置 allowDoubleEscaping 参数的方法
Kestrel 默认禁用双重转义请求解析,对应拦截报错信息如下:
The request contained a double escape sequence and request filtering is configured on the Web server to deny double escape sequences.
以下是两种合法配置方式,CreateDefaultBuilder 原生支持从配置文件读取该参数,也可通过代码硬编码配置:
方式1:代码硬编码配置
直接修改现有 UseKestrel 委托中的逻辑即可,注意区分.NET版本差异:
WebHost.CreateDefaultBuilder(args) .UseKestrel(options => { // .NET Core 3.0 及更高版本写法 options.Limits.RequestUriSettings.AllowDoubleEscaping = true; // .NET Core 2.x 版本写法 // options.Limits.AllowDoubleEscaping = true; }) .UseStartup<Startup>();
方式2:配置文件配置(使用CreateDefaultBuilder默认配置入口)
CreateDefaultBuilder 默认会加载 appsettings.json 中的Kestrel节点配置,无需修改C#代码,直接在配置文件中添加如下内容即可生效:
{ "Kestrel": { "Limits": { "RequestUriSettings": { "AllowDoubleEscaping": true } } } }
安全提示
开启 AllowDoubleEscaping 存在安全风险,攻击者可构造双重转义的请求路径绕过路径校验规则,触发路径遍历等攻击。如果必须开启该配置,建议额外添加自定义请求校验逻辑,对请求路径做白名单限制或恶意字符过滤,降低安全风险。
内容的提问来源于stack exchange,提问作者Jobelle
相关产品推荐
相关产品推荐

