【问题标题】:How do I protect my AJAX services?如何保护我的 AJAX 服务?
【发布时间】:2012-11-29 16:34:47
【问题描述】:

目前,我正在开发一项服务,该服务处理覆盖在 Google 地图上的当地餐馆的评论/推荐。基本上是 Yelp,但仅限于特定的利基市场。无论如何,由于我不想一次加载每个位置并查看,我终于开始使用 jQuery 和 AJAX 调用。

我的问题是:如何防止其他人从我服务器上的 ajax 脚本中“抓取”数据?

主要的地图/位置信息功能需要公开,因为用户不必登录即可使用该应用程序,因此它可能简单地归结为使其难以抓取。我希望你们中的一位 AJAX 资深人士可以为我指出一个更好的想法,或者一些我还没有找到的“最佳实践”文档。

到目前为止,我能想到的只有:

  • 面向用户的脚本会在服务器上打开一个短期会话,如果没有活动会话,AJAX 调用将不会运行。
  • 随应用程序代码一起发送某种访问密钥,并在所有 AJAX 调用中要求该密钥。但不确定如何以一种不易解决的方式最好地实现这一点。

【问题讨论】:

  • 记住 JS 本质上是开源的。你能得到的最接近的是混淆

标签: php ajax web-services jquery


【解决方案1】:

您无法完全保护您的 AJAX Web 服务。即使您破坏了您的数据并混淆了您的源代码,只需启动数据包嗅探器或调试代理,找出并从中获取信息也是微不足道的。

我会按照您的建议做...只有在网站上具有活动会话的用户才能拨打电话。然后从那里限制请求。

即使是忙碌的普通用户每分钟发出的请求也不会超过少量。您可以分析您的日志以找出一个好的数字。即使您将服务限制为每分钟 20 次调用,这种限制对于想要复制所有内容的人来说也毫无用处。

也不要只限制会话数据...密切关注 IP 地址。完全有可能随时触发请求并获得新会话。定期检查您的日志以查看是否有任何事情通过,并相应地调整您的策略。

最后,定期搜索您的内容。 Google 是查找版权侵权者的绝佳工具。如果使用特定的数据,比如GPS坐标,其实可以在坐标的噪声区域用特定的值对坐标进行水印。

【讨论】:

  • 我一直在考虑添加一些“红鲱鱼”位置,但给坐标加水印对我来说是新事物。这个“噪音”区域存在到小数点后多远?
  • @Sammitch,这取决于您的准确性需求和全球位置。 (例如,较高纬度的经度之间的距离较小。)假设我在芝加哥的国会和密歇根大道,我想穿过密歇根(6 条车道和中线)。我会从 -87.62440 到 -87.62413 经度。如果您使用双精度浮点数作为坐标,您可以轻松地为自己添加几位数字进行水印,而不会影响坐标的准确性。请记住,大多数 GPS 单位的精度都不会超过 15 英尺! (蜂窝辅助 GPS 更准确。)
  • @Sammitch 任何超过 5 位小数的东西在赤道处都小于 1 米,请参阅 Wiki
【解决方案2】:

据我所知,您希望保护服务的 JavaScript 端。这是不可能的,因为 JavaScript 本质上是完全开源的(尽管不是公共领域)

Google 提供了一个tool called Google Closure,它可以通过删除空格和制表符来压缩脚本。它还可以通过用随机字符替换变量名称和函数名称来为您混淆文档。它是可定制的,因此您可以告诉它您想要什么。据我所知,谷歌将它用于他们自己的网站(通过查看他们网页的来源可以看出)

【讨论】:

  • JavaScript 混淆并没有多大用处,尤其是因为他真正需要保护的是正在访问的数据。 Google 不会像缩小代码那样混淆他们的代码,这具有类似的效果,但目标是使代码更小,便于下载。
  • @Brad minify 本质上是您在不了解 JavaScript 混淆的情况下可以获得的最佳混淆。它将阻止任何潜在的黑客(试图进入黑客世界的人)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2018-05-11
  • 2011-06-16
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多