4

Python Webアプリケーションをプログラミングして、ユーザーが軽量マークアップ言語でテキストを入力できるテキスト領域を作成したいと思います。テキストはhtmlテンプレートにインポートされ、ページに表示されます。今日、私はこのコマンドを使用してtextareaを作成します。これにより、ユーザーは任意の(html)テキストを入力できます。

my_text = cgidata.getvalue('my_text', 'default_text')
ftable.AddRow([Label(_('Enter your text')),
               TextArea('my_text', my_text, rows=8, cols=60).Format()])

一部の(安全で、最終的には軽量の)マークアップのみが許可されるようにこれを変更するにはどうすればよいですか?Pythonと簡単に統合できる限り、消毒剤を含むすべての提案を歓迎します。

4

3 に答える 3

8

Pythonマークダウンの実装を使用する

import markdown
mode = "remove" # or "replace" or "escape"
md = markdown.Markdown(safe_mode=mode)
html = md.convert(text)

非常に柔軟性があり、さまざまな拡張機能を使用したり、独自の拡張機能を作成したりできます。

于 2009-08-03T18:49:43.840 に答える
2

再構成されたテキストを使用できます。サニタイズオプションがあるかどうかはわかりませんが、Pythonで十分にサポートされており、あらゆる種類の形式が生成されます。

于 2009-08-03T18:08:18.493 に答える
1

この単純なサニタイズ関数はホワイトリストを使用し、 python-html-sanitizer-scrubber-filterのソリューションとほぼ同じですが、属性の使用を制限することもできます(おそらく、誰かに使用させたくないため、属性style):

from BeautifulSoup import BeautifulSoup

def sanitize_html(value):
    valid_tags = 'p i b strong a pre br'.split()
    valid_attrs = 'href src'.split()
    soup = BeautifulSoup(value)
    for tag in soup.findAll(True):
        if tag.name not in valid_tags:
            tag.hidden = True
        tag.attrs = [(attr, val) for attr, val in tag.attrs if attr in valid_attrs]
    return soup.renderContents().decode('utf8').replace('javascript:', '')
于 2009-08-03T20:42:23.770 に答える