PHP實現跨域自動登陸

不少時候多個域名共用了同一組用戶數據,每每也想當其中的一個域名登陸後能夠快捷的進行另幾個域名下自動登陸而不用用戶再登陸一次。php

大至能夠分爲兩種狀況:一種是一級域名相同,只是二級域名不一樣如 test.php.com 和 login.php.com。另外一種是域名一級域名不相同如 test.php.com 和 t.html.com。對於一級域名相同的基本上能夠在寫COOKIE時只寫到一級域名就能夠,這樣其它的同一級域名能夠直接的訪問這個COOKIE數 據,但若是一級域名不相同那就沒有辦法直接訪問(至少如今不能)。在這裏只說那種一級域名不相同的時候應該怎樣去處理。html

 

113838348.jpg

PHP組成的網站能夠接收客戶端,數據庫, 內存緩存,文件等的數據來做出不一樣的反映。有的時候須要對不一樣的用戶操做作獨立後期服務時,就得區分用戶,能區分的方法就是給用戶作標識,用戶標識必須在 享受獨立服務前與服務器建立會話,登陸就是建立獨立會話的開始。登陸做爲用戶我的標識,同時爲用戶提供一個規劃好的獨立空間,容許用戶在這個空間裏獨立享 受服務,因此又引來用戶標識安全問題。要想能相對準確的知道用戶的身份,只能由客戶來操做才能作到這點,當前識別的方式多爲用戶名加密碼外加驗證碼,用戶 登陸是一個敏感操做,在數據安全方面是一個網站的基本。因此只要能找到一個好的傳送自動登陸數據到目標網站就能夠完成自動登陸的目的。不少人也都在爲這個 問題而頭疼,如何傳送?。數據庫

想一想網上支付系統咱們能夠得出相仿的模式,由於大部分支付系統都是在本身的平臺上完成支付操做,對外提供一個鏈接支付接囗。這是一個典型的兩個不一樣的域名之間登陸驗證用戶標識的架構, 但它們之間的數據交互方式又有多種。但咱們只要一點就能夠完成一個相對安全的方法(驗證密鑰)。登陸與自動登陸都必須經過客戶端才相對準確,尤爲是不一樣域 名且服務器也不一樣,完成的思路能夠定爲:用戶先登陸 --> 用戶操做要進入另外一個網站(但沒有馬上進入另外一個網站而是請求當前網站的一個跳轉處理地址) --> 跳轉處先判斷用戶的合法性(以合法爲例) --> 提取用戶名與ID外加驗證密鑰(密鑰能夠本身定義也能夠直接MD5)組成的鏈接用header跳轉到目標網站 --> 目標網站判斷提交過來的數據(合法就建立登陸數據生成會話) --> 跳轉到目標網站指定的頁面。跨域

160828885.jpg

在這整個處理過程當中最重要的是安全問題,這個URL會不會非法生成或獲取從而給網站無形的建立了一個漏洞,這個問題就若是放在網上支付系統上那網上支付可 能很難再進行下去了。這種跨域操做用的最多的是驗證串,若是說你的驗證機制作的好那麼別人就很難建立URL進行漏洞攻擊。支付系統就是如此,當前基本上所 有的支付接囗都提供了一個接囗包,而這個包中就有驗證串處理機制。爲了讓這個機制不讓你懂了其的加密方法就能夠解密或生成,從而引出了密鑰或商戶名這兩個 附加串,它是整個安全的核心,若是這個數據被別人知道了那就麻煩了(若是你認爲有的支付接囗還會判斷IP或域名很安全,其實這些數據中是相對安全),只要 這兩組附加串沒有被泄漏那麼想破解就沒有那麼簡單,固然若是你非要去爆力破解(只能說明你的時間太多了!)。緩存

網站的安全沒有絕對的,但咱們要盡力讓它相對安全。對於跨域登陸的方法雖然不僅這一種但基本的思想同樣,那就是獲取當前的用戶信息傳給目標網站由目標網站判斷合法性再建立會話。安全

上面的例子只是針對不一樣域和不一樣的服務器(不共用數據)時的一種方法,若是數據庫是共用的(主從模式複製數據庫管理方式除外)那麼這個附加串就能夠寫在數據庫中而且爲每一個用戶生成不一樣的隨機附加串來提升安全性!服務器

 

若是想指定進入目標網站的地址,我想只要現多加一個參數傳入就OK了!架構

相關文章
相關標籤/搜索