在我的Python/Flask应用程序中,我希望安全地接受用户输入,然后在另一个页面上呈现它。类似于本网站上所做的事情(参考-https://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites)。
有没有一个python库可以正确地清理这些输入,或者有一些简单的方法可以做到这一点?
看看Mozilla的bleach
。
示例
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>
<script> alert("Boom!")</script>
我在我的烧瓶扩展(烧瓶MDE(的示例应用程序中使用了它。欢迎在这里查看。