我一直在四處尋找現有的Python庫紡織的風格來格式化文本的用戶輸入。「安全」蟒蛇HTML文本格式(ALA紡織)
如果這只是我進入它,只是紡織本來很好,但由於輸入是爲一個Django應用程序,將用戶輸入並顯示,同時仍保持一些格式。
在我看到的現有庫中,我設法發現了一些漏洞。他們有時不會按照他們應有的方式逃避事情,會讓我直接輸入HTML,並且列表繼續執行。
那麼我可以使用哪些轉換引擎的建議?
我一直在四處尋找現有的Python庫紡織的風格來格式化文本的用戶輸入。「安全」蟒蛇HTML文本格式(ALA紡織)
如果這只是我進入它,只是紡織本來很好,但由於輸入是爲一個Django應用程序,將用戶輸入並顯示,同時仍保持一些格式。
在我看到的現有庫中,我設法發現了一些漏洞。他們有時不會按照他們應有的方式逃避事情,會讓我直接輸入HTML,並且列表繼續執行。
那麼我可以使用哪些轉換引擎的建議?
如果你使用Django,你可以嘗試安全降價:
{% load markup %}
{{ foo|markdown:"safe" }}
你需要安裝降價,並django.contrib.markup
在settings.py
應用。
如果要清理上保存的HTML,我已經使用feedparser的的sanitize(http://www.feedparser.org/)有好運氣。
import feedparser
body = feedparser._sanitizeHTML(body, 'utf8')
你嘗試了包括django.contrib.markup庫?
如果你正在尋找一個紡織品的解決方案:PyTextile是Django的標記實際使用有textile_restricted()函數,由於某種原因,從未進入django.contrib.markup。您可以使用此功能提供受限制的紡織品。通過添加到模型調用textile_restricted,或使用自定義的模板標籤textile_restricted
,通過下面的代碼中定義的方法:
from django import template
from django.conf import settings
from django.utils.encoding import smart_str, force_unicode
from django.utils.safestring import mark_safe
register = template.Library()
def textile_restricted(value):
try:
import textile
except ImportError:
if settings.DEBUG:
raise template.TemplateSyntaxError("Error in {% textile %} filter: The Python textile library isn't installed.")
return force_unicode(value)
else:
return mark_safe(force_unicode(textile.textile_restricted(smart_str(value))))
textile_restricted.is_safe = True
register.filter(textile_restricted)
有趣的是,這還沒有上來在我的搜索,直到如今。我會嘗試一下。謝謝。 – cwj 2009-11-09 20:57:15
此線程舊,但從Django 1.5開始,由於Python標記版本<2.1中的安全缺陷,所以需要Python版本的Markdown *具有* => 2.1。 [更多信息](https://docs.djangoproject.com/en/1.5/ref/contrib/markup/#id1) – tatlar 2013-04-17 15:57:42