我有一个餐厅定位器Web应用程序,可以将餐馆的位置与Google地图混合在一起.
我使用JQuery滑块来限制在地图上显示的餐厅数量,具有搜索过滤器,例如:价格,食物类型,区域设置.
这些JQuery滑块通过AJAX回调到我创建的API,以更新地图而不需要刷新网页.
JQuery调用RESTFUL API,如下所示:
http://example.com/search/?city=NYC&max-price:50&cuisine=french
这将返回符合此条件的JSON餐馆字符串,以便我的Web应用程序可以在地图上显示与搜索匹配的所有餐馆.
我不希望发生的事情是有人过来找出我的API并转储我所有的餐馆列表.
有没有办法可以限制谁调用上面的HTTP API,以便只有我的Web服务器调用URL而不是spamer/hackers想要转储我的数据库?
谢谢
首先,宣布你的意图robots.txt
.
然后,在主页面上发送带有随机数或某种唯一ID的Set-Cookie标头,但不会发送给您的API响应.如果cookie从未发送到您的API端点,请返回401 Bad Request
响应,因为它是一个机器人,一个非常破碎的浏览器,或者有人拒绝您的cookie.Referer标题也可以用作额外的检查,但是伪造它是微不足道的.跟踪该ID已进行的API调用次数.您可能还希望将ID与IP地址匹配.如果超过阈值,则吐出403 Forbidden
响应.使您的阈值足够高,以便合法用户不会被它抓住.
保持良好的日志,并突出显示401和403响应.
实际上,如果某人足够坚定,他们将能够转储这些信息.你的目标不应该是让这个变得不可能,因为你永远不会成功.(查看关于实现完美安全性的所有常见问题.)相反,您希望非常清楚地表明:
此行为违反了服务条款.
你正在积极地试图阻止这一点.
你知道犯罪者存在并且他们大概是谁.
如果这种情况持续下去,可怕的律师可能会开始介入.
(你确实有律师,对吧?)
要做到这一点,请确保您的403 Forbidden
响应正文传达了一条可怕的声音消息:"此请求超出了API的最大允许使用量.您的IP地址已被记录.请参阅服务条款并遵守指令in robots.txt
."
IANAL,但我相信如果您声明数据库版权,可以在这种情况下使用DMCA.这实际上意味着,如果您可以跟踪API的非法使用情况,您可以向他们的ISP发送一个讨厌的报告.当然,这应该是最后的手段.
我不鼓励使用指定的API密钥/令牌,因为它们会成为采用的障碍,并且需要管理一些痛苦.作为对@womp答案的反对意见,谷歌正逐渐放弃使用它们.此外,我认为它们实际上并不适用于这种情况,因为听起来您的"API"更像是主要用于您自己网站的JSON调用.