【问题标题】:Sails JS forbidden POST requestSails JS 禁止 POST 请求
【发布时间】:2018-08-18 11:59:12
【问题描述】:

我正在尝试学习 Sails JS 和显然是 REST API。

我创建了一个我认为工作正常的用户模型(它与我的数据库通信数据)。我还创建了一个注册控制器,其中包含 4 个所需的输入,以便在我的用户集合中存储一条新记录。 (其他一些数据由该控制器生成,以完成注册时的记录)

我想用 POSTMAN 测试这个控制器,所以我去我的routes.js 看看:

'POST  /api/v1/entrance/signup': { action: 'entrance/signup' },

但是当我在 192.168.1.13:1338/api/v1/entrance/signup 输入一个 POST 请求并声明了我需要的 4 个输入时,我得到了这个答案:Forbidden

我不知道我做错了什么。我还在blueprints.js

中启用了 restshortcutsactions

有人有想法吗? :)

【问题讨论】:

  • 控制器的名称是什么?
  • 名字是注册

标签: sails.js postman


【解决方案1】:

该问题确实与cross-site request forgery有关,但完全禁用相应的安全规则显然不是解决方案。 CSRF 及其在sailsjs 中的处理在manual 的相应部分中有很好的描述。简而言之,要使 POST 工作,您必须在请求中包含 _csrf。例如。在视图模板中:

<form>
   <input type="hidden" name="_csrf" value="<%- _csrf %>" />
</form>

【讨论】:

  • 我们如何在启用 csrf 的情况下使用 rest api?在sails 1.0 中,我没有security/grant-csrf-token 端点。
  • @Noitidart 默认情况下不再提供那个 csrf 令牌端点。请参阅 1.0 的升级文档。 sailsjs.com/documentation/upgrading/to-v-1-0
【解决方案2】:

如下所述,移除 CSRF 保护并不是解决办法,因为它可能会使 api 面临安全漏洞。我目前使用 JWT,但它似乎不如 CSRF 令牌安全,因此唯一正确的方法是将令牌包含在每个 HTTP 的请求标头中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多