如果从用户输入中删除“ <”和“>”,我可以安全使用XSS吗?

时间:2019-07-12 00:52:24

标签: python sanitize

让我的应用接受用户输入:

1,2,3,4

将其提交到我的后端服务器,然后返回

<table><tr><th>1</th><th>2</th><th>3</th><th>4</th></tr></table>

一个潜在的安全隐患是我的用户是否上传:

<script>alert('!')</script>,2,3,4

我能仅通过从用户输入中删除<>来阻止所有危险的XSS攻击吗(如下面的Python中所示),或者还有其他可能伤害我的字符吗?

data = data.replace('>','').replace('<','')

我将使用模板语言清理(Django),但是由于我在后端制作了自己的HTML,因此不能这样做,因为那样也将清理我的表。

1 个答案:

答案 0 :(得分:1)

  

如果我从用户输入中删除“ <”和“>”,我可以安全使用XSS吗?

不。还有很多种其他方式,可以将未经过滤的用户输入用于利用。例如,考虑一个设计不良的软件,该软件允许用户设置元素的颜色:

<element style="color: $COLOR" />

恶意用户可以将$COLOR设置为字符串

blue" onload="alert(1)

产生输出

<element style="color: blue" onload="alert(1)" />

请注意,像Bleach这样的输入“消毒”库在这里无济于事,因为输入在技术上不包含标记!唯一的 general 解决方案对于在如何以及在何处允许将用户输入插值到标记中持谨慎态度。

  

我将使用模板语言清理(Django),但是由于我在后端制作了自己的HTML,因此不能这样做,因为那样也将清理我的表。

我不确定您在这里关心什么。 Django模板中的过滤功能仅适用于模板中使用的内容,不适用于应用程序中的其他地方。