CodeQL 文档

跨站点脚本

ID: cs/web/xss
Kind: path-problem
Security severity: 6.1
Severity: error
Precision: high
Tags:
   - security
   - external/cwe/cwe-079
   - external/cwe/cwe-116
Query suites:
   - csharp-code-scanning.qls
   - csharp-security-extended.qls
   - csharp-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

直接将用户输入(例如,HTTP 请求参数)写入网页,而未事先对其进行正确的净化处理,会导致出现跨站点脚本漏洞。

建议

为了防范跨站点脚本攻击,请考虑使用提供适当编码功能的库(例如 System.Net.WebUtility 类)在将不受信任的输入写入页面之前对其进行净化处理。有关其他可能的解决方案,请参阅参考资料。

示例

以下示例显示了直接写入服务器错误页面的页面参数,这使得网站容易受到跨站点脚本攻击。

using System;
using System.Web;

public class XSSHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext ctx)
    {
        ctx.Response.Write(
            "The page \"" + ctx.Request.QueryString["page"] + "\" was not found.");
    }
}

使用 WebUtility.HtmlEncode 方法净化用户控制的数据可以防止此漏洞

using System;
using System.Web;
using System.Net;

public class XSSHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext ctx)
    {
        string page = WebUtility.HtmlEncode(ctx.Request.QueryString["page"]);
        ctx.Response.Write(
            "The page \"" + page + "\" was not found.");
    }
}

参考资料

  • ©GitHub 公司
  • 条款
  • 隐私