XSS应该保护我API的回应吗?

XSS应该保护我API的回应吗?

问题描述:

我有一个RESTful API,可以返回JSONXMLXSS应该保护我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保护,因此您最终可能会遇到文本被双重编码的情况。

+0

好的,现在确实是一个很好的理由。为那些想要它的实现者提供选项,是否仍然是一个好主意?作为一种选择性的东西? – 2011-05-06 08:22:33

+0

@John,我个人不会,它是webservice(或REST API)提供数据的工作,而不是将其格式化以供显示。周围有足够多的反XSS库,无论用户界面采取什么形式,都不应该成为逃避文本输出的问题。 – slugster 2011-05-06 08:40:20