代码之家  ›  专栏  ›  技术社区  ›  andrealmeida

在客户端阻止XSS(纯Javascript)

  •  3
  • andrealmeida  · 技术社区  · 9 年前

    我有一个简单的项目,但让我头疼,因为客户端编程不是我的事情。基本上,我有一个登录页面,客户希望我防止XSS攻击,不允许用户在用户名/密码字段上提交恶意代码。我很容易在服务器端完成,但他们不想让我们访问。

    有机会给我提示一下我该怎么做?即使我很难了解javascript/HTML的基础知识,我的经验也几乎为零。

    我知道关于这个话题有几个问题,但说实话,我对所有信息都感到困惑

    顺致敬意,

    2 回复  |  直到 9 年前
        1
  •  8
  •   meskobalazs    9 年前

    其实你只是 不能 在客户端进行任何可靠的XSS预防。攻击者只需禁用JavaScript,所有复杂的代码都不存在。任何客户端验证仅适用于 方便用户 ,没有更多。

    更新:我上面写的是关于 第二阶 (也称为存储的)XSS。 第一个订单 XSS攻击(当攻击者创建伪造的URL时)可以使用JavaScript减轻。

        2
  •  7
  •   Quentin    9 年前

    在客户端上阻止XSS的方式与在服务器上阻止XS的方式相同。(请注意,这只会防止在客户端上直接处理的输入,而不会防止提交到服务器然后传递回客户端的代码)。

    • 确保您知道任何给定变量的数据格式
    • 将任何用户输入(包括表单数据、URL数据等)视为纯文本
    • 在可能的情况下,使用本机方法处理数据,对其进行适当编码

    例如,如果您想在div中显示片段id,您可以:

    div.appendChild(document.createTextNode(location.hash));
    

    不要 只需将原始输入解析为HTML:

    // DANGER
    div.innerHTML = location.hash;
    

    当然,这只会保护页面不受提交给客户端代码的数据的影响。

    无法使用客户端代码来防止恶意数据提交到服务器端代码。 客户端完全控制客户端代码,因此可以很容易地绕过它。

    如果您从服务器外部读取输入,然后将其输出到网页,则 必须具有XSS的服务器端保护 .