没有合适的资源?快使用搜索试试~ 我知道了~
详解cookie验证的php应用的一种SSO解决办法
需积分: 3 1 下载量 188 浏览量
2020-12-20
07:47:37
上传
评论
收藏 76KB PDF 举报
温馨提示
试读
2页
详解cookie验证的php应用的一种SSO解决办法 近日,项目中需要接入一个“年久失修”的PHP应用,由于系统已经建设多年,并且是信息中心自己的人通过某些工具弄出来的,而且是本人未真正接触过的PHP写的,而且跟我们的系统不在同一服务器上也就是存在跨域的问题,想通过客户端模拟登录的方式来实现,但是总是不成功。 没办法,只好想尽一切办法查看页面源代码,然后,找服务器的php文件,分析。 由于对php不熟悉,加上没有仔细看,因此,对于找到的登录页面的php文件,一开始只是有一个初步的了解,基本上确定是通过cookie来实现,实际上真正的验证机制还有如何验证都没有了解清楚,急着就开始新的征程,结
资源详情
资源评论
资源推荐
详解详解cookie验证的验证的php应用的一种应用的一种SSO解决办法解决办法
详解详解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文件,搞定!
总结总结,对于需要分析别人的东西才能搞定的事情,一定不能过于焦躁,要仔细,了解原理,才能事半功倍。
weixin_38692162
- 粉丝: 4
- 资源: 904
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0