Python: безопасно отображать введенный пользователем код html - PullRequest
0 голосов
/ 28 апреля 2020

В моем приложении Python / Flask я хотел бы безопасно принять пользовательский ввод и затем отобразить его на другой странице. Нечто похожее на то, что делается на этом сайте (ref - https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites).

Есть ли библиотека python для надлежащей очистки такого ввода, или есть какой-то простой способ сделать это?

1 Ответ

2 голосов
/ 28 апреля 2020

Взгляните на bleach от Mozilla.

Пример

import bleach
html = """
<h1> Page Title </h1>
<script> alert("Boom!")</script>
"""
allowed_tags = [
    'a', 'abbr', 'acronym', 'b', 'blockquote', 'br',
    'code', 'dd', 'del', 'div', 'dl', 'dt', 'em',
    'em', 'h1', 'h2', 'h3', 'hr', 'i', 'img', 'li',
    'ol', 'p', 'pre', 's', 'strong', 'sub', 'sup',
    'table', 'tbody', 'td', 'th', 'thead', 'tr', 'ul'
]
# Attributes deemed safe
allowed_attrs = {
    '*': ['class'],
    'a': ['href', 'rel'],
    'img': ['src', 'alt']
}
# Sanitize the html using bleach &
# Convert text links to actual links
html_sanitized = bleach.clean(
    html,
    tags=allowed_tags,
    attributes=allowed_attrs
)
print(html_sanitized)

Выход

<h1> Page Title </h1>
&lt;script&gt; alert("Boom!")&lt;/script&gt;

Я использовал его в качестве примера приложения для моего flask расширение (Flask -MDE). Не стесняйтесь проверить это здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...