2016-08-12 110 views
0

我使用tinymce作爲django中的博客編輯器。我得到的輸出是純HTML,我從編輯器的DOM中提取。同樣存儲在數據庫中,並在用戶訪問該頁面時呈現。Tinymce在django中驗證編輯器數據

這種方法雖然簡單,但可以導致腳本標記注入到同一個。我想知道的是如何防止它們,以便我保存的數據在編輯器中有效,並且沒有被篡改。代碼timymce是

tinymce.init({ 
    selector: 'div.editor', 
    theme: 'inlite', 
    plugins: 'image table link paste contextmenu textpattern autolink', 
    insert_toolbar: 'quickimage quicktable', 
    selection_toolbar: 'bold italic | quicklink h2 h3 blockquote', 
    inline: true, 
    paste_data_images: true, 
    content_css: [ 
    '//www.tinymce.com/css/codepen.min.css' 
    ] 
}); 

,並提交表格時,我只是張貼的內容下div.editor。就是這個正確的方式去還是有一些其他的方法。另外,從安全角度來看,我怎麼能確定數據不包含腳本或任何其他類型的跟蹤數據。

回答

0

您可以使用TinyMCE中的valid_elements/extended_valid_elements配置選項來控制您想要允許的標籤。這將幫助您確保TinyMCE只允許您想要的標籤。

話雖這麼說,你不能假定客戶端驗證是足以確保您的應用程序是無效的HTML,注入攻擊,XSS安全等

現實的情況是,我可以張貼數據到應用程序使用其他工具(CURL等),以便我不真正通過您的用戶界面。如果您錯誤地配置TinyMCE,您可能會在沒有意識到您已經這樣做的情況下允許使用標籤。在將數據存儲到數據庫之前,您應始終驗證數據服務器端 - 這是確保您保存的內容「安全」的唯一方法。

+0

這正是我想知道的,如何執行驗證服務器端?有沒有在Django的任何應用程序,我可以使用相同的。或者我最近偶然發現了編輯器的設置內容。這會刪除腳本標籤嗎? – georoot

+0

如果你想在Django中進行服務器端驗證,我會在標題和標籤特別指出的地方創建一個問題。配置TinyMCE的「valid_elements」將限制TinyMCE將接受的內容,但如上所述,假設某人不想欺騙。 –