javascript - 使用 & 号和不使用前端 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);
});
甚至没有调用该路线。
如何跟踪已经包含?
和&?
解决方案
感谢评论,这是一种方法:
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 。
推荐阅读
- algorithm - 图算法 DFS / BFS 的实现有一些障碍
- javascript - 使用 Twilio 验证和 Twilio 函数错误的无服务器电话验证
- python - 我无法使用 pip 安装 numpy 或 pandas
- concurrency - 预期并发异常
- java - 平铺背景上的 LibGDX 9 补丁图像
- arrays - 检索数据和平均值的对象数组
- react-native - react-native-network-info 'null 不是对象'
- tomcat - Quartz - 无法重新启动调度程序
- sql - 如何获取上一年的数据?
- c - SystemCall 用于处理和显示 PID、名称及其状态的表