如何验证来自外部网站的POST请求?

时间:2015-01-18 20:32:55

标签: ruby-on-rails authentication

我有一个Rails网站,它接收POSTed数据并将其保存到名为“create”的控制器操作中的数据库中。在我的控制器中,我指定了

protect_from_forgery :except => :create

因为Rails网站将从外部应用程序接收此POSTed数据(Raspberry Pi通过python发送POSTed数据)。

这个设置运行良好,但我知道如果他们知道Rails url和参数,而不仅仅是我的Raspberry Pi,我已经向任何能够将数据保存到我的数据库的人开放。

无论如何我可以验证POST请求,所以我的Rails应用程序只保存来自我的Raspberry Pi的数据吗?

我唯一能想到的是添加一个从Raspberry Pi传递的“秘密”值,并在将任何数据保存到数据库之前在我的Rails控制器中进行检查。感谢。

1 个答案:

答案 0 :(得分:1)

秘密将是一个合适的解决方案。您有多种方法可以实现这个秘密:

  • 通话的附加参数。
  • HTTP Basic-Auth标头。
  • 双向SSL。

如果通过HTTPS或通过专用安全网络进行通信,前2个仅是安全的。

根据具体情况,您可能还会考虑其他一些选项,例如仅在localhost上侦听,以及在两台服务器之间打开ssh隧道进行呼叫。