在客户端防止 XSS(纯 Javascript)

Prevent XSS on client-side (Pure Javascript)

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

有没有人给我提示我该怎么做?尽管我知道 javascript/HTML 的基础知识,但我的经验几乎为零。

我知道有几个关于这个话题的问题,但老实说,我对所有信息都一头雾水

此致

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

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

来缓解

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

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

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

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

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

// DANGER
div.innerHTML = location.hash;

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

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

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