我想example.com/page/../other-page
在我的 IIS 网站中禁用目录遍历(甚至是真实页面)。我已经尝试使用自定义响应进行请求过滤和 URL 重写。
denyUrlSequences
请求过滤部分的 Microsoft 文档实际上..
用作示例:
以下示例
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 上对此进行了测试,我想它也存在于每个中间版本中。
- 什么是规范化?(可能是这个图书馆?)
- 它什么时候发生在请求生命周期中?
- 如何在不打开一些安全漏洞的情况下成功阻止以下序列?
..
,./
, 和//
Internet 搜索只想告诉我旧版本 IIS 中的一个大约 2000 年的漏洞,或者如何启用带有点的 MVC 路由。
调试说明:如果您用于curl
测试此行为,请确保添加该--path-as-is
选项,因此它不会在客户端进行规范化。一些浏览器似乎也在进行客户端规范化。
使用说明:我名义上是试图关闭,example.com/clubs-baby-seals/../about-us
以免有人将链接的成功加载作为对封印虐待的认可。