XSS应该保护我API的回应吗?
问题描述:
我有一个RESTful API,可以返回JSON
和XML
。XSS应该保护我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实现者可以指定他是否想要转义回复?
了解其他人如何处理此问题会很有趣。
答
不,你不应该 - XSS处理应该由实际要显示数据的任何东西来完成。许多第三方ASP.NET控件已经在它们显示的文本上实现了XSS保护,因此您最终可能会遇到文本被双重编码的情况。
好的,现在确实是一个很好的理由。为那些想要它的实现者提供选项,是否仍然是一个好主意?作为一种选择性的东西? – 2011-05-06 08:22:33
@John,我个人不会,它是webservice(或REST API)提供数据的工作,而不是将其格式化以供显示。周围有足够多的反XSS库,无论用户界面采取什么形式,都不应该成为逃避文本输出的问题。 – slugster 2011-05-06 08:40:20