javascript - 我可以使用 jQuery globaleval 而不是 eval 来逃避内容安全策略吗

标签 javascript jquery content-security-policy

我使用了 eval,但通过应用 CSP 禁止它。但我正在寻找替代品。

我找到函数 jQuery.globaleval()

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

抛出:

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' http://localhost:6060/WCUSTODY/ http://localhost:6060/application/scripts

那么,我们是否可以使用全局 eval 作为 eval 的替代方案,也应该被 CSP(内容安全策略)接受。

最佳答案

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

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

名为newVar 的变量在全局范围内。它可以通过您的应用程序的脚本访问。

您可以在 CSP 中使用 eval() 而无需 jQuery.globaleval(),方法是将 unsafe-eval 设置为允许的来源。

类似这样:

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

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

关于javascript - 我可以使用 jQuery globaleval 而不是 eval 来逃避内容安全策略吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57253511/

相关文章:

google-chrome-extension - 为什么 Chrome 不会使用允许本地主机的内容安全策略加载扩展程序?

javascript - ajax分页后点击事件不起作用

jquery - 如何在网页打开后立即制作jquery效果

javascript - 通过 Ajax 向 Django 发送复选框列表

javascript - 如何捕获 Windows 资源管理器等键盘输入

javascript - 防止用户粘贴换行符

Jhipster 应用程序中的 Iframe 幻灯片 google 被阻止

http - 如何为所有 Google 域(即 .com、.de、.fr 等)配置 CSP

javascript - 从n叉树结构的数组中删除一个元素

javascript - ionic : cordova is not defined