14.安全
1.基本概念
? ? ?安全問題的產(chǎn)生:
互聯(lián)網(wǎng)作為商業(yè)交易的工具快速發(fā)展,越來越多的公司提供網(wǎng)絡(luò)交易服務(wù)。很多商業(yè)活動在網(wǎng)上進行當(dāng)前,成千上萬的網(wǎng)民在網(wǎng)上進行各種活動的同時,也在網(wǎng)上傳遞其個人信息每天在網(wǎng)上發(fā)生各種各樣的商業(yè)活動,如銀行交易、股票交易等為了支持這些應(yīng)用,我們需要一個健壯、安全的互聯(lián)網(wǎng)保障機制。電子商務(wù)沒有安全的保障是不可能的。
隨著公司、個人對其資源和隱私的重視度的增加,網(wǎng)絡(luò)安全的重要性也日益突出
Servlet規(guī)范提供了方法和途徑來實現(xiàn)Web應(yīng)用程序的安全,在討論實現(xiàn)安全特性之前,先了解以下與安全相關(guān)的基本概念
認證
授權(quán)
數(shù)據(jù)完整性
數(shù)據(jù)私密性
審核
惡意代碼
網(wǎng)站攻擊
認證:
安全的第一個基本要求就是用戶認證
認證是一個鑒別用戶、確認身份的過程,這意味著校驗用戶是否是其所宣稱的身份
例如:用戶名和密碼
是否存在該用戶
提供的用戶名是否與其密碼相符
授權(quán):
用戶認證通過,必須被授權(quán)
授權(quán)是一個決定用戶是否允許訪問特定資源的過程
例如:普通用戶不可以進行后臺管理功能
?
授權(quán)通常被維護在一個訪問控制列表(ACL)中,這個列表指定了用戶及其可以訪問的資源
數(shù)據(jù)完整性:
數(shù)據(jù)完整性是一個確保數(shù)據(jù)從發(fā)送端到接收端不受到損害的過程
例如:如果用戶發(fā)送一個從其賬戶轉(zhuǎn)出1000元的請求,銀行系統(tǒng)應(yīng)該確保轉(zhuǎn)出的金額是1000元而不是10000元
數(shù)據(jù)完整性通常由伴隨數(shù)據(jù)一起發(fā)送的一個數(shù)字簽名來保證。在接收端,數(shù)據(jù)簽名獲得校驗。
數(shù)據(jù)私密性:
??數(shù)據(jù)私密性是確保只有數(shù)據(jù)合法訪問者可以訪問敏感信息的過程。如:用戶發(fā)送用戶名和密碼登錄網(wǎng)站時,如果這些信息以原始格式發(fā)送,在互聯(lián)網(wǎng)上傳輸時,網(wǎng)絡(luò)黑客完全可能通過監(jiān)聽HTTP數(shù)據(jù)包竊取這些敏感信息。在這種情況下,數(shù)據(jù)無法保證其機密性。
?
審核:
審核是記錄系統(tǒng)中與安全相關(guān)的事件,確保對每個用戶的行為有據(jù)可查
審核能追蹤到系統(tǒng)發(fā)生安全問題的原因,通常是由應(yīng)用程序產(chǎn)生的日志文件來完成。
惡意代碼:
將引起計算機系統(tǒng)損害的一段代碼稱作惡意代碼
典型的惡意代碼包括病毒、蠕蟲和木馬等
有時系統(tǒng)開發(fā)者在編寫程序時會留下一個后門漏洞,這是一個潛在的誤用機會,也稱為惡意代碼
盡管我們不能防止不知名程序員的惡意代碼,但對于內(nèi)部程序員的一對一審查則可以杜絕系統(tǒng)后門漏洞
網(wǎng)站攻擊:
任何認為有價值的事物均是潛在受攻擊目標(biāo),應(yīng)受到保護。網(wǎng)站是最易遭到攻擊的目標(biāo)。網(wǎng)站的價值在于其所包含的信息以及其給合法用戶提供的服務(wù)
一般存在3種類型的網(wǎng)站攻擊
安全攻擊
偽裝攻擊
服務(wù)攻擊
一般存在3種類型的網(wǎng)站攻擊
安全攻擊:通過監(jiān)聽兩臺機器間的通信來竊取機密信息,通過加密傳輸數(shù)據(jù)可防止此類攻擊,如使用HTTPS協(xié)議進行信道加密
偽裝攻擊:通過改變傳輸?shù)男畔磉_到惡意企圖。如偽裝IP地址,使用使服務(wù)器IP地址發(fā)消息給服務(wù)器。通過健全的認證機制可以防止此種攻擊
服務(wù)攻擊:發(fā)送大量假請求使得系統(tǒng)無法有效處理合法的請求,這種偽造的大量假數(shù)據(jù)包可以使網(wǎng)絡(luò)堵塞。通過使用防火墻限制端口和控制網(wǎng)絡(luò)通信量,可以防止此類攻擊
2.認證機制
Servlet規(guī)范定義了4種認證機制:
HTTP基本認證
HTTP摘要認證
HTTPS客戶端認證
HTTP表單認證
以上4種認證都是基于用戶名/密碼機制,由服務(wù)器維護一個所有用戶名和密碼的列表,并且保護該列表資源
?HTTP基本認證:
HTTP基本認證的優(yōu)點
非常容易構(gòu)建
所有瀏覽器均支持
HTTP基本認證的缺點
安全性不能保證,因為用戶名和密碼未加密(注意:Base64編碼不是加密方法。sun.misc.Base64 和sun.misc.Base64Decoder類可對字符串編碼和解碼)
無法定制與應(yīng)用程序相匹配的用戶名和密碼對話框外觀。
?
HTTP摘要認證:
HTTP摘要認證是在基本認證的基礎(chǔ)上密碼是加密發(fā)送
HTTP摘要認證的優(yōu)點
比HTTP基本認證安全
HTTP摘要認證的缺點
僅由微軟的IE瀏覽器支持。因為規(guī)范沒有對HTTP摘要認證強制,所以許多Servlet容器不提供支持
?
HTTP客戶認證:
HTTPS就是構(gòu)建在安全套接字(Secure Socket Layer,SSL)之上的HTTP,
SSL是網(wǎng)景公司開發(fā)的,用于確保互聯(lián)網(wǎng)上傳輸敏感數(shù)據(jù)私密性的協(xié)議。所有被傳輸?shù)臄?shù)據(jù)采用公開密鑰的加密方式
HTTPS客戶認證的優(yōu)點
是4種認證中最安全的
被所有瀏覽器支持
HTTPS客戶認證的缺點
需要認證中心頒發(fā)的認證書
實現(xiàn)、維護該認證具有較高成本
?
HTTP表單認證:
HTTP表單認證與基本認證很相似。但未使用瀏覽器彈出對話框,而是使用一個HTML的表單來獲取用戶名和密碼。
開發(fā)都必須創(chuàng)建一個包含表單的HTML頁面,并可以定制表單外觀。Form表單的唯一要求就是其action屬性必須取值為j_security_check,并提供兩個文本域用于輸入用戶名和密碼(j_username, j_password),除此強制要求外,其他事務(wù)均可由開發(fā)者自定義
HTTP表單認證的優(yōu)點
非常容易建立
所有瀏覽器均支持
可以定制登錄窗體的外觀
HTTP表單認證的缺點
不安全,因為用戶名和密碼未加密
只有在使用Cookie維持會話時,才可以使用
定制認證機制:
<tomcat-users><user username="tomcat" password="tomcat" roles="tomcat"/> <user username="role1" password="tomcat" roles="role1"/><user username="both" password="tomcat" roles="tomcat,role1"/> </tomcat-users>?
權(quán)限分配給角色而不是實際用戶 <tomcat-users><user username="tomcat" password="tomcat" roles="tomcat"/> <user username="role1" password="tomcat" roles="role1"/><user username="both" password="tomcat" roles="tomcat,role1"/><user username="john" password="jjj" roles="employee"/> <user username="mary" password="mmm" roles="employee"/> <user username="bob" password="bbb" roles="employee,supervisor"/> </tomcat-users> 在web.xml中定義認證機制 在指定具體認證用戶前,要配置用戶名和密碼,這個步驟取決于具體的Servlet容器 Tomcat服務(wù)器是在下面的文件中:<tomcat-root>/conf/tomcat-users.xml <login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/formlogin.html</form-login-page><form-error-page>/formerror.html</form-error-page></form-login-config></login-config> <login-config><auth-method>BASIC</auth-method></login-config>?3.安全聲明
?
開發(fā)、部署、使用Web應(yīng)用程序的通常是不同的人,這就要求開發(fā)者有能力非常容易的將Web應(yīng)用安全需求移交給部署者,部署者也應(yīng)該有能力定制安全的各個方面而不需要修改代碼
Servlet容器允許我們在Web部署描述符中配置安全需求的細節(jié)
??jsp授權(quán)方式:
默認情況下,Web應(yīng)用程序的所有資源允許被任何人訪問
為了對資源進行保護,可以做以下工作來限制對資源的訪問
Web資源集合:鑒別必須受保護的資源
授權(quán)限制:鑒別用戶所分配的角色
用戶數(shù)據(jù)限制:指定發(fā)送者和接受者之間傳輸數(shù)據(jù)的方式
4.安全編程
有時候僅采用聲明的安全機制是不夠的
例如:假設(shè)允許一個Servlet被公司所有員工訪問,但是,針對管理層和普通員工該Servlet產(chǎn)生不同的輸出。這在種情況下,Servlet規(guī)范允許Servlet擁有處理安全的代碼,Servlet根據(jù)用戶所扮演的角色產(chǎn)生相應(yīng)的輸出。
安全相關(guān)API
HttpServletRequest接口提供了3個方法用于識別用戶和角色
String getRemoteUser()
如果用戶通過認證,該方法返回用戶的登錄名稱。否則返回null值
Principal getUserPrincipal()
該方法返回一個包含認證通過用戶的java.security.Principal對象
Boolean isUserInRole(String rolename)
該方法用于判斷用戶是否是指定的角色
了解與安全相關(guān)的一些基本概念:認證就是鑒別用戶,授權(quán)就是鑒別用戶可以做什么,審核是記錄用戶的行為…
Servlet規(guī)范定義了4種認證機制
Servlet規(guī)范中安全聲明與安全編程的概念與應(yīng)用
?
轉(zhuǎn)載于:https://www.cnblogs.com/Firesun/p/9753266.html
總結(jié)
- 上一篇: openlayer 图层上下_OpenL
- 下一篇: mysql的for循环_MySQL中的F