一般的富文字編輯器比如百度的ueditor,編輯後直接返回一段html代碼,為了防止xss,想問問大家如何過濾後入庫是比較好的解決方案?(前台讀取後直接顯示html,比如這個問題本身就是用富文字編輯器提交的)
目前知道可以用:
- 富文字編輯器設定純文字粘貼(這個可能會造成使用者使用不方便,但sf的編輯器好像就是這麼做的,超連結倒是保留了)
- 一些類庫比如 Kses PHP HTML 過濾類設定要保留的標籤和標籤屬性
大家有什麼好的高效的做法嗎?
回複內容:
一般的富文字編輯器比如百度的ueditor,編輯後直接返回一段html代碼,為了防止xss,想問問大家如何過濾後入庫是比較好的解決方案?(前台讀取後直接顯示html,比如這個問題本身就是用富文字編輯器提交的)
目前知道可以用:
- 富文字編輯器設定純文字粘貼(這個可能會造成使用者使用不方便,但sf的編輯器好像就是這麼做的,超連結倒是保留了)
- 一些類庫比如 Kses PHP HTML 過濾類設定要保留的標籤和標籤屬性
大家有什麼好的高效的做法嗎?
純文字展貼是用來減少無效html代碼數量的,在防範XSS方面沒有任何作用。用戶端的任何JS代碼在攻擊者面前都是裸的
如果只需要常見的富文本編輯,不需要直接改動html代碼,那麼可以考慮UBB code
如果必須直接支援html,可以找wordpress/drupal等開源項目的xss過濾器來用
對@帕奇式 的“拿起就用”方案不敢苟同。
如果目的是防XSS,在前端防是防不住的,一定需要在服務端過濾。
例如曾經人人網的日誌編輯框使用的是tinymce,前端帶了過濾功能(轉義大法),於是他們竟然在服務端就沒過濾!前端只要把JS禁了,讓tinymce載入失敗,露出裸的textarea來,就可以隨便注入JS代碼了。
所以防這個,不管前端防了多嚴,服務端一定都要再做一次。
狠一點,就把 "<" 和 ">" 轉義掉。
稍微寬鬆一點,就把script、iframe等標籤去掉。
這個問題的解決辦法很簡單
有多重方式一種是base64編碼解碼是一種
基本上就是轉義,保持了原樣輸出,
過濾這塊需要這樣操作,增加一個方法preg_match url的 凡是不是本站的都替換掉
看了看百度的ueditor,只能說很多東西設計得不夠自由和彈性。用關鍵字【過濾規則】也找不到在哪設定,所以還是建議不要用ueditor因為還不夠成熟!
那建議你可以:
- KindEditor拿起就用
- wysihtml5自訂樣式,因為這是個核心
基於wysihtml5製作富文字編輯器可以參考這裡bootstrap-wysihtml5。
以上兩個富文字編輯器都有過濾機制,你可以閱讀文檔瞭解一下便知道。