浏览器安全检查5秒解决方案

浏览器安全检查5秒解决方案

最近在做一个爬虫的时候遇到了浏览器安全检查的情况:
在这里插入图片描述
使用fiddler进行抓包分析
在这里插入图片描述

我们可以看到第一次访问网页返回的响应码是503,因为没有携带cookie
然后5秒之后自动跳转到第三个请求,第三个请求的url为
http://www.machineryinfo.net/cdn-cgi/l/chk_jschl?jschl_vc=59dc97dc709d5d42b4907dea5483df37&pass=1514166702.677-IddoE%2FcQMm&jschl_answer=544

我们分析一下第一个请求的响应体

安全检查中...
<script type="text/javascript">

//<![CDATA[ (function(){ var a = function() {try{return !!window.addEventListener} catch(e) {return !1} }, b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)}; b(function(){ var a = document.getElementById('yjs-content');a.style.display = 'block'; setTimeout(function(){ var s,t,o,p,b,r,e,a,k,i,n,g,f, uyKdOwL={"qeULyPtNFAQh":+((+!![]+[])+(!+[]+!![]+!![]+!![]))}; t = document.createElement('div'); t.innerHTML="x"; t = t.firstChild.href;r = t.match(/https?:\/\//)[0]; t = t.substr(r.length); t = t.substr(0,t.length-1); a = document.getElementById('jschl-answer'); f = document.getElementById('challenge-form'); ;uyKdOwL.qeULyPtNFAQh*=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));uyKdOwL.qeULyPtNFAQh-=+!![];uyKdOwL.qeULyPtNFAQh+=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));a.value = parseInt(uyKdOwL.qeULyPtNFAQh, 10) + t.length; '; 121' f.submit(); }, 4000); }, false); })(); //]]>

请打开浏览器的javascript,然后刷新浏览器

machineryinfo.net 浏览器安全检查中...

还剩 5 秒…

      <div class="attribution"><a href="http://su.baidu.com/" target="_blank" style="font-size: 12px;"></a></div>
  </td>
</tr>

发现第三个请求的三个参数在源码中都有体现,

jschl-answer这个值需要我们自己进行计算

uyKdOwL={“qeULyPtNFAQh”:+((+!![]+[])+(!+[]+!![]+!![]+!![]))};
uyKdOwL.qeULyPtNFAQh*=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]));
uyKdOwL.qeULyPtNFAQh-=+!![];
uyKdOwL.qeULyPtNFAQh+=+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]));
a.value = parseInt(uyKdOwL.qeULyPtNFAQh, 10) + t.length;
1
2
3
4
5
经过分析源码中的js,发现jschl-answer 即为a.value,t.length是21,uyKdOwL.qeULyPtNFAQh是经过重重计算得到的,+((+!![]+[])+(!+[]+!![]+!![]+!![])) 可以看做是经过加密的js代码,在chrome控制台中直接执行可以看到实际上是14,*=35,-=1,+=34,然后再加上t.length(21),结果就是544,就是第二个请求中最后一个参数的值
然后获取到了url就可以模拟请求,在进行该请求前等待4秒,模拟js中的setTime方法,然后该请求的响应头中会携带新的cookie字段,然后在请求头中加上该cookie字段就可以正常访问网页了

作者:_Ithrael
来源:CSDN
原文:https://blog.csdn.net/wh01096046/article/details/78893208
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/tsztgame/article/details/84176758