PHP实现跨域自动登录

简介:

很多时候多个域名共用了同一组用户数据,往往也想当其中的一个域名登录后可以快捷的进行另几个域名下自动登录而不用用户再登录一次。

大至可以分为两种情况:一种是一级域名相同,只是二级域名不同如 test.php.com 和 login.php.com。另一种是域名一级域名不相同如 test.php.com 和 t.html.com。对于一级域名相同的基本上可以在写COOKIE时只写到一级域名就可以,这样其它的同一级域名可以直接的访问这个COOKIE数据,但如果一级域名不相同那就没有办法直接访问(至少现在不能)。在这里只说那种一级域名不相同的时候应该怎样去处理。


113838348.jpg

PHP组成的网站可以接收客户端,数据库,内存缓存,文件等的数据来作出不同的反映。有的时候需要对不同的用户操作做独立后期服务时,就得区分用户,能区分的方法就是给用户做标识,用户标识必须在享受独立服务前与服务器创建会话,登录就是创建独立会话的开始。登录作为用户个人标识,同时为用户提供一个规划好的独立空间,允许用户在这个空间里独立享受服务,所以又引来用户标识安全问题。要想能相对准确的知道用户的身份,只能由客户来操作才能做到这点,当前识别的方式多为用户名加密码外加验证码,用户登录是一个敏感操作,在数据安全方面是一个网站的基本。所以只要能找到一个好的传送自动登录数据到目标网站就可以完成自动登录的目的。很多人也都在为这个问题而头疼,如何传送?。

想想网上支付系统我们可以得出相仿的模式,因为大部分支付系统都是在自己的平台上完成支付操作,对外提供一个连接支付接囗。这是一个典型的两个不同的域名之间登录验证用户标识的架构,但它们之间的数据交互方式又有多种。但我们只要一点就可以完成一个相对安全的方法(验证密钥)。登录与自动登录都必须通过客户端才相对准确,尤其是不同域名且服务器也不同,完成的思路可以定为:用户先登录 --> 用户操作要进入另一个网站(但没有立刻进入另一个网站而是请求当前网站的一个跳转处理地址) --> 跳转处先判断用户的合法性(以合法为例) --> 提取用户名与ID外加验证密钥(密钥可以自己定义也可以直接MD5)组成的连接用header跳转到目标网站 --> 目标网站判断提交过来的数据(合法就创建登录数据生成会话) --> 跳转到目标网站指定的页面。

160828885.jpg

在这整个处理过程中最重要的是安全问题,这个URL会不会非法生成或获取从而给网站无形的创建了一个漏洞,这个问题就如果放在网上支付系统上那网上支付可能很难再进行下去了。这种跨域操作用的最多的是验证串,如果说你的验证机制做的好那么别人就很难创建URL进行漏洞攻击。支付系统就是如此,当前基本上所有的支付接囗都提供了一个接囗包,而这个包中就有验证串处理机制。为了让这个机制不让你懂了其的加密方法就可以解密或生成,从而引出了密钥或商户名这两个附加串,它是整个安全的核心,如果这个数据被别人知道了那就麻烦了(如果你认为有的支付接囗还会判断IP或域名很安全,其实这些数据中是相对安全),只要这两组附加串没有被泄漏那么想破解就没有那么简单,当然如果你非要去爆力破解(只能说明你的时间太多了!)。

网站的安全没有绝对的,但我们要尽力让它相对安全。对于跨域登录的方法虽然不只这一种但基本的思想一样,那就是获取当前的用户信息传给目标网站由目标网站判断合法性再创建会话。

上面的例子只是针对不同域和不同的服务器(不共用数据)时的一种方法,如果数据库是共用的(主从模式复制数据库管理方式除外)那么这个附加串就可以写在数据库中并且为每个用户生成不同的随机附加串来提高安全性!


如果想指定进入目标网站的地址,我想只要现多加一个参数传入就OK了!


注:以上的代码没有作安全过滤处理,故不能直接用!

如果有客户端应用,另论! 

个人技术有限,如有不当还请指正!

本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1308407


相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
9月前
|
前端开发 API PHP
漏刻有时开放平台数据接口php允许ajax跨域的解决方案
漏刻有时开放平台数据接口php允许ajax跨域的解决方案
35 0
|
9月前
|
JSON 前端开发 JavaScript
php函数file_get_contents应对百度天气接口CORB跨域解决方案
php函数file_get_contents应对百度天气接口CORB跨域解决方案
56 0
|
PHP
php实现数字格式化,数字每三位加逗号的功能函数169856420=>169,856,420
php实现数字格式化,数字每三位加逗号的功能函数169856420=>169,856,420
188 0
|
PHP
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
358 0
|
消息中间件 PHP Windows
PHP实现php-amqplib/php-amqplib实例RabbitMq
PHP实现php-amqplib/php-amqplib实例RabbitMq
122 0
|
XML 移动开发 JSON
PHP使用yansongda/pay实现支付宝和微信的支付
PHP使用yansongda/pay实现支付宝和微信的支付
836 0
|
NoSQL PHP Redis
PHP结合redis实现点赞功能
PHP结合redis实现点赞功能
107 0
|
消息中间件 缓存 JSON
PHP实现think-queue介绍
PHP实现think-queue介绍
327 0
|
PHP
php实现定时任务hellogerard/jobby
php实现定时任务hellogerard/jobby
113 0
|
PHP
PHP实现JWT lcobucci/jwt生成jwt token
PHP实现JWT lcobucci/jwt生成jwt token
428 0