ilife5 / life

life is a beautiful che~
4 stars 5 forks source link

攻防两端,抓取与防抓取的方法 #35

Closed ilife5 closed 9 years ago

ilife5 commented 9 years ago

攻防两端,抓取与防抓取的方法

攻防两端本是水涨船高,往往对垒的不是技术门槛,而是成本。抓取者往往是有利一方,在web页面上尤甚。比就比在谁耗不起先撤退,而不是在技术上败下阵来。

ip白名单

最简单也是最普遍的做法是分析某IP访问服务器的频率,如果一个ip地址频繁的访问服务器,应当禁用该ip的访问,通过弹出验证码输入的方式辨识是否为机器。

该方法的关键点在于找到正常访问的频率和数量与抓取访问的边界。该边界可以通过用户行为分析得到。

ip白名单的破解之道

使用代理变换出口ip可破。

验证码

验证码同样是一种很流行的防抓取方案,用来区分人类和机器。验证码输入会降低用户体验。往往用在反问频率不高但是很重要的场景下,如百度贴吧的评论。

验证码的破解之道

通过验证码识别可破。关键点在于验证码识别的精度。

使用用户身份验证

敏感数据需要用户身份验证,这种方式不能够覆盖所有的页面和接口,只能够对用户有关的数据,不然会损失用户。

用户身份验证的破解之道

通过注册合法的用户再抓取可破,需要手机验证身份的情况,使用一次性的电话卡即可。注册用户的过程也可以使用程序生成。

使用复杂的js逻辑

浏览器访问数据接口时附带js中生成的key。js代码通常被混淆的不可读并且逻辑写于多个文件中。

破解复杂的js逻辑

通过模拟浏览器环境可破,如Selenium或者PhantomJs。

频繁改变页面的结构

频繁改变html元素的类型,属性(id,class,data)等。可以逼迫抓取方频繁更新抓取策略。

频繁改变页面的结构的破解之道

灵活智能的抓取系统可破。笨的方式,每次靠人力分析改变后的结构也未尝不可。

重要的数据使用图片代替

重要的数据使用图片代替的破解之道

目前较复杂的情形,同验证码一样,用图片分析技术可破。

ngxiaoyi commented 8 years ago

Web Socket连接方式是否一定程度上能防抓取?

ilife5 commented 8 years ago

@ngxiaoyi 我了解的web socket情况如下:

1,Web Socket协议与http协议不同,路由层设置的http的日志派不上用场,需要为socket单独考虑日志的记录。对于Socket协议来说,建立连接的难度要大于http,一定程度上增加了抓取的难度。

2,Web Socket本身需要考虑跨站攻击,如果没有这一层防御,Web Socket相当于裸奔。

总的来说用Web Socket连接方式会增加抓取的难度:)要做的事情也会多一些,比如设置Web Socket对跨站访问的屏蔽,为了支持Web Socket对路由层的改造等。

我们还没有大量用ws,如果有相关的经验,还请赐教:)

sodawy commented 8 years ago

我觉得如果http防不住,那websocket也防不住。抓取端本质都是伪造url+header。除非能基于websocket特点辨识出某种真实用户特征