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