如何限制不需要的使用AJAX API(例如,某人执行SELECT *)

13 浏览
0 Comments

如何限制不需要的使用AJAX API(例如,某人执行SELECT *)

我有一个餐厅定位器网络应用程序,将餐厅的位置与谷歌地图结合起来。\n我使用JQuery滑块来限制地图上显示的餐厅数量,通过搜索过滤器来选择价格、食物类型和地区等。\n这些JQuery滑块通过AJAX回调调用我创建的API,更新地图而无需刷新网页。\nJQuery调用RESTFUL API的方式如下:\n

http://example.com/search/?city=NYC&max-price:50&cuisine=french

\n这将返回一个符合这些条件的餐厅的JSON字符串,以便我的网络应用程序可以在地图上显示所有符合搜索条件的餐厅。\n我不希望有人能够找出我的API并且获取我所有的餐厅列表。\n有没有办法限制谁可以调用上述HTTP API,只允许我的Web服务器调用URL,而不是那些寻求获取我的数据库信息的垃圾邮件发送者/黑客?\n谢谢。

0
0 Comments

在使用AJAX API时,我们经常会遇到限制不受欢迎的使用的问题,比如有人执行SELECT *操作。为了解决这个问题,大多数主流的REST API都使用了令牌验证。在进行REST请求之前,你必须发送另一个请求到令牌服务,以获取一个令牌,并将其与数据请求一起发送。必应地图、亚马逊、Flickr等都采用了这种方式。

关于令牌验证的详细信息,我了解的不多,只是在使用必应地图时有所了解。你需要阅读关于REST中令牌验证的相关资料。这里有一篇博客文章供你参考:http://www.naildrivin5.com/daveblog5000/?p=35

0
0 Comments

AJAX API被不希望的使用(例如,有人执行SELECT *)的问题的出现原因是因为缺乏对API的访问限制。解决方法如下:

1. 在robots.txt中声明你的意图。

2. 在主页上发送一个带有随机数或某种唯一标识的Set-Cookie头部,但不要在API响应中发送。如果cookie从未发送到API端点,则返回401 Bad Request响应,因为这是一个机器人、一个非常破碎的浏览器,或者有人拒绝了你的cookie。还可以使用Referer头部作为额外的检查,但这很容易伪造。跟踪已由该ID进行的API调用的数量。你可能还想将ID与IP地址匹配。如果超过了阈值,返回403 Forbidden响应。将阈值设得足够高,以免正常用户受到影响。

3. 保持良好的日志记录,并突出显示401和403响应。

4. 实际上,如果有人下定决心,他们将能够转储这些信息。你的目标不应该是使这个变得不可能,因为你永远不会成功(请参见所有关于实现完美安全性的通常格言)。相反,你希望清楚地表明:

- 这种行为违反了服务条款。

- 你正在积极地尝试阻止这种行为。

- 你知道侵犯者的存在,并大致知道他们是谁。

- 如果这种情况继续下去,可怕的律师可能会介入。

(你有律师,对吧?)

5. 为了实现这一目标,请确保你的403 Forbidden响应的正文传达出一条听起来可怕的信息,比如“该请求超过了API的最大允许使用量。你的IP地址已被记录。请参考服务条款并遵守robots.txt中的指示。”

6. 我不是律师,但我相信DMCA可以适用于这种情况,如果你声明对你的数据库拥有版权。这基本上意味着如果你可以追踪到对API的非法使用到一个IP地址,你可以向他们的互联网服务提供商发送一封恶劣的电子邮件。当然,这应该始终是最后的手段。

7. 我不鼓励使用分配的API密钥/令牌,因为它们会成为采用的障碍,而且管理起来有点麻烦。作为对's答案的反驳,谷歌正慢慢放弃使用它们。此外,我认为它们在这种情况下并不适用,因为听起来你的“API”更像是一个在自己网站上主要使用的JSON调用。

8. HOST头部是否也很容易伪造?

0