淺聊HTTP協(xié)議安全驗(yàn)證
HTTP協(xié)議是不安全的,如果沒(méi)有SSL做底層支持,用HTTP Basic Authentication很容易讓攻擊者監(jiān)聽(tīng)并獲取到用戶名和密碼的信息。有人說(shuō)用Base64做encode,這是沒(méi)用的,攻擊者獲取到用戶名密碼后用Base64來(lái)decode一下就好了,那么為什么大多數(shù)情況我們傳輸?shù)臅r(shí)候都要用Base64來(lái)encode呢?按照wiki上的說(shuō)法:編碼這一步驟的目的并不是安全與隱私,而是為將用戶名和口令中的不兼容的字符轉(zhuǎn)換為均與HTTP協(xié)議兼容的字符集。
那么我們?cè)趺醋瞿?,其他的登錄情況還好說(shuō),改用正常的登錄驗(yàn)證就好,難道做API的也要用其他方式而放棄HTTP Basic Authentication這么方便的方式么,那這個(gè)東西弄出來(lái)干嗎?答案有好多種,我現(xiàn)在認(rèn)為最好的方式是其他的都不用變,直接給服務(wù)端加SSL,請(qǐng)求由HTTP變成HTTPS請(qǐng)求。
SSL協(xié)議的優(yōu)勢(shì)在于它是與應(yīng)用層協(xié)議獨(dú)立無(wú)關(guān)的。高層的應(yīng)用層協(xié)議(例如:HTTP、FTP、Telnet等等)能透明的建立于SSL協(xié)議之上。SSL協(xié)議在應(yīng)用層協(xié)議通信之前就已經(jīng)完成加密算法、通信密鑰的協(xié)商以及服務(wù)器認(rèn)證工作。在此之后應(yīng)用層協(xié)議所傳送的數(shù)據(jù)都會(huì)被加密,從而保證通信的私密性。
這樣就能保證發(fā)送的明文用戶名密碼不會(huì)被攻擊者截取并破譯。有效實(shí)現(xiàn)了驗(yàn)證的最終目的。如果我有哪里說(shuō)的不對(duì)的地方,請(qǐng)大家指正。
(馬?。?/p>