我想知道是否有人遇到任何技术来减少通过外部代理收集的服务器上的JSON类型服务(旨在提供AJAX功能)暴露数据的机会.
在我看来,如果你说Flash客户端正在使用数据,问题并不那么困难.然后,您可以将加密数据发送到客户端,客户端将知道如何解密它.但是,由于Javascript源的开放性,使用AJAX似乎不可能采用相同的方法.
有人在这里实施了一个聪明的技术吗?
无论采用何种方法,它仍然应该允许真正的AJAX函数来使用数据.
请注意,我并没有真正谈论在这里保护"敏感"信息,奇怪的记录泄漏不是问题.相反,我正在考虑停止整个数据库被机器人(无论是一次性还是逐渐地)覆盖的情况.
谢谢.
防止机器人窃取您的数据的第一件事是技术性的,这是合法的.首先,请确保您在网站的使用条款中使用正确的语言,从法律角度来看,您试图阻止的内容实际上是不允许和可辩护的.其次,请确保您在设计技术策略时考虑到法律问题.例如,在美国,如果您将数据置于身份验证障碍之后并且攻击者窃取它,则可能违反了DMCA法律.第三,找一位可以就IP和DMCA问题向你提供建议的律师...... StackOverflow上的好人还不够.:-)
现在,关于技术:
一个合理的解决方案是要求用户在访问敏感的Ajax调用之前进行身份验证.这使您可以简单地监视每个用户对Ajax调用的使用情况,并(手动或自动)取消在特定时间段内发出过多请求的任何用户的帐户.(或者总要求太多,如果你试图防止涓涓细流的方法).
这种方法当然容易受到自动注册新"用户"的复杂机器人的攻击,但是由于CAPTCHA实现相当不错,因此构建这种机器人非常困难.(参见http://en.wikipedia.org/wiki/CAPTCHA上的 "规避"部分)
如果您尝试保护公共数据(无身份验证),那么您的选项将受到更多限制.正如其他答案所指出的,您可以尝试基于IP地址的限制(并与大型企业代理用户发生冲突),但复杂的攻击者可以通过分配负载来解决这个问题.还有一些非常复杂的软件可以监视请求时间,请求模式等,并试图发现机器人.例如,扑克网站花了很多时间在这上面.但是不要指望这类系统便宜.您可以做的一件简单事情是挖掘您的网络日志(例如使用Splunk)并找到前N个IP地址到您的站点,然后对它们进行反向IP查找.有些将是合法的公司或ISP代理.但如果您在列表中识别出竞争对手的域名,您可以阻止他们的域名或跟进您的律师.
除了预防盗窃之外,您可能还想考虑插入"蜜罐":故意伪造的信息,您可以在以后跟踪.例如,这就是地图制造商捕捉plaigarism的方式:他们在地图中插入假街道,看看哪些其他地图显示相同的假街道.虽然这并不能阻止确定的人们泄露您的所有数据,但它确实可以让您以后找出谁重新使用您的数据.这可以通过在文本输出中嵌入唯一的文本字符串,然后在Google上搜索这些字符串(假设您的数据可在其他公共网站上重复使用)来完成.如果您的数据是HTML或图片,则可以包含指向您网站的图片,并且可以跟踪下载者的图片,并查找可用于破坏免费加载者的模式.
请注意,其他一个答案中提到的javascript加密方法不适用于未经过身份验证的会话 - 攻击者只需下载javascript并像常规浏览器一样运行它.故事的道德:公共数据基本上是站不住脚的.如果要保护数据受保护,请将其置于身份验证屏障之后.
这很明显,但如果您的数据可以被搜索引擎公开搜索,那么您将需要一个非AJAX解决方案(Google不会读取您的ajax数据!)并且您要将这些页面标记为NOARCHIVE,这样您的数据未显示在Google的缓存中.你也可能想要一个白名单的搜索引擎爬虫IP地址,你允许它进入你的搜索引擎可抓取页面(你可以使用谷歌,必应,雅虎等来获取这些),否则恶意机器人可能只是模仿谷歌并获取您的数据.
总而言之,我想回应上面的@kdgregory:确保威胁足够真实,值得付出所需的努力.许多公司高估了其他人(合法客户和邪恶的演员)对其业务的兴趣.这可能是你的是一个古怪的情况下,你有特别重要的数据,这是特别有价值的获得,它必须是没有认证公开访问,如果有人偷了你的数据的法律追索权将受到限制.但所有这些在一起都是不寻常的案例.
PS - 考虑这个问题的另一种方式,可能适用于您的情况,也可能不适用.有时,更改数据的工作方式会更容易,从而避免保护数据.例如,您是否可以以某种方式将数据绑定到站点上的服务,这样除非数据与您的代码一起使用,否则数据不是很有用.或者你可以在其中嵌入广告,这样无论它在哪里显示你都能得到报酬?等等.我不知道如果这些缓解措施的适用于你的情况,但许多企业已经找到了给的东西走了免费在互联网上(和鼓励而不是阻止宽重新分配),并且仍然赚钱,所以混合免费在您的情况下,/付款策略可能(或可能不).
首先,我想澄清一下:
在我看来,如果你说Flash客户端正在使用数据,问题并不那么困难.然后,您可以将加密数据发送到客户端,客户端将知道如何解密它.但是,由于Javascrip源的开放性,使用AJAX似乎不可能采用相同的方法.
很明显,信息被加密发送到闪存客户端,攻击者从你的flash编译程序中找出用于此目的的内容并不难 - 复制并获取所有数据.
如果数据确实具有您正在考虑的价值,您可以依靠上述内容.
如果这是公共信息,请接受并且不要打击它 - 而是想方设法利用它.
如果这是您仅向一组用户公开的信息,请确保您具有相应的身份验证/安全通信.跟踪其他人所说的用法,并采取措施对其采取行动,