【问题标题】:Consuming a RESTful api with Restangular - Is it secure for a RESTful api to return an array as a top-level object?使用 Restangular 使用 RESTful api - RESTful api 将数组作为顶级对象返回是否安全?
【发布时间】:2015-03-17 16:47:55
【问题描述】:

我正在使用 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 需要一个 Array 而不是 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 请求创建一个拦截器,例如'posts'端点,'messages'端点等?这是一个可行的或好的方法吗?

我的理解中有什么遗漏吗?

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

如果有更好的“选项 3”,那就太好了!

【问题讨论】:

    标签: javascript json security rest flask


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 2020-04-28
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多