详解cookie验证的php应用的一种SSO解决办法


Posted in PHP onOctober 20, 2017

详解cookie验证的php应用的一种SSO解决办法

近日,项目中需要接入一个“年久失修”的PHP应用,由于系统已经建设多年,并且是信息中心自己的人通过某些工具弄出来的,而且是本人未真正接触过的PHP写的,而且跟我们的系统不在同一服务器上也就是存在跨域的问题,想通过客户端模拟登录的方式来实现,但是总是不成功。

没办法,只好想尽一切办法查看页面源代码,然后,找服务器的php文件,分析。

由于对php不熟悉,加上没有仔细看,因此,对于找到的登录页面的php文件,一开始只是有一个初步的了解,基本上确定是通过cookie来实现,实际上真正的验证机制还有如何验证都没有了解清楚,急着就开始新的征程,结果屡试屡败。
先说一下一开始的实现方式:

最开始

系统中添加一个iframe,试图从本地应用中给iframe中的远程系统的指定页面的用户名、密码赋值,并模拟“登录”按钮的单击事件。这个是必定失败的,因为,跨域了,js一般不能跨域远程操作别人的东西。

然后

本地form的远程action。在本地的页面中新增一个form,此form中添加上与目标系统一样的登录界面的内容(就是用户名、密码输入框,特别说明的是此应用尚没有验证码),然后在页面加载时,便给form中的元素赋值,点击本地页面的“单点登录”时,提交此form,试图按照java登录验证的模式来实现此php系统的登录验证。但是,依然,无法正常登录。

接下来

仔细分析登录的php文件。发现验证过程其实是通过cookie来实现的,依稀记得早期的很多BBS都是这种方式。找相关人员通过各种途径,大体了解了登录验证的机制及过程,原来是在登录之后,将信息写入cookie,每个页面都会引入一个通过读取cookie并根据cookie的内容进行判断的php文件。这样了解了验证机制。于是,想要通过跨域写cookie的方式来实现,由于本身的应用是portal应用,因此,写跨域应用也费了一些劲,最终,写本地cookie没问题,但是跨域的cookie,连想都不用想,生成不了。

最后

分析php的登录界面,发现之所以每次定向的登录php文件,在进行验证的时候,都有一个if(isset($submit) and $submit=="登录")这样的判断,不是特别明白这句是什么意思,isset貌似是判断参数是否为空,而后面则判断参数值为“登录”!由于本人php水平太低,不知道这样的判断有何作用,是否能够执行。最终,只能跟客户讨论是否可以通过在服务端新增一个专门用于接收单点登录需要的php文件。只是把原来的登录用的php文件做了修改,去掉这些判断,并且原来的登录在验证之后,跳转到的目标页面是通过从地址栏获取的信息来进行跳转的,因此,对此部分内容也进行了调增。这样,最终形成了以下的ssologon.php文件

<?php require($DOCUMENT_ROOT."/db.inc"); 
 
    $dbh=db_connect(); 
    if(!$dbh) die("mysql connect failed. please wait to retry..."); 
    $sql="select * from user_code where ((user_name='$username') and (user_password='$password'))";            
    $result=mysql_query($sql,$dbh); 
    if(!$result) die("mysql system error, please connact with admin"); 
    $num=mysql_num_rows($result);       
    if($num<1){ //not such a man 
      db_close($dbh); 
      echo "$header 姓名或者密码错误 $footer"; 
      exit;   
    } 
    else{ //验证通过,设置cookie 
      $row=mysql_fetch_object($result); 
      db_close($dbh); 
      $temp=$row->user_id."*".$row->user_cnname."*".$row->user_password;            
      $ret=setcookie("WEBOAUSER","$temp"); 
      echo "<meta http-equiv='refresh' content='0;url=http://192.168.1.4/uuu/default.php'>"; 
       
      exit;                 
    } 
?>

然后,把本地应用中的form的action指定为此php文件,搞定!

总结,对于需要分析别人的东西才能搞定的事情,一定不能过于焦躁,要仔细,了解原理,才能事半功倍。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
用php过滤危险html代码的函数
Jul 22 PHP
PHP Memcached应用实现代码
Feb 08 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
Aug 22 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
php图片添加文字水印实现代码
Mar 15 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 #PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 #PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 #PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 #PHP
PHP自定义函数实现数组比较功能示例
Oct 19 #PHP
phpstudy的php版本自由修改的方法
Oct 18 #PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 #PHP
You might like
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
php实现搜索类封装示例
2016/03/31 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
python读取LMDB中图像的方法
2018/07/02 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
快速查找Python安装路径方法
2020/02/06 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
巴西在线鞋店:Shoestock
2017/10/28 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
测绘工程专业个人自我评价
2013/12/01 职场文书
学生手册家长评语
2014/02/10 职场文书
小学社团活动总结
2014/06/27 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL