10.完全开放重定向(JS location.href)
完全开放重定向漏洞是一种存在于应用程序中的安全漏洞,攻击者可以利用该漏洞通过构造恶意的 URL 来将用户重定向到恶意网站或内容。在这种情况下,重定向是通过 JavaScript 的location.href属性实现的,使页面在一定时间后自动进行重定向
示例代码:
以下是一个示例漏洞代码,展示了一个使用location.href进行重定向的漏洞:
{
DefaultQuery: "redUrl=/redirect/main",
Path: "/redirect/js/basic",
Title: "完全开放重定向(JS location.href)",
Handler: func(writer http.ResponseWriter, request *http.Request) {
var u = LoadFromGetParams(request, "redUrl")
DefaultRender(`
<h2>Open Redirect With JS</h2>
<a href=` + strconv.Quote(u) + `>Click ME JUMP NOW (3s)</a>
<script>
setTimeout(function() {
window.location.href = ` + strconv.Quote(u) + `;
}, 3000);
</script>
`, writer, request)
},
RiskDetected: true,
}
攻击示例:
攻击者可以构造一个恶意链接,其中包含恶意的重定向 URL:
http://127.0.0.1:8787/ssrf/redirect/js/basic?redUrl=http://127.0.0.1:8787/ssrf/flag
防御措施:
- 白名单验证: 维护一个合法 URL 的白名单,只允许重定向到已知的受信任 URL。
- 避免直接执行用户输入的 JavaScript: 尽量避免直接执行用户输入的 JavaScript 代码,特别是在重定向过程中。
- 避免用户提供重定向 URL: 如果可能的话,避免直接使用用户提供的 URL 进行重定向,而是使用内部的标识符,然后在后端进行转换。
- 安全编码实践: 开发人员应遵循安全编码实践,确保在使用 JavaScript 时对用户输入进行适当的验证和编码。