Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过内容安全策略允许在HTML元素属性中使用`javascript:void(0)`呢?_Javascript_Http_Content Security Policy - Fatal编程技术网

如何通过内容安全策略允许在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;
}