2010-06-03 96 views
2

我有一個用戶表單,它允許用戶提交HTML格式的數據。 html本身受到PHP strip_tags的限制,但當然不會完成檢查等。想要'沙盒'用戶表單提交HTML

我的基本問題是,如果用戶留下標籤未關閉,例如<a>標籤,那麼以下所有內容,包括隨後的頁面內容在用戶內容顯示區域「外部」,現在可能會變形。

檢查正確的標記完成是我會看到的一個解決方案,但理想情況下,我想以某種方式防止用戶HTML化內容遠離網站的其他部分。

回答

2

使用HTML Purifier。非常徹底和易於使用的獨立插件。它確保所有標記都是有效的XHTML,並且還可以防止XSS攻擊。

我建議在用戶的數據庫中保存兩份用戶的HTML輸入。一個副本將是他們提交的原始表單,稍後他們可以使用它們來編輯頁面,第二個副本將由輸出時顯示的HTML Purifier消毒。存儲清理版本比在每次頁面加載時運行HTML Purifier要快得多。

+0

這是完美的,謝謝你的建議! – 2010-06-07 03:04:32

2

實現完全隔離的唯一方法是使用iframe

另一種解決方案是限制用戶可以使用的html標籤。將用戶限制爲段落和內嵌標籤(stringem,a等)將確保您可以將所有內容封裝在div標籤中,而不必擔心打開的標籤。

+0

不幸的是我試過用div標籤包裝內容,但無論如何它都會「溢出」。 – 2010-06-03 18:42:43

+0

檢查用戶提交的內容是否使用div(其他其他塊級別的標籤),這可能會導致包裝div問題。如果不是,那麼可能會有不幸的事情與你的HTML不一致。我會開始玩你的CSS(把紅色的邊框和固定/圍繞你的div的高度)來隔離問題。 – 2010-06-03 18:47:50

+0

嗯,你確定?我想一個簡單的例子,我看到了溢出的問題... [開始代碼]

This is a test
這一點與[結束碼] 上面的代碼導致該問題。 – 2010-06-03 20:52:45