Nếu bạn muốn kích hoạt lại các thẻ tập lệnh sau này, giải pháp của tôi là phá vỡ môi trường trình duyệt để bất kỳ tập lệnh nào chạy sẽ gặp lỗi khá sớm. Tuy nhiên, nó không hoàn toàn đáng tin cậy, vì vậy bạn không thể sử dụng nó như một tính năng bảo mật.
Nếu bạn cố gắng truy cập các thuộc tính chung, Chrome sẽ đưa ra một ngoại lệ.
setTimeout("Math.random()")
Tôi đang ghi đè lên tất cả các thuộc tính window
có thể ghi đè , nhưng bạn cũng có thể mở rộng nó để phá vỡ chức năng khác.
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) {}
}
}
}