2009-11-09 59 views
3

我一直在四處尋找現有的Python庫紡織的風格來格式化文本的用戶輸入。「安全」蟒蛇HTML文本格式(ALA紡織)

如果這只是我進入它,只是紡織本來很好,但由於輸入是爲一個Django應用程序,將用戶輸入並顯示,同時仍保持一些格式。

在我看到的現有庫中,我設法發現了一些漏洞。他們有時不會按照他們應有的方式逃避事情,會讓我直接輸入HTML,並且列表繼續執行。

那麼我可以使用哪些轉換引擎的建議?

回答

6

如果你使用Django,你可以嘗試安全降價:

{% load markup %} 

{{ foo|markdown:"safe" }} 

你需要安裝降價,並django.contrib.markupsettings.py應用。

如果要清理上保存的HTML,我已經使用feedparser的的sanitize(http://www.feedparser.org/)有好運氣。

import feedparser 

body = feedparser._sanitizeHTML(body, 'utf8') 
+0

有趣的是,這還沒有上來在我的搜索,直到如今。我會嘗試一下。謝謝。 – cwj 2009-11-09 20:57:15

+0

此線程舊,但從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

2

如果你正在尋找一個紡織品的解決方案: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)