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

时间:2018-07-30 07:52:35

标签: html python-3.x validation pyramid

我有一个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

1 个答案:

答案 0 :(得分:3)

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

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

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