使用 Restangular 使用 RESTful api - RESTful api 将数组作为***对象返回是不是安全?

Posted

技术标签:

【中文标题】使用 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?使用 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”,那就太好了!

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用 Restangular 使用 RESTful api - RESTful api 将数组作为***对象返回是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Restangular 访问嵌套文档

如何使用 AngularJS 和 Restangular 返回/编辑 REST 资源

如何使用 AngularJS 和 Restangular 返回/编辑 REST 资源

角度 $http.get / restangular 调用失败

选择带有restangular或angular的嵌套数组元素

AngularJS / Restangular 会话