2012-01-23 9 views

答えて

11

あなた自身のフィルタを書くことができます。 scrubber libraryは、HTMLを整理するのにかなり良いです。フィルタは返された文字列をjinja2.Markupにラップする必要がありますので、テンプレートはそれを再エスケープしません。

編集:コード例

import jinja2 
import scrubber 

def sanitize_html(text): 
    return jinja2.Markup(scrubber.Scrubber().scrub(text)) 

jinja_env.filters['sanitize_html'] = sanitize_html 
11

あなたはホワイトリストのアプローチを使用して提出上の入力を解析することをお勧めします - いくつかの良い例in this questionviable optionsはそこにあります。

{{comment|safe}} 
6

Bleachライブラリは非常によく行うことができます:あなたはそれをやったら

、あなたはsafeフィルターでエスケープすべきでないHTMLが含まれます任意の変数をマークすることができます。例えば

、変数「jinja_env」の範囲であると仮定すると:次にテンプレートであなたのようなものかもしれません

from bleach import clean 
from markupsafe import Markup 

def do_clean(text, **kw): 
    """Perform clean and return a Markup object to mark the string as safe. 
    This prevents Jinja from re-escaping the result.""" 
    return Markup(clean(text, **kw)) 

jinja_env.filters['clean'] = do_clean 

:あなたはまた、呼び出し可能に使用することができます

<p>{{ my_variable|clean(tags=['img', 'b', 'i', 'em', 'strong'], attributes={'img': ['src', 'alt', 'title', 'width', 'height']}) }}</p> 

を(代わりに(例えば、srcが有効なURLを提供しているかどうかを確認するなど)属性をより完全に検証することができます。ドキュメントにan exampleが表示されます。

関連する問題