我正在用 Flask 建立一个个人网站。为了测试它,我想请求localhost/foo/../bar
。但是,当我导航到此 URL 时,Firefox 会自动重写它并localhost/bar
改为请求。即使我使用网络工具编辑和重放请求,也会发生这种情况。
我的代码应该专门拒绝包括 的路径..
,因为它们可能导致目录遍历攻击。但是,我需要通过发送此类“不良”请求来测试我的代码。
如何/../
使用 Firefox 请求带有片段的 URL?
答案1
建立在Giacomo1968 的回答,您可以使用 curl 来执行此操作。但是,您需要添加--path-as-is
以防止它解析/../
s。
curl -ILk --path-as-is localhost/foo/../bar
请参阅 Giacomo1968 的回答以获取更多有用信息。
答案2
不要依赖 GUI 网络浏览器来调试服务器行为。
GUI 网络浏览器经过优化,可以显示内容并缓存内容以便快速检索;不一定调试基于网络服务器的基本行为。
好吧,Firefox 是一个 GUI(又名:人性化)浏览器,如果你想测试它,最好只使用终端中的 Curl 进行标头请求,以测试应用程序的行为方式。运行此 Curl 命令并查看标头输出:
curl -ILk http://localhost/foo/../bar
此外,虽然我认为在应用程序中加强 URL 访问以防止目录遍历是件好事,但这些内容通常由反向代理整个应用程序的 Web 服务器来处理。
查看这篇博文:它解释了merge_slashes
Nginx(Python 和 Ruby 应用程序最常用的 Web 服务器)的工作原理,以便更好地理解,在您不知情的情况下,Nginx 默认意味着merge_slashes on
完全无法进行任何目录遍历。