金字塔:从表单输入中删除 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 允许您设置允许标签的白名单以满足此需求。
请注意,如果您决定这样做,您仍然可以使用漂白剂去除输出标签而不是输入标签。
我有一个 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 允许您设置允许标签的白名单以满足此需求。
请注意,如果您决定这样做,您仍然可以使用漂白剂去除输出标签而不是输入标签。