url内的双转义序列:请求过滤模块configuration为拒绝包含双转义序列的请求

在我的ASP.NET MVC应用程序中,我试图实现如下的URL:

/产品/标签/为+家庭

当我尝试使用默认configuration运行我的应用程序时,我收到404.11响应代码的消息:

HTTP错误404.11 – 未find

请求过滤模块被configuration为拒绝包含双转义序列的请求。

我可以通过在我的web.config中实现下面的代码来解决这个错误:

<system.webServer> <security> <requestFiltering allowDoubleEscaping="true" /> </security> </system.webServer> 

所以,现在我没有得到任何404.11

我想知道的是,这个实现打开了什么样的安全漏洞。

顺便说一句,我的应用程序是在.Net Framework 4.0IIS 7.5下运行。

您可能会打开的安全漏洞与代码注入有关 – HTML注入,JavaScript注入或SQL注入。

默认设置不允许共同的注入策略工作,从而使您免于半有效的攻击。 您删除的默认安全性越高,您就越需要考虑通过URL,GET请求查询string,POST请求数据,HTTP标头等提供的input操作。

例如,如果您正在基于您的操作方法的id参数构builddynamicSQL查询,如下所示:

 public ActionResult Tags(string id) { var sql = "SELECT * FROM Tags Where tagName = '" + id + "'"; // DO STUFF... } 

(…这不是一个好主意),.NET框架中的默认保护可能会阻止一些更危险的场景,比如请求这个URL的用户:

 /product/tags/1%27;drop%20table%20Tags;%20-- 

整个想法是把每一部分url和其他input的行动方法都视为可能的威胁。 默认安全设置确实为您提供了一些保护。 您更改的每个默认安全设置打开一个更多的潜在的不良情况,你需要手动处理。

当然,我假设你不是这样构buildSQL查询的。 但是,当你将用户input存储在数据库中,然后再显示它们时,就会有更多的偷偷摸摸的东西出现。 恶意用户可能会在您的数据库中存储未经编码的JavaScript或HTML,从而威胁系统的其他用户。