Ich suche nach einem Weg, dass ein Stück Code (A) eine Art Token generieren kann, und dann an ein anderes Stück Code (B) so weitergeben, dass ein 3. Stück Code ist nicht in der Lage, es abzufangen (E).Token sicher zwischen Funktionen übergeben
Für die Zwecke dieser Frage wird vorausgesetzt, dass A das Token sicher generieren kann.
Wenn B eine Funktion F zu A verfügbar macht, die als eines der Argumente ein Objekt akzeptiert, das das Token enthält, dann kann A dieses Token direkt übergeben.
Aber E kann dieses Token finden, indem es zum Beispiel console.log
überschreibt und den Stapel untersucht.
var x = console.log
console.log = function Eve()
{
x.apply(this, arguments);
console.info(Thing.caller.arguments);
}
(unter der Annahme, dass F console.log
natürlich ruft, aber in Wirklichkeit gibt es viele solche Funktionen, die auf diese Weise überschrieben werden könnte)
Ich glaube, ich habe eine Milderung gegen diese
, die die löschen ist sichere Token vom übergebenen Objekt, bevor potenziell kompromittierte Funktionen aufgerufen werden. d.h.var y = function Y(Secure)
{
var Thing = Secure.Arg;
delete Secure.Arg;
console.log('SomeMessage', arguments) ;
}
y({Arg:'SomeArg'})
(FF in zumindest) die Manipulation des Objekts Argument sein Wert auch auf dem Stapel verändert, so dass die arguments
Objekt auf dem Stapel nun ein leeres Objekt enthält. Gibt es andere Möglichkeiten, dass E Zugriff auf die übergebenen Daten erhält? Wenn ja, können diese Methoden gemildert werden oder sollte ich andere Optionen mit besserer Sicherheit untersuchen?
EDIT für Clarity: Es wird angenommen, dass E durch Mittel außerhalb der Kontrolle von A oder B - z.B. Greasemonkey Benutzerscript
ich denke, Sie werden eine schlechte Zeit haben, zu verhindern, dass diese anderen Lösungen wären: hosten Sie das 3. Stück Code selbst. Führen Sie es in einem Iframe eines anderen Ursprungs aus. –