AdBlocker

AdBlocker und deren Funktionsweise

Jeder kennt das: Man möchte sich in Ruhe ein YouTube-Video anschauen, doch bevor das Video startet, muss man sich 20 Sekunden Werbung anschauen. Unangenehm für den Nutzer, Webseitenbetreiber argumentieren jedoch, dass Sie sich über diese Werbung finanzieren und nur so kostenlos Ihr Angebot zur Verfügung stellen können. Abhilfe hierfür verschaffen da sogenannte AdBlocker.

Wer noch nie zuvor etwas von AdBlockern gehört hat, hat es vielleicht in den letzten Wochen. Zuletzt waren AdBlocker in Verbindung mit der BGH-Entscheidung bezüglich der u.a. wettbewerbsrechtlichen Zulässigkeit von AdBlockern in den Medien.

AdBlocker ist eine Kurzform für „Advertisement Blocker“ und heißt übersetzt soviel wie „Werbeblocker“. In jedem handelsüblichen Internetbrowser kann man einen AdBlocker als Plugin installieren. Doch neben der Möglichkeit mit dem Blocken über die Plugins können Werbungen auch schon auf der Routerseite blockiert werden. Ich werde mich in diesem Rahmen allerdings nur auf die Plugins beziehen.

Content Security Policy

Content Security Policy ist ein Sicherheitskonzept, welches bei jedem Seitenaufruf überprüft und entscheidet, welche Inhalte angezeigt werden oder nicht. Kontrolliert werden hier vor allem die Metadaten, welche Aufschluss darüber geben, ob ein Datensatz von einem anderen Server als von dem der eigentlichen Website geladen wird. Das soll ein Einschleusen von Daten Dritter und das Ausspionieren erschweren.

AdBlocker bauen auf diese Technologie auf (es ist also keine „neue“ oder „eigene“ Technologie nur für das Blockieren der Werbungen). Der Nutzer entscheidet und kann einstellen, wann was blockiert wird. Er setzt Regeln fest. Der AdBlocker funktioniert dann als ein Filter, der mit Hilfe von einem hinterlegten Datenpool und festgelegten URLs/Widgets/Quellen nach jenen sucht und diese beim Fund dann ausblendet. Oft sind Webseiten nach einem ähnlichen Codemuster aufgebaut (Funktionen tragen oft eine ähnliche Beschreibung), was das Filterprinzip wesentlich einfacher macht.

Blockademöglichkeiten

Unterm Strich gibt es drei Möglichkeiten, Werbungen zu blockieren:

  1. Anfragen („Requests“) von bestimmten Webseiten blockieren
    • Hier werden schon im Vorfeld Server, von denen erfahrungsgemäß Werbungen geschaltet werden, blockiert.
    • z.B. „third-party-tracking“ kann so verhindert werden
    • Da, weniger Code geladen wird, baut sich so die Webseite schneller auf
  2. Inhalte verstecken
    • Die gesamte Webseite wird geladen, allerdings werden betroffene Werbeanzeigen einfach für den Anwender versteckt
    • Hier greift der Code des AdBlockers auf CSS-Ebene auf den Code der Webseite zu und erkennt und versteckt die Werbeinhalte
    • Die Webseite wird allerdings immer noch vollständig geladen; also keine performanten Vorteile
  3. Blockieren von standardisierten Bildformaten
    • man geht davon aus, dass Werbung in quasi standardisierten Größen als den selben Stellen (Banner) platziert werden
    • gängige Formate (wie z.B. 728×90, 300×250, usw.) können dann gezielt blockiert werden
    • allerdings besteht die Gefahr, dass Elemente, die nur zufällig den Kriterien entsprechen, auch blockiert werden

Perceptual AdBlocking

Da die oben angesprochenen Methoden noch kleine Mängel aufweisen, versucht man beim Erkennen von Werbeanzeigen auf die Kennzeichnungspflicht von Werbungen aufzubauen. Das soll dann zu einer zuverlässigeren und besseren Erkennung von Werbungen führen. Dabei soll schon der Hinweis auf eine mögliche Werbung oder das „Kreuzchen“ für das Schließen des Fensters schon für das Blockieren ausreichen. Außerdem bieten Möglichkeiten aus der Psychologie und des Designs eine Lösung für das Blockieren von Werbungen. Dafür werden die Vorgehensweisen der Werbebranchen analysiert und in den AdBlocker eingebunden.

