asp.net - url 内的双转义序列 : The request filtering module is configured to deny a request that contains a double escape sequence

标签 asp.net asp.net-mvc asp.net-mvc-3 iis iis-7

在我的 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/

相关文章:

c# - 如何将mysql的日期时间转换为asp.net的日期时间

c# - C# 中单个按钮有两个操作的弹出消息

asp.net-mvc - 为什么 ASP.NET MVC 会忽略我的斜杠?

c# - 在 web.config 中放置连接字符串的位置

asp.net - 将应用程序迁移到 Win 7 开发机后无法解析 CSS 和 javascript 文件

c# - DB-First 身份验证与 ASP.NET Web API 2 + EF6 混淆

c# - 使用 Ajax 以 guid 作为键的 .NET MVC 字典绑定(bind)问题

css - 删除 ASP.NET MVC3 中的下拉列表向下箭头符号

asp.net-mvc-3 - 为什么选择 MVC 3 的 ioc 框架?

asp.net-mvc - MVC Controller 设计