【发布时间】:2019-05-13 16:04:57
【问题描述】:
我想在我的 IIS 网站中禁用像 example.com/page/../other-page(甚至是真实页面)这样的目录遍历。我已经尝试使用自定义响应进行请求过滤和 URL 重写。
关于请求过滤的denyUrlSequences 部分的Microsoft 文档实际上使用.. 作为an example:
以下示例
Web.config文件将拒绝访问三个 URL 序列。第一个序列防止目录遍历,[…]<configuration> <system.webServer> <security> <requestFiltering> <denyUrlSequences> <add sequence=".." /> [...]
……但它不起作用;在拒绝规则运行之前,example.com/page/../other-page 已经变为 example.com/other-page。您可以通过为page/sub 设置拒绝规则并访问example.com/page/./sub-page 来证明这一点。规范化路径被规则阻止,但在原始状态下不会匹配。
我已经在 IIS v7.5 和 v10 上对此进行了测试,我想它也存在于每个中间版本中。
- 什么是标准化? (可能是this library?)
- 在请求生命周期中什么时候发生?
- 如何在不打开一些安全漏洞的情况下成功阻止以下序列?
..、./和//
互联网搜索只想告诉我旧版本 IIS 中的一个大约 2000 年的漏洞,或者如何启用带有点的 MVC 路由。
调试说明:如果您使用curl 来测试此行为,请确保添加--path-as-is 选项,这样它就不会在客户端进行规范化。一些浏览器似乎也在进行客户端规范化。
使用说明:我名义上是在尝试关闭example.com/clubs-baby-seals/../about-us,以免有人获取链接的成功加载作为对印章虐待的认可。
【问题讨论】:
标签: iis iis-10 directory-traversal