Frage

eine Python-Web-Anwendung Programmierung, ich mag einen Textbereich erstellen, in dem der Benutzer Text in einer leichten Markup-Sprache eingeben. Der Text wird auf der Seite zu einer HTML-Vorlage und betrachtet importiert werden. Heute verwende ich diesen Befehl, um den Textbereich zu erstellen, die Benutzer jeden (html) Text eingeben kann:

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

Wie kann ich das ändern, so dass nur ein Teil (sicher, schließlich leichte) Markup erlaubt? Alle Vorschläge, einschließlich Desinfektionsmittel sind willkommen, solange sie leicht mit Python integriert.

War es hilfreich?

Lösung

Mit dem Python Abschlag Implementierung

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

Es ist sehr flexibel, können Sie verschiedene Erweiterungen verwenden, erstellen Sie Ihre eigene etc.

Andere Tipps

könnten Sie umstrukturiert Text . Ich bin mir nicht sicher, ob es eine Hygienisierung Option hat, aber es ist gut von Python unterstützt, und es erzeugt alle möglichen Formate.

Diese einfache desinfizierende Funktion verwendet eine weiße Liste und ist in etwa die gleiche wie die Lösung von python-html -sanitizer-Wäscher-Filter , sondern ermöglicht auch die Verwendung von Attributen zu begrenzen (da Sie wahrscheinlich nicht wollen, jemand verwenden, unter anderem des style Attribut):

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:', '')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top