在一个项目中,用户生成了许多对Google Maps Geocoding API的调用,超出了免费配额限制。
为了降低成本,我最近更改了代码,以便用户通过我的服务器对Google Maps Geocoding API进行服务器端调用,然后将其缓存,以免再次查询同一查询。
但是我发现此设置被另一方滥用,该方基本上通过我的端点路由API调用。这样,我最终付款,而其他人则享受免费的API调用。
该Web应用必须是公开可访问的,因此无法在用户和我的服务器之间共享私钥或密码。
不幸的是,我没有找到任何人在网上谈论这个问题以及如何阻止该漏洞利用。但是我有一个主意:
我想知道关于此主题是否还有其他最佳实践。
使用的技术应该无关紧要,因为这只是关于可以做什么的一般性/理论性讨论。
答案 0 :(得分:0)
一种解决方案可能是使用在客户端和服务器之间共享的机密。不幸的是,如果可以公开访问客户端源代码(例如,Web应用程序),则此操作将无效。
可以限制每个用户的通话,但是您可能需要防止滥用方自动创建用户。也许每天增加每个IP的地理位置呼叫限制,或者增加每个IP的用户创建呼叫限制都可以。
最后,您可能需要在服务器上使用某种滥用检测机制。监视每个IP,每个用户的呼叫数量,识别模式等的东西。
答案 1 :(得分:0)
我建议您查看Google Maps Web Services的最佳做法文档:
https://developers.google.com/maps/api-key-best-practices
最重要的是保护您的API密钥。如果是网络服务,则应使用后端服务器的IP地址保护API密钥。在这种情况下,其他人将无法使用您的API密钥并滥用您的配额。
您应为应用程序使用的所有Maps Platform产品保护API密钥在应用程序中的安全。您可以通过指定限制并实施适用于您应用程序中Google Maps Platform API的最佳做法来保护API密钥。公开暴露不安全的凭据可能会导致意外使用,这可能会导致您的帐户产生意外费用。
我希望这会有所帮助!
答案 2 :(得分:0)
我发现每个用户的限速呼叫并不是真正的解决方案,因为每分钟限制5个请求/分钟仍然导致每月200,000个呼叫,这意味着一天中的呼叫是均匀的,因此也应采用每日限制。
但是,这仅适用于一个用户/ IP,并且服务器端调用仍然可以被多个客户端的网络利用。
另一种解决方案可能是实施CAPTCHA,以便用户在发出请求之前解决该问题。为了不打扰用户体验,可以应用不可见的验证码。
分析这些请求的结构很重要。是利用服务器端呼叫的唯一IP,还是来自多个方向的IP?
困难在于区分合法请求和恶意请求,而您想阻止不良请求,但让好请求通过。