如何通过Content-Security-Policy允许`javascript:void(0)`用于HTML元素属性?

时间:2017-09-22 08:34:47

标签: javascript http content-security-policy

我希望能够做到

<form action="javascript:void(0)">

<a href="javascript:void(0)">

确保即使处理程序无法阻止默认操作也不会发生任何事情。如何使用Content-Security-Policy HTTP响应标头声明允许此操作而不诉诸unsafe-eval

5 个答案:

答案 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调用?

https://www.w3schools.com/js/js_ajax_examples.asp

答案 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

如果您提出了一些不太可怕的内容,请分享!