防止 REST API 的 XSS

信息安全 xss 休息
2021-08-14 01:21:18

我有一个 spring REST API 和一个客户端项目。客户端项目的 HTML 页面使用 jquery ajax 调用以使用 json 或 xml 格式从 REST API 获取数据。我的问题是避免对网页的 XSS 攻击,我应该在哪里对用户输入数据(即不受信任的数据)进行编码?目前我在返回响应之前将数据编码到我的 REST 控制器中。我正在关注 OWASP XSS 预防备忘单文章。但是因为在我的场景中,一切都是 ajax 调用和从 json 获取数据并使用 jquery 放入 html,不确定用户编码器应该在哪里编码不受信任的数据。将编码放入 REST 控制器是一个不错的选择吗?

先感谢您。

1个回答

如果 REST API 纯粹返回 JSON(而不是 HTML),那么在 JavaScript 中执行 HTML 转义客户端。

客户端的 HTML 页面是使用 JQuery 模板,还是通过调用这些函数来构建 HTML,.html()这些函数默认情况下都没有 XSS 保护。一种方法是让客户端代码对所有不受信任的输入显式调用转义函数。但是,我更喜欢的一种方法是使用自动转义的 JQuery 插件。这里有两种方法:

人们可能会批评这种方法,说“你不能依赖客户端控制来保证安全”。这种批评是基于误解;在这种特殊情况下,您可以依赖它。

值得注意的是,AngularJS 默认包含自动转义。如果他们今天从头开始编写 JQuery,我希望 JQuery 也会包含这个。

不在 REST API 中进行 HTML 转义的原因之一是您可能有一个使用 API 的非 HTML 客户端。在这种情况下,您绝对不希望应用 HTML 转义。

使用正确的 Content-Type 标头 (application/json) 返回 JSON 以避免 API 滥用攻击非常重要。