Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security XSS是否应该保护来自API的响应?_Security_Api_Xss - Fatal编程技术网

Security XSS是否应该保护来自API的响应?

Security XSS是否应该保护来自API的响应?,security,api,xss,Security,Api,Xss,我有一个RESTful API,可以返回JSON和XML 例如,假设对工件(如文档)上的所有注释发出请求:GET/document/document\u ID/comments.json。响应如下所示: [ { "created_time": 1304598075, "text": "<script type=\"text/javascript\">alert(document.cookie)</script>", "user_id": 229

我有一个RESTful API,可以返回
JSON
XML

例如,假设对工件(如文档)上的所有注释发出请求:
GET/document/document\u 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
  }
]
[
{
“创建时间”:1304598075,
“文本”:“警报(document.cookie)”,
“用户id”:2293,
“身份证”:184124
},
{
“创建时间”:1304598043,
“文本”:“这已经超过了Ninethousaaaaanddd!!!”,
“用户id”:2293,
“身份证”:184122
}
]
在我自己的服务中,第一个注释是XSS转义,然后才显示。但是当通过API访问时,我必须信任API的实现者来进行转义

如果API通过浏览器呈现的Web服务实现,则攻击向量是真实的。 另一方面,如果API是在桌面应用程序或移动应用程序中实现的,那么XSS转义将完全是一个麻烦,不需要

我应该转义通过API返回的所有字符串吗?或者我应该实现一个设置,以便在注册第三方应用程序时,API实现者可以指定是否希望转义响应


了解其他人是如何处理这个问题的会很有趣。

不,你不应该这样做-XSS处理应该由实际将要显示数据的任何人来完成。许多第三方ASP.NET控件已经对它们显示的文本实施了XSS保护,因此最终可能会出现文本双重编码的情况。

好吧,这确实是一个很好的理由。为那些想要它的实现者提供选项仍然是一个好主意吗?作为一种选择加入的方式?@John,就我个人而言,我不会,交付数据是webservice(或restapi)的工作,而不是格式化数据以供显示。有足够多的反XSS库,无论UI采用何种形式,都不会出现转义文本输出的问题。