带验证码,密码的网页数据采集

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

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

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