Estoy trabajando en una prevención XSS a través de Javascript. Estoy usando el siguiente código JS para eso:
(function () {
/*
XSS prevention via JavaScript
*/
var XSSObject = new Object();
XSSObject.lockdown = function (obj, name) {
if (!String.prototype.startsWith) {
try {
if (Object.defineProperty) {
Object.defineProperty(obj, name, {
configurable: false
});
}
} catch (e) { };
}
}
XSSObject.proxy = function (obj, name, report_function_name, exec_original) {
var proxy = obj[name];
obj[name] = function () {
if (exec_original) {
return proxy.apply(this, arguments);
}
};
XSSObject.lockdown(obj, name);
};
XSSObject.proxy(window, 'alert', 'window.alert', false);
XSSObject.proxy(window, 'confirm', 'window.confirm', false);
XSSObject.proxy(window, 'prompt', 'window.prompt', false);
XSSObject.proxy(window, 'unescape', 'unescape', false);
XSSObject.proxy(document, 'write', 'document.write', false);
XSSObject.proxy(String, 'fromCharCode', 'String.fromCharCode', true);
})();
Usando ese script, no es posible ejecutar las funciones alert
, confirm
, prompt
, unescape
, write
y fromCharCode
.
¿Hay alguna manera de evitar esta prevención? Si es así, ¿cómo y por qué?