如何从我的Rails应用程序的用户隐藏我的API调用/路由?

时间:2016-01-12 07:22:09

标签: ruby-on-rails ruby api security

我正在编写一个应用程序,它会对我的API进行一些限制。如果用户要弄清楚这些url路由是什么以及正确的参数以及如何指定它们,那么他们可以正确利用它吗?

例如,如果对某事投票,我只希望用户能够投一票,则用户知道该路线:

get '/castvote/' => 'votemanager#castvote'

可能有问题,不是吗?弄清楚这些API路线是否容易?

有没有人知道如何消除这种情况发生的可能性?

4 个答案:

答案 0 :(得分:1)

无法隐藏AJAX调用 - 如果没有别的,只需打开开发人员工具 - 网络面板,只需查看发送的内容即可。如果您只是知道如何阅读,那么客户端上的所有内容都是一本开放的书。

相反,在服务器端进行验证:在您的示例中,记录投票和投射它们的用户;如果该用户已经记录了投票,请不要让他们再次进行投票。

答案 1 :(得分:0)

您的API应该内置授权。只允许具有特定访问范围的授权用户使用您的API。通过rails社区提供的结帐Doorkeepercancancan宝石。

答案 2 :(得分:0)

正如其他人所说,添加access_tokens / username / password授权是一个很好的起点。此外,如果您的应用程序应该只允许每个用户一票,那么这应该由服务器上的应用程序逻辑验证

答案 3 :(得分:0)

这是一个更广泛的问题。没有办法阻止用户弄清楚投票如何运作并尝试游戏但是有不同的技术可以让它变得更难。我在这里列出了从最不有效到最有效的一些解决方案:

  1. 使用nonce或工作证明,如果是Rails,则通过authenticity token实现非GET请求。这将要求用户在投票前至少加载页面,从而限制脚本重放攻击
  2. 记录IP地址或其他可识别信息(即browser fingerprinting)。这将限制来自单个设备的投票数
  3. 需要注册。这就是其他答案所暗示的内容
  4. 要求第三方登录(即Facebook,Twitter)
  5. 要求付款才能投票(如电视才艺表演)
  6. 这些方法都不是完美的,您可以快速找到欺骗任何方法的方法。

    真正的问题是你的威胁模型以及你希望它为用户投下虚假投票的难度。根据我需要第三方登录的实际经验,将确保大多数投票在典型用例中有效。