【发布时间】:2021-08-08 06:45:04
【问题描述】:
我有 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 上抛出错误,而不是在其他事件处理程序上,有什么可以避免的。
注意:我无法控制生成的内联脚本。因为项目是在网络表单上
控制台错误: Hello.aspx?A686142D6EC3F5E2=BD6AB64D03BB016326187CE1819DFD28:1 拒绝运行 JavaScript URL,因为它违反了以下内容安全策略指令:“script-src 'self' 'unsafe-hashes' 'unsafe-inline' 'unsafe-eval' 'nonce-73cfe2af-3129-4148-98eb-c0e6e442c1f0' 'strict-dynamic'”。请注意,如果源列表中存在哈希值或 nonce 值,则忽略“unsafe-inline”。
【问题讨论】:
-
最佳解决方案:完全避免内联处理程序,它们非常糟糕,没有理由在现代 JS 中使用
-
如果您可以包含整个控制台错误(删除可能的敏感部分)并给出使用各种浏览器的测试结果(因为 CSP 实现不同),这将有所帮助。
标签: javascript webforms content-security-policy nonce