如何通过内容安全策略允许在HTML元素属性中使用`javascript:void(0)`呢?
我希望能够做到如何通过内容安全策略允许在HTML元素属性中使用`javascript:void(0)`呢?,javascript,http,content-security-policy,Javascript,Http,Content Security Policy,我希望能够做到 <form action="javascript:void(0)"> 或 确保即使处理程序未能阻止默认操作,也不会发生任何事情。我应该如何使用内容安全策略HTTP响应头声明这是允许的,而不必诉诸不安全评估?如何删除内置事件并用AJAX调用替换它 我相信在你的问题上你自相矛盾 如何允许在HTML元素属性中使用javascript:void(0) 通过内容安全策略 一方面,您设置了一个头,指定了一个规则,我猜它是scriptsrc。用于防止内联脚本运行的指令 另
<form action="javascript:void(0)">
或
确保即使处理程序未能阻止默认操作,也不会发生任何事情。我应该如何使用
内容安全策略HTTP响应头声明这是允许的,而不必诉诸不安全评估?如何删除内置事件并用AJAX调用替换它
我相信在你的问题上你自相矛盾
如何允许在HTML元素属性中使用javascript:void(0)
通过内容安全策略
一方面,您设置了一个头,指定了一个规则,我猜它是scriptsrc
。用于防止内联脚本运行的指令
另一方面,您希望绕过它并执行内联javascript
标题不是如预期的那样工作吗
添加“unsafe-inline”
将绕过它,但否定了不允许内联样式和内联脚本的想法(CSP提供的最大安全优势之一)
可以使用nonce源仅允许特定的内联脚本块
例如:
Content-Security-Policy: script-src 'nonce-2726c7f26c'
Content-Security-Policy: script-src 'sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f'
注意,您还必须在元素上设置相同的nonce
<script nonce="2726c7f26c">
var inline = 1;
</script>
请注意,在生成哈希时,不要包含标记,并注意大小写和空格很重要,包括前导或尾随空格
<script>var inline = 1;</script>
var inline=1;
因为
违反了内容安全策略最好不要使用它,而是通过以下方式进行更改:
<a href="#" onClick="return false;">
这些都可以毫无问题地完成相同的工作。我在尝试这样做时遇到(并报告)了这一点。我想保证我的
中的数据不会穿越网络,即使一些奇怪的JavaScript错误阻止了提交
事件被取消。但是Firefox将基于提交的
的操作错误地触发CSP错误,即使提交事件被返回false
或事件.preventDefault()取消
我想出的解决办法是使用无效blob:
URL
<form action="blob:">
如果你想出了一些不那么可怕的东西,请分享 我最近将CSP策略应用于一个大型VUE项目,在index.html中添加了元头
Google Chrome会打印一条关于javascript:
链接的警告,但除此之外没有其他事情发生
我所做的只是删除了href=“javascript:
属性,并添加了一个样式来维护光标样式:
a:hover {
cursor: pointer;
}
这对我很有效
p.S我还用
标记替换了一些
,并且
不需要href属性。为什么不使用href=”#“
?因为如果不阻止它,它将跳转到页面顶部。最好确保处理程序的任何分支阻止该操作,而不是将该操作/href放在那里。href=“##”
或类似的内容不会跳转您实际上不需要href属性。。。我的回答暗示他已经这么做了。他还将该操作/href作为故障保护,以防止在处理程序失败的情况下执行该操作。这里的问题是关于内容安全策略
以及OP如何使用它来表示“可以使用javascript:void(0)
作为操作/href”使用内容安全策略,我可以指定什么是允许的,什么是不允许的。我想允许javascript url的这个特定实例在不允许所有javascript url的情况下被允许,为了减少黑客的攻击面。因此,基本上我有脚本源代码“self”
,并希望将其更改为允许使用此单一javascript url。@JonasBerlin为了使用CSP绕过此限制,我知道的唯一解决方案是使用“不安全内联”。但是我相信它否定了整个CSP的想法。@JonasBerlin我已经用一些你可以尝试的东西更新了我的答案。nonce
是否也适用于和类似的?适用于链接(),但不幸的是提交
仍然会导致Chrome中的页面加载。
<form action="blob:">
<a href="blob:">
a:hover {
cursor: pointer;
}