如何避免在ass:literal control上使用xss?

时间:2018-07-06 09:02:22

标签: c# asp.net

  string myContent="Hello"
  System.Web.UI.Webcontrols.Literal literal1=new System.Web.UI.Webcontrols.Literal();
  literal1.Text="<b>" + myContent + "</b><table><tr><td>HI</td></tr></table>" ;

但是在这种情况下,我必须对文字控件文本值进行编码(原因是要防止文字控件受到XSS攻击。)。我正在使用asp.net c#。

所以我做的是

literal1.Text= AntiXssEncoder.HtmlEconde("<b>" + myContent + "</b><table><tr><td>HI</td></tr></table>");

所以输出应该是

<b>Hello</b><table><tr><td>HI</td></tr></table>

当我进行编码时,我不需要上面的输出(我的标记的纯文本)。我希望它呈现为

你好
“ HI->应该已经打印在html标记内”

我还知道,如果我对文字控件进行编码,则文字控件的结果将只是纯文本。我想对文字控件进行编码,而且我不希望我的文字控件的文本呈现为纯文本。任何帮助都是可观的。

2 个答案:

答案 0 :(得分:0)

回答您的第一个问题:为防止XSS将文本插入Label中,然后将其添加到类型为“ b”的HtmlGenericControl中,用如下粗体标签将其环绕:

HtmlGenericControl bold = new HtmlGenericControl("b");
Label myContent = new Label();
myContent.Text = "Hello and some special characters <>";
bold.Controls.add(myContent);

Label-控件将对内部的每个特殊字符进行编码,这应该可以防止任何XSS攻击。

对于您问题的新表部分:我建议不要在Literal内构造整个DOM。那是非常糟糕的风格,只有在没有其他方法的情况下才应使用。请改用ASP.NET API中的可用类(即Table)。

答案 1 :(得分:0)

您可以简单地做到:

literal1.Text= "<b>" + HttpUtility.HtmlEncode(myContent) + "</b>";

或者更好的方法是,使用label-control将CSS类添加到font-weight:bold;