首页 > 解决方案 > 使用 & 号和不使用前端 javascript 跟踪链接点击

问题描述

我在我的 NodeJS 应用程序中提供了指向外部网站的链接。这些需要花费大量精力才能找到,我想跟踪点击次数。我更喜欢避免使用前端 JavaScript,因为我在浏览器中禁用了它。到目前为止,我一直在使用查询参数,例如:

router.get('/redir', async (req, res) => {
  let url = req.params.url;
  // my own tracking logic
  // ...
  res.redirect(url);
});

对于已经包含 GET 参数、问号和 & 符号的链接,此代码将失败。我试过这个:

router.get('/redir/:url', async (req, res) => {
  let url = req.params.url;
  res.redirect(url);
});

甚至没有调用该路线。

如何跟踪已经包含?&?

标签: javascriptnode.jsurlredirecturl-routing

解决方案


感谢评论,这是一种方法:

router.get('/redir', async (req, res) => {
  let url = req.originalUrl.replace("/redir?url=", "");
  // logic: verify that this redirect is authorized to avoid Open Redirect and phishing.
  if (authorizedUrls.includes(url)) {
    return res.redirect(url);
  }
  return res.redirect("/404");
});

您应该检查 URL 是否被授权以避免Open Redirect,这是一种高度危险的网络钓鱼方式,列为Common Weakness Enumeration 601

CWE-601:URL 重定向到不受信任的站点(“打开重定向”)

Web 应用程序接受用户控制的输入,该输入指定指向外部站点的链接,并在重定向中使用该链接。这简化了网络钓鱼攻击。扩展描述 http 参数可能包含一个 URL 值,并可能导致 Web 应用程序将请求重定向到指定的 URL。通过将 URL 值修改为恶意站点,攻击者可能会成功发起网络钓鱼诈骗并窃取用户凭据。由于修改后的链接中的服务器名称与原始站点相同,因此网络钓鱼尝试具有更可信的外观。

来源:https ://serverfault.com/questions/1049139/name-and-severity-of-this-type-of-redirect-fraud/1049141#1049141 。


推荐阅读