【问题标题】:Should I XSS protect responses from my API?我应该 XSS 保护来自我的 API 的响应吗?
【发布时间】:2023-03-15 17:31:01
【问题描述】:

我有一个 RESTful API,它可以返回 JSONXML

例如,对一个工件(如文档)上的所有 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 实现者可以指定他是否想要转义响应?

了解其他人如何处理此问题会很有趣。

【问题讨论】:

    标签: security api xss


    【解决方案1】:

    不,你不应该——XSS 处理应该由实际显示数据的任何东西来完成。许多第 3 方 ASP.NET 控件已经在它们显示的文本上实现了 XSS 保护,因此您最终可能会遇到文本被双重编码的情况。

    【讨论】:

    • 好吧,现在这确实是一个很好的理由。为那些需要它的实现者提供选项仍然是一个好主意吗?作为一种选择加入?
    • @John,我个人不会,网络服务(或 REST API)的工作是传递数据,而不是格式化数据以供显示。周围有足够多的反 XSS 库,无论 UI 采用何种形式,转义文本输出都不会有问题。
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多