我怎样才能让我的浏览器忽略`` tag content even when javascript is disabled?

我怎样才能让我的浏览器忽略`` tag content even when javascript is disabled?

我的浏览器有点过于谨慎,它们有一个可以运行的 JavaScript 白名单。但<noscript>标签内容可能会泄露我的偏好,因为浏览器随后会尝试加载那些令人讨厌的 1x1 分析图像。

有没有办法让浏览器即使在禁用 JavaScript 时也忽略[1]此内容?

我没有提到哪种浏览器,因为如果需要我可以更换开源浏览器。Chromium、Firefox、Opera 等。所以针对单个浏览器的答案就可以了。


[1] 我说的“忽略”是指不要请求那些会泄露javascript 已禁用状态。我可以放一个<noscript>从 DOM 中删除的用户脚本,但到那时可能已经太晚了。

答案1

你的意思是像这样的恶意代码:

<noscript>
    <img height="1" width="1" alt="" style="display:none"
     src="https://www.facebook.com/tr?id=redacted&ev=PageView&noscript=1">
</noscript>

??

我不知道如何关闭对 的评估<noscript>,但在上面的例子中,你可以编写一个简短的浏览器扩展来取消任何带有包含子字符串 的 url 的请求facebook.com/tr?

chrome.web请求有关 Chrome 浏览器监视、修改或阻止正在进行的请求的 API 的描述。

这是一个有效的例子:

清单.json:

{
"name": "Website Blocker",
"description": "Keeps the browser from fetching tracking URLs",
"version": "1.0",
"manifest_version": 2,
"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.facebook.com/tr?*"
],
"background": {
    "scripts": [
        "script.js"
    ],
    "persistent": true
},
"icons": {
    "256": "world-blocker.png"
},
"converted_from_user_script": true
}

脚本.js:

"use strict"

console.log("Website Blocker is running!");
var re = new RegExp('https?://.*?\.?facebook.com/tr\?', 'i');

function checkUrl(details) {
    var cancel = !!details.url.match(re);
    if (!cancel)
        console.log(`Passing ${details.url}`);
    return {cancel: cancel};
}

chrome.webRequest.onBeforeRequest.addListener(
    checkUrl,
    {urls: ['*://*.facebook.com/tr?*']},
    ['blocking']
);

图标可以随意使用。或者删除它,让浏览器提供一个虚拟图标。它的唯一作用是在页面上突出显示扩展程序的条目chrome://extensions

扩展程序在相关页面上运行良好。页面的控制台日志显示net::ERR_BLOCKED_BY_CLIENT图像获取错误消息。同样,网络选项卡中出现红色故障线。

此外,URL 预过滤运行良好。JavaScript 仅针对特定跟踪 URL 进行调用。检查扩展的控制台,我没有看到“正在传递...”消息,即使我访问 Facebook 时也是如此。

答案2

我不确定您真正关心的是浏览器是否启用了 JavaScript 的信息。您说得对,某些浏览器的功能比某些人希望的要多。文章在我看来,你在一条评论中链接的主题与你的问题不同。

就您问题中所述的情况而言,浏览器请求页面资源是正常的操作。浏览器无法通过查看 URL 来获知正在加载的实际数据,因此无法在实际加载之前检测到逐个跟踪像素。这也不是您的浏览器“背着您”所做的,您可能更关心提供该图形的第三方,而不是您的浏览器。

就此事而言,我能想到的解决方案如下(目前):

  • 阻止来自外部域的所有请求。您似乎已经知道可以做到这一点的工具集。例如,您可以使用 RequestPolicy 并相应地设置范围。但这不会保护您免受从您正在访问的同一域传递的像素的跟踪。
  • 使用 GreaseMonkey 脚本或类似脚本来修改 DOM 并删除该noscript部分。根据此脚本的加载时间,可能为时已晚,您的浏览器也可能会尝试预先缓存它。以下问题可能对此有所帮助:如何在页面内容显示之前运行greasemonkey脚本?
  • 使用文本浏览器。
  • 分叉您最喜欢的浏览器并修改它以不评估 noscript 部分。这可能是最安全的选择,但也是最复杂的。

在某些网站上,noscript标签可能包含对您有价值的信息。由于您无法在不查看内容的情况下辨别内容的性质,因此可能会加载其他资源,因此似乎没有很好的方法来识别“不良”内容。除非有一些非常主观的规则。

此外,如果您担心跟踪,而不是担心是否启用了 JavaScript,那么还有更多技术可能会暴露您的信息。例如“canvas”元素、Flash 和 cookie。因此,问题在于,当许多其他组件可能同样危险时,您忽略页面的该部分的真实目的是什么。

答案3

如果你使用 uBlock Origin,过滤器

##noscript

应该可以工作,尽管我还没有测试过。uBlock 源过滤器在页面评估之前运行,因此这应该阻止这些元素被获取。

相关内容