Как я могу заставить мой браузер игнорировать `<noscript>` tag content even when javascript is disabled? </noscript>

852
Mindwin

Being a bit over conscious, My browsers have a whitelist for javascript they can run. But <noscript> tag content can give away this preference of mine, because the browser then attempts to load those pesky analytics 1x1 images.

Is there a way to make a browser ignore[1] this content even when javascript is disabled?

I do not mention which browser because I can swap open source browsers if needed. Chromium, Firefox, Opera, etc. So answers that address a single browser are fine.


[1] By "ignore" I mean don't make requests for bait content that will give away javascript-disabled status. I can put up a userscript that deletes <noscript> from the DOM, but by then it might be too late.

2
Если не считать этого, у вас не будет выбора. Конечно, вы можете попробовать использовать настоящие NoScript или AdBlockers, которые обычно также блокируют эти вещи. Если вы действительно хотите изменить поведение браузера на таком фундаментальном уровне, вам, вероятно, придется свернуть свое собственное. Seth 7 лет назад 1
@Set браузеры слишком разрешительны (неразборчиво?). Они делают (много) вещей за вашей спиной, которые вы бы предпочли не допустить, если бы знали, что это было. Но [Столлман предупредил нас] (http://www.theregister.co.uk/2009/03/23/stallman_javascript_warning/) уже несколько раз. Mindwin 7 лет назад 0
@ Seeth ABP работает, но я должен занести в черный список один за другим. NoScript не очень много для ` Mindwin 7 лет назад 0

3 ответа на вопрос

1
George

Вы имеете в виду любопытный код вроде:

<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.webRequest для описания API браузера Chrome для просмотра, изменения или блокировки запросов в полете.

Вот рабочий пример:

manifest.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 } 

script.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 $`); return ; }  chrome.webRequest.onBeforeRequest.addListener( checkUrl,, ['blocking'] ); 

Используйте все, что вы хотите для значка. Или удалите его, и пусть браузер предоставит фиктивный. Его единственная роль заключается в выделении записи расширения на chrome://extensionsстранице.

Расширение отлично работало на рассматриваемой странице. Журнал консоли страницы содержит сообщение об ошибке net::ERR_BLOCKED_BY_CLIENTдля получения изображения. Аналогично, красная линия сбоя на вкладке Сеть.

Кроме того, предварительная фильтрация URL работает хорошо. JavaScript вызывается только для определенного URL-адреса отслеживания. Проверяя консоль расширения, я не вижу сообщений "Passing ...", даже когда захожу на Facebook.

0
Seth

Я не уверен, где вы на самом деле обеспокоены информацией о том, включен ли в вашем браузере JavaScript или нет. Вы правы в том, что некоторые браузеры делают больше, чем хотелось бы некоторым. Статья, на которую вы ссылались в одном из ваших комментариев, на мой взгляд, имеет другую тему, чем ваш вопрос.

Что касается заявленного сценария в вашем вопросе, это обычная работа браузера для запроса ресурсов, которые являются частью страницы. Браузер не знает о фактических данных, которые загружаются с URL-адреса, просто просматривая его, и поэтому не сможет обнаружить один за другим пиксель отслеживания перед его фактической загрузкой. Это также ничего не делает ваш браузер "за вашей спиной", и вы, вероятно, больше беспокоитесь о третьей стороне, которая поставила эту графику, чем ваш браузер.

Решения, которые я вижу в этом вопросе (прямо сейчас), следующие:

  • Заблокировать все запросы от чужих доменов. Вы, кажется, уже знаете о наборе инструментов, который может это сделать. Вы можете, например, использовать RequestPolicy и установить область соответственно. Это не защитит вас от отслеживания пикселей, которые доставляются с того же домена, который вы посещаете.
  • Используйте что-то вроде скрипта GreaseMonkey или аналогичного, чтобы изменить DOM и удалить noscriptдеталь. В зависимости от того, когда этот скрипт загружен, может быть слишком поздно, и ваш браузер также может попытаться предварительно его кэшировать. В этом может помочь следующий вопрос: как запустить скрипт greasemonkey перед отображением содержимого страницы?
  • Используйте текстовый браузер.
  • Разветвите свой любимый браузер и измените его, чтобы не оценивать часть noscript. Это, вероятно, самый безопасный вариант, но также и самый сложный.

На некоторых сайтах noscriptтег может содержать ценную информацию для вас. Поскольку вы не сможете разглядеть природу этого контента, не просмотрев его, потенциально загружая дополнительные ресурсы, похоже, что здесь нет хорошего способа определить «плохой» контент. За исключением некоторых действительно субъективных правил.

Более того, если вы беспокоитесь об отслеживании, а не о том, когда у вас включен JavaScript или нет, есть гораздо больше технологий, которые могут вас раскрыть. Как элемент `canvas ', Flash и куки. Таким образом, вопрос заключается в том, какова ваша настоящая цель, игнорируя этот раздел страницы, когда многие другие компоненты могут быть столь же опасными.

0
g.rocket

Если вы используете uBlock Origin, фильтр

##noscript 

должно работать, хотя я не проверял это. Фильтры источника uBlock запускаются до того, как страница будет оценена, поэтому это должно предотвратить выбор этих элементов.

Похожие вопросы