微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

href 标签中的内容安全策略错误,但在内联事件处理程序上工作正常

如何解决href 标签中的内容安全策略错误,但在内联事件处理程序上工作正常

我有 asp.net webforms 项目。我的内容安全策略头如下

default-src 'self' 'unsafe-eval' data:;style-src 'self' 'unsafe-inline';img-src * 'self' data:;font-src 'self' https://fonts.gstatic.com data:;frame-src * data: blob: js: javascript:;script-src 'self' 'unsafe-hashes' 'unsafe-inline' 'unsafe-eval'  'nonce-random123' 'strict-dynamic'; frame-ancestors 'self';worker-src 'self' blob: ;  script-src-attr  'self' 'unsafe-hashes' 'unsafe-inline' 'unsafe-eval'

在我的页面中,所有内联 html 脚本都可以正常工作,例如

<body onload="javascript:"> <input type="submit" onclick="javascript: "> 

但是,如果我使用

<a href="javascript:webpostback()">

,它在控制台中抛出错误“拒绝运行 JavaScript URL,因为它违反了以下内容安全策略指令:”。为什么它会在 href 上引发错误,但不会在其他事件处理程序上引发错误,有什么可以避免的。

注意:我无法控制生成的内联脚本。因为项目是在webforms上

控制台错误 Hello.aspx?A686142D6EC3F5E2=BD6AB64D03BB016326187CE1819DFD28:1 拒绝运行 JavaScript URL,因为它违反了以下内容安全策略指令:“script-src 'self''unsafe-hashes 'unsafe-inline' 'unsafe-eval' 'nonce-73cfe2af-3129-4148-98eb-c0e6e442c1f0' 'strict-dynamic'"。请注意,如果源列表中存在哈希值或现时值,则忽略“unsafe-inline”。

解决方法

一个 'unsafe-hashes' 令牌 should be paired,带有所有内联事件处理程序和 javascript:-navigations 的 'hash-value' 令牌,旨在被允许。例如,要允许 <a href="javascript:webpostback()">,您必须使用 hash:

script-src-attr 'unsafe-hashes' 'sha256-9X0thXkX9FwOrSOPpwOgHBUeXkoM5C9BR3EfKcuXYZg=';

注意 1:'self''unsafe-eval'script-src-attr 中是 not supported
注意 2:'unsafe-inline' 不能与 'unsafe-hashes' 配对,因为 'hash-value' 取消了 'unsafe-inline'

为什么它会在 href 上引发错误,而不会在其他事件处理程序上引发错误

很奇怪。以上两个的 Chrome 浏览器 supports 'unsafe-hashes' 令牌。使用您展示的 CSP,Chrome 应该抛出错误以及内联事件处理程序和 JS 导航。
Chrome 唯一有一个 bug 错误定义了 javascript:-navigation 中的违反指令。 JS:-navigation 包含在 script-src-attr 指令中。但正如您在控制台错误中看到的那样,尽管 CSP 中有 script-src,但 Chrome 仍会显示 script-src-attr 中发生违规。

Firefox 浏览器 supports 'unsafe-hashes' 用于内联事件处理程序(带有错误),但不支持 'unsafe-hashes' 用于 javascript:-navigations。

Safari 完全执行 not support 'unsafe-hashes'

因此目前它只是使用 'unsafe-hashes' 的一种方式:

script-src 'unsafe-inline'; script-src-attr 'unsafe-hashes' 'sha256-...' 'sha256-...';

Chrome 将遵循 script-src-attr 指令,其他浏览器不支持它,将使用 'unsafe-inline' 中的 'script-src'
Chrome 用户会非常安全,但您不能使用 'nonce-value' / 'hash-value' / 'strict-dynamic' 令牌,因为这些令牌会覆盖 'unsafe-inline'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。