如何保护 Web API 免遭未经授权的使用

时间:2021-01-21 08:50:12

标签: node.js api http encryption authorization

因为我过去自己做过网站抓取,即使是在线社区,我总是发现编写一些基于脚本的工具非常容易,这些工具使用他们的 HTTP-API 并假装是一个普通的应用程序用户。我能够为我的手机支付(登录提供商门户网站,下载发票)、约会网站和其他一些网站执行此操作,只需检查浏览器中的 HTTP 流量,然后重建 HTTP 请求即可。长话短说:在不使用合适的客户端(网站、应用程序等)的情况下,直接使用我一直在处理的任何 HTTP API 似乎总是可能的,甚至非常容易。

现在,进入实际问题。我正在开发一个移动应用程序,以及一个基于 HTTP-API 的服务器组件。该应用程序允许用户注册、更改他们的个人资料以及相互互动。

我现在想要实现的是,有人去做我刚刚解释的事情应该是困难的,或者是不可能的。也就是说,不使用我的应用程序就不可能使用 HTTP API。 我知道很可能无法以无法绕过应用程序的方式 100% 保护 API。然而,如果它至少足够难,那么对我来说就足够了,这样绕过应用程序就没有吸引力了。我该怎么做?

我想到的是这样的:

  • 使用类似 RSA 令牌生成器的东西,其中服务器和应用程序生成相同的令牌
  • 令牌应由应用程序在某些 HTTP 标头中提供,并在每次请求时由服务器检查
  • 生成器在用户注册时初始化(留下很小的攻击窗口)
  • 注册后,应该不可能有人拦截 HTTP 请求,然后学习如何发出请求绕过应用

然而,我还没有找到像开源软件令牌生成器这样的东西,只剩下 Node.JS 了。这让我想到了另一个想法:

我可以实现一些伪令牌生成器,它只用于将当前时间与一些盐值一起散列,例如使用MD5。注册时会向应用程序提供盐,因此它可以生成相同的“令牌”。

这会增加一些安全层吗?解决此类问题的最佳做法/经过验证的方法是什么?

我不是安全专家,因此如果您有任何其他提示或建议,我将不胜感激:)

0 个答案:

没有答案