我正在使用PHP和MySQL建立一个站点,它本质上只是现有数据库的Web前端.可以理解的是,我的客户非常希望能够阻止任何人在数据库中复制数据,同时希望所有内容都公开,甚至"查看全部"链接以显示数据库中的每条记录.
虽然我已经采取了一切措施来防止诸如SQL注入攻击之类的攻击,但没有什么可以阻止任何人将所有记录都视为html并运行某种脚本来将这些数据解析回另一个数据库.即使我要删除"查看全部"链接,理论上仍然可以使用自动化过程逐个浏览每个记录并将这些记录编译到新数据库中,从根本上捏取所有信息.
有没有人有任何好的策略来防止甚至只是阻止它们可以分享.
虽然没有什么可以阻止一个坚定的人刮掉公开可用的内容,但你可以做一些基本的事情来缓解客户的担忧:
按用户帐户,IP地址,用户代理等进行的速率限制... - 这意味着您可以限制特定用户组在特定时间段内可以下载的数据量.如果检测到正在传输大量数据,则会关闭帐户或IP地址.
需要JavaScript - 确保客户端有一些相似的交互式浏览器,而不是一个准确的蜘蛛......
RIA - 通过富Internet应用程序界面提供数据.基于JavaScript的网格包括ExtJs,YUI,Dojo等.更丰富的环境包括Flash和Silverlight,如1kevgriff所述.
将数据编码为图像.这对普通用户来说非常具有侵入性,但您可以将一些数据表或值编码为图像而不是文本,这会使大多数文本解析器失败,但当然不是万无一失.
robots.txt - 拒绝明显的网络蜘蛛,已知的机器人用户代理.
用户代理:*
不允许: /
使用机器人元标记.这将阻止符合蜘蛛.这会阻止Google为您编制索引:
有不同程度的威慑,第一种选择可能是最不具侵入性的.
如果数据已发布,则互联网上的每个人都可以看到并访问该数据.这包括您想要看到的人和您不看的人.
你不可能两种方式.您可以将其设置为只能通过帐户显示数据,并且人们会创建帐户来篡改数据.您可以这样做,以便只能从批准的IP地址中看到数据,并且人们将在啜饮之前完成获取批准的步骤.
是的,你可能很难获得,但如果你想让它对普通用户来说很方便,那么你也需要为恶意用户提供便利.
你可以用很少的方法做到这一点,尽管没有一种方法是理想的.
将数据显示为图像而不是HTML.这需要在服务器端进行额外的处理,但对PHP中的图形库来说并不难.或者,您可以仅针对特定大小(即所有)的请求执行此操作.
加载页面shell,然后通过AJAX调用检索数据并将其插入DOM.使用会话设置必须通过AJAX调用作为验证传回的哈希.哈希仅在特定时间长度(即10秒)内有效.这实际上只是添加一个额外的步骤,有人必须跳过来获取数据,但会阻止简单的页面抓取.
尝试使用Flash或Silverlight作为前端.
虽然这不能阻止某人,如果他们真的有决心,那将更加困难.如果您通过服务加载数据,则可以始终使用安全连接来防止中间人抓取.
你真的什么都做不了.您可以尝试通过您的网站查找自动流程,但最终会获胜.
经验法则:如果你想保留自己的东西,请将它从互联网上移除.
为每个唯一的IP每10页加载一次reCAPTCHA