在我的 ASP.NET MVC 应用程序中,我尝试实现如下 URL:
/product/tags/for+families
当我尝试使用默认配置运行应用程序时,我收到此消息,其中包含 404.11 响应代码:
HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.
我可以通过在 web.config 中实现以下代码来解决此错误:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
所以,现在我没有收到任何404.11
。
我想知道的是,我在这个实现中打开了什么样的安全漏洞。
顺便说一句,我的应用程序在 .Net Framework 4.0
下运行,并在 IIS 7.5
下运行。
最佳答案
您可能打开的安全漏洞与代码注入(inject)有关 - HTML 注入(inject)、JavaScript 注入(inject)或 SQL 注入(inject)。
默认设置不允许常见的注入(inject)策略发挥作用,可以半有效地保护您免受攻击。您删除的默认安全性越多,您就越需要考虑如何处理通过 URL、GET 请求查询字符串、POST 请求数据、HTTP header 等提供的输入...
例如,如果您要基于操作方法的 id
参数构建动态 SQL 查询,如下所示:
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 的每个部分和操作方法的其他输入视为可能的威胁。默认安全设置确实为您提供了一些保护。您更改的每个默认安全设置都会带来更多潜在的危害,您需要手动处理。
我假设您不是以这种方式构建 SQL 查询。但是,当您将用户输入存储在数据库中,然后再显示它们时,就会出现更偷偷摸摸的东西。恶意用户可能会在您的数据库中存储未经编码的 JavaScript 或 HTML,这反过来会威胁您系统的其他用户。
关于asp.net - url 内的双转义序列 : The request filtering module is configured to deny a request that contains a double escape sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739233/