Wenn Sie Skript-Tags später wieder aktivieren möchten, bestand meine Lösung darin, die Browserumgebung zu beschädigen, sodass jedes Skript, das ausgeführt wird, ziemlich früh einen Fehler auslöst. Es ist jedoch nicht absolut zuverlässig, sodass Sie es nicht als Sicherheitsfunktion verwenden können.
Wenn Sie versuchen, auf globale Eigenschaften zuzugreifen, löst Chrome eine Ausnahme aus.
setTimeout("Math.random()")
// => VM116:25 Uncaught Error: JavaScript Execution Inhibited
Ich überschreibe alle überschreibbaren Eigenschaften auf window
, aber Sie können es auch erweitern, um andere Funktionen zu unterbrechen.
window.allowJSExecution = inhibitJavaScriptExecution();
function inhibitJavaScriptExecution(){
var windowProperties = {};
var Object = window.Object
var console = window.console
var Error = window.Error
function getPropertyDescriptor(object, propertyName){
var descriptor = Object.getOwnPropertyDescriptor(object, propertyName);
if (!descriptor) {
return getPropertyDescriptor(Object.getPrototypeOf(object), propertyName);
}
return descriptor;
}
for (var propName in window){
try {
windowProperties[propName] = getPropertyDescriptor(window, propName)
Object.defineProperty(window, propName, {
get: function(){
throw Error("JavaScript Execution Inhibited")
},
set: function(){
throw Error("JavaScript Execution Inhibited")
},
configurable: true
})
} catch (err) {}
}
return function allowJSExecution(){
for (var propName in window){
if (!(propName in windowProperties)) {
delete windowProperties[propName]
}
}
for (var propName in windowProperties){
try {
Object.defineProperty(window, propName, windowProperties[propName])
} catch (err) {}
}
}
}