我正在构建一个安全框架,它注入一个javascript文件,该文件将始终首先执行,并阻止一些要执行的函数。 开发人员将制作自己的webapps,脚本将确保无法调用某些功能。
我们假设"阻止"脚本是这样的:
window.alert = function(){Object.freeze(this)}
有没有办法让应用程序绕过这个块,而不使用iframes /外部文件? delete(window.alert)在这种情况下不起作用。
答案 0 :(得分:2)
如果您无法阻止该脚本先运行,那么就不行了,否则您可以将原始alert
设置为其他内容:
var oldAlert = window.alert;
window.alert = function(){Object.freeze(this)}
你是如何/为何使用alert
?如果用于调试你最好使用console.log
。如果您使用它来通知用户,那么可能专用模式将是更好的选择
根据您更新的问题,这取决于您的框架是如何加载的。
假设您将脚本提供给开发人员使用,在这种情况下,他们可以非常轻松地更改脚本的功能。如果代码在不属于你的环境中运行,那么你可以认为它不安全。浏览器插件可以阻止脚本,可以绕过任何基于javascript文件的安全性。
答案 1 :(得分:1)
基于@Abdennour TOUMI在这篇文章中的工作:Opposite of Object.freeze or Object.seal in JavaScript,你可以这样做:
window.alert = function(){Object.freeze(this)} ;
Object.unfreezeAlert=function(){
return window.prompt;
}
window.alert = Object.unfreezeAlert(window.alert);
alert ('test4');
答案 2 :(得分:0)
您需要在alert
上设置Window.prototype
属性,而不是window
。否则:
Window.prototype.alert.call(window, 'This works.');