我有一个接受和返回 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/