跨站点脚本¶
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
直接将用户输入(例如,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.");
}
}
参考资料¶
OWASP:XSS(跨站点脚本)防御备忘单。
维基百科:跨站点脚本。
常见弱点枚举:CWE-79。
常见弱点枚举:CWE-116。