笔记:
与以前的修订版相比,这个问题的范围扩大了。我试图简化这个问题,以便任何人都可以轻松地复制它。
使用Fiddler,我可以在从 HTTP 请求中删除我的标头后将任意请求重播到我的默认页面Authorization
,并且我能够获得200 OK
包含有效数据的响应。
赏金更新
以下是重现此确切行为的步骤:
1.在 ASP.NET 中创建一个“新网站”,随意命名为“InsecureWebsite”
2.编辑web.config
以拒绝所有未经身份验证的用户:
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
3.将网站发布到 DEV 服务器上的任意目录,并为应用程序创建一个虚拟目录
4.确保应用程序已启用脚本访问 (.ASP) 和集成 Windows 身份验证
5.打开Fiddler抓取流量
6.在您喜欢的浏览器中加载页面并查看Fiddler中的“Inspectors”选项卡,您将看到类似于以下内容的请求:
获取/不安全网站/ HTTP/1.1 主机:dev.subdomain.example.com 用户代理:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) 接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 接受语言:en-us,en;q=0.5 接受编码:gzip,deflate 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7 保活:300 连接:保持活动 授权:NTLM {Base64 编码的认证数据}
初始请求Default.aspx
将返回 a 401 Unauthorized
,将进行协商,然后最终返回 a 200 OK
。
然后,在 Fiddler 中,我可以Authorization
直接从重播的请求中删除标头,Default.aspx
并且仍然获得200 OK
. 这怎么可能?
解决方案
事实证明,Fiddler 在发出请求时使用相同的底层连接,因此一旦连接通过身份验证,同一连接上的任何请求也将被验证为与初始请求相同的用户。您可以在此处在 Fiddler 中关闭此功能:
Fiddler 选项截图 http://john.cognitivedelay.com/images/fiddler-options.gif
一旦取消选中,来自 Fiddler 的任何重放请求都将返回 a401 Unauthorized
我所期望的。
感谢所有提供时间回复的人!