你好,我已经为此挣扎了几天了。
我有一个aspx网站,一切都在我的电脑上运行。然后在服务器上部署它后,我得到了以下错误:
拒绝执行内联脚本,因为它违反了以下内容内容安全策略指令:;script src"self";。或者"unsafe inline"关键字,哈希('sa256-ET0SWzTymVfQ+qjfGmR3CUWjxDefnjlCs53WMtvYTeU='(,或一个nonce('once-…'(是启用内联执行所必需的
我的C#代码有一些onclick方法,它们转换为JavaScript并成为一个内联函数。
发件人:
<asp:CheckBox ID="CheckBox_MO_RS" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox_RIGHTS_CheckedChanged" Text="MO RS" />
至
<input id="CheckBox_MO_RS" type="checkbox" name="CheckBox_MO_RS" onclick="javascript:setTimeout('__doPostBack('CheckBox_MO_RS','')', 0)">
而那些JS函数在服务器上不起作用,我认为是因为违反了CSP。
我试了什么?
- 已尝试将CSP添加到Web.config。
- 服务器上根本没有加载
- 已将元标记添加到页眉
- 大概是这样的:
<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'; script-src-elem 'unsafe-inline'"/>
- 但是调试器仍然返回错误消息:拒绝执行内联脚本,因为它违反了以下内容安全策略指令:;script src"self">
我没有编写指令脚本src"self"。错误消息调试器有人知道吗?
您的生产服务器必须添加一个CSP。由于所有内容都需要通过所有策略,因此添加另一个策略没有帮助。
但是,由于添加"不安全的内联"会降低安全性,因此您应该在同一服务器上托管的js文件中将所有内联事件重写为正确的事件处理,因为这将使其通过现有的CSP。另请参阅拒绝执行内联事件处理程序,因为它违反了CSP。(沙箱(
打开AutoPostback会在最终HTML上生成内联Javascript。关闭它可以消除特定的错误,但当然,页面不会像你希望的那样工作,尽管你可以添加另一个控件,如按钮来生成回发。您可以尝试使用浏览器上面建议的哈希('sa256-ET0SWzTymVfQ+qjfGmR3CUWjxDefnjlCs53WMtvYTeU='(,但对于某些控件,可能需要多个哈希。