【问题标题】:How to restrict calls to api rest如何限制对 api rest 的调用
【发布时间】:2018-02-04 13:19:54
【问题描述】:
首先,很抱歉这个问题的格式。我知道这个网站的规则,但我之前没有工作也没有调查过,因为,基本上,我不知道从哪里开始......
我对我开始的小费很满意。
我正在搜索如何限制从(仅)本机移动应用程序(ios 和 android)对 expressjs 中的 api rest 的调用。我在考虑代币,但我认为这不是一个非常安全的想法,因为任何人都可以拿代币并模拟成为移动应用程序,还是我错了?
提前致谢!
【问题讨论】:
标签:
javascript
android
ios
api
express
【解决方案1】:
当然,任何人都可以模拟任何 API,它只需要嗅探器并了解正确的数据格式(例如客户端应用发送的 JSON 对象的格式)。
任何人都可以继续,弄清楚 WhatsApp 的工作原理并模拟这样的应用程序。当您首先让每个用户访问Sign up 时,甚至会发生这种情况,然后“模拟器”也只需要模拟该过程。
但是,一般来说,开发人员想要的是:
- 人们使用他的应用程序
- 人们使用他的 REST APIs
第 1 点意味着第 2 点,但第 2 点并不意味着第 1 点。没有您的应用,您无法阻止黑客或其他人使用您的 API,您可以使用一些技术来减缓他的模拟器开发过程。
那你可能会问,他不能用数百万的请求淹没你的服务器吗?他当然可以。那是DoS attack。从理论上讲,他甚至可以使用许多安卓模拟器并安装您的应用程序,然后向您的服务器发送数百万个请求。
如果您向互联网世界开放,任何人都可以使用您的 API。
【解决方案2】:
您不能限制公共 REST Api。您的移动用户发送的任何请求也可以由任何人发送。
也许您可以保留一个“秘密”字符串并附加到 http 请求,但它很容易通过嗅探 http 流量或反编译 apk 来暴露。
您的最后一个选项是通过 IP 限制访问,但我不知道它是否适合您的情况。
【解决方案3】:
您不能限制仅从本机移动应用程序访问 REST API。互联网对任何客户端都是开放的,因此如果您有一个 REST 服务器,那么任何客户端都可以访问它,无论是否移动。
您可以通过身份验证控制访问。因此,通常需要某种帐户访问权限,然后让您的服务器监视意外或未经授权的使用,如果发现,您将禁用该帐户。
您也可以在您的移动应用程序中嵌入“秘密”凭据,并将其用作 SSL 授权,但如果黑客愿意,他们仍然可以从您的应用程序中获取凭据。