Das sog. Perceptual AdBlocking ist eine Technologie, die diese Methoden zu ihren Gunsten anwendet. Unter Anderem bedient sie sich der optischen Zeichenwahrnehmung und analysiert die Inhalte so, wie sie ein Mensch wahrnehmen würde, anstatt sich nur auf den Code zu beziehen.

„Malvertising“ und Browserabhängigkeit

Ein Browser Plugin funktioniert generell nur in dem Browser, in dem es installiert ist. Das gilt also auch für die AdBlocker. Wenn man also mehrere Browser nutzt, müsste man die Liste der Filter möglicherweise selbst erweitern und jeden Eintrag in den jeweilige Browsern einzeln vornehmen.

Oft müssen sich die Webseitenbetreiber vorwerfen lassen, dass die geschaltete Werbung Viren einschleust. Häufig haben die Anbieter von Webseiten nämlich keine Kontrolle über die eingeblendete Werbung, da diese mit Hilfe von sog. „Ad-Servern“ direkt beim Aufruf der Webseite aus einem Pool an Anzeigen geladen werden. In diesem Pool sind auch teilweise schädliche Werbeanzeigen (sog. Malvertising) hinterlegt, die dann auf der Webseite angezeigt werden. Diese können den Rechner direkt mit einer schädlichen Software (sog. Malware) infizieren oder auf eine andere Webseite, welche infiziert ist, weiterleiten. AdBlocker blockieren zwar auch solche Werbeanzeigen, können aber nicht vollständig verhindern, dass etwas Schädliches heruntergeladen wird. Man sollte deshalb immer auch ein Anti-Viren-Programm installiert haben.

Beispielcode eines AdBlockers

Natürlich gibt es unterschiedliche AdBlocker die auch einen unterschiedlichen Code haben mit welchem sie operieren. Doch im Grunde basieren alle auf einem ähnlichen Codemuster.

Gehen wir von Folgendem aus: wir haben einen Datensatz „F“, welcher aus „f“ Filtern besteht. Außerdem habe wir eine Zeichenkette (eine Adresse) „S“ der Länge „n“. Der AdBlocker soll nun herausfinden, ob die Zeichenkette zu einem der Filter passt. Ist das der Fall, so soll diese Adresse und das zugeordnete Element blockiert werden. Der einfachste Code für die Lösung könnte folgender sein:

function getMatchingFilter1(S, F)
  for each filter in F
    if (filter matches S)
      return filter
    end if
  end for

  return null
end function

Die Komplexität dieses Codes ist verhältnismäßig sehr groß, da die Leistung von der Anzahl der festgelegten Filter abhängt. Die Laufzeit ist somit mit O(n*f) zu beschreiben. Um die Leistung zu verbessern versucht man als logischen Schritt, die Liste der Filter zu komprimieren, was aber dazu führen würde, dass vor allem große und unverständliche und zu allgemeine Filterkriterien festgelegt würden.

Natürlich gibt es auch sehr viel performantere AdBlocker-Codes. Da die weitere Herleitung eines genaueren Codes allerdings zu viel Zeit in Anspruch nehmen und den Rahmen des Portfolios sprengen würde, ist hier ein genauerer Artikel verlinkt, in dem ein Code für einen der führenden AdBlocker-Anbieter erklärt und basierend auf dem Code oben hergeleitet wird.

Erkennen von AdBlockern

Laut dem Urteil des BGH geht man davon aus, dass „der Kläger in der Lage ist, sich gegen Werbeblocker zu wehren“.

Es kommt manchmal vor, dass man eine Webseite aufruft und ein Fenster erscheint, welches etwas sagt wie z.B.: „Sie benutzen einen AdBlocker. Schalten sie diesen aus um den vollständigen Inhalt anzuzeigen.“ Die Webseitenbetreiber sind also in der Lage, einen AdBlocker zu erkennen und ihre Inhalte bis zur Deaktivierung nicht anzuzeigen. Manchmal werden aber auch Lösungen wie Pauschalzahlungen („Jetzt Premiuminhalte ohne Werbeanzeigen“ o.ä.) vorgeschlagen.

