我接受用戶在我有一個小論壇上的輸入。這是我做用戶的輸入:Django安全。處理用戶輸入。是html.strip_tags足夠還是應該使用漂白劑?
首先,所謂的「html.strip_tags」從django.utils.html用戶的cleaned_data [輸入。
將其保存到數據庫。 Postgre。
查詢文本並使用正則表達式用br替換\ n並顯示用戶輸入的空格。
然後,我{{text | safe}}顯示文本(如果我不標記它是安全的,它不會在段落之間顯示空格,但是會顯示br標籤)。
最後我在文本上使用了一些jquery插件:Autolinker.js來檢測和「urlize」超鏈接和trunk8來控制它的長度。
那麼,因爲我做{{text | safe}}我擔心惡意輸入,是不是html.strip_tags夠了?
約strip_tags的寫入文件:
「試圖刪除任何看起來像是從字串的HTML標籤,這是包含在<什麼>絕對沒有擔保提供了有關生成的字符串完全是HTML安全。因此,不要將strip_tag調用的結果標記爲安全,而不要首先轉義它,例如使用escape()。
了Python的死神的文檔:
「漂白劑的主要目的是清理被允許包含一些HTML作爲標記,是被包含在一個更大的頁面的內容用戶輸入」
因爲用戶輸入不允許包含任何html,我的猜測是漂白是不需要的..但我是一種noob,所以你的建議將不勝感激。
因爲我讀到將html保存到數據庫是不安全的。但無論如何,如果我使用漂白劑去除標籤,那麼執行'linkify()'並在正則表達式中插入
標籤,當我查詢數據時,我將不得不做'{{text | safe}}',你認爲它會安全嗎? – alejoss
那麼,如果你正確地清理你的html並且你信任清理過程,那麼嵌入豐富文本的唯一方法就是在模板中將其定義爲'safe'。 – haki