Frage Greifen Sie auf Original-Globals und -Attribute in JavaScript zu


Ich arbeite an Code, der auf Webseiten eingefügt wird (mit einem Browser-Add-On oder mit einem Skript-Tag).

Das Problem ist, dass wir globale Objekte und Variablen wie verwenden möchten JSON, window.location, String.splitusw., und deren Implementierung wurde möglicherweise durch die Webseite geändert. Dies kann dazu führen, dass unser Code fehlschlägt, und es ist ein Sicherheitsproblem.

Beispiel:

>>> String.prototype.split = function() { return 'foo'; };
function()
>>> 'a,b,c'.split(',');  // gives unexpected result
"foo"

Gibt es also eine Möglichkeit, auf die Standardimplementierung von Objekten und Funktionen des Browsers zuzugreifen, so wie sie vor ihrer Änderung waren? Es muss nicht Standard sein, ich möchte nur, dass die Funktionalität existiert.


5
2018-06-12 09:16


Ursprung


Antworten:


Aktualisieren

Vielleicht wäre ein praktikabler Weg, ein leeres zu schaffen <iframe> dynamisch.

Hier ist ein Beispiel, das kontaminiert String.prototype.split im Elternfenster aber bekommt einen sauberen von <iframe>.

<html>
<head>
<script type="text/javascript">
    function onBodyLoad() {

        String.prototype.split = function() { return 'foo'; }; // contaminate original window
        console.log(String.prototype.split); // yeah, it's contaminated

        var acr = document.getElementById("accessor");
        acr.onclick = function ()
        {
            var dummyFrame = document.createElement("iframe");
            document.body.appendChild(dummyFrame); 
            console.log(dummyFrame.contentWindow.String.prototype.split); // uncontaminated
        }
    }
</script>
</head>
<body onload="onBodyLoad()">
    <a href="#" id="accessor">Access iframe Window object</a>
</body>
</html>

Nicht im gewöhnlichen Sinne; obwohl es da draußen vielleicht ein paar exotische Hacks geben könnte.

Der einzige Weg, an den ich denken konnte, war sicherzustellen, dass der Code vor jedem anderen Skript geladen wird. Wenn diese Anforderung erfüllt ist, können notwendige globale Variablen an einen sicheren Ort geklont werden.


4
2018-06-12 09:22