Um den AdBlocker zu erkennen, schleusen die Webseitenbetreiber eine versteckte Datei in den Code, bei der man mit Sicherheit davon ausgehen kann, dass ein AdBlocker sie blockieren würde. Bewusst wird der Name der Datei so gewählt, dass ein AdBlocker darauf anspringt (z.B. werbung.js). Das ist so einfach, weil viele der AdBlocker-Filter open source, und somit jedem frei zu Verfügung stehen. Die Webseitenbetreiber verstecken also bewusst eine Datei, die in den Filter fällt und bauen eine Regel ein, dass bei blockieren dieser Datei der Inhalt der Seite nicht angezeigt wird. Wird das entsprechende Skript und die Datei beim Ausführen nicht geladen, so kann man sehr sicher sagen, dass ein AdBlocker aktiv ist.

Beispiel mittels ads.js

Der Name „ads.js“ ist ein typischer Name für eine Werbedatei und ist deshalb im Filter von jedem AdBlocker zu finden. Um nun auf einen AdBlocker zu prüfen, muss man eine solche Datei in seinen Webseitencode einbauen. Hier zeige ich kurz, wie das aussehen könnte.

var e=document.createElement('div');
e.id='PR44EPxgRGrsoVe';
e.style.display='none';
document.body.appendChild(e);

Dieser kleine Codeabschnitt in JavaScript erstellt nun einen leeren „div“-Tag mit der ID „PR44EPxgRGrsoVe“ in einem beliebigen Verzeichnis der Webseite und versteckt es über „display: none“, damit diese Datei keine Probleme verursacht wenn sie dargestellt werden soll, weil sie ja nur theoretisch existiert. Das war der erste Schritt.

Im nächsten Schritt wird die Datei „ads.js“ direkt in die Seite eingebunden und es wird über eine Abfrage geprüft, ob ein Element mit der ID „#PR44EPxgRGrsoVe“ vorhanden ist. Der Rest wird über eine IF / ELSE Option geregelt und eine Ausgabe festgelegt. Beispielsweise könne das dann so aussehen:

<script src="/ads.js" type="text/javascript"></script>
<script type="text/javascript">
if( document.getElementById('PR44EPxgRGrsoVe') ){
  alert('Es ist kein AdBlocker aktiv!');
} else {
  alert('AdBlocker ist aktiv und Werbung wird blockiert!');
}
</script>

Fazit

Fakt ist aber unterm Strich, dass es schon einen jahrelangen „Krieg“ zwischen den Entwicklern von AdBlockern und den Machern von Werbungen gibt. Es gibt sogar mehrere Universitäten, die sich mit der Entwicklung von immer effektiveren AdBlocking-Systemen beschäftigen (z.B. die Princeton Universität zum Artikel) . Doch schaffen es die Macher von Werbungen, einen AdBlocker zu umgehen, so wird dieser sofort wieder angepasst und die Macher von Werbungen versuchen wieder, diesen Blocker zu umgehen. So geht das immer weiter. Und ich würde sagen, dass ein Ende bis jetzt noch nicht in Sicht ist – einige Webseiten sind auf die Einnahmen der Werbungen angewiesen und reagieren meist mit einer quantitativen anstatt mit einer qualitativen Maßnahme. Aktuell erscheint mir die gesamte Werbeproblematik wie ein Teufelskreis. Die AdBlocker führen mehr und mehr zu Werbung, da sich die Werbetreibenden wehren. Die verbleibenden Anzeigen werden immer stärker und resistenter gegenüber AdBlockern, was wiederum zu einer noch stärkeren Nutzung von AdBlockern führt. Der „Krieg um die Werbung“ geht so lange weiter bis man nur noch mit Werbungen zugemüllt wird.

Quellen

  1. https://www.it.tum.de/it-sicherheit/glossar/adblocker/
  2. https://www.heise.de/newsticker/meldung/Forscher-basteln-am-ultimativen-Adblocker-3687792.html
  3. https://praxistipps.chip.de/backend-und-frontend-was-ist-das-einfach-erklaert_41384
  4. https://www.allaboutlegaltech.de/2018/04/wie-funktionieren-adblocker/
  5. https://www.webdesign-podcast.de/2016/12/06/adblocker-detection-so-kannst-du-erkennen-ob-deine-besucher-einen-adblocker-verwenden/
  6. https://www.shopboostr.de/die-top-8-programmiersprachen-zur-web-entwicklung/
  7. https://adblockplus.org/blog/investigating-filter-matching-algorithms