使用 Restangular 使用 RESTful API - RESTful API 将数组作为顶级对象返回是否安全

Consuming a RESTful api with Restangular - Is it secure for a RESTful api to return an array as a top-level object?

本文关键字:使用 API RESTful 对象 是否 安全 返回 Restangular 数组      更新时间:2023-09-26

我正在使用Python Flask创建一个RESTful Web服务。对于我的一个端点,我想返回一个用户列表。API 终端节点按以下格式返回 JSON:

{
  "users": [
    {
      "Email": "email1@example.org",
      "First": "Tom",
      "Last": "Jones",
      "id": 1
    },
    {
      "Email": "email2@example.org",
      "First": "Steven",
      "Last": "Fry",
      "id": 2
    },
    {
      "Email": "email3@example.org",
      "First": "Monty",
      "Last": "Python",
      "id": 3
    }
  ]
}

如果我这样做,Restangular 会响应

错误:getList 的响应应该是数组而不是对象或 别的

这是设计使然,因为 Restangular 需要一个数组而不是一个 Javascript 对象。据我了解,有两种首选选项可以解决此问题:

选项 1 - 将响应包装在一个数组中,如下所示:

[{
  "users": [
    {
      "Email": "email1@example.org",
      "First": "Tom",
      "Last": "Jones",
      "id": 1
    },
    {
      "Email": "email2@example.org",
      "First": "Steven",
      "Last": "Fry",
      "id": 2
    },
    {
      "Email": "email3@example.org",
      "First": "Monty",
      "Last": "Python",
      "id": 3
    }
  ]
}]

但是,根据这篇文章 http://flask.pocoo.org/docs/0.10/security/#json-security 这并不安全。我的理解在这里正确吗?

选项

2 - 第二个选项是使用此方法:https://github.com/mgonto/restangular#my-response-is-actually-wrapped-with-some-metadata-how-do-i-get-the-data-in-that-case在这种情况下,是否有可能(我需要吗?)在所有返回多个项目的端点上为每个getList请求创建一个拦截器,例如"post"端点,"消息"端点等?这是一个可行或好的方法吗?

我的理解中缺少什么吗?

选项 1 似乎工作量较少,但可能会引入安全问题。选项 2 将做更多的工作,但可以缓解潜在的安全问题(如果有的话)。

如果有更好的"选项 3",很高兴听到它!

你可以将isArray设置为false,并正常处理你的请求检查 https://github.com/mgonto/restangular/issues/85