【发布时间】:2023-03-15 17:31:01
【问题描述】:
我有一个 RESTful API,它可以返回 JSON 和 XML。
例如,对一个工件(如文档)上的所有 cmets 发出请求:GET /document/DOCUMENT_ID/comments.json。响应如下所示:
[
{
"created_time": 1304598075,
"text": "<script type=\"text/javascript\">alert(document.cookie)</script>",
"user_id": 2293,
"id": 184124
},
{
"created_time": 1304598043,
"text": "It's over ninethousaaaaaanddd!!!",
"user_id": 2293,
"id": 184122
}
]
在我自己的服务中,第一条评论在呈现之前会被 XSS 转义。但是当通过 API 访问时,我必须信任 API 的实现者来进行转义。
如果 API 是在通过浏览器呈现的 Web 服务中实现的,那么攻击向量是非常真实的。
另一方面,如果 API 是在桌面应用程序或移动应用程序中实现的 - XSS 转义将非常麻烦,并且不需要。
是否应该转义通过 API 返回的所有字符串?或者我应该实现一个设置,以便在注册第三方应用程序时 API 实现者可以指定他是否想要转义响应?
了解其他人如何处理此问题会很有趣。
【问题讨论】: