【发布时间】:2010-12-03 10:38:35
【问题描述】:
我想知道从文本输入字段中检查并删除 "<script" 是否足以阻止 javascript 代码注入攻击?
【问题讨论】:
-
我很高兴看到压倒性的答案是 NO..
标签: javascript security xss
我想知道从文本输入字段中检查并删除 "<script" 是否足以阻止 javascript 代码注入攻击?
【问题讨论】:
标签: javascript security xss
不,阻止特定案例是不够的 - 迟早会有人想出一个你没想到的人为案例。
查看这个list of XSS attacks 了解最常见的(可能存在其他更奇特的)。您需要将允许的语法列入白名单,而不是假设已知向量之外的所有内容都应该没问题。
【讨论】:
这还取决于您对输入所做的操作。这是我在某个贺卡服务的真实网站上找到的一个简化示例:
它包含一个选择字段,您可以使用它选择文本的颜色:
<select name="color">
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>
在贺卡页面上使用的值未经过滤。所以发送的POST数据很容易被篡改、更改
color=red
类似
color=red%22+onload%3D%22alert(%27foo%27)
这会导致
<font color="red" onload="alert('foo')">
而不是<font color="red">。
所以重点是永远不要相信用户的任何输入,甚至不相信你定义的预定义值。
【讨论】:
不幸的是,有多种攻击可用,例如通过<img> 元素执行JavaScript。我建议在服务器端的任何平台上使用 XSS 库。
这是我的意思的一个例子:
<img src="javascript:alert('hi');">
<input type="image" src="javascript:alert('hi');">
...并非这些示例本身是无害的,但是您会看到还有其他方法可以执行 JavaScript。哪些漏洞利用取决于浏览器,但请注意还有其他方法。
【讨论】:
myspace 因 css 表达式而被黑客入侵。黑名单不起作用,白名单是唯一的途径。
【讨论】:
除了 Nick 提到的那些之外,您还应该注意 JavaScript 事件,例如:“onload”、“onclick”、...
【讨论】:
<s<scriptcript 删除一次后变为<script。
如果你阻止它,还有很多其他的。 转义(不删除)所有出现的<、" 和& 更简单、更正确。
【讨论】:
<img onload=、<span onmouseover= 等。即使你以某种方式完美地将所有可能的东西列入黑名单,明天浏览器也会添加新的(这经常出现在标准讨论中,答案总是“我们将添加一个新的向量无论如何,因为这些网站已经不安全了”)。