我有一个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
答案 0 :(得分:3)
我对此的默认答案是,您可能实际上不应该删除这些标签,而是在将它们写入客户端时对其进行正确编码。如果有人希望其用户名为Lyndsy <b>Simon</b>
,那应该没问题。在输出上转义它意味着您不必担心每个输入都这样做,并且如果您没有在某个地方正确地转义输入或攻击者可以绕过它,也就不必担心潜在的代码注入向量。 / p>
也就是说,如果绝对要删除输入中的HTML标记是您要采用的路径,那么我过去曾使用bleach并推荐它。我的用例是当我需要接受 some HTML标记(粗体,斜体等)而去除其他HTML标记时。 Bleach允许您设置允许标签的白名单来满足此需求。
请注意,如果您决定这样做,仍然可以使用漂白剂在输出而不是输入上剥离标签。