我有一个可以返回JSON
和XML
的RESTful API。
例如,假设对工件(例如文档)的所有注释发出请求: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实现者可以指定是否要转发响应?
了解其他人如何处理这个问题会很有趣。
答案 0 :(得分:2)
不,你不应该 - XSS处理应该由实际显示数据的任何东西完成。许多第三方ASP.NET控件已经对它们显示的文本实现了XSS保护,因此最终可能会出现文本被双重编码的情况。