
在 ASP.NET Core MVC 中,默认会对 Razor 视图中的表达式进行 HTML 编码以防止 XSS 攻击;若需原样渲染数据库中存储的可信 HTML 内容,应使用 HtmlString 或 @Html.Raw(),但必须确保内容来源可信,否则将引发严重安全风险。
在 asp.net core mvc 中,默认会对 razor 视图中的表达式进行 html 编码以防止 xss 攻击;若需原样渲染数据库中存储的可信 html 内容,应使用 htmlstring 或 @html.raw(),但必须确保内容来源可信,否则将引发严重安全风险。
ASP.NET Core MVC 默认对所有 Razor 表达式(如 Hello World Hello World@Model.Content)执行自动 HTML 编码,这是框架内置的安全机制,用于防范跨站脚本(XSS)攻击。当从 SQLite 数据库读取含 HTML 标签的富文本(例如 )并直接输出时,框架会将其转义为 ,导致浏览器显示原始标签而非渲染效果。
要正确渲染 HTML,有两种推荐方式:
✅ 方式一:使用 @Html.Raw()(适用于视图层快速处理)
在 .cshtml 文件中,将模型属性包裹在 Html.Raw() 中:
@model ArticleViewModel
<div>
@Html.Raw(Model.HtmlContent)
</div>
⚠️ 注意:@Html.Raw() 会完全绕过编码,仅适用于已严格验证、过滤或明确可信的 HTML 内容(如 CMS 后台管理员发布的富文本)。切勿对用户直输未净化的内容使用此方法。
✅ 方式二:在模型中封装为 HtmlString(更符合 MVC 分层原则)
在控制器或模型中提前构造 HtmlString 实例:
public class ArticleViewModel
{
public string RawHtml { get; set; }
public HtmlString RenderedHtml => new HtmlString(RawHtml ?? string.Empty);
}
然后在视图中直接使用:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
@model ArticleViewModel <div>@Model.RenderedHtml</div>
? 关键安全提醒:
- 永远不要对未经清理的用户输入(如评论、表单提交)调用
Html.Raw()或返回HtmlString; - 若内容来自不可信源,务必先通过成熟库(如 HtmlSanitizer)进行白名单过滤,仅保留
,,等安全标签; - 开发阶段可启用
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation辅助调试,但生产环境应禁用运行时编译。
总之,解除自动编码不是“关闭防护”,而是在可控前提下显式选择信任某段内容——安全与功能的平衡点,在于严格区分数据来源与渲染意图。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










