我有一個用戶表單,它允許用戶提交HTML格式的數據。 html本身受到PHP strip_tags的限制,但當然不會完成檢查等。想要'沙盒'用戶表單提交HTML
我的基本問題是,如果用戶留下標籤未關閉,例如<a>
標籤,那麼以下所有內容,包括隨後的頁面內容在用戶內容顯示區域「外部」,現在可能會變形。
檢查正確的標記完成是我會看到的一個解決方案,但理想情況下,我想以某種方式防止用戶HTML化內容遠離網站的其他部分。
我有一個用戶表單,它允許用戶提交HTML格式的數據。 html本身受到PHP strip_tags的限制,但當然不會完成檢查等。想要'沙盒'用戶表單提交HTML
我的基本問題是,如果用戶留下標籤未關閉,例如<a>
標籤,那麼以下所有內容,包括隨後的頁面內容在用戶內容顯示區域「外部」,現在可能會變形。
檢查正確的標記完成是我會看到的一個解決方案,但理想情況下,我想以某種方式防止用戶HTML化內容遠離網站的其他部分。
使用HTML Purifier。非常徹底和易於使用的獨立插件。它確保所有標記都是有效的XHTML,並且還可以防止XSS攻擊。
我建議在用戶的數據庫中保存兩份用戶的HTML輸入。一個副本將是他們提交的原始表單,稍後他們可以使用它們來編輯頁面,第二個副本將由輸出時顯示的HTML Purifier消毒。存儲清理版本比在每次頁面加載時運行HTML Purifier要快得多。
實現完全隔離的唯一方法是使用iframe。
另一種解決方案是限制用戶可以使用的html標籤。將用戶限制爲段落和內嵌標籤(string
,em
,a
等)將確保您可以將所有內容封裝在div標籤中,而不必擔心打開的標籤。
不幸的是我試過用div標籤包裝內容,但無論如何它都會「溢出」。 – 2010-06-03 18:42:43
檢查用戶提交的內容是否使用div(其他其他塊級別的標籤),這可能會導致包裝div問題。如果不是,那麼可能會有不幸的事情與你的HTML不一致。我會開始玩你的CSS(把紅色的邊框和固定/圍繞你的div的高度)來隔離問題。 – 2010-06-03 18:47:50
只需使用一些函數來完成未封閉的標籤。 這可以幫助你: http://concepts.waetech.com/unclosed_tags/
這是完美的,謝謝你的建議! – 2010-06-07 03:04:32