我的单页应用程序(SPA)中的一些URL包含敏感信息,例如访问令牌、用户信息等。
例如:
/callback#access_token=HBVYTU2Rugv3gUbvgIUY
/?email=username@example.com
我看到hotjar可以抑制DOM元素和图像的跟踪数据。是否可能隐藏URL中的参数,或者至少禁用某些页面的跟踪?
我的单页应用程序(SPA)中的一些URL包含敏感信息,例如访问令牌、用户信息等。
例如:
/callback#access_token=HBVYTU2Rugv3gUbvgIUY
/?email=username@example.com
我认为合理的假设是跟踪脚本会尝试访问window.location.href
或类似的内容,以获取它们将要存储的当前网址。
因此,可能的解决方案是创建一个动态作用域,其中window.location.href
具有不同的值(过滤掉所有敏感信息)。
以下是其工作原理:
// get the tracker script as a string, so you can eval it in a dynamic scope
let trackerScript = 'console.log("Tracked url:", window.location.href)';
// now lets lock it up
function trackerJail(){
let window = {
location: {
// put your filtered url here
href: "not so fast mr.bond"
}
}
eval(String(trackerScript))
}
trackerJail()
eval
。但是我不确定您是否可以指望跟踪器脚本被包装在您可以修改的整洁函数中。如果您控制脚本的页面和顺序,那么您可以在其他任何人获取数据之前从url中读取数据然后将其删除。
proofOfConcept.html
<script id="firstThingToLoad.js">
console.log(window.location.href);
const keyRegex = /key=[^&]*/;
const key = window.location.href.match(keyRegex);
console.log("I have key", key);
const href = window.location.href.replace(keyRegex, "");
history.replaceState({}, "", href);
</script>
<script id="someSnoopyCode.js">
console.log("I'm snooping: ", window.location.href);
</script>
<body>
<a href="/?key=secret">Link to private</a>
</body>
/foo/bar/
意味着应将foo
替换为bar
,在我们的情况下,我们想要删除给定的片段,因此是/foo//
。/callback#access_token=[a-zA-Z0-9]{15}//
同样地,对于URL的电子邮件部分也是如此。
/\?email=(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])//
这个第二个正则表达式部分来自 如何使用正则表达式验证电子邮件地址?