Почему блокировщики рекламы блокируют BLOB-объекты?

Блокировщики рекламы блокируют все новые открытые вкладки, если контент представляет собой большой двоичный объект. Я предполагаю, что в этом есть какая-то причина, но я не могу ее понять. Я не думаю, что в больших двоичных объектах есть что-то особенно небезопасное, иначе браузер сам заблокировал бы их, так что почему блокировщики рекламы делают это, даже не давая вам возможности просмотреть их?

Вот скрипт, так как он не работает правильно, используя фрагмент кода Stack Overflows:

https://jsfiddle.net/Pharylon/dqjtha81/32/

const myString = "Hello World!";
const blob = new Blob([myString], {
  type: 'text/plain'
});
const fileURL = URL.createObjectURL(blob);
const myLink = document.getElementById("blob-link");
myLink.setAttribute("href", fileURL);
myLink.style.display = "block";

document.getElementById("my-div").innerText = myLink;
<p>
  The following won't open if you have an adblocker:
</p>

<a style="display: none" id="blob-link" href="" target="_blank">Click Me!</a>

<p>
  But you can manually copy/paste this and it'll work:
</p>

<div id="my-div"></div>

https://jsfiddle.net/Pharylon/dqjtha81/32/

Опять же, мой вопрос заключается в том, почему блокираторы делают это. Спасибо!


person Pharylon    schedule 10.07.2018    source источник
comment
подозреваю, что кто-то использует капли, чтобы обойти рекламные фильтры....   -  person epascarello    schedule 10.07.2018
comment
Я предполагаю, что это сделано для того, чтобы рекламодатели не могли обойти блокировщик рекламы с помощью Javascript, отображающего блоб.   -  person Barmar    schedule 10.07.2018
comment
У меня есть смутное воспоминание о недавнем вопросе, связанном с тем, что браузеры обычно переходят на блокировку URL-адресов данных в окнах верхнего уровня.   -  person Pointy    schedule 10.07.2018
comment
@epascarello Но если ссылка не является BLOB-объектом, они, по крайней мере, дают вам возможность просмотреть их. Так почему бы не разрешить это с блобами?   -  person Pharylon    schedule 10.07.2018
comment
@Pointy Blobs и URL-адреса данных — это разные вещи.   -  person Pharylon    schedule 10.07.2018
comment
@Pharylon Вы ведете себя так, как будто люди из stackoverflow имеют какой-либо контроль над этим ... Мы можем только предполагать ....   -  person epascarello    schedule 10.07.2018
comment
@epascarello Я просто думаю, что кто-то знает, почему. Вы сказали, что догадались, что они использовались для обхода фильтров, я указываю, что URL-адрес большого двоичного объекта по-прежнему содержит адрес хоста, поэтому они вообще не смогут обойти фильтры.   -  person Pharylon    schedule 10.07.2018
comment
Правила, используемые блокировщиками рекламы, граничат с полным колдовством.   -  person tadman    schedule 10.07.2018
comment
@Pharylon конечно, но если кто-то считает, что URL-адрес данных плохой, похоже, что URL-адрес BLOB-объекта попадет под такое же рассмотрение.   -  person Pointy    schedule 10.07.2018
comment
Кто-то написал правило, которое его блокирует. Человек, написавший общее правило, знает причину. Точно так же, как в один прекрасный день весь мой контент на сайтах исчез, потому что добавили фильтр по названию класса, который не имел ничего общего с рекламой. Почему они это сделали? Предположительно, кто-то использовал его для рекламы, и они заблокировали его, что вызвало проблемы у всех остальных. Правила — это не что иное, как сопоставление с образцом, поэтому что-то в нем соответствует увиденному образцу, и они его блокируют. Я уверен, что на форумах adblock есть много жалоб.   -  person epascarello    schedule 10.07.2018


Ответы (1)


Это объяснение содержится в популярном черном списке easylist.txt:

! Used with many websites to generate multiple popups
|blob:$popup
|data:text$popup
|dddata:text$popup

Это также упоминается в выводе uBlock Origin, который использует легкий список (среди прочего):

введите здесь описание изображения


В качестве конкретного примера, когда большие двоичные объекты использовались в сочетании с WebSockets для обойти все блокировщики рекламы в это время, см. фрагмент кода из проблема с uBlock Origin (только в переформатированном виде):

AdDelivery.prototype.createWW = function() {
    var b = "self.onmessage=function(a){
    self.debug = " + this.debug + ';self.wsurl="
    ' + this.websocketURL + '
    ";self.initWS=

    function(b) {
        self.ws = new WebSocket(b);
        self.ws.onerror = function(c) {
            self.log(
                "Websocket error: " + c);
            postMessage(null)
        };
        self.ws.onopen = function(c) {
            self.log("Websocket connected")
        };
        self.ws.onmessage = function(c) {
            self.log("Websocket received msg.");
            postMessage(c.data)
        }
    };
    self.requestAds = function(b) {
        if (self.ws.readyState !== 1) {
            setTimeout(function() {
                self.log("Waiting for connection");
                self.requestAds(b)
            }, 100)
        } else {
            ws.send(b)
        }
    };
    self.log = function(b) {
        if (self.debug) {
            console.log(b)
        }
    };
    if (!self.ws) {
        self.initWS(self.wsurl);
        self.log("Initializing websocket")
    } else {
        self.log("Websocket already connected")
    }
    self.requestAds(a.data)
};
';
this.blob = new Blob([b], { type: "application/javascript" });
this.ww = new Worker(URL.createObjectURL(this.blob)); return };
person Philipp Claßen    schedule 10.08.2018