从 ASP.NET 项目中删除所有内联脚本
Posted
技术标签:
【中文标题】从 ASP.NET 项目中删除所有内联脚本【英文标题】:Remove all inline scripts from ASP.NET project 【发布时间】:2021-10-10 05:00:41 【问题描述】:我们被要求实施 Content-Security-Policy 以减轻对我们应用程序的 XSS 攻击。因此,我们需要将所有内联脚本移动到引用的文件中,然后可以在 Content-Security-Policy HTTP 标头中将其指定为安全的。
这在很大程度上是可行的,但现在似乎一些 web 控件(即 web 表单)注入内联脚本来执行回调。
有没有办法解决这个问题,还是我们需要使用 3rd 方控件或可能创建自定义控件?
【问题讨论】:
【参考方案1】:在 ASP.NET 中开发 Web 应用程序有 2 种技术:
ASP.NET MVC 将用户界面和代码(应用程序逻辑和表示逻辑)分开。它可以完全控制生成的 html 代码,生成纯 HTML 代码,因此您可以使用 'nonce-value'
来允许内联脚本 '' 和内联样式 <style>
。
ASP.NET WebForms 的用户界面逻辑与代码密切相关,很难从中分离出来,因此脚本和样式无法控制地嵌入到生成的 HTML 代码中。
使用 WebForms 时,您可以使用'<hash-algorithm>-<base64-value>'
,但哈希值将取决于部署环境。随机数是 not applicable directly,但您可以使用一个技巧 - 覆盖 __doPostBack
或 HtmlTextWriter
方法 - 请参阅详细信息 here。
【讨论】:
我们的项目中有太多页面需要转换为 MVC(大约 1500)。这不是转换一切的选项。您知道任何可以解决内联脚本问题的第三方 Web 控件吗? 是的,工作量很大!从更重要的项目开始,以 Report-Only 模式运行 CSP 并使用具有内置 CSP 报告处理程序的 NWebsec 2.0.0。因此,您可以轻松找到所有违规行为。在评估了 nonce 实施的工作范围后,您将决定升级剩余项目。我认为没有第三方服务可以完成所有工作。以上是关于从 ASP.NET 项目中删除所有内联脚本的主要内容,如果未能解决你的问题,请参考以下文章
添加到 ASP.NET Core 项目中的 site.css 文件时,CSS 不起作用。但是当作为内联添加时有效