金字塔:从表单输入中删除 HTML 标签

Pyramid: Removing HTML Tags From Form Input

我有一个 Pyramid 应用程序在我的模板中使用 <form>

我想删除用户尝试在 <input> 标签中提交的所有 HTML 标签。

我该怎么做? (我想要一种安全的方式来做到这一点,因为 JavaScript 在客户端运行)

如果可能的话,我也请求一个简单的例子。

这是我的例子:

<form method="GET" action="submit">
    <input type="text" name="username"/>
</form>

在我的金字塔视图中我有:

@view_config(name='submit', renderer='templates/submit.jinja2')
def submit(request):
    var = request.params['username']
    return {'input': var}

这里如果用户尝试输入<a href="google.com"> John Doe </a>var也会是<a href="google.com"> John Doe </a>,但是,我只需要John Doe

我对此的默认回答是,您实际上可能不应该 删除 这些标签,而是在将它们写入客户端时对它们进行正确编码。如果有人希望他们的用户名是 Lyndsy <b>Simon</b>,那应该没问题。在输出上转义它意味着您不必担心在每个输入上都这样做,并且如果您没有在某处正确转义输入或攻击者能够绕过它,则没有潜在的代码注入向量。

也就是说,如果删除输入中的 HTML 标签绝对是您想要采用的路径,我过去使用过 bleach 并推荐它。我的用例是当我需要接受 some HTML 标签(粗体、斜体等),但去除其他标签时。 Bleach 允许您设置允许标签的白名单以满足此需求。

请注意,如果您决定这样做,您仍然可以使用漂白剂去除输出标签而不是输入标签。