2013-12-15 6 views
13

Also, hier ist das Problem.JavaScript vollständig "manipulationssichere" Variablen

Ich habe so etwas wie:

// Dangerous __hostObject that makes requests bypassing 
// the same-origin policy exposed from other code. 
(function(){ 
    var danger = __hostObject; 
})(); 
delete __hostOBject; 

Bin ich kann kein Skript zu wissen, absolut sicher manipulieren oder den Zugang __hostObject?

(Wenn sie können, ich habe eine CSRF vulnerability oder schlechter.)

Anmerkung 1: Dies ist eine Browser-Erweiterung. Ich habe bessere Hooks als andere Skripte, die auf der Seite laufen. Ich führe vor ihnen aus und ich bin fertig, bevor sie überhaupt geladen haben.

Hinweis 2: Ich weiß, dass dies für Skripts im Allgemeinen mehrfach angefordert wurde. Ich frage mich, ob es möglich ist, wenn ich weiß, dass ich vor anderen Skripten laden.

+0

ich einen [Beispielcode] geschrieben haben (http://jsfiddle.net/35G8e/2/), die überschreibt 'Function.prototype .call'. (Fühlen Sie sich frei, diesen Beitrag zu kennzeichnen, wenn Sie wirklich denken, dass ich böswilligen Entwicklern helfe. Meiner Meinung nach werden die eventuellen Angreifer diese Techniken sowieso kennen.) – ComFreek

+1

@ComFreek Sie haben vergessen, das Ergebnis von 'oldCall' zurückzugeben. In der Tat, das ist das allgemeine Prinzip, das verwendet wird, um (integrierte) JavaScript-Methoden zu installieren. –

Antwort

5

Vorausgesetzt, dass die __hostObject löschbar ist, ist der Code in Ihrer Frage sicher.

Allerdings nehme ich an, dass Ihr realer Code etwas komplizierter ist. In diesem Fall ist eine sehr sorgfältige Codierung erforderlich, da die Seite integrierte Methoden (z. B. Function.prototype.call) ändern kann, um in Ihre Schließung zu gelangen und alles Böse zu tun, was sie wollen. Ich habe erfolgreich die Funktionalität von Erweiterungs-Frameworks wie Kango und Crossrider über diese Methode missbraucht, als ich einen solchen Test durchführte.

+0

Sie sind heute sehr scharf (oder glücklich, aber ich möchte scharf denken). Dies ist ein Problem, das wir gerade mit Crossrider haben. Ich teste jetzt ein BHO für den Internet Explorer und ich muss JavaScript Anfragen stellen lassen, die die Cross-Source-Richtlinie umgehen und/oder Cross-Site-Daten in der Registry speichern. Beide sehr problematische Operationen. Ich konnte mir keinen besseren Weg vorstellen. (Auch wenn Sie Beispielcode für einen solchen Exploit mit '.call' hinzufügen könnten - das wäre wirklich großartig). Gibt es eine zuverlässige Möglichkeit, die App zu beenden, wenn etwas wie ".call" manipuliert wurde? (Im Nachhinein - sie können es tun _nach ich lade auch). –

+1

@BenjaminGruenbaum Der Code, um die Funktionalität zu missbrauchen, ist trivial, ich werde keinen Beispielcode posten, um die Verbreitung von bösartigen Entwicklern zu vermeiden. Ich schreibe gerade eine Antwort auf deine andere Frage, bleib dran;) –

+0

Es tut mir leid Jungs. Ich versuche, das Problem und die Lösung zu verstehen, aber konnte nicht. Kannst du bitte etwas mehr erklären? – thefourtheye

0

einfach nicht einen Haltepunkt hinzufügen und Neuladen das Skript aussetzen Ihre __hostObject

+0

Das Problem sind nicht die tatsächlichen Benutzer, es andere Skripte ist kann ich nicht vertraue damit. Soweit ich weiß, kann ein anderes Skript das nicht tun. –

+0

Ok, das klingt wahr. –