隨着項目前后端分離的方式被越來越多的公司采用,前后端分離后鑒權與會話保持也成了程序員們日常聊的一個話題。而在鑒權與會話保持方面應用最多的莫過於Token驗證。
總結:
前后端分離的項目,如果服務端的接口被多層代理之后,實際上是很不容易拿到准確的客戶端IP。雖然本文提出了IP的方案,但依然不能解決被代理的問題。
大家可以嘗試瀏覽器指紋技術
https://zhuanlan.zhihu.com/p/94158920
瀏覽器在線指紋檢測
https://www.yalala.com/
Token驗證的原理圖:
其實嚴格意義上來講,一套合理的Token加密與驗證機制可以最大程度的保障系統的安全以及用戶良好的體驗。一般情況下Token的加密方式僅存在於服務器的代碼中並不會被任何人輕易破解。比如經常用的加密方式為:
Token = MD5加密(自然排序(用戶ID+用戶注冊時6位隨機數+登陸時間+ip地址));
用戶登陸成功后,將Token保存在以活躍用戶分組的Redis中用於后期驗證。同時Token需要設定一個過期時間。一般為2小時,過期之前需要用舊的Token來請求新的Token。這樣的好處是第三方劫持獲取的Token后除非在同一IP下才會驗證通過。而且MD5加密雖然簡單,但是屬於不可逆的,即使你拿着字典破解了字符串的內容也毫無意義。
那么Token為什么會被破解呢?
Token正常情況下是不會被破解的,而且作為資深黑客也完全沒有必要去破解這串毫無意義的字符,畢竟很浪費時間。Token被破解無非是三種原因。
①加密機制過於簡單。黑客一猜就猜到了,比如md5(用戶密碼)。
②第三方劫持。這個操作難度比較大,而能夠劫持鏈路數據的黑客通常不屑於破解一個小網站去刷單掙錢。
③服務器配置不當。通常服務器的配置使用都由后台開發人員進行管理。服務器配置不當可能會暴露網站目錄,同時也可能是被一些爬蟲程序抓取了網站的源碼。
對於Token的加密與驗證就先寫這么多,其實暴力破解密碼看似是100%能破解,只是時間問題。但實際上對方隨意增加一個字符破解難度就會成倍增加。比如前幾天波波服務器一直被一個鄭州的人采用虛擬IP暴力破解。