我正在使用PHP和MySQL建立一个站点,它实际上只是现有数据库的Web前端。可以理解的是,我的客户非常希望能够阻止任何人在数据库中复制数据,同时希望所有内容都公开,甚至“查看全部”链接以显示数据库中的每条记录。
虽然我已经采取了一切措施来防止SQL注入攻击等攻击,但没有什么可以阻止任何人将所有记录都视为html并运行某种脚本来将这些数据解析回另一个数据库。即使我要删除“查看全部”链接,理论上仍然可以使用自动过程逐个浏览每个记录并将这些记录编译到新数据库中,基本上会收集所有信息。
有没有人有任何好的策略可以防止甚至只是阻止他们分享这些。
答案 0 :(得分:45)
虽然没有什么可以阻止一个坚定的人抓取公开可用的内容,但你可以做一些基本的事情来缓解客户的担忧:
按用户帐户,IP地址,用户代理等进行的速率限制... - 这意味着您可以限制特定用户组在特定时间段内可以下载的数据量。如果检测到大量数据正在传输,则会关闭帐户或IP地址。
需要JavaScript - 确保客户端与交互式浏览器有一些相似之处,而不是准确的蜘蛛......
RIA - 通过Rich Internet Application界面提供数据。基于JavaScript的网格包括ExtJs,YUI,Dojo等。更丰富的环境包括Flash和Silverlight 1kevgriff mentions。
将数据编码为图像。这对普通用户来说非常具有侵入性,但是您可以将一些数据表或值编码为图像而不是文本,这会使大多数文本解析器失败,但当然不是万无一失。
robots.txt - 拒绝明显的网络蜘蛛,已知的机器人用户代理。
用户代理:*
禁止:/
使用机器人元标记。这将阻止符合蜘蛛。这将阻止Google为您编制索引:
< meta name =“robots”content =“noindex,follow,noarchive”>
存在不同程度的威慑,第一种选择可能是最不具侵入性的。
答案 1 :(得分:29)
如果数据已发布,则互联网上的所有人都可以看到并访问该数据。这包括您想要看到的人以及您不想看到的人。
你无法双管齐下。您可以将其设置为只能通过帐户显示数据,并且人们会创建帐户来篡改数据。您可以这样做,以便只能从批准的IP地址中看到数据,并且人们会在啜饮之前完成获取批准的步骤。
是的,你可能很难获得,但是如果你想让它对普通用户来说很方便,你也需要为恶意用户提供便利。
答案 2 :(得分:11)
有几种方法可以做到,尽管没有一种方法是理想的。
将数据显示为图像而不是HTML。这需要在服务器端进行额外的处理,但对PHP中的图形库来说并不难。或者,您可以仅针对特定大小(即所有)的请求执行此操作。
加载页面shell,然后通过AJAX调用检索数据并将其插入DOM。使用会话设置必须通过AJAX调用作为验证传回的哈希。散列仅在特定时间长度(即10秒)内有效。这实际上只是添加了一个额外的步骤,有人必须跳过来获取数据,但会阻止简单的页面抓取。
答案 3 :(得分:7)
尝试使用Flash或Silverlight作为前端。
虽然这不能阻止某人,如果他们真的有决心,那将会更加困难。如果您通过服务加载数据,则可以始终使用安全连接来防止中间人抓取。
答案 4 :(得分:5)
你真的无能为力。您可以尝试通过您的网站查找自动流程,但最终会获胜。
经验法则:如果你想保留自己的东西,请将其保存在互联网上。
答案 5 :(得分:5)
为每个唯一的IP每10页加载一次reCAPTCHA
答案 6 :(得分:3)
将手从键盘上移开,并询问客户原因为什么他希望数据可见而不能被抓取?
他要求两个不一致的事情,也许就他的推理进行讨论会产生一些成果。
可能他真的不希望公开访问它,您需要添加身份验证/授权。或者他可能会认为实际开放API有价值。但是在你问之前你不会知道。
答案 7 :(得分:2)
我不知道你为什么会这样做。客户提供数据。
据推测,他们以某种独特的方式创造了价值,而这种方式并未在数据中得到充分体现。
反正。
您可以查看浏览器,屏幕分辨率和IP地址,看看它是否可能是某种自动刮刀。
cURL和wget等大多数内容 - 除非经过精心配置 - 显然不是浏览器。
答案 8 :(得分:2)
使用类似Adobe Flex(Flash应用程序前端)的东西可以解决这个问题。
除此之外,如果您希望用户可以轻松访问,则用户可以轻松复制。
答案 9 :(得分:1)
对此没有简单的解决方案。如果数据是公开的,那么可以将其删除。你唯一能做的就是通过在不影响布局的情况下添加/更改HTML使每个条目略显独特,使刮刀的生活更加困难。这可能会让某人使用正则表达式收集数据变得更加困难,但它仍然不是一个真正的解决方案,我会说任何有足够决心的人都会找到一种方法来处理它。
我建议告诉您的客户,这是一项无法实现的任务,并继续处理您工作的重要部分。
答案 10 :(得分:0)
如何创建类似于公告板的巨魔保护......如果检测到刮擦(可能是一个IP每分钟一定数量的访问,或者看起来像站点地图爬行的定向爬行),那么您可以开始呈现垃圾数据,例如更改电话号码的几个数字或在名称字段中添加愚蠢的名称。
关闭谷歌IP!
答案 11 :(得分:0)
通常,屏幕抓取一个不错的数量,必须向您的服务器发出数百,数千(和更多)的请求。我建议你阅读这个相关的Stack Overflow问题:
<强> How do you stop scripters from slamming your website hundreds of times a second? 强>
答案 12 :(得分:0)
使用刮刀倾向于快速连续加载许多页面以检测刮擦行为的事实。在x秒内每n页加载显示一个CAPTCHA,和/或包括每个页面加载的指数增长延迟,当每分钟加载数十页时,这个延迟会变得很长。
通过这种方式,普通用户可能永远不会看到你的CAPTCHA,但是刮刀会很快达到强制他们解决CAPTCHA的限制。
答案 13 :(得分:-3)
我的建议是,这是非法的,所以至少你有法律追索,如果有人刮了网站。所以,最好的办法就是包含原始网站的链接,让人们刮掉。他们抓得越多,你的链接就会出现在互联网上,越来越多地建立起你的网页。
人们通常不会反对包含原始网站的链接,因为它与原作者建立了一种融洽关系。
所以我的建议是问你的老板这对于网站的健康状况是否真的是最好的。