php 模拟登录

mqy6863248 发布于 2017/02/11 09:47
阅读 682
收藏 1
PHP

怎么判断用户登录系统的访问是正常登录还是模拟登录

加载中
0
官方入员
官方入员

php处理不了,用java吧

0
绿水本无忧
绿水本无忧

引用来自“有个鬼”的评论

php处理不了,用java吧

讲道理这点我不服,这个问题的关键不是语言,是登录过程的实现思路,用一个随机生成的md5字符串作为token配合登录,就可以判断是不是模拟的了吧

0
BG5TWC
BG5TWC

这个没有办法防御哦,毕竟浏览器也是用代码写出来的,能做到的只有提高模拟登陆的成本。

1.最简单的,验证user_agent头,当然 伪造user_agent很简单的

2.验证referer,当然,对于熟悉http协议的人来说,这些都是小儿科

3.在表单中加入token等也是徒劳,因为在模拟登陆之前获取一下登录页的token也不是什么难事

4.最终极方案,因为正常用户登陆一般使用浏览器,浏览器会加载诸如js,css,图片这些资源,而模拟登陆一般不考虑这些,所以在资源请求上增加一些校验,比如没有加载某个资源则判断为模拟登陆的用户

5.终极的终极方案,根据一些点击请求的时间,模拟登陆一般误差都很小,但是人来操作,时间把握不可能这么精确,所以,在行为上也可以找出一些蛛丝马迹

当然了,从签到后,这些验证的成本也是越来越高的

0
宇润
宇润

做过post类软件的路过下,表示你无法通过一个请求来准确判断是不是模拟的。其实浏览器底层也是发送请求,无法从请求层面准确判断的。

京东有个项目,可以根据大数据,来判断一个IP是机器人的概率有多少。

0
s
springs1908

php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网。具体实例代码如下:

1)使用snoopy模拟登陆:

<?php 

set_time_limit(0); 

require "Snoopy.class.php"; 

$snoopy=new Snoopy(); 

$snoopy->referer='http://www.lai18.com/'; 

$snoopy->agent="Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0"; 

$submit_vars['email'] ='登陆账号'; 

$submit_vars['password'] ='登陆密码'; 

$url='http://www.lai18.com/login';//登陆数据提交的URL地址 

$snoopy->submit($url,$submit_vars); 

$snoopy->fetch("http://www.lai18.com/");//希望获取的页面数据 

echo $snoopy->results;//m.jb51.net


2)使用curl模拟登陆:

<?php 

set_time_limit(0); 

$cookie_file=tempnam('./tmp','cookie');//tmp目录需要先建立好 

$ch=curl_init(); 

$login_url='http://www.lai18.com/login'; 

$curlPost="email=登陆账号&password=登陆密码"; 

curl_setopt($ch,CURLOPT_URL,$login_url); 

//启用时会将头文件的信息作为数据流输出 

curl_setopt($ch,CURLOPT_HEADER,0); //设定是否输出页面内容 

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 

curl_setopt($ch,CURLOPT_POST,1); //设置请求发送方式,post或get,CURLOPT_POST或CURLOPT_GET 

curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost); 

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file); //保存cookie 

curl_exec($ch); 

curl_close($ch); 

$ch=curl_init(); 

$login_url2="http://www.lai18.com/"; 

curl_setopt($ch,CURLOPT_URL,$login_url2); 

curl_setopt($ch,CURLOPT_HEADER,0); 

curl_setopt($ch,CURLOPT_RETURNTRANSFER,0); 

curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file); //读取cookie 

curl_exec($ch); 

curl_close($ch);

希望有帮助

肖剑omg
肖剑omg
mark
返回顶部
顶部