2023年7月20日发(作者:)
反爬⾍的可⾏性⽅案很多⽹站都很痛恨爬⾍,⾟⾟苦苦得到的数据被⼀个⼩⼩的爬⾍给劫了。想想都难过,更多是爬⾍还会带来其他想不到的⿇烦,让⼈很头疼,就可⾏性的技术简单介绍⼀下。rReferer是浏览器在页⾯跳转时带⼊的HTTP头,指⽰⽤户上⼀个页⾯的URL, ⼀般的⽹站流量上应该带有Referer头, 在⼀些常见的反爬策略中, ⼤量的不带Referer头的源IP请求会触发"要求输⼊验证码"策略。 2.验证码验证码(CAPTCHA)是⼀种古⽼⽽有效的⽅式,⽤来判别请求⽅是否是⼈类。从最初的简单数字验证码、到后来的中⽂验证码,到现代的图⽚验证码, 验证码是应⽤层最普遍,也最核⼼的爬⾍对抗技术。 对于⼀些简单的数字、字母验证码, 随着近⼏年机器学习、神经⽹络的快速发展,已经近乎于⽆效。有⼈训练出基于LSTM的模型可以达到80~90%的识别正确率。 对于图⽚验证码, 也有灰产专门⽤⼈⼯打码平台来处理,所以单凭验证码很难有效处理爬⾍问题, 过多的验证码也会导致正常⽤户的体验受到影响。渲染(Ajax / SPA) Ajax技术的迅速发展,成为重要的浏览器端技术, 也让爬⾍从静态爬⾍转化为动态爬⾍。 从此,爬取⽹站的数据不再是简单的⼀个HTTP请求, 然后解析HTML页⾯就可以了。⼤量的⽹站使⽤ajax来构建⽹站前端,也使得解析数据变得越来越困难。 在⽹站完全不设防的状态,爬⾍也不⽌需要解析HTML页⾯, 亦需要解析Ajax接⼝返回的数据。4.接⼝加密与JS混淆⼀般Ajax接⼝返回的是⼀个JSON/XML数据格式,除了给爬⾍⼯程师制造⼀点点的⿇烦以外,并没有任何的反爬⾍作⽤, 只需⼀点点的前端逆向能⼒(利⽤Chrome Debug⼯具, 找到⽹络请求),就可以找到ajax接⼝,并通过对应的库解析出数据。但是如果前端通过JS混淆、并把ajax接⼝通过token进⾏加密的话,事情就变得⽐较⿇烦了。 这种做法的思路是, ajax接⼝除了正常的HTTP请求参数外,额外还要接受⼀个Token参数,这个token参数是前端的js脚本通过其他的参数加密出来的, 它可能是xor、md5、或者是sha256等等。参数可以是⽤户名、ip、cookies的sessionid、甚⾄是⽤户的操作流程(⽀付宝的做法)再加上前端把js的函数调⽤层层嵌套、隐藏、 再加上js脚本混淆,令破解者⽆法⽅便的逆向出token计算的流程, 就可以达到⼀定的反爬⽬的。5.数据混淆爬⾍的⽬的是获取到有效的数据。对于许多应⽤来说,获取到错误的数据往往⽐获取不到数据更加致命。这个思路的核⼼就是,当爬⾍命中反爬规则之后,使⽤错误的数据代替正确的数据返回给爬⾍, 这种⽅式⾮常隐蔽,⼜可以对对⼿造成⾜够的⿇烦。6.⾏为分析⽤户的操作轨迹与爬⾍的操作轨迹是不同的。举个例⼦, 在电商⽹站上,⽤户可能会浏览100个或者更多相似的商品,最终选择⼀个进⾏下单。⽽爬⾍的⾏为可能是浏览100000个商品,且它们之间彼此关联度很低, 最终也不会有任何购买动作。从这个维度来说,就可以判断出这个请求来源是客户还是爬⾍。 结合其他的反爬⼿段,就可以对爬⾍造成有效⼲扰。低级的⾏为分析基于规则,⾼级的⾏为分析基于机器学习。 对于⽤户操作⽐较多的⽹站来讲,是⼀种很可靠的反爬⼿段。7.存储跟踪与flash StorageCookies是众所周知的浏览器保持状态的⼀种机制。 除了Cookies,现代的浏览器还⽀持localStorage。以⽬前国内⽤户的使⽤习惯,绝⼤多数⽤户不会设置拒绝Cookies保持。所以,拒绝Cookies跟踪的客户端可以认为就是爬⾍。通过Cookies,就可以跟踪⽤户的⾏为轨迹。 除此之外,如果⽤户使⽤浏览器模拟技术,⼀定在每次请求时会清空Cookies。 Cookies被清空之后,我们仍然有机会使⽤flash来继续跟踪⽤户。Flash确实是⼀个⼣阳技术,但仍然保持极⾼的市场占⽤率,在PC端,在国内视频⽹站依然采⽤flash作为播放器的客户端占有⽐例还很⾼。所以,⼀个以PC端流量为主的⽹站,可以使⽤flash来进⾏⽤户跟踪。值得⾼兴的是,在flash插件中,通过String可以获取到⾮常多的系统信息,包括操作系统、语⾔、系统分辨率、DPI等等等等。这些系统信息与JS上下⽂、UserAgent、⽤户访问⽇志进⾏⼀起分析,就可以判断是否是伪装为爬⾍的浏览器。举个例⼦,如果是正常的⽤户, 从flash、js上下⽂、useragent拿到的参数应该是⼀致的,⽽如果伪造过UA(不那么⾼明的伪造),则肯定会有纰漏。tor对象浏览器中的tor对象保持了很多的操作系统、浏览器信息。navigator对象的信息配合Useragent、flash,可以⽤来判断是否是伪装浏览器。9.浏览器指纹浏览器指纹技术常⽤于客户端跟踪及反机器⼈的场景。核⼼思路是, 不同浏览器、操作系统、以及操作系统环境,会使得canvas的同⼀绘图操作流程产⽣不同的结果。如果是相同的运⾏环境,同⼀套Canvas操作流程会产⽣相同的结果。 浏览器指纹的优势是不需要浏览器保持本地状态,即可跟踪浏览器。 由于国内特⾊的Ghost系统安装,这种⽅式的误杀率并不低,10. JS引擎指纹这种思路是,不同的JS引擎在执⾏相同的JS语句时,会有不同的结果。 举个例⼦来说,ng().length,在Safari浏览器中的结果是 37 , 在IE中是39 , 在Chrome 中的结果是33. 通过判断JS引擎的动作和UserAgent中声称的浏览器类型,可以判断是否是伪造浏览器。11.应⽤层反反爬⾍/BOT⽅案简介11.1.前端逆向前端逆向,就是利⽤前端所有代码、数据都是暴露给客户端的特点, 通过分析HTML、JS等源码来获取数据的技术。 常⽤的前端逆向⼯具就是Chrome Debug ⼯具。前端逆向分析通常⽤来分析那些动态渲染的⽹站。 如果分析透彻,可以避免使⽤浏览器模拟的⽅式来进⾏爬取。11.2.浏览器模拟浏览器模拟指利⽤真实的浏览器去请求、执⾏页⾯和脚本。应⽤场景是爬取带有复杂JS和接⼝加密的⽹站、也被BOT⽤于复杂⽹站。常见的浏览器模拟框架有Selenium WebDriver、 PhatomJS。 Selenium 是通过浏览器的debug接⼝进⾏浏览器的远程操控API。PhantomJS是⼀个嵌⼊了浏览器内核的js渲染服务,这种技术可以⽤来对抗动态渲染和接⼝加密。所有的渲染和加密过程都由浏览器内核完成。 ⾼级的做法是⽤CEF(Chrome Embedded Framework)进⾏⼆次开发。通过⼆次开发CEF,可以获得很强的灵活性, ⽐如在页⾯加载之前劫持JS对象、⽤C++代码hook native js api等等。这种技术的主要劣势是低下的性能。 与纯粹的HTTP请求代码来说, 这种⽅案要多吃50~500倍的CPU。 也就是说, 它的效率要下降数⼗倍到数百倍左右。11.3.⾏为模拟⾏为模拟是指在爬⾍和BOT的过程中,有意的留下Cookie,并请求⼀些与需要爬取数据⽆关的接⼝或者做⼀些动作,⽤来模拟⼀般⽤户的动作, ⽤于对抗⾏为分析。 在BOT场景下,这种⽅式也⽤来模拟⽤户的活跃度和留存率。 ⼀般来说,⾏为模拟的主要依据来源于前端逆向的⼯作, 破解者需要确定究竟有哪些HTML元素和⽤户⾏为事件被⽹站所关注,并针对性的做出想要模拟的⾏为。 ⼤多数情况下,爬⾍的⾏为模拟是请求某个⽇志上报接⼝, ⽽⼀些⽐较特殊的⽹站(⽐如⽀付宝), ⽤户⾏为数据附着在请求普通接⼝的参数中,并经过⾼度混淆。 Hook这种⽅式主要⽤来对抗js上下⽂的跟踪和分析。做法是,在页⾯加载前,通过替换JS上下⽂的对象,将JS上下⽂中的对象和⽅法替换掉。例如,将对象替换, 使⽹站的js代码获取到替换后的屏幕分辨率。 JS Hook⼀般在CEF⼆次开发中实现,也可以通过劫持普通浏览器的流量完成js hook。层反反爬⾍技术12.1 .代理服务器对于爬⾍的客户端编程来说,利⽤代理服务器进⾏源IP更改,是最简单易⾏的⽅式。 代理服务器分为HTTP代理和Socks代理两类。HTTP⼜分为HTTP和HTTPS代理, Socks⼜分为Socks4和Socks5两类。代理HTTP代理是⼀种常见的代理服务类型。常⽤80、8080端⼝, 它的协议在RFC 7230 中定义。 对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报⽂。 根据XFF头部的添加与否, 分为普通代理和⾼匿代理两类。 普通代理会把请求⽅的源IP添加在HTTP请求头, ⽽⾼匿代理不会。对于服务端程序员来说,通过XFF头判断⽤户的源IP来源是⼀种⼗分 Too Young , sometimes naive 的⾏为,因为服务端完全没有能⼒判断这个XFF头是由请求⽅伪造的,还是由代理服务器添加的。 ⽹上流传的⼀些Java代码,会⾸先判断XFF头,如果有则将XFF头作为源IP处理,这种⽅式基本没有任何反爬⾍作⽤。代理SOCKS是另外⼀种常见的代理服务。SOCKS是"SOCKetS"的缩写[1]。这个协议最初由David Koblas开发,⽽后由NEC的Ying-Da Lee将其扩展到版本4。最新协议是版本5,与前⼀版本相⽐,增加⽀持UDP、验证,以及IPv6。根据OSI模型,SOCKS是会话层的协议,位于表⽰层与传输层之间。 也就是说,Socks通过TCP连接作为隧道进⾏代理。 Socks代理中,Socks5代理最为常见。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689814886a288373.html
评论列表(0条)