EnableHeaderChecking=true 是否足以防止 Http 标头注入攻击?

2023-12-30

拥有[就足够了吗?System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking](http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx) http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx) set to true(默认)完全防止 Http 标头注入攻击,例如响应拆分等?

我问这个问题是因为白盒渗透测试工具(fortify)报告了可利用的http标头注入问题HttpResponse.Redirect和 cookies,但我还没有找到成功执行攻击的方法。 (edit:..并且我们打开了 EnableHeaderChecking..)


我已经研究这个有一段时间了,得出的结论是设置启用标头检查 http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx to true事实上足以防止 http 标头注入攻击。

查看“反射”的 ASP.NET 代码,我发现:

  1. 只有一种方法可以将自定义 HTTP 标头添加到 HTTP 响应,即使用HttpResponse.AppendHeader http://msdn.microsoft.com/en-us/library/system.web.httpresponse.appendheader.aspx method
  2. HttpResponse.AppendHeader http://msdn.microsoft.com/en-us/library/system.web.httpresponse.appendheader.aspx either
    • 创建实例HttpResponseHeader(内部的)
    • 或致电HttpResponseHeader.MaybeEncodeHeader (for IIS7WorkerRequests)
    • 或分配其各自的属性(对于已知的标头,例如重定向位置 http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectlocation.aspx or 内容类型 http://msdn.microsoft.com/en-us/library/system.web.httpresponse.contenttype.aspx)
  3. HttpResponseHeader实例是在已知标头之前创建的,例如重定向位置 http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectlocation.aspx or 内容类型 http://msdn.microsoft.com/en-us/library/system.web.httpresponse.contenttype.aspx已发送(HttpResponse.GenerateResponseHeaders)
  4. The HttpResponseHeader构造函数检查启用标头检查 http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx设置和通话HttpResponseHeader.MaybeEncodeHeader当设置为true
  5. HttpResponseHeader.MaybeEncodeHeader正确编码换行符,使 HTTP 标头注入攻击不可能

这是一个片段,粗略地演示了我的测试方式:

// simple http response splitting attack
Response.AddHeader("foo", "bar\n" + 
    // injected http response, bad if user provided
    "HTTP/1.1 200 OK\n" + 
    "Content-Length: 19\n" +
    "Content-Type: text/html\n\n" +
    "<html>danger</html>"
);

仅当您明确转向时,上述内容才有效启用标头检查 http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx off:

<httpRuntime enableHeaderChecking="false"/>

Fortify 根本不考虑配置(设置启用标头检查 http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx明确没有效果),因此always报告此类问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EnableHeaderChecking=true 是否足以防止 Http 标头注入攻击? 的相关文章

  • ASP.NET 会话状态服务器与 InProc 会话

    运行会话状态服务器而不是 InProc 的开销性能损失是多少 重要吗 我知道您可以使用状态服务器重新启动 w3wp 并保留所有会话状态 这是相对于 InProc 的唯一优势吗 这取决于您的部署计划 在单个服务器上 损失很小 但好处同样有限
  • 为什么应该或不应该将数据集、数据表等存储为 ASP.NET 页面中的会话变量?

    我正在开发一个使用 Web 服务返回的数据集的 Web 应用程序 当应用程序运行时 我将该数据集存储为会话变量 以便在用户导航到将编辑数据集中的表的不同页面时反复使用 这个想法是 当应用程序加载时 用户只需要等待一次数据 然后应用程序将使用
  • 在 Visual Studio 2019 中安装 OData v4 客户端代码生成器

    我制作了一个 OData 服务 我想制作一个客户端程序来调用该服务 我想使用 OData v4 客户端代码生成器 但无法在 Visual Studio 2019 中安装它 只能在 vs2017 中安装 在vs2019中如何安装 由于 Rah
  • Chrome 87 在针对 Windows IIS 10 的 CORS 中的 Windows 身份验证失败

    Chrome 86 及更早版本 Edge Curl 和 IE 都能够对 Windows 2019 计算机上的 IIS 10 ASP NET 服务进行跨域 Windows 身份验证 没有任何问题 但 Chrome 87 失败 并显示 从源 h
  • IIS Express 捕获所有子域 url

    我正在寻找 IIS Express 中子域包罗万象 url 的解决方案 基本上 我环顾四周并找到了如何在 IIS Express 中创建域 子域 它很容易找到 我所要做的就是在 IIS Express 的 ApplicationHost c
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • Razor C# - 从数据库获取数据

    我正在使用 WebMatrix 我创建了一个数据库并放置了一个包含几行数据的表 我可以连接到它并获取数据WebGrid 但它只提供了一种使用表格输出数据的方法 这是我的 shows cshtml 代码 var db Database Ope
  • 刷新/重新加载 ASP.net 的副作用?

    我在 Web 和 ASP Net 开发方面相对较新 所以请耐心等待 在测试我们的网页的过程中 我注意到 如果用户单击 刷新 重新加载 并在 重新发送信息 对话框提示时单击 重试 则无论用户选择之前触发的最后一个事件如何到 刷新 随后将再次被
  • 如何使用 jQuery 过滤 DropDownList 中的选项

    我有 2 个 DropDownList 第一个 DropDownList 有 4 个选项 第二个 DropDownList 有 20 个选项 我想要一个选项value 1在第一个 DropDownList 中选择我在第二个 DropDown
  • JWT - 配置授权服务器并将颁发者设置为其本身

    我正在尝试按照本指南设置授权服务器 http bitoftech net 2014 10 27 json web token asp net web api 2 jwt owin authorization server http bito
  • IIS Express 安装目录在哪里?

    我最近开始了一个 ASP NET 教程 我想测试我用 WebMatrix 制作的页面 然而 有一个错误 Web 服务器配置为不列出该目录的内容 因此 它建议启用目录浏览并转到 IIS Express 安装目录并运行命令 那么它到底位于哪里呢
  • ASP .net 从 page_load 函数后面的代码中获取隐藏值

    我在 javascript 代码中设置了一个隐藏字段
  • 使用 C# 和 ADO.NET SET NOCOUNT ON 并读取消息

    SET NOCOUNT ON 会阻止显示受 Transact SQL 语句或存储过程影响的行数的消息作为结果集的一部分返回 a 如何使用 C 和 ADO NET 读取这些消息 我假设读取这些消息的 C 代码是相同的 无论 T SQL 语句是
  • 如何确保密钥是在 TPM 内部创建的?

    我需要 在客户端计算机上运行 exe 这将在 TPM 中创建密钥对 然后我将使用 TPM 生成的密钥对的公钥部分创建 CSR 我关心的是如何确保密钥是在 TPM 内部创建的 而不是由欺骗的 TPM 创建的 这将使私钥能够被迁移和复制 我听说
  • ASMX相当于Page_Init?

    我有一些代码想要在调用 ASMX 函数的生命周期的早期执行 对于我们的 ASPX 页面 此代码位于基类的 Page Init 函数中 我们所有的 ASPX 页面都继承自该基类 ASMX 是否有相当于 ASPX 的 Page Init 函数
  • 不允许循环文件引用。发布 ASP.NET (2.0) 网站

    当我重新 构建 ASP NET 网站时 我没有收到任何错误 然而 当我发布该网站时 它给我一个 不允许循环文件引用 的信息 错误 我在网上读到了一些关于此的内容 它提供了一个batch false 选项 我尝试过但什么也没做 该页面有一个母
  • 如何在 asp.net 文本框中保留前导空格

    我有一个文本框 Web 控件 它会自动修剪其内容中的任何前导空格 因此当我收到文本时 它与用户最初编写的内容不同 如果他输入了前导空格 有没有办法禁用这个功能 好吧 只有一种解决方案可以覆盖默认行为 那就是编写一个 javascript 函
  • 在静态类中存储连接 (ASP.NET)

    由于我使用的是 Postgresql 并且无法使用 LINQ to SQL 因此我编写了自己的包装器类 这是学生课程的一部分 public class Student User private static NpgsqlConnection
  • 为什么我应该在 ASP .Net MVC 应用程序中放弃使用 HTTPContext 会话状态的形式?

    我记得读过一些地方 人们不鼓励在 ASP Net Web 应用程序中使用 HTTPContext Current Session 状态 有人可以解释一下最近这一趋势背后的一些原因吗 A这有可靠的技术原因吗 谢谢 约翰 B 首先 MVC 不是
  • 有没有任何工具可以查看针对数据库运行的查询?

    是否有任何工具可以检查 asp net 或 sql server 并报告针对数据库运行的所有查询 我问这个问题的原因是我正在一个项目中使用 Linq 并且想要仔细检查它对每个页面实际执行的操作 理想情况下 我想在浏览器中查看页面并获得为创建

随机推荐