跨站点脚本问题

Cross-Site Scripting Issue

Fortify 将我的 ASP.NET 代码中的以下行识别为关键问题。我该如何解决发现的跨站脚本问题?

<asp:Literal ID="litParticipants" runat="server" Text='<%# Eval("Participants") %>' />

以下将作为标签的修复。但是,我不确定文字的修复方法???

Server.HtmlEncode((string)Eval("System").ToString())

如果您使用的是 .NET 4.5,则应使用 AntiXssEncoder class 对输出进行 HTML 编码 (System.Web.Security.AntiXss.AntiXssEncoder.HTMLEncode())。你上面的代码看起来像:

<asp:Literal ID="litParticipants" runat="server" Text='<%# AntiXssEncoder.HTMLEncode(Eval("Participants")) %>' />

您还可以将应用的默认编码器设置为 web.config 中的 AntiXSSEncoder,如下所示:

<httpRuntime ...encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

如果您使用的是旧版本的 .NET,则需要获取 Microsoft Web Protection Library。

使用 Server.HTMLEncode() 时要小心,它不会对所有字符进行编码。您需要使用更好的编码器,例如 AntiXSS 编码器或来自 OWASP 的 Enterprise Security API (ESAPI)。