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

C# MVC中使用Html.Raw引发XSS攻击,如何防范?

如何避免MVC中@Html.Raw导致的XSS漏洞?

你遇到的这个问题非常典型——直接用@Html.Raw把用户可控的URL输出到JavaScript变量里,等于把未过滤的字符串直接注入到JS代码中,自然会被攻击者利用XSS漏洞执行恶意脚本。下面给你几个切实可行的解决办法,从根源上杜绝这类风险:

  • 放弃@Html.Raw,改用MVC内置的JS序列化工具
    MVC专门提供了针对JavaScript输出的序列化方法,能自动处理转义,把字符串安全嵌入JS代码。不同版本的MVC对应不同的方法:

    // 旧版ASP.NET MVC
    var url = @Json.Encode("domain/?budget=" + Request.QueryString["budget"]);
    
    // ASP.NET Core
    var url = @Json.Serialize("domain/?budget=" + Request.Query["budget"]);
    

    经过序列化后,攻击者构造的恶意字符串(比如";alert('a')//)会被转义成\";alert(\'a\')//,只会被当作普通字符串处理,不会被解析为可执行的JS代码。

  • 手动转义JS特殊字符
    如果没法用序列化方法,你可以手动转义JS中会破坏字符串结构的特殊字符(双引号、单引号、反斜杠等),推荐用HttpUtility.JavaScriptStringEncode():

    var url = "@HttpUtility.JavaScriptStringEncode("domain/?budget=" + Request.QueryString["budget"])";
    

    这个方法会自动处理所有危险字符,确保输出的内容是安全的字符串值,而非可执行代码。

  • 后端生成安全URL,避免直接拼接用户输入
    更稳妥的方式是在后端用MVC的URL生成方法(比如Url.Action或Url.RouteUrl)来构建完整URL,这些方法会自动处理参数编码,从源头避免注入:

    // 后端控制器中生成安全URL,传递到视图
    ViewBag.SafeBudgetUrl = Url.Action("YourAction", "YourController", new { budget = Request.QueryString["budget"] });
    
    // 视图中直接使用(配合序列化更安全)
    var url = @Json.Encode(ViewBag.SafeBudgetUrl);
    

    这种方式不仅防XSS,还能保证URL格式规范,自动处理参数中的特殊字符(比如空格、中文)的编码问题。

  • 额外防护:配置内容安全策略(CSP)
    作为补充防护,你可以给页面添加CSP响应头,限制浏览器仅执行可信来源的脚本。就算出现XSS漏洞,恶意脚本也会被浏览器阻止:

    // 后端设置CSP头示例
    Response.Headers.Add("Content-Security-Policy", "script-src 'self'");
    

    这样浏览器只会执行本站域名下的脚本,攻击者注入的内联alert('a')会直接被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:07:39