2011-04-24 25 views
1

我正在爲客戶端實現TinyMCE,以便他們可以通過他們網站的管理面板中簡單,熟悉的界面來編輯前端內容。TinyMCE,PHP和MySQL:安全性和轉義性問題

我以前從未使用過TinyMCE,但注意到您可以插入任何您想要的標記,並且可以愉快地將其保存到MySQL數據庫中,假設您在通過TinyMCE運行之前不會逃脫TinyMCE的內容查詢。

你甚至可以插入單引號,並讓它完全打破你的SQL查詢。

但當然,當我確實轉義內容時,像段落標籤這樣的良性表現形式被轉換爲HTML實體,所以WYSIWYG編輯器的全部內容都被擊敗了,因爲實體在顯示時會吐出來存儲在前端的內容。

那麼有沒有一種方法可以「選擇性地」從TinyMCE中「跳出」內容,以保持像P和BR這樣的無辜標籤,但可以擺脫像SCRIPT,IFRAME等危險的標籤?我真的不希望使用str_replace()或其他方式手動編碼和解碼它們,但我寧願不給我的客戶端一個大的安全漏洞。

謝謝。

回答

2

對不起,老兄,我想說這是一個TinyMCE作者的問題,所以我建議你問:http://tinymce.moxiecode.com/enterprise/support.php ...我相信他們只會樂意回答(只需一小筆費用) ,我懷疑這可能是其中的一個FAQ。

這只是我猜你會非常幸運,如果你在堆棧溢出中碰到另一個TinyMCE用戶(更不用說那個TinyMCE用戶了),「一般編程論壇」......雖然我注意到有目前837個問題在這個論壇上標記爲「tinymce」;你有沒有嘗試過搜索它們?也許這其中有一個指針?

乾杯。基思。

編輯:是的,Making user-made HTML templates safe或多或少是用不同的詞語提出的同樣的問題,它有(看起來無知的我)幾個答案,提出實際的解決方案。我剛剛搜索了「Tiny MCE html安全性」的堆棧溢出。

2

這就像抱怨你可以在Microsoft Word中寫出頑皮的單詞,並且Word應該爲你過濾它們。或者向通用汽車抱怨他們製造的汽車可以用作銀行搶劫的逃生車。 TinyMCE的工作是成爲在線編輯,而不是內容警察。

如果您需要禁止某些標籤,請在使用strip_tags()提交文檔時將其刪除。或者更好的是,HTMLpurifier更加符合防彈消毒。如果嵌入式引號破壞你的SQL,那你爲什麼不通過mysql_real_escape_string()或者先使用PDO準備好的查詢來傳遞提交的文檔? MCE不知道服務器端的處理是什麼,也不應該關心。這取決於你決定如何處理數據,因爲只有你知道它的最終目的是什麼。

無論如何,請記住所有這些編輯器都在客戶端工作。你可以使TinyMCE成爲防彈和嚴格的編輯器,但它仍然在客戶端上運行。沒有什麼說惡意用戶無法完全繞過它,並提交他們想要的所有嵌入式引號和錯誤標籤。清理數據的最終責任是落在服務器上運行的代碼上,因爲它是最後一道防線,也是唯一可以確保數據庫保持原始狀態的數據。別的什麼都是豬的口紅。