當我寫入模型的TextField時,如何關閉Django的自動HTML轉義?在Django的TextField中禁用HTML轉義
29
A
回答
84
剛使用django的safe過濾器。在您的模板,你會做這樣的事情:
{{ instance.my_text_field|safe }}
15
一種方式做到這一點是把一個函數模型將返回標記爲安全數據:
from django.utils.safestring import mark_safe
class MyModel(models.Model):
my_textfield = models.TextField()
def display_my_safefield(self):
return mark_safe(self.my_textfield)
然後在模板中,你將不得不使用:
{{ instance.display_my_safefield }}
0
我認爲更好的方式來做到這一點是因爲@Daniel瓦薩洛描述。
爲什麼?
因爲這樣一來,你可以在你想顯示沒有逃逸,特別是防止交叉站點腳本(XSS )的HTML代碼做一些安全操作。
例如,您可以檢查my_textfield
是否包含腳本標記。
如果是這樣,將該實例標記爲惡意並返回轉義版本的my_textfield
(正常的Django行爲)。
否則,請使用mark_safe
返回標記爲安全的HTML代碼。
這裏:
from django.utils.safestring import mark_safe
class MyModel(models.Model):
my_textfield = models.TextField()
is_malisious = models.BooleanField(default=False)
def display_my_safefield(self):
if '<script>' in self.my_textfield:
self.is_malicious = True
self.save()
return self.my_textfield
return mark_safe(self.my_textfield)
而這一切不需要任何遷移到數據庫。
替代做法
我認爲你可以通過覆蓋模型的save()
方法,以及包括檢查,並針對其內部惡意內容的任何其他必要的操作做到這一點的安全操作。然後,如果您確保保存的內容安全,則可以使用@bjunix解決方案。
相關問題
- 1. 轉義HTML在Django
- 2. TextField在Django中採用unicode
- 3. django在json中爲html轉義
- 4. 在Zend_Form_Element_Multicheckbox中禁用轉義
- 5. 在textField編輯過程中禁用旋轉功能?
- 6. 在TextField中渲染django應用程序
- 7. TinyMCE禁用轉義
- 8. 在dojo中禁用轉義鍵
- 9. 在Appengine中禁用jinja2自動轉義
- 10. 在javascript中轉義/轉義html?
- 11. 如何在模型TextField中的HTML中使用Django模板變量?
- 12. Django - 在模型中存儲未轉義的html
- 13. 可以在Django TextField中放置html代碼嗎?
- 14. CKEditor禁用HTML轉換
- 15. 在Python中轉義HTML
- 16. 在HAML中轉義HTML
- 17. 在JavaScript中轉義HTML
- 18. 在肥皂中轉義html
- 19. Html在java中轉義?
- 20. 如何讓Django避免在ModelAdmin中轉義HTML
- 21. HAML中的markdown中的HTML轉義HTML
- 22. 在django中禁用塊
- 23. 使用PlayFramework2在JSON中轉義HTML
- 24. 在Javascript中使用HTML轉義字符
- 25. html form vertical textfield
- 26. 在自定義指令中轉義HTML
- 27. 在iPad旋轉中的textfield動畫
- 28. Django - 管理:list_display TextField
- 29. 在DOM中將轉義的HTML內容轉換爲HTML
- 30. 在html中禁用輸入
我非正式配音你接受的答案。謝謝! – mitchf 2010-12-24 06:16:17
作爲警報,這允許XSS攻擊。 Javascript標籤可以用來輸入惡意代碼。 – Filipe 2016-08-11 18:07:31
對,你應該小心這一點,只適用於'安全'過濾器的內容,你可以信任。這就是過濾器名稱所暗示的; ) – bjunix 2016-08-24 09:31:59