XSS预防。处理

时间:2010-12-03 10:38:36

标签: javascript security xss

我想知道在文本输入字段中检查和删除"<script"是否足以阻止javascript代码注入攻击?

6 个答案:

答案 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

如果你阻止它,还有很多其他的。 转义(不删除)所有出现<"&都会更加简单和正确。