2011-10-08 88 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。