将[System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking
](http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderchecking(VS.85).aspx)设置为true
(默认)足以完全阻止Http Header Injection攻击(例如响应拆分等)吗?
我问是因为白盒渗透测试工具(fortify)报告了HttpResponse.Redirect
和cookie的可利用的http header 注入(inject)问题,但是我还没有找到成功进行攻击的方法。 (编辑:..,我们已启用EnableHeaderChecking。)
最佳答案
我已经研究了一段时间了,得出的结论是,将EnableHeaderChecking设置为true
实际上足以阻止HTTP header 注入(inject)攻击。
查看“反射的” ASP.NET代码,我发现:
HttpResponseHeader
(内部)实例HttpResponseHeader.MaybeEncodeHeader
(对于IIS7WorkerRequests
)HttpResponseHeader
实例是在发送已知的 header (如RedirectLocation或ContentType)之前创建的(HttpResponse.GenerateResponseHeaders
)HttpResponseHeader
构造函数检查EnableheaderChecking设置,并在设置为HttpResponseHeader.MaybeEncodeHeader
时调用true
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无效),因此始终报告此类问题。