我希望能够做到
<form action="javascript:void(0)">
或
<a href="javascript:void(0)">
确保即使处理程序无法阻止默认操作也不会发生任何事情。如何使用Content-Security-Policy
HTTP响应标头声明允许此操作而不诉诸unsafe-eval
?
答案 0 :(得分:2)
我相信你的问题与你自相矛盾。
如何允许
script-src
在HTML元素属性中使用 通过内容安全政策?
一方面,您设置了一个Content Security Policy (CSP)标题,您指定了一个我猜测为'unsafe-inline'
的规则。用于防止内联脚本运行的指令。
另一方面,你想绕过它并执行内联javascript。
标题是否正常工作?
添加Content-Security-Policy: script-src 'nonce-2726c7f26c'
将绕过它,但否定了禁止内联样式和内联脚本(CSP提供的最大安全性胜利之一)的想法。
您可以使用nonce-source仅允许特定的内联脚本块。
示例:
<script nonce="2726c7f26c">
var inline = 1;
</script>
注意,您还必须在元素上设置相同的随机数。
Content-Security-Policy: form-action 'nonce-<value>'
对于使用表单的情况,标题为:
Content-Security-Policy: script-src 'sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f'
或者,您可以从内联脚本创建哈希。 CSP支持sha256,sha384和sha512。
示例:
<script>var inline = 1;</script>
请注意,在生成哈希时,请不要包含标记,并注意大小写和空格很重要,包括前导或尾随空格。
{{1}}
答案 1 :(得分:1)
我最近通过将meta标头添加到index.html,将CSP策略应用于一个庞大的VUE项目。
Google Chrome浏览器会显示关于javascript:
链接的警告,但除此之外,没有其他反应。
我所做的只是删除href="javascript:
属性,并添加了一种样式来保持光标样式:
a:hover {
cursor: pointer;
}
对我来说很好。
P.S我还用<a>
标签替换了几个<button>
,并且<button>
不需要href属性。
答案 2 :(得分:0)
如何删除内置事件并将其替换为AJAX调用?
答案 3 :(得分:0)
{
{
“user_id”: “id002”,
“city”: “Los Angeles”
},
{
“user_id”: “id003”,
“city”: “San Francisco”
}
}
违反了内容安全政策,因此您最好不要使用并通过以下方式更改它:
<a href="javascript:void(0);">
这些都可以完成相同的工作。
答案 4 :(得分:0)
当我尝试这样做时,我碰到了(并报告了)这个Firefox bug。我想保证<form>
中的数据不会遍历网络,即使某些怪异的JavaScript错误阻止了submit
事件被取消。但是,即使action
或{取消了<form>
事件,Firefox也会基于提交的submit
的return false
错误地触发CSP错误。 {1}}。
我想出的解决方法是使用无效的event.preventDefault()
URL !
blob:
尝试向<form action="blob:">
提交<form>
的尝试似乎被默默地忽略了。无论是否blob:
事件被取消,都没有导航,也没有通过网络发送的内容,也没有CSP错误。 (当然,您可能仍想尽一切努力取消它。)
它似乎也适用于链接,尽管Chrome在此处的控制台中显示错误:
submit
如果您提出了一些不太可怕的内容,请分享!