json - JSON API 的 XSS 漏洞

标签 json rest xss owasp websecurity

我有一个接受和返回 JSON 数据的 REST API。

示例请求响应如下

请求

{
    "repos": [
        "some-repo",
        "test-repo<script>alert(1)</script>"
    ]
}

回应

{
    "error": "Error Message",
    "repos": [
        "test-repo<script>alert(1)</script>"
    ]
}

我的 API 是否容易受到 XSS 攻击?据我了解,由于 Content-Type 设置为 application/json,因此 API 本身是安全的,不受 XSS 攻击。客户端需要确保对输出进行编码以防止任何 XSS 攻击。 要添加额外的安全层,我可以在 API 层中添加一些输入编码/验证。

请让我知道我的评估是否正确以及我需要注意的任何其他问题

最佳答案

我认为这里的任何 XSS 问题都是客户端的漏洞是正确的。如果客户端将 HTML 插入到文档中,则它有责任应用任何必要的编码。

客户端知道需要什么编码而不是服务器。对于相同的数据,在不同的地方可能需要不同的编码,或者不需要编码。例如:

如果客户做了类似的事情:

$(div).html("<b>" + repos + "</b>");

那么它将容易受到 XSS 攻击,因此 repos 需要在此处进行 HTML 编码。

但是如果它做了类似的事情:

$(div).append($("<b>").text(repos));

然后 HTML 编码会导致 HTML 实体代码被错误地显示给用户。

或者如果客户端想对数据做一些处理,它可能希望明文数据先做处理,然后再编码输出。

输入验证也有帮助,但有效输入的规则可能与无需编码即可安全使用的规则不一致。和号、引号和方括号之类的东西也可以出现在有效的文本数据中。但如果您的数据不能包含这些字符,您可以拒绝输入无效。

关于json - JSON API 的 XSS 漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65931025/

相关文章:

javascript - 让数据等待 JavaScript 上变量的声明完成?

php - 选择,其中 JSON 数组包含

json - 如何告诉 SharePoint 2010 listdata.svc 通过 URL 返回 JSON?

rest - 带有身份验证的 REST API 中的 CSRF token

Javascript实现防XSS转义功能

json - 将 JSON 转换为 bash 环境变量

java - Json动态反序列化与 jackson

java - Spring应用启动报错: sources must not be empty

javascript - 这是否容易受到基于 dom 的 xss 攻击?

php - htmlpurifier 删除所有由 CKEDitor 完成的格式