2011-03-16 59 views
1

我有一個頁面(使用母版頁),它具有一個DIV內的文字控件,其中我從數據庫記錄中加載HTML源代碼我無法控制(HTML來自MS Word文檔)。 我的頁面看起來不錯,直到我將文檔加載到文字中。然後,屬於母版頁的一些元素的樣式會受到影響。在我看來,我正在加載的文檔中有CSS樣式影響母版頁元素。如何防止DIV中的文字中的HTML代碼影響外部頁面樣式

任何想法如何我可以隔離外部頁面從我加載的HTML?

這裏是含有(外)網頁的一部分:

<tr> 
    <td colspan="4"> 
     <div id="sowDiv" style="overflow:scroll; width:800; height:500px"> 
      <!-- The literal control loads the MS Word HTML source --> 
      <asp:Literal runat="server" ID="sowLiteral" ></asp:Literal>                    
     </div> 
    </td> 
</tr> 

預先感謝。

回答

3

我建議使用IFrame與Http處理程序一起使用。

<tr> 
    <td colspan="4"> 
     <iframe src="GetContent.ashx?id=<%=Id%>" style="border:0px;" height="500px" width="800px">Loading...</iframe> 
    </td> 
</tr> 

在web.config中,下HttpHandlers的,你需要添加一個HTTP處理程序是:

<add verb="GET" path="GetContent.ashx" type="MyApp.ContentHandler"/> 

的HTTP處理程序將返回HTML的Word文檔(從數據庫) :

namespace MyApp 
{ 
    public class ContentHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      // This needs some better error handling 
      int id = (int) context.Request.QueryString.Get("id"); 

      // Get content from database 
      string content = GetContentById(id); 

      // Display the content 
      context.Response.Write(content); 
      context.Response.End(); 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

這將是可取的周圍添加HTTP處理一些額外的安全保證不能僅僅是改變了ID返回任何內容,未經授權的用戶,但是這應該作爲一個很好的 初始點。 (請注意,如果您確實需要從會話中獲取任何數據進行身份驗證,請不要忘記將IReadOnlySessionState添加到http處理程序中,以便它可以訪問會話)。

2

不允許在文字控制中出現意外的數據 - 在轉換層中接受輸入並將其轉換爲可接受的(被檢測的)輸出。

但是,由於這是一個很好的工作(除非有這樣的庫?:-),那麼,作爲一個快速「修復」,考慮一個iframe。

至少iframe可以一般揭示文字控制是否確實是罪魁禍首,儘管如此可以完整的HTML/CSS檢查。

快樂編碼。

+0

是,IFRAME是你想要的這個。還要記住這裏有HTML腳本注入的含義,因此無論您使用IFRAME還是DIV,您都需要清理HTML。 – Ben 2011-03-16 21:17:07

1

我的.aspx使用:

<div id="dvEjemplo" runat="server" style="border-style: inset; border-width: thin"> 
    <asp:Literal ID="litEjemplo" runat="server" Mode="encode" visible="false">  </asp:Literal> 
    <asp:Label ID="lblEjemplo" runat="server" Height="380px"></asp:Label> 

和代碼(aspx.cs)

public string Fundamento 
{ 
    set 
    { 
     this.litEjemplo.Text = value; 
     this.lblEjemplo.Text = this.litEjemplo.Text; 
    } 
} 
相關問題