蘇州Java高級(jí)工程師培訓(xùn)
三種壞人與servlet安全
認(rèn)證與授權(quán)認(rèn)證可以防止“假冒者”攻擊,授權(quán)可以防止“非法升級(jí)者”攻擊,機(jī)密性和數(shù)據(jù)完整性可以防止“竊聽者”攻擊。
Web容器進(jìn)行認(rèn)證與授權(quán)的過(guò)程:
-
客戶端:瀏覽器向容器請(qǐng)求一個(gè)web資源發(fā)出請(qǐng)求;
-
服務(wù)端:容器接受到請(qǐng)求時(shí),容器在“安全表”中查找URL(安全表存儲(chǔ)在容器中,用于保存安全信息),如果在安全表中查找到URL,就會(huì)看這個(gè)URL請(qǐng)求的資源是否是受限的,如果是,則返回401(Unauthorized——未授權(quán)),包含一個(gè)www.authenticate首部和realm(領(lǐng)域)信息;
-
客戶端和用戶:瀏覽器得到401的響應(yīng),根據(jù)realm信息,要求用戶提供用戶名和口令;瀏覽器再次發(fā)送剛才的那個(gè)請(qǐng)求,但是這個(gè)請(qǐng)求還包括一個(gè)安全HTTP首部以及用戶名和口令;
-
服務(wù)端:容器接收到請(qǐng)求,容器接收到有用戶名和口令的請(qǐng)求時(shí),在“安全表”中再次查找URL;如果在安全表中找到URL且發(fā)現(xiàn)這是一個(gè)受限資源,則檢查用戶名和口令是否匹配。
-
如果不匹配則再次返回401;
-
如果匹配,說(shuō)明認(rèn)證**,則接著檢查這個(gè)用戶的權(quán)限,容器會(huì)查看這個(gè)用戶指派的“角色”是否允許訪問(wèn)這個(gè)資源(即授權(quán)),如果授權(quán)成功,則把這個(gè)資源返回給客戶端;
Spring-Security
Spring Security是專注于為Java應(yīng)用提供**認(rèn)證(authentication)與授權(quán)(authorization)**機(jī)制的開發(fā)框架,和其他Spring項(xiàng)目一樣,Spring Security的能力是可以靈活得應(yīng)對(duì)各種定制的需求。
Spring Security的特點(diǎn):
-
對(duì)認(rèn)證和授權(quán)的全面和可拓展性支持;
-
可以防御常見(jiàn)的網(wǎng)絡(luò)攻擊,例如:session fixation、clickjacking、cross site request forgery等等
-
支持與Servlet API集成
-
支持與Spring MVC集成,但不限于此
這里我從Spring Guides找到了一個(gè)在web應(yīng)用中使用Spring Security保護(hù)資源的例子——securing-web demo,我自己試驗(yàn)做了一遍,建議讀者也跟著自己實(shí)現(xiàn)一遍,加深理解。
HTTPS與SSL
HTTPS和SSL協(xié)議用于實(shí)現(xiàn)機(jī)密性和數(shù)據(jù)完整性。
-
HTTPS
HTTP協(xié)議是基于TCP構(gòu)建的應(yīng)用層協(xié)議;HTTPS協(xié)議是基于SSL/TLS協(xié)議之上的應(yīng)用層協(xié)議,而SSL/TLS是基于TCP構(gòu)建的協(xié)議。在云棲社區(qū)找到一篇HTTPS詳解,講得不錯(cuò),可以仔細(xì)看看。
-
SSL/TLS
SSL是一個(gè)介于HTTP協(xié)議與TCP之間的一個(gè)可選層,在網(wǎng)絡(luò)協(xié)議中的層次入下圖所示。TLS是SSL 3.0的后續(xù)版本,可以理解為SSL 3.1,它是寫入了 RFC 的。
更多課程推薦: