यदि आप बाद में स्क्रिप्ट टैग को फिर से सक्षम करना चाहते हैं, तो मेरा समाधान ब्राउज़र वातावरण को तोड़ना था, ताकि कोई भी स्क्रिप्ट जो एक रन बनाता है वह काफी जल्दी त्रुटि को फेंक देगा। हालाँकि, यह पूरी तरह से विश्वसनीय नहीं है, इसलिए आप इसे सुरक्षा सुविधा के रूप में उपयोग नहीं कर सकते।
यदि आप वैश्विक गुणों को एक्सेस करने का प्रयास करते हैं तो Chrome अपवाद छोड़ देगा।
setTimeout("Math.random()")
मैं सभी अधिलेखित गुणों को अधिलेखित कर रहा हूं window
, लेकिन आप अन्य कार्यक्षमता को तोड़ने के लिए इसका विस्तार भी कर सकते हैं।
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) {}
}
}
}