【问题标题】:XSS prevention. Handling <script is enough?XSS 预防。处理 <script 就够了吗?
【发布时间】:2010-12-03 10:38:35
【问题描述】:

我想知道从文本输入字段中检查并删除 "&lt;script" 是否足以阻止 javascript 代码注入攻击?

【问题讨论】:

  • 我很高兴看到压倒性的答案是 NO..

标签: javascript security xss


【解决方案1】:

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

查看这个list of XSS attacks 了解最常见的(可能存在其他更奇特的)。您需要将允许的语法列入白名单,而不是假设已知向量之外的所有内容都应该没问题。

【讨论】:

  • +1 链接非常好,我知道加入黑名单是一项不可能完成的任务,但我并没有意识到这是多么不可能。几年前我写了一些非常幼稚的黑名单代码,它很少会捕获这些攻击
  • @andynormancx:是的,Postel 定律反击:大部分示例是无效标记,浏览器会将其转换为有效但令人讨厌的东西。
  • 我特别喜欢 žscriptualert(EXSSE)ž/scriptu 示例,当注入到一个发出 ASCII 码的站点时,它变成了可运行的代码,令人印象深刻。
【解决方案2】:

这还取决于您对输入所做的操作。这是我在某个贺卡服务的真实网站上找到的一个简化示例:

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

<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')">

而不是&lt;font color="red"&gt;。


所以重点是永远不要相信用户的任何输入,甚至不相信你定义的预定义值。

【讨论】:

    【解决方案3】:

    不幸的是,有多种攻击可用,例如通过&lt;img&gt; 元素执行JavaScript。我建议在服务器端的任何平台上使用 XSS 库。

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

    <img src="javascript:alert('hi');">
    <input type="image" src="javascript:alert('hi');">
    

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

    【讨论】:

    • 你会推荐哪些库?
    • @Nick,那些 XSS 库能做什么?
    • @samy - 这取决于平台,我不确定 OP 在服务器端有什么 - PHP、ASP.Net、Ruby? @Starx - 这些库专门通过适当地清理传入的 HTML 来去除所有(或希望所有)各种 XSS 攻击方法。
    • @samy - 与您已经在服务器端使用的任何东西兼容的东西。
    • 在 .net 上有 Microsoft AntiXSS 库 haacked.com/archive/2010/04/06/…,它通过在属性/HTML 文本中设置允许的白名单而不是不允许的黑名单来工作。白名单方法更安全。
    【解决方案4】:

    myspace 因 css 表达式而被黑客入侵。黑名单不起作用,白名单是唯一的途径。

    【讨论】:

      【解决方案5】:

      除了 Nick 提到的那些之外,您还应该注意 JavaScript 事件,例如:“onload”、“onclick”、...

      【讨论】:

        【解决方案6】:

        &lt;s&lt;scriptcript 删除一次后变为&lt;script。

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

        【讨论】:

        • while 索引 "
        • 你必须假设启动脚本的东西是无限的,例如&lt;img onload=、&lt;span onmouseover= 等。即使你以某种方式完美地将所有可能的东西列入黑名单,明天浏览器也会添加新的(这经常出现在标准讨论中,答案总是“我们将添加一个新的向量无论如何,因为这些网站已经不安全了”)。
        猜你喜欢
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        相关资源
        最近更新 更多