我想知道在文本输入字段中检查和删除"<script"
是否足以阻止javascript代码注入攻击?
答案 0 :(得分:18)
不,阻止特定案例是不够的 - 迟早会有人提出一个你没想到的人为案例。
对于最常见的({3}},请参阅此list of XSS attacks(其他,可能存在更多异国情调)。您需要将允许的语法列入白名单,而不是假设已知向量旁边的所有内容都应该正常。
答案 1 :(得分:9)
这还取决于您对输入的处理方式。这是我在一些贺卡服务的真实网站上找到的简化示例:
它包含一个选择字段,您可以使用该字段选择文本的颜色:
<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">
。
所以关键是永远不要相信用户的任何输入,甚至不能信任你定义的预定义值。
答案 2 :(得分:4)
不幸的是,不存在各种各样的攻击,例如通过<img>
元素执行JavaScript。我建议在服务器端的任何平台上使用XSS库。
这是我的意思的一个例子:
<img src="javascript:alert('hi');">
<input type="image" src="javascript:alert('hi');">
...这些示例本身并不是无害的,但您会看到其他方式如何执行JavaScript。哪个漏洞利用取决于浏览器,但请注意还有其他方法。
答案 3 :(得分:2)
由于css表达式,myspace被黑了。黑名单不起作用,白名单是唯一的途径。
答案 4 :(得分:1)
除了Nick提到的那些,你还应该关注JavaScript事件,例如:“onload”,“onclick”,...
答案 5 :(得分:1)
<s<scriptcript
变为<script
。
如果你阻止它,还有很多其他的。 转义(不删除)所有出现<
,"
和&
都会更加简单和正确。