個人博客:http://blog.striveforfreedom.netjavascript
最近在看一個開源網站的代碼,發現若是登陸頁面是經過http協議請求的,會重定向到使用https協議的url,這樣能夠保證登陸安全。今天心血來潮,想看看京東有沒有這樣處理,意外發現京東在這方面存在安全漏洞。html
先運行Wireshark,Filter用http contains jd.com。京東登陸頁面地址是https://passport.jd.com/new/login.aspx, 把https改爲http,在瀏覽器地址欄裏輸入http://passport.jd.com/new/login.aspx, 回車,而後查看Wireshark的抓包,並無發現重定向響應。而後在登陸頁面的用戶名和密碼輸入框處分別填上faked_user和faked_password,點擊登陸。再查看Wireshark,發現一個post請求,傳輸的數據是uuid=4b72722f-58a1-4c4c-9364-db663ca9e8a4&loginname=faked_user&nloginpwd=faked_password&loginpwd=faked_password&machineNet=&machineCpu=&machineDisk=&authcode=&ZWprDUvAGW=sNKhf,裏面赫然能夠發現loginname=faked_user&nloginpwd=faked_password&loginpwd=faked_password,這說明在這種狀況下京東是以明文傳輸密碼的。這就存在一個安全漏洞,若是攻擊者把使用http協議的登陸地址發佈在網絡上,誘使受害者點擊,攻擊者就有機會截取受害者的用戶名和密碼了。java
發現京東存在這樣的問題以後,好奇心驅使我又試了其餘幾家電商的登陸頁面。我首先試了亞馬遜的登陸頁面,發現亞馬遜沒有這種問題,若是用戶是使用http協議訪問登陸頁面,亞馬遜會返回一個HTTP/1.1 302 Moved Temporarily響應,Location響應頭字段裏會包含使用https協議的url,瀏覽器則會被重定向到訪問安全的登陸地址。淘寶/蘇寧/易迅也同樣,都重定向到了https地址,新蛋直接禁止了以http方式訪問登陸頁面(客戶端TCP SYN包發出以後,收到了服務器的RST包,應該是登陸服務器上的80端口沒有打開),1號店使用iframe來嵌入登陸頁面,在iframe的src屬性裏找到登陸頁面的url,把https改爲http而後訪問,沒有重定向,但在提交登陸的javascript函數裏明確使用了https來發送登陸請求,這種攻擊方式也用不上。瀏覽器
這種問題很容易修復,只要在登陸頁面裏檢查協議,若是發現訪問登陸頁面使用的是http協議,則重定向到使用https協議的地址。相對來講,京東這個仍是小問題,購書網站互動出版網 居然是直接用明文傳輸用戶名和密碼的,實在讓人無語。安全