内容安全策略阻止了我的JQuery脚本中的代码

时间:2019-03-18 06:34:26

标签: jquery content-security-policy

这是我在JSP代码中的政策:

enter image description here

我正在使用以下具有CSP的脚本:

  

立即

<script src="/xx/xxxxxx/jquery-x.x.x.js" type="text/javascript" charset="utf-8" nonce="<%=nonce%>"></script>
<script src="/xx/xxxxxx/xxxxxx.js" type="text/javascript" charset="utf-8" nonce="<%=nonce%>"></script>

Chrome浏览器中的结果

enter image description here

当我尝试单击错误时,我在jQuery文件中看到2个错误 (请注意,下面的2个错误不是我的代码,而是来自jquery.x.x.x.js)

第一个是:

enter image description here

第二个是:

enter image description here

现在,在不使用此CSP的情况下如何解决这两个问题?

  

insafe-inline

很多人说不建议使用上述不安全的方法,例如:https://barryvanveen.nl/blog/47-how-to-prevent-the-use-of-unsafe-inline-in-csp

2 个答案:

答案 0 :(得分:0)

对于第一个错误:

您在运行时插入的innerHTML的{​​{1}}包含一个具有div属性的<a>元素。这是CSP的violation,因为此特定标签没有随机数。

解决方案

为此标记使用随机数是不明智的,因为它是在运行时插入的,并且随机数应添加到HTML服务器端。

我建议将CSS移至另一个文件,并使用链接标记包括该文件

HTML:

style

style.css

<!-- Other html -->

<link href="./style.css" rel="stylesheet">

请注意,您的JS需要进行一些修改,因为创建的 a#someId { color: red; float: left; opacity: .55; } 标记需要具有<a>属性才能被CSS选择

script.js

id

第二个错误:

在不知道脚本内容的情况下无法确定导致错误的原因。请发布几行与脚本变量创建相关的代码。

但是,第一个可能与此类似。一种简单的解决方案是将动态附加的脚本移动到另一个文件,并使用script标签将该文件包括在内。

答案 1 :(得分:0)

感谢@jro提供答案-我试图将jquery和jqtouch升级到较新的版本,并且现在可以通过了。尽管我现在遇到功能问题-但当然这将是另一个故事。