JavaScript für Werbung sicher machen.

JavaScript, die Programmiersprache des Webbrowsers, ist keine sichere Sprache. Jedes Skript in einer Seite hat intimen Zugang zu allen Informationen und Beziehungen der Seite. Dies macht den Einsatz von Mashups und skriptgestützter Werbung inakzeptabel riskant.

ADsafe macht es sicher, Gastcode (wie z.B. skriptierte Werbung von Dritten oder Widgets) auf einer Webseite zu platzieren. ADsafedefiniert eine Teilmenge von JavaScript, die leistungsfähig genug ist, um Gastcode wertvolle Interaktionen zu ermöglichen und gleichzeitig böswillige oder versehentliche Beschädigungen oder Einbrüche zu verhindern. Die ADsafe-Teilmenge kann mechanisch durch Tools wie JSLint verifiziert werden, so dass keine menschliche Inspektion erforderlich ist, um den Gastcode auf Sicherheit zu überprüfen. Die ADsafe-Untergruppe setzt auch gute Kodierungspraktiken durch, wodurch die Wahrscheinlichkeit erhöht wird, dass der Gastcode korrekt ausgeführt wird.

Die ADsafe-Untergruppe blockiert den Zugriff eines Skripts auf alle globalen Variablen oder den direkten Zugriff auf das Document Object Model oder eines seiner Elemente. Stattdessen gibt  ADSAFEdem Skript Zugriff auf ein ADSAFE-Objekt, das vom Server der Seite bereitgestellt wird, und ermöglicht so indirekten Zugriff auf die DOM-Elemente des Gastcodes und andere Seitendienste.

ADsafe modifiziert keine Skripte. Es macht Skripte weder größer oder langsamer noch verändert es ihr Verhalten. ADsafe ermöglicht es, schnell und zuverlässig festzustellen, ob ein Skript für die Platzierung auf den Seiten einer Website sicher ist.

Und da die ADsafe-Überprüfung nicht destruktiv ist, kann sie in jeder Phase der Bereitstellungspipeline oder sogar nach der Bereitstellung als Teil der Konformitätsprüfung durchgeführt werden.

Wie ADsafe funktioniert.

ADsafe entfernt Funktionen aus JavaScript, die entweder unsicher sind oder unkontrollierten Zugriff auf unsichere Browserkomponenten gewähren oder die zu schlechter Codequalität beitragen. Zu den entfernten Funktionen gehören

  • Globale Variablen
    • Das Objektfähigkeitsmodell von ADsafe verbietet die Verwendung der meisten globalen Variablen. Beschränkter Zugriff auf Array,Boolean, Number, String, und Math sind erlaubt.
  • this
    • IWenn eine Methode als Funktion aufgerufen wird,, this ist an das globale Objekt gebunden. Da ADsafe den Zugriff auf das globale Objekt beschränken muss, muss es die Verwendung von this im Gastcode.
  • arguments
    • Zugriff auf den arguments pseudo-array ist nicht erlaubt.
  • eval
    • Die eval Funktion ermöglicht Zugriff auf das globale Projekt.
  • with Anweisung
    • Die with Anweisung modifiziert die Scope-Kette und macht eine statische Analyse unmöglich.
  • Gefährliche Methoden und Eigenschaften: arguments callee caller constructor eval prototype stack unwatch valueOf watch
    • Bei diesen Namen kann es zumindest in einigen Browsern zu einem Capability Leakage kommen, so dass die Verwendung dieser Namen mit .Notation ist verboten.
  • Namen beginnen oder enden mi _.
    • Einige Browser haben gefährliche Eigenschaften oder Methoden, die eine baumelndeg _.
  • [ ] Subscript-Operator, außer wenn das Subscript ein numerisches Literal oder Zeichenkettenliteral oder ein Ausdruck ist, der einen Zahlenwert ergeben muss. Ausdrücke wie a[i] sind also unzulässig, weil wir nicht statisch feststellen können, dass i nicht zu den gefährlichen Eigenschaftsnamen gehört. Aber a[+i] ist erlaubt, weil +i immer eine Zahl ergeben wird.
    • Las Nachschlagen dynamischer Eigenschaften könnte den Zugriff auf die eingeschränkten Member ermöglichen. Verwenden Sie stattdessen die Methoden ADSAFE.get und ADSAFE.set.
  • Date and Math.random
    • Der Zugang zu diesen Quellen des Nicht-Determinismus wird eingeschränkt, um das Verhalten von Widgets leichter bestimmen zu können.

Die guten Eigenschaften der Sprache, einschließlich der meisten Methoden der Standardtypen, stehen dem Gastcode zur Verfügung. ADsafe bietet anstelle der ausgeschlossenen Funktionen ein ADSAFE-Objekt, das Methoden enthält, die die Funktionalität auf sichere Weise wiederherstellen. Beispielsweise treten ADSAFE.get(Objekt, Schlüssel) und ADSAFE.set(Objekt, Schlüssel, Wert) an die Stelle des Subscript-Operators.

Einschränkungen

Alle Dateien und Komponenten müssen in UTF-8 kodiert und ordnungsgemäß als solche gekennzeichnet sein.

Nicht vertrauenswürdiger Code wird in der Lage sein, indirekt den window.onerror-Handler aufzurufen. Der Handler muss so kodiert sein, dass der Aufruf durch nicht vertrauenswürdigen Code keinen Bruch verursacht.

Keiner der Prototypen der eingebauten Typen darf mit Methoden erweitert werden, die die Eindämmung von ADsafe verletzen können.

Alle auf der Seite definierten HTML-ID-Attribute müssen eindeutig sein.

Das ADSAFE Objekt

Das ADSAFE-Objekt stellt dem Widget die Grundfunktionen zur Verfügung. Die Methoden im ADSAFE-Objekt sind schreibgeschützt; sie können weder kopiert noch ersetzt werden.

Name Erklärung
create(object) Erstellen Sie ein neues leeres Objekt, das vom Objekt erbt.
get(object, name) Rufen Sie den Wert der Name-Eigenschaft des Objekts ab.
go(id, function) Starten Sie das widget. Die id string muss mit der id vom Widget übereinstimmen div.
has(object, name) true wenn das Objekt eine eigene Eigenschaft mit diesem Namen hat.
id(id) Identify the widget. The id string must match the id of the widget’s div.
isArray(value) Returns true if the value is an array.
keys(object) Produce an array of keys from the own enumerable properties of an object.
later(function, milliseconds) Call a function in the future.
lib(name, function) Register an ADsafe library.
log(string) Schreiben Sie die Zeichenfolge in das Protokoll des Browsers. Bei einigen Browsern ist es notwendig, den Debugger zu starten und die Konsolen-Registerkarte zu wählen, um das Protokoll zu sehen. Diese Methode ist eine bequeme Methode zum Debuggen.
remove(object, name) Remove a property from the object.
set(object, name, value) Set a property’s value on the object.