网站资源防爬虫方案

网站资源防爬虫方案

先讲讲大环境吧。自己写爬虫也不是一天两天了,爬照片,爬种子,爬网站数据,爬各种没有公开接口的网站的动态数据。在搞数据的人的眼里,你总是处于自己的数据被人爬和别人的数据被自己爬的路上。

前提

OK了,大环境说完开始说前提。公司是做医学3d打印的,从医院过来的数据都是通过公司的在线平台就行存储的,而且是近乎开放的存储,都是一手的真实数据,这要是被爬虫爬走了,资源流失不说,弄个私人信息泄露,又是一个大新闻。也有想过用七牛,upyun等第三方的数据存储。但是,Boss不给钱啊……?(写到这里,其实我都没勇气继续写下去了)

之前的解决方案

之前的解决方案就是,通过微秒函数生成文件名,进行保存。文件的命名虽然给爬虫造成了较大的爬取障碍。但是,持续的发包探测,还是可以获取到医学文件包的。可怕的就是,在我进入这个公司之前,平台是外包的,文件上传TM是任意文件上传……,php文件传上去就可以直接使用(第二次的重构我是真的没多大勇气继续看下去了。重构很急,所以之前要是被人黑进去,留了后门我肯定是没有清理掉的)。至于之前的解决方案就是uniqid(),我看了看,真的没有任何其他东西了。

从之前的解决方案,到我接手重构

PHP中吧,既然用了框架了,MVC肯定不能丢吧。好了,看了代码之后,控制器里尽然在构造sql语句,一大堆的xss,一大堆的sql注入。某日忍不住喷了。。。
刚把室内定位的后台写完,就开始重构业务平台了。之前也不过是粗粗看了一点,这次是很认真看的。函数命名含义不清也是一大堆。全是依赖于CI框架最基本的getupdateinsert三个来写写的,连whereIn都没见到。这样的外包水平设计的平台,造成了各个用户之间的权限隔离是非常弱的,越权啊,除了管理员,所以用户都有一样的权限。可是功能分组却有3组。瞬间黑脸??‍♂(再次没勇气)。

重构,关于文件防爬虫

重构中,主管说,我们的资源很重要的,千万不能给别人拿去了。
想想也是,爬去了,我还怎么玩了?
于是做了五个方面的措施:

  1. 服务是LNMP的架构,在Nginx层面,对资源文件的路径下的所有文件禁止访问的措施。
    为何不用Linux的命令 chmod 进行处理,可以去看一下bigUpload插件的上传要求,不多说。
  2. 使用文件包含进行文件读取。
    由于是从客户端获取资源id,进入数据库进行查询资源存储路径,再进行文件包含读取操作,所以,控制了注入问题,就不会引发任意文件读取的问题。
  3. 一次性key读写措施。
    key随机生成,客户端读完文件,key就失效。当key出现在客户端的时候,就意味着文件读取完成,key同时也失效了。
  4. 验证REFERER
    读取只能在本地读取,再在客户端显示。即使伪造了REFERER,依然有123可以保证文件安全。
  5. session 验证。
    在文件读取完毕后,设置了两个session,在客户端渲染的时候进行读取session,进行验证。一旦检测不到session,又进行未授权报错。

结尾

平台重构,功能添加,今天终于是结束了,写下此文,以记录本次重构中用到的文件防爬虫措施?。

发表评论

电子邮件地址不会被公开。 必填项已用*标注