提问者:小点点

我可以使用jQuery global eval intsead of eval来逃避内容安全策略吗


我已经使用了eval,但是通过应用CSP来禁止它。但我在找一个替代方案。

我找到了jQuery.globaleval()函数。

jQuery.readyException = function( error ) {
    window.setTimeout( function() {
        throw error; 
    });
};

投掷:

未捕获的EVALERROR:拒绝将字符串计算为JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“script-src”self“”unsafe-inline“http://localhost:6060/wtlority/http://localhost:6060/application/scripts

那么,是否可以使用全局评估作为评估的替代方案,也应该被CSP(Content Security Policy)所接受。


共1个答案

匿名用户

jQuery.globaleval()的行为与使用普通JavaScripteval()不同,因为它是在全局上下文中执行的。例如:

function test() {
  jQuery.globalEval( "var newVar = true;" );
}
test();

名为newvar的变量在global的范围内。可以通过应用程序的脚本访问它。

通过将unsafe-eval设置为允许的源,您可以在CSP中使用eval()而不使用jQuery.globaleval()

类似于这样:

<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-eval'">

如果不想使用eval,那么可以使用new Function()。根据最佳实践,您应该避免eval()new Function()