真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Web登錄實(shí)例分析

本文小編為大家詳細(xì)介紹“Web登錄實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Web登錄實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括尉犁網(wǎng)站建設(shè)、尉犁網(wǎng)站制作、尉犁網(wǎng)頁(yè)制作以及尉犁網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,尉犁網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到尉犁省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

Web登錄實(shí)例分析

正文

1. 一個(gè)簡(jiǎn)單的HTML例子看看用戶信息安全

標(biāo)準(zhǔn)的HTML語(yǔ)法中,支持在form表單中使用標(biāo)簽來(lái)創(chuàng)建一個(gè)HTTP提交的屬性,現(xiàn)代的WEB登錄中,常見(jiàn)的是下面這樣的表單:

http://localhost:8080/Application/login" method = "POST"> 用戶名: 密碼:

form表單會(huì)在提交請(qǐng)求時(shí),會(huì)獲取form中input標(biāo)簽存在name的屬性,作為HTTP請(qǐng)求的body中的參數(shù)傳遞給后臺(tái),進(jìn)行登錄校驗(yàn)。

Web登錄實(shí)例分析

例如我的賬號(hào)是user1,密碼是123456,那么我在提交登錄的時(shí)候會(huì)給后臺(tái)發(fā)送的HTTP請(qǐng)求如下(Chrome或者FireFox開(kāi)發(fā)者工具捕獲,需開(kāi)啟Preserve log):

Web登錄實(shí)例分析

可以發(fā)現(xiàn)即便password字段是黑點(diǎn),但是本機(jī)仍以明文的形式截獲請(qǐng)求。

2. HTTP協(xié)議傳輸直接暴露用戶密碼字段

在網(wǎng)絡(luò)傳輸過(guò)程中,被嗅探到的話會(huì)直接危及用戶信息安全,以Fiddler或Wireshark為例,發(fā)現(xiàn)捕獲的HTTP報(bào)文中包含敏感信息:

Web登錄實(shí)例分析

3. 使用加密算法能保證密碼安全嗎?

WEB前端可以通過(guò)某種算法,對(duì)密碼字段進(jìn)行加密后,在將密碼作為Http請(qǐng)求的內(nèi)容進(jìn)行提交,常見(jiàn)的包括對(duì)稱和非對(duì)稱加密。

對(duì)稱加密:采用對(duì)稱密碼編碼技術(shù),它的特點(diǎn)是文件加密和解密使用相同的密鑰加密。

非對(duì)稱加密:需要兩個(gè)密鑰,公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。

3.1 使用對(duì)稱加密

加密解密在前后臺(tái)協(xié)商后,似乎是個(gè)不錯(cuò)的辦法,比如,前臺(tái)使用一個(gè)字符串位移+字符串反轉(zhuǎn)的簡(jiǎn)單方法(舉個(gè)例子,當(dāng)然不能這么簡(jiǎn)單)。那么,如果原密碼123456先移位:

123456-->456123

再進(jìn)行反轉(zhuǎn):

456123-->321654

那么這樣簡(jiǎn)單的方法似乎可以混淆原密碼,并且輕松由后臺(tái)進(jìn)行相反操作復(fù)原。但是這有兩個(gè)缺點(diǎn):

前后端加密解密需要同時(shí)修改代碼;

前端加密無(wú)非是寫在JS里,但是JS有風(fēng)險(xiǎn)被直接破解從而識(shí)別加密方法。

3.2 非對(duì)稱加密HTTPS就一定是安全的嗎?

非對(duì)稱加密有著公鑰私鑰的存在,公鑰可以隨意獲取,私鑰是用來(lái)對(duì)公鑰解密的本地存儲(chǔ),通過(guò)公私鑰的機(jī)制似乎可以保證傳輸加密并且乃至現(xiàn)在還在使用的HTTPS就是基于這個(gè)原理。

但是HTTPS就一定安全嗎?HTTP存在兩種可能的風(fēng)險(xiǎn):

HTTPS可以保證傳輸過(guò)程中的信息不被別人截獲,但是細(xì)細(xì)思考下,HTTPS是應(yīng)用層協(xié)議,下層采用SSL保證信息安全,但是在客戶端和服務(wù)端,密文同樣是可以被截獲的;

HTTPS報(bào)文在傳輸過(guò)程中,如果客戶端被惡意引導(dǎo)安裝“中間人”的WEB信任證書(shū),那么HTTPS中的“中間人攻擊”一樣會(huì)將明文密碼泄露給別人。

4. 結(jié)論是,無(wú)論HTTP還是HTTPS,密碼必須密文傳輸

