【发布时间】:2018-11-23 07:39:36
【问题描述】:
内容安全策略的新手,因此不确定这是否可能,但想知道如何在 HTML 元素的属性中为某些内联脚本添加哈希或随机数。
例如:
<form method="post" onsubmit="function();">
在 Google Chrome 中出现以下 CSP 错误:
拒绝执行内联事件处理程序,因为它违反了 遵循内容安全策略指令:“script-src 'self'。 'unsafe-inline' 关键字、哈希 ('sha256-...') 或随机数 ('nonce-...') 是启用内联执行所必需的。
我已尝试仅对脚本进行哈希处理,例如function(); 和 onsubmit="function" 都不起作用。我尝试向表单元素添加随机数,但没有帮助。
如果需要,我可以将事件绑定移到元素属性之外,只是想知道是否有办法通过上述方法遵守 CSP。
【问题讨论】:
-
该错误消息具有误导性。见github.com/w3c/webappsec/issues/468。尽管该错误消息可能会让您想到什么,但在 CSP2 和当前浏览器中,散列或随机数只能使您允许
script元素中的脚本——而不是事件处理程序属性中的脚本。相反,最好的办法是stackoverflow.com/a/46259847/441757 的答案说:取消内联那些事件处理程序。 -
不过,在 CSP3 中,您可以为 script-src 指令指定“unsafe-hashed-attributes”,这将使您能够使用散列或随机数来允许事件处理程序属性中的脚本.请参阅 docs.google.com/document/d/… 和 w3c.github.io/webappsec-csp/#unsafe-hashed-attributes-usage 和 chromestatus.com/feature/5867082285580288。但目前尚不支持任何浏览器(即使在 Chrome 中也不支持 - 它仍在开发中;请参阅 bugs.chromium.org/p/chromium/issues/detail?id=771922)。
-
@sideshowbarker 我想知道是否可能是这种情况,但至少想问这个问题并看看。感谢您的帮助!
标签: javascript html content-security-policy