Web 窗体模型以及如何创建页面和使用控件。
为什么我的页面中的外部资源在 Web Live Preview 中被阻止?
如果你的页面中有来自第三方域的任何外部资源,你可能会注意到 Web实时预览中的设计工具已阻止它们的加载,并显示以下提示信息:
你可能想知道为什么资源在设计器中被阻止加载,以及为什么会显示 Toast 消息。 本文介绍资源被阻止的原因。
Web Live Preview 和 BrowserLink 概述
Web Live Preview (WLP) 是基于 BrowserLink 构建的 Visual Studio 扩展。 WLP 使用 BrowserLink 为 Visual Studio 和设计器之间的双向通信提供通道。 这种双向通信允许 WLP 提供许多功能:
- 将设计器中的内容和当前选定的节点与编辑器同步。
- 将从设计器创建的新内容推送到编辑器中。
- 执行操作面板命令。
Web Live Preview 和 BrowserLink 的潜在安全漏洞
如果将任何脚本或资源从第三方注入网页中,则可能使用 WLP 和 BrowserLink 发起跨站点脚本 (XSS) 攻击,使你面临潜在的安全漏洞。
如果第三方资源能够将恶意代码注入站点,则这些代码可以利用注入到设计器中的 Browser Link 脚本,向 Visual Studio 发起回调。 注入的脚本可以允许代码在 Visual Studio 中打开的文件中编写任意内容,或打开其他攻击途径。
目前,无法阻止攻击者通过 BrowserLink 脚本向 Visual Studio 通信。
安全漏洞缓解
尽可能多地限制和缓解了通过 BrowserLink 脚本发回 Visual Studio 的通信中的安全漏洞。 但是,某些攻击仍可以通过 XSS 攻击实现。
为了减少此类 XSS 攻击的可能性,默认情况下,WLP 会阻止加载所有外部资源。 如果任何外部资源被阻止,WLP 将在设计器的右上角显示以下弹出提示:
(在此示例中,我们使用以下 SVG,该 SVG 是示例 Web 应用中使用的外部资源: https://visualstudio.microsoft.com/wp-content/uploads/2021/10/Product-Icon.svg
如果 打开 Microsoft Edge DevTools 窗口,则还可能会注意到以下消息,说明外部资源为何无法加载:
在设计器的提示框中,如果选择 “单击此处” 链接,将出现以下对话框,对话框的列表中会自动添加已阻止资源的域:
默认情况下,来自存储在对话框列表中的外部域的任何资源都不会在 WLP 中被阻止,并像往常一样加载。 单击 “确定”后,设计器将重新加载页面,并加载以前阻止的任何资源,其域已添加到对话框中。 请确保仅允许已验证的外部域可信且安全。
单击 Web Live Preview - 外部域 链接,在 toast 中会打开相同的对话框,但不会将被阻止资源的任何域名添加到对话框中。
还可以通过 Tools -> Options -> Web Live Preview -> Allowed external domains during design 设置访问对话框。 针对每个已安装的 Visual Studio 实例的对话框设置。
警告
允许默认情况下域不受阻止,可能会让您暴露于上述 XSS 攻击风险中。 同样,我们强烈建议只允许可以验证为可信和安全的外部域。