想想HTTPS也不能一定保障用戶密碼信息,那么就應(yīng)該考慮在應(yīng)用層之上再繼續(xù)對(duì)密碼進(jìn)行保護(hù),也就是編寫代碼來(lái)進(jìn)行控制,而不依賴特定協(xié)議,比較容易想到的就是利用不可逆加密散列函數(shù)MD5(string),用戶在注冊(cè)輸入密碼的時(shí)候,就存儲(chǔ)MD5(password)值,并且在WEB端先進(jìn)行MD5(password),然后將密碼傳輸至后臺(tái),與數(shù)據(jù)庫(kù)中的密文進(jìn)行比較(PS:MD5函數(shù)在指定位數(shù)的情況下,對(duì)相同字符串運(yùn)算值相同)。優(yōu)點(diǎn)比較明顯:

保證了用戶數(shù)據(jù)庫(kù)內(nèi)部的密碼信息安全;

傳輸過(guò)程中無(wú)論如何都不會(huì)使得用戶的密文被破解出原密碼;

簡(jiǎn)單高效,執(zhí)行以及編碼難度都不大,各種語(yǔ)言都提供MD5支持,開(kāi)發(fā)快。

5. 那太好了!這樣可以省下HTTPS的錢了,真是這樣嗎?

回到開(kāi)頭的例子:用戶輸入的用戶名是:user1,密碼是:123456,那么不管在什么協(xié)議之下,可以看到實(shí)際發(fā)送的HTTP/HTTPS報(bào)文在MD5處理后是這樣的:

Web登錄實(shí)例分析

Web 登錄其實(shí)沒(méi)你想的那么簡(jiǎn)單

沒(méi)錯(cuò),加密登錄成功了。但是,當(dāng)我們慶祝密碼安全的時(shí)候,發(fā)現(xiàn)賬戶的錢突然不翼而飛。這是為什么呢?黑客卻笑的很開(kāi)心:因?yàn)樗麄儾⒉灰欢ㄒ@取到你的密碼明文,如果直接截獲你的密碼密文,然后發(fā)送給服務(wù)器不是一樣可以登錄嗎?因?yàn)閿?shù)據(jù)庫(kù)里的不也是MD5(password)的一樣的密文嗎?HTTP請(qǐng)求被偽造,一樣可以登錄成功,從而攫取其他的數(shù)據(jù)或者轉(zhuǎn)走余額。

這怎么辦?其實(shí)并不難,有很多種解決方法?其實(shí)原理都是類似的:那就是服務(wù)器緩存生成隨機(jī)的驗(yàn)證字段,并發(fā)送給客戶端,當(dāng)客戶端登錄時(shí),把這個(gè)一并字段傳給服務(wù)器,用于校驗(yàn)。

5.1 方案一:驗(yàn)證碼

MVC場(chǎng)景。控制器將把數(shù)據(jù)的Model封裝到View中,這種存在Session的連接方式,允許了在Session中存取信息。

那么我們可以利用一些開(kāi)源的驗(yàn)證碼生成工具,例如JAVA中的Kaptcha,在服務(wù)端存放生成一個(gè)驗(yàn)證碼值以及一個(gè)驗(yàn)證碼的生成圖片,將圖片以Base64編碼,并返回給View,在View中解碼Base64并加載圖片,并于用戶下次登錄時(shí)再進(jìn)行比對(duì)。

5.2 方案二:token令牌

前后端分離場(chǎng)景?,F(xiàn)在非常流行的前后端分離的開(kāi)發(fā)模式大大提高了項(xiàng)目的開(kāi)發(fā)效率。職責(zé)、分工明確。

但是由于HTTP是無(wú)狀態(tài)的(就是這一次請(qǐng)求并不知道上一次請(qǐng)求的內(nèi)容),當(dāng)用戶登錄時(shí),根據(jù)用戶的username作為key,生成隨機(jī)令牌(例如UUID)作為value緩存在redis中,并且將token返回給客戶端,當(dāng)客戶端登錄時(shí),將完成校驗(yàn),并且刪除Redis中的那條緩存記錄。

那么每次從服務(wù)器中獲取認(rèn)證的token,確實(shí)能保證HTTP請(qǐng)求是由前端傳回來(lái)的了,因?yàn)閠oken在每次登陸后都會(huì)刪除并被重置,會(huì)導(dǎo)致黑客嘗試重放賬號(hào)密碼數(shù)據(jù)信息來(lái)登陸的時(shí)候?qū)е聼o(wú)法成功登陸。

