zoukankan      html  css  js  c++  java
  • 带验证码,密码的网页数据采集

        对于带密码的,需要用户登陆的才能查看的页面,你要做的是首先获取一个有效密码,接着使用密码登录,获取服务器返回的Cookie信息,通常是一个SessionID,这段就表名了你是授权的用户,在asp.net里,他通常是你的用户名,跟服务器上的一段数据混合加密后的结果(使用对称加密,具体看你的配置文件),获取登录时返会的http协议报头信息有很多工具,如果你用C#,那么可以建立一个Window程序,里面使用WebBrowser控件,在里面进行登录操作后,查看 webBrowser1.Document.Cookie属性即可,接着将你获取的cookie信息,添加到你发出请求标头里(报头) 如_webRequestHeaders.Add("Cookie","xxxxx") 这使用的是WebRequest类,你也可以使用WebClient,这个方便点.

       带验证码页面的数据采集,这个需要具体分析,验证码的正确用法是,将服务器端生成的验证码文本保存起来,一般是Session里,或者数据库里等,将生成图片,跟一段Cookie(检索对应Session用的)发到客户端,针对这情况,你可以想办法做图片识别,一般可以用象素比对,不过多数情况还是无法识别的,这个你就需要将验证码图片显示出来,让用户输入后,再进行数据采集,具体操作类似上面讲的带密码的情况,关键是看返回的cookie.

      当然有不少情况下,验证码只是虚设的,程序员可能把验证码文本直接明文放到Cookie里发回,我在用Asp时就常这么做,因为服务器很多情况下会丢失Session,当然你有自己的服务器,并且资源充足,那另当别论,保存到数据库又嫌麻烦.
    另外有些验证码是图片拼接的,这个在一些老的系统上能找到,针对这个只要搞清文件名跟数字的对应关系就好.
    我还见过一中,就是把验证码文本加一段其他数据MD5后放到Cookie里,验证时,将用户的输入跟指定数据一起MD5后与cookie里的数据比对,这种情况跟明文保存在cookie里是一样的,其实质是没有验证码.因为它不能避免回放攻击,即首先进行一次正常的请求,接着将着次请求的cookie,跟验证码信息记录下来(人工识别,如果能机器识别那就什么多不用说了!),下面就可以重复使用这组信息了.
      最后安全的做法是将验证码保存到服务器端,Session,数据库里,每个验证码在比对后应该马上清除防止回放攻击.

     
  • 相关阅读:
    iaas,paas,saas理解
    July 06th. 2018, Week 27th. Friday
    July 05th. 2018, Week 27th. Thursday
    July 04th. 2018, Week 27th. Wednesday
    July 03rd. 2018, Week 27th. Tuesday
    July 02nd. 2018, Week 27th. Monday
    July 01st. 2018, Week 27th. Sunday
    June 30th. 2018, Week 26th. Saturday
    June 29th. 2018, Week 26th. Friday
    June 28th. 2018, Week 26th. Thursday
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1074324.html
Copyright © 2011-2022 走看看