这是我在JSP代码中的政策:
我正在使用以下具有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浏览器中的结果
当我尝试单击错误时,我在jQuery文件中看到2个错误 (请注意,下面的2个错误不是我的代码,而是来自jquery.x.x.x.js)
第一个是:
第二个是:
现在,在不使用此CSP的情况下如何解决这两个问题?
insafe-inline
很多人说不建议使用上述不安全的方法,例如:https://barryvanveen.nl/blog/47-how-to-prevent-the-use-of-unsafe-inline-in-csp
答案 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升级到较新的版本,并且现在可以通过了。尽管我现在遇到功能问题-但当然这将是另一个故事。