總而言之,就是我拿到了賬號(hào)以及密碼的密文也登陸不了,因?yàn)?,如果?qǐng)求不包含后臺(tái)認(rèn)證的令牌token,是個(gè)非法請(qǐng)求。

6. 太不容易了!可是還別高興的太早,當(dāng)心數(shù)據(jù)被篡改

密碼也加密了,黑客看不到明文了。加上Token了,登陸過(guò)程也沒(méi)法再被截獲重放了。可是想想這種情況,你在進(jìn)行某寶上的網(wǎng)絡(luò)支付,需要賬號(hào),密碼,金額,token這四個(gè)字段進(jìn)行操作,然后支付的時(shí)候你付了1塊錢買了一袋包郵的小浣熊干脆面,某寶結(jié)算結(jié)束后,你發(fā)現(xiàn)你的賬戶余額被扣了1萬(wàn)元。這又是怎么回事呢?

因?yàn)榧幢愫诳筒坏卿?,不操作,一樣要搞破壞:?dāng)請(qǐng)求路由到黑客這邊的時(shí)候,截獲數(shù)據(jù)包,然后也不需要登錄,反正賬號(hào)密碼都是對(duì)的,token也是對(duì)的,那么把數(shù)據(jù)包的字段改改,搞破壞就可以了,于是把money改成了1萬(wàn),再傳給服務(wù)器,作為受害者就莫名其妙踩了這個(gè)坑??蛇@該怎么解決呢?其實(shí)原理類似于HTTPS里的數(shù)字簽名機(jī)制,首先科普下什么是數(shù)字摘要以及數(shù)字簽名:

6.1 什么是“數(shù)字摘要”

我們?cè)谙螺d文件的時(shí)候經(jīng)常會(huì)看到有的下載站點(diǎn)也提供下載文件的“數(shù)字摘要“,供下載者驗(yàn)證下載后的文件是否完整,或者說(shuō)是否和服務(wù)器上的文件”一模一樣“。其實(shí),數(shù)字摘要就是采用單項(xiàng)Hash函數(shù)將需要加密的明文“摘要”成一串固定長(zhǎng)度(128位)的密文,這一串密文又稱為數(shù)字指紋,它有固定的長(zhǎng)度,而且不同的明文摘要成密文,其結(jié)果總是不同的,而同樣的內(nèi)容信息其摘要必定一致。

因此,“數(shù)字摘要“叫”數(shù)字指紋“可能會(huì)更貼切一些。“數(shù)字摘要“是HTTPS能確保數(shù)據(jù)完整性和防篡改的根本原因。

6.2 數(shù)字簽名--水到渠成的技術(shù)

假如發(fā)送方想把一份報(bào)文發(fā)送給接收方,在發(fā)送報(bào)文前,發(fā)送方用一個(gè)哈希函數(shù)從報(bào)文文本中生成報(bào)文摘要,然后用自己的私人密鑰對(duì)這個(gè)摘要進(jìn)行加密,這個(gè)加密后的摘要將作為報(bào)文的”簽名“和報(bào)文一起發(fā)送給接收方,接收方首先用與發(fā)送方一樣的哈希函數(shù)從接收到的原始報(bào)文中計(jì)算出報(bào)文摘要,接著再用發(fā)送方的公用密鑰來(lái)對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密,如果這兩個(gè)摘要相同、那么接收方就能確認(rèn)報(bào)文是從發(fā)送方發(fā)送且沒(méi)有被遺漏和修改過(guò)!

這就是結(jié)合“非對(duì)稱密鑰加解密”和“數(shù)字摘要“技術(shù)所能做的事情,這也就是人們所說(shuō)的“數(shù)字簽名”技術(shù)。在這個(gè)過(guò)程中,對(duì)傳送數(shù)據(jù)生成摘要并使用私鑰進(jìn)行加密地過(guò)程就是生成”數(shù)字簽名“的過(guò)程,經(jīng)過(guò)加密的數(shù)字摘要,就是”數(shù)字簽名“。

因此,我們可以在WEB端對(duì)之前案例中提到的username+MD5(password)+token通過(guò)簽名,得到一個(gè)字段checkCode,并將checkCode發(fā)送給服務(wù)器,服務(wù)器根據(jù)用戶發(fā)送的checkCode以及自身對(duì)原始數(shù)據(jù)簽名進(jìn)行運(yùn)算比對(duì),從而確認(rèn)數(shù)據(jù)是否中途被篡改,以保持?jǐn)?shù)據(jù)的完整性。

讀到這里,這篇“Web登錄實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)題目:Web登錄實(shí)例分析
文章地址:http://weahome.cn/article/ihejhj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部