从 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,但您可以使用一个技巧 - 覆盖 __doPostBackHtmlTextWriter 方法 - 请参阅详细信息 here。

【讨论】:

我们的项目中有太多页面需要转换为 MVC(大约 1500)。这不是转换一切的选项。您知道任何可以解决内联脚本问题的第三方 Web 控件吗? 是的,工作量很大!从更重要的项目开始,以 Report-Only 模式运行 CSP 并使用具有内置 CSP 报告处理程序的 NWebsec 2.0.0。因此,您可以轻松找到所有违规行为。在评估了 nonce 实施的工作范围后,您将决定升级剩余项目。我认为没有第三方服务可以完成所有工作。

以上是关于从 ASP.NET 项目中删除所有内联脚本的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.Net 5“空”项目中删除 Kestrel

添加到 ASP.NET Core 项目中的 site.css 文件时,CSS 不起作用。但是当作为内联添加时有效

在 ASP.Net 中使用 tinymce 内联 div InnerHtml

ASP.Net,母版页:每页样式表

Asp.Net 何时删除过期的缓存项?

ASP.NET MVC 内联网应用程序。基于角色的身份验证链接到应用程序中的用户表