XSS预防.处理<脚本就足够了?

Kar*_*lth 14 javascript security xss

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

Pis*_*3.0 18

不,阻止特定案件是不够的 - 迟早,有人会想出一个你没想到的人为案例.

请参阅此最常见的XSS攻击列表(其他,可能存在更多异国情调).您需要将允许的语法列入白名单,而不是假设已知向量旁边的所有内容都应该正常.

  • 我特别喜欢žscriptualert(EXSSE)ž/ scriptu的例子,当注入到一个发布ASCII的网站时,它变成了可运行的代码,令人印象深刻. (2认同)

Fel*_*ing 9

这还取决于您对输入的处理方式.这是我在一些贺卡服务的真实网站上找到的简化示例:

它包含一个选择字段,您可以使用该字段选择文本的颜色:

<select name="color">
    <option value="red">Red</option>
    <option value="green">Green</option>
    <option value="blue">Blue</option>
</select>
Run Code Online (Sandbox Code Playgroud)

该值在贺卡页面上未经过滤使用.因此很容易篡改发送的POST数据并进行更改

color=red
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

color=red%22+onload%3D%22alert(%27foo%27)
Run Code Online (Sandbox Code Playgroud)

这将导致

<font color="red" onload="alert('foo')">
Run Code Online (Sandbox Code Playgroud)

而不是<font color="red">.


因此,重点是永远不要相信来自用户的任何输入,甚至不是您定义的预定义值.


Nic*_*ver 4

不幸的是,并非如此,有多种攻击可用,例如<img>也可以通过元素执行 JavaScript。我建议您在服务器端的任何平台上使用 XSS 库。

这是我的意思的一个例子:

<img src="javascript:alert('hi');">
<input type="image" src="javascript:alert('hi');">
Run Code Online (Sandbox Code Playgroud)

...并非这些示例本身是无害的,但您会看到还有其他方法可以执行 JavaScript。哪些漏洞有效取决于浏览器,但请注意还有其他方法。

  • 在.net上有一个Microsoft AntiXSS库http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx,它通过白名单来工作属性/HTML 文本中允许的内容,而不是不允许的内容的黑名单。白名单方法更安全。 (2认同)