Skip to main content

12.完全开放重定向(JS location.assign)

完全开放重定向是一种安全漏洞,它允许攻击者通过构造恶意链接将用户重定向到任意 URL。在本例中,我们将介绍使用 JavaScript 的location.assign方法来实现完全开放重定向。

示例代码:#

location.assign是 JavaScript 的一个方法,用于将浏览器的当前位置重定向到新的 URL。它类似于用户在浏览器地址栏中输入一个 URL 并按下回车键。这个方法将导致浏览器加载新的 URL 并显示其内容。

{    DefaultQuery: "redirect=/redirect/main",    Path:         "/redirect/js/basic2",    Title:        "完全开放重定向(JS location.assign)",    Handler: func(writer http.ResponseWriter, request *http.Request) {        var u = LoadFromGetParams(request, "redirect")        DefaultRender(`        <h2>Open Redirect With JS</h2>        <a href=`+strconv.Quote(u)+`>Click ME JUMP NOW (3s)</a>        <script>            setTimeout(function() {                window.location.assign(`+strconv.Quote(u)+`);            }, 3000)        </script>        `, writer, request)    },    RiskDetected: true,}

攻击示例:#

http://127.0.0.1:8787/ssrf/redirect/js/basic2?redirect=http://127.0.0.1:8787/ssrf/flag

当用户点击这个链接时,页面将显示一个倒计时 3 秒的链接“Click ME JUMP NOW (3s)”。 在倒计时结束后,JavaScript 将调用window.location.assign,并将用户重定向到恶意站点http://127.0.0.1:8787/ssrf/flag

防御措施:#

  • 验证和过滤目标 URL: 在重定向操作中,始终对用户提供的目标 URL 进行严格验证,只允许合法的、事先认证过的 URL 进行重定向。
  • 白名单验证: 维护一个允许重定向的目标 URL 白名单,只允许重定向到可信的 URL。
  • 避免直接使用用户输入: 尽量避免直接使用来自用户的输入作为重定向的目标,这可能会被恶意构造。

靶场演示: 视频#