2011-10-08 41 views
0

我有一个文字控件用于显示来自数据库的HTML。我确实遇到了一些XSS问题,并实施了Anti-XSS安全运行时引擎(SRE)来自动编码所有的html标记。例如asp.net中的HTML编码问题

DB:<p align="center"></p>

防XSS编码它:

&#60;p align&#61;&#34;center&#34;&#62;&#160;&#60;&#47;p&#62 

然而,当我设置的从代码文本内容text属性后面,我期待的是字面控制将解码正确的html并显示呈现的版本。相反,它显示的是ENCODED版本。

因此,文字控制显示 - <p align="center"></p> postrender。我知道这是反xss的行动,但我怎样才能获得文字控制显示呈现的HTML而不是标记?

ASPX - <asp:Literal ID="ltPageContent" runat="server"></asp:Literal> 
Code behind on page load - ltPageContent.Text = getPageContent("home")'Gets HTML from DB 

我在这里错过了一些简单的东西吗?

回答

1

不考虑XSS风险,也可以在这里忘记LiteralControl和使用内嵌代码来代替:

ASPX:

<%= Server.HtmlDecode(YOUR_STRING) %> 
+0

谢谢,但我不希望在aspx中有任何代码。任何解决方案在代码隐藏? –

+1

好吧,你需要一个服务器端的html控件作为你的容器,并将你的html字符串设置为它的InnerHtml属性。例如,将

放入您的aspx页面,然后后面的代码可以是“container.InnerHtml = Server.HtmlDecode(YOUR_STRING);” –

0

您也可以使用“模式”属性与“直通”的价值:

<asp:Literal ID="ltPageContent" runat="server" Text="Html Here" 
      Mode="PassThrough" /> 

我建议在数据通过这里之前检查XSS。