我正在使用 Go + gorilla/mux v1.4 框架开发一个 RESTful Web 应用程序。发布后的一些基本安全测试揭示了应用程序中的开放 URL 重定向漏洞,该漏洞允许用户使用外部 URL 提交特制请求,导致服务器以 301 重定向响应。
我使用Burp Suite对此进行了测试,发现任何重定向到应用程序中外部 URL 的请求似乎都以 301 Moved Permanently 响应。我一直在寻找在发送 301 之前拦截这些请求的所有可能方法,但这种行为似乎已融入 net/http 服务器实现。
这是发送到服务器的原始请求 (myapp.mycompany.com:8000):
GET http://evilwebsite.com HTTP/1.1
Accept: */*
Cache-Control: no-cache
Host: myapp.mycompany.com:8000
Content-Length: 0
任何时候的响应都是:
HTTP/1.1 301 Moved Permanently
Location: http://evilwebsite.com/
Date: Fri, 13 Mar 2020 08:55:24 GMT
Content-Length: 0
尽管检查了 request.URL 以防止在 http.handler 中发生这种类型的重定向,但我没有任何运气让请求到达处理程序。似乎基本 http 网络服务器正在执行重定向,但不允许它访问我在 PathPrefix("/").Handler 代码中定义的自定义处理程序代码。
我的目标是确保应用程序针对此类请求返回 404-Not Found 或 400-Bad Request。有没有其他人遇到过大猩猩/多路复用器的这种情况。我在一个 Jetty 网络应用程序上进行了同样的尝试,发现它返回了一个完全有效的 404。我已经在这工作了几天,并且真的可以使用一些想法。