You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server+SignalR聊天应用是否存在XSS漏洞?如何触发?

Blazor Server聊天应用的XSS风险分析

你的当前实现是否存在XSS漏洞?

结论:默认情况下不存在传统DOM型XSS漏洞

Blazor Server的Razor引擎在渲染@message这类字符串变量时,会自动对HTML特殊字符做编码处理——把<转成&lt;、>转成&gt;、&转成&amp;等。所以不管用户输入HTML标签、JavaScript代码还是其他特殊内容,最终都会被浏览器当作纯文本渲染,不会被解析执行。

比如用户输入:

<script>alert('XSS测试')</script>

实际渲染到页面的HTML会是:

<li>&lt;script&gt;alert('XSS测试')&lt;/script&gt;</li>

浏览器只会显示这段文本,不会执行脚本。

为什么你会看到“始终要净化输出”的提示?

虽然当前写法安全,但有几种特殊场景会引入XSS风险,需要警惕:

1. 使用MarkupString绕过自动编码

如果后续需求允许用户输入富文本,你可能会尝试把字符串转为MarkupString类型直接渲染,这种写法会跳过Blazor的自动编码:

// 危险示例:直接将用户输入转为MarkupString
var unsafeMessage = new MarkupString(userInput);

然后在Razor中渲染:

<li>@unsafeMessage</li>

此时用户输入<img src=x onerror=alert('XSS')>,浏览器会解析这个img标签,触发onerror事件执行alert脚本,造成XSS漏洞。

2. 非Blazor场景的输出

如果你的应用需要将用户输入导出为HTML文件、或者通过JavaScript互操作直接操作DOM(比如用JS的innerHTML插入内容),这些场景不会自动做HTML编码,必须手动净化输入/输出,否则会触发XSS。

如何安全处理富文本需求?

如果确实需要允许用户输入有限的HTML格式(比如加粗、换行),不要直接用MarkupString,应该使用专门的HTML净化库(比如HtmlSanitizer)过滤掉危险标签(如script、iframe)和属性(如onerror、onclick),再将净化后的内容转为MarkupString渲染。

示例代码:

using Ganss.XSS;

var sanitizer = new HtmlSanitizer();
var safeHtml = sanitizer.Sanitize(userInput);
var safeMessage = new MarkupString(safeHtml);

内容的提问来源于stack exchange,提问作者user4779

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:50:31