ACG web認(rèn)證成功后跳轉(zhuǎn)頁(yè)面原理

概述:

小伙伴說(shuō)遇到了一個(gè)問(wèn)題,有個(gè)客戶ACG本地Web認(rèn)證成功之后無(wú)法跳轉(zhuǎn)到設(shè)置的成功跳轉(zhuǎn)頁(yè)面,看了實(shí)驗(yàn)室成功的抓包發(fā)現(xiàn)不是通過(guò)HTTP 302 跳轉(zhuǎn)的,不知道具體什么跳轉(zhuǎn)原理也無(wú)從排查,我看了下正常跳轉(zhuǎn)的報(bào)文交互,以及從Wireshark下看HTTP傳輸?shù)腏S頁(yè)面源碼,發(fā)現(xiàn)還是挺有趣的。

先看結(jié)論:
ACG在本地web認(rèn)證成功之后不是通過(guò)http 302、Location header方式執(zhí)行頁(yè)面跳轉(zhuǎn)。

ACG在進(jìn)行認(rèn)證頁(yè)面跳轉(zhuǎn)的時(shí)候發(fā)送302 LocationLocation的url攜帶了參數(shù):weburl,通過(guò)該參數(shù)攜帶了認(rèn)證成功之后跳轉(zhuǎn)的地址,之后通過(guò)js腳本在瀏覽器側(cè)判斷是否認(rèn)證成功、并執(zhí)行跳轉(zhuǎn)。

image

所以想要跳轉(zhuǎn)成功:

1. ACG給PC 302 location重定向的url中需要攜帶weburl這個(gè)參數(shù),攜帶的地址也得正確

2. PC的瀏覽器可以正常執(zhí)行JS腳本。

可以自己新建一個(gè)html文件用瀏覽器打開(kāi)測(cè)試下,是否可以正常執(zhí)行JS的跳轉(zhuǎn):


<!DOCTYPE html>

<html>

<body>

<form >

<input type="button" value="JS window open跳轉(zhuǎn)"  onclick="javascript:window.open('http://www.baidu.com')">

</form>

<p>點(diǎn)擊submit,打開(kāi)baidu</p>

</body>

</html>

下面部分不感興趣可以不用看了。

頁(yè)面代碼中相關(guān)

  • 點(diǎn)擊認(rèn)證時(shí)候的ajax部分

  • 執(zhí)行跳轉(zhuǎn)頁(yè)面的function

  • 獲取跳轉(zhuǎn)頁(yè)面的function

獲取跳轉(zhuǎn)頁(yè)面url的function

function get_url_special_string(name){

    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");

    var r = window.location.search.substr(1).match(reg);

    if(r!=null)return  unescape(r[2]); return null;

}

這段代碼百度上很容易找到解釋:鏈接。甚至代碼都一毛一樣(除了函數(shù)名字不一樣),一個(gè)字都沒(méi)改,ctrl c、ctrl v大法賽高。
該函數(shù)作用是獲取 http請(qǐng)求的url后邊的部分,也就是url中攜帶的參數(shù)。

整個(gè)認(rèn)證過(guò)程中http頭部攜帶的參數(shù)就只有一個(gè):weburl。

GET /portal/local/index.html?weburl=http%3A%2F%2F1.1.1.2 HTTP/1.1

最開(kāi)始我以為這個(gè)weburl作用是表明ACG認(rèn)證頁(yè)面是從哪個(gè)原始地址跳轉(zhuǎn)過(guò)來(lái)的,但是看代碼似乎并不是,而是表明認(rèn)證成功之后跳轉(zhuǎn)的頁(yè)面。

想想也是,ACG全程在url參數(shù)中攜帶認(rèn)證之前的url地址干啥,認(rèn)證之后又不會(huì)給跳轉(zhuǎn)回去.....,主要這個(gè)抓包里認(rèn)證前訪問(wèn)的地址剛好也是1.1.1.2,跳轉(zhuǎn)頁(yè)面也是1.1.1.2,容易讓人誤解。

執(zhí)行跳轉(zhuǎn)頁(yè)面的function

function btn_win_open(url){

  if(url !='null'){

      $('#redirect').unbind();

      $('#redirect').click(function(){window.open(url)});

      $("#redirect").trigger("click");

  }

}

傳入一個(gè)url,通過(guò)window.open(url)在瀏覽器中打開(kāi)這個(gè)url,也就是所謂的頁(yè)面跳轉(zhuǎn)。

點(diǎn)擊認(rèn)證時(shí)候的ajax部分

$.ajax({

        url: '../../portal.cgi',

        type: 'POST',

        data: 'username=' + encodeURI(username) + '&password=' + password +'&language='+language+ '&submit=submit'

        async: false,

        timeout: 30000,

        success: function(data) {

            var weburl = decodeURIComponent(get_url_special_string("weburl")),logincookie= '';


                     if(weburl){

                                btn_win_open(weburl);

                    if(weburl){

                        btn_win_open(weburl);

}

/portal.cgi提交認(rèn)證的賬號(hào)密碼,中間省略一堆內(nèi)容,如果認(rèn)證成功(success),執(zhí)行一個(gè)函數(shù),在函數(shù)中存在一個(gè)判斷條件:

if(weburl)

也就是weburl如果存在,執(zhí)行 btn_win_open函數(shù),也就是跳轉(zhuǎn)頁(yè)面的函數(shù),完成認(rèn)證成功后跳轉(zhuǎn)到頁(yè)面的功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容