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

时间:2015-01-19 16:01:02

标签: javascript json security rest flask

我正在使用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请求创建一个拦截器,例如a'帖子'端点,'消息'终点等?这是一种可行或好的方法吗?

我的理解中是否有任何遗漏?

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

如果有更好的选择3'听到它会很棒!

1 个答案:

答案 0 :(得分:0)

您可以设置isArray等于false,并通常检查https://github.com/mgonto/restangular/issues/85

处理您的请求