如何解决JSON API 的 XSS 漏洞
示例请求响应如下
请求
conda update --all
{
"repos": [
"some-repo","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 实体代码错误地显示给用户。
或者如果客户端想对数据做一些处理,它可能希望明文数据先做处理,然后再编码输出。
输入验证也有帮助,但有效输入的规则可能与无需编码即可安全使用的规则不一致。像和号、引号和括号这样的东西也可以出现在有效的文本数据中。但是如果你的数据不能包含这些字符,你可以拒绝输入无效。
,我认为您的 api 很容易受到攻击,尽管脚本可能无法执行。谈到 XSS 预防,我们总是建议在 api 处理输入时解码/验证危险字符。有一个共同的要求“在数据存储到数据库之前清理数据”。
至于你的情况,api只是响应一个json,但是我们不知道json中的数据会用到哪里。通常前端在没有任何解码/验证的情况下接受数据,如果那样,就会有一个xss。
您谈到客户端使用解码他们从您的 api 获得的数据。是的,我同意,但前端总是“信任”后端,这样他们就不会解码数据。但是 api 服务器不应该信任来自前端的任何输入,因为这可以被(恶意)用户控制/更改。
除非您的 API 还提供使用它的 UI,否则您的 API 不会受到 XSS 攻击。您的 API 的客户端可能容易受到攻击 - 他们需要确保在将您的 API 中的任何数据用于任何 UI 之前对其进行正确编码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。