调用被覆盖和冻结的函数

时间:2015-05-06 13:34:40

标签: javascript

我正在构建一个安全框架,它注入一个javascript文件,该文件将始终首先执行,并阻止一些要执行的函数。 开发人员将制作自己的webapps,脚本将确保无法调用某些功能。

我们假设"阻止"脚本是这样的:

window.alert = function(){Object.freeze(this)}

有没有办法让应用程序绕过这个块,而不使用iframes /外部文件? delete(window.alert)在这种情况下不起作用。

3 个答案:

答案 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');  

http://jsfiddle.net/scraaappy/pxv51zqg/

答案 2 :(得分:0)

您需要在alert上设置Window.prototype属性,而不是window。否则:

Window.prototype.alert.call(window, 'This works.');