在客户端防止XSS(纯Javascript)

时间:2015-01-23 13:44:40

标签: javascript html xss client-side

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

有人给我提示的提示我该怎么做?即使很难,我也知道javascript / HTML的基础知识,我的经验几乎无效。

我知道有关于这个主题的几个问题,但是真诚地,我迷失了所有信息

最好的问候

2 个答案:

答案 0 :(得分:4)

实际上,您只是无法在客户端进行任何可靠的XSS预防。攻击者只是禁用JavaScript,并且所有复杂的代码都不存在。任何客户端验证仅用于方便用户,仅此而已。

更新:上面我写的,对于二阶(a.k.a。存储)XSS是正确的。 第一顺序 XSS攻击(当攻击者创建伪造的URL时)可以使用JavaScript进行缓解。

答案 1 :(得分:4)

您可以像在服务器上阻止XSS一样阻止客户端上的XSS。 (注意,这只能防止在客户端上直接处理的输入,而不是针对提交给服务器然后传递回客户端的代码。)

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

例如,如果您想在div中显示片段ID,那么您将:

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

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

// DANGER
div.innerHTML = location.hash;

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

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

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