gpt4 book ai didi

asp.net - EnableHeaderChecking=true 是否足以防止 Http header 注入(inject)攻击?

转载 作者:行者123 更新时间:2023-12-01 18:37:44 25 4
gpt4 key购买 nike

将 [System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking]( http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx) 设置为 true (默认)足以完全防止 Http header 注入(inject)攻击像响应 split 等?

我这么问是因为白盒渗透测试工具 (fortify) 报告了 HttpResponse.Redirect 和 cookie 的可利用 http header 注入(inject)问题,但我还没有找到成功执行攻击的方法。 (编辑:..并且我们已启用 EnableHeaderChecking..)

最佳答案

我已经研究这个问题有一段时间了,并得出结论,将 EnableHeaderChecking 设置为 true 实际上足以防止 http header 注入(inject)攻击。

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

  1. 只有一种方法可以将自定义 HTTP header 添加到 HTTP 响应,即使用 HttpResponse.AppendHeader 方法
  2. HttpResponse.AppendHeader 任一
    • 创建 HttpResponseHeader 实例(内部)
    • 或调用HttpResponseHeader.MaybeEncodeHeader(对于IIS7WorkerRequests)
    • 或分配其各自的属性(对于已知 header ,例如 RedirectLocationContentType )
  3. HttpResponseHeader 实例在发送已知 header (例如 RedirectLocationContentType)之前创建 (HttpResponse.GenerateResponseHeaders)
  4. HttpResponseHeader 构造函数会检查 EnableheaderChecking 设置,并在设置为 true 时调用 HttpResponseHeader.MaybeEncodeHeader
  5. HttpResponseHeader.MaybeEncodeHeader 正确编码换行符,这使得 HTTP header 注入(inject)攻击不可能实现

这是一个片段,大致演示了我的测试方式:

// 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>"
);

仅当您明确关闭 EnableHeaderChecking 时,上述内容才有效:

<httpRuntime enableHeaderChecking="false"/>

Fortify 根本不考虑配置(明确设置 EnableHeaderChecking 没有效果),因此总是报告此类问题。

关于asp.net - EnableHeaderChecking=true 是否足以防止 Http header 注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com