14.安全

1.基本概念

? ? ?安全問題的產生:

互聯網作為商業交易的工具快速發展,越來越多的公司提供網絡交易服務。很多商業活動在網上進行當前,成千上萬的網民在網上進行各種活動的同時,也在網上傳遞其個人信息每天在網上發生各種各樣的商業活動,如銀行交易、股票交易等為了支持這些應用,我們需要一個健壯、安全的互聯網保障機制。電子商務沒有安全的保障是不可能的。

隨著公司、個人對其資源和隱私的重視度的增加,網絡安全的重要性也日益突出
Servlet規范提供了方法和途徑來實現Web應用程序的安全,在討論實現安全特性之前,先了解以下與安全相關的基本概念
認證
授權
數據完整性
數據私密性
審核
惡意代碼
網站攻擊

認證:

安全的第一個基本要求就是用戶認證
認證是一個鑒別用戶、確認身份的過程,這意味著校驗用戶是否是其所宣稱的身份
例如:用戶名和密碼
是否存在該用戶
提供的用戶名是否與其密碼相符

授權:

用戶認證通過,必須被授權

授權是一個決定用戶是否允許訪問特定資源的過程

例如:普通用戶不可以進行后臺管理功能

?

授權通常被維護在一個訪問控制列表(ACL)中,這個列表指定了用戶及其可以訪問的資源

數據完整性:

數據完整性是一個確保數據從發送端到接收端不受到損害的過程

例如:如果用戶發送一個從其賬戶轉出1000元的請求,銀行系統應該確保轉出的金額是1000元而不是10000元

數據完整性通常由伴隨數據一起發送的一個數字簽名來保證。在接收端,數據簽名獲得校驗。

數據私密性:

??數據私密性是確保只有數據合法訪問者可以訪問敏感信息的過程。如:用戶發送用戶名和密碼登錄網站時,如果這些信息以原始格式發送,在互聯網上傳輸時,網絡黑客完全可能通過監聽HTTP數據包竊取這些敏感信息。在這種情況下,數據無法保證其機密性。

?

審核:

審核是記錄系統中與安全相關的事件,確保對每個用戶的行為有據可查
審核能追蹤到系統發生安全問題的原因,通常是由應用程序產生的日志文件來完成。

惡意代碼:

將引起計算機系統損害的一段代碼稱作惡意代碼
典型的惡意代碼包括病毒、蠕蟲和木馬等
有時系統開發者在編寫程序時會留下一個后門漏洞,這是一個潛在的誤用機會,也稱為惡意代碼
盡管我們不能防止不知名程序員的惡意代碼,但對于內部程序員的一對一審查則可以杜絕系統后門漏洞

網站攻擊:

任何認為有價值的事物均是潛在受攻擊目標,應受到保護。網站是最易遭到攻擊的目標。網站的價值在于其所包含的信息以及其給合法用戶提供的服務
一般存在3種類型的網站攻擊
安全攻擊
偽裝攻擊
服務攻擊

一般存在3種類型的網站攻擊
安全攻擊:通過監聽兩臺機器間的通信來竊取機密信息,通過加密傳輸數據可防止此類攻擊,如使用HTTPS協議進行信道加密
偽裝攻擊:通過改變傳輸的信息來達到惡意企圖。如偽裝IP地址,使用使服務器IP地址發消息給服務器。通過健全的認證機制可以防止此種攻擊
服務攻擊:發送大量假請求使得系統無法有效處理合法的請求,這種偽造的大量假數據包可以使網絡堵塞。通過使用防火墻限制端口和控制網絡通信量,可以防止此類攻擊

2.認證機制

Servlet規范定義了4種認證機制:
HTTP基本認證
HTTP摘要認證
HTTPS客戶端認證
HTTP表單認證
以上4種認證都是基于用戶名/密碼機制,由服務器維護一個所有用戶名和密碼的列表,并且保護該列表資源

?HTTP基本認證:

HTTP基本認證的優點
非常容易構建
所有瀏覽器均支持
HTTP基本認證的缺點
安全性不能保證,因為用戶名和密碼未加密(注意:Base64編碼不是加密方法。sun.misc.Base64 和sun.misc.Base64Decoder類可對字符串編碼和解碼)
無法定制與應用程序相匹配的用戶名和密碼對話框外觀。

?

HTTP摘要認證:

HTTP摘要認證是在基本認證的基礎上密碼是加密發送
HTTP摘要認證的優點
比HTTP基本認證安全
HTTP摘要認證的缺點
僅由微軟的IE瀏覽器支持。因為規范沒有對HTTP摘要認證強制,所以許多Servlet容器不提供支持

?

HTTP客戶認證:

HTTPS就是構建在安全套接字(Secure Socket Layer,SSL)之上的HTTP,
SSL是網景公司開發的,用于確保互聯網上傳輸敏感數據私密性的協議。所有被傳輸的數據采用公開密鑰的加密方式
HTTPS客戶認證的優點
是4種認證中最安全的
被所有瀏覽器支持
HTTPS客戶認證的缺點
需要認證中心頒發的認證書
實現、維護該認證具有較高成本

?

HTTP表單認證:

HTTP表單認證與基本認證很相似。但未使用瀏覽器彈出對話框,而是使用一個HTML的表單來獲取用戶名和密碼。
開發都必須創建一個包含表單的HTML頁面,并可以定制表單外觀。Form表單的唯一要求就是其action屬性必須取值為j_security_check,并提供兩個文本域用于輸入用戶名和密碼(j_username, j_password),除此強制要求外,其他事務均可由開發者自定義
HTTP表單認證的優點
非常容易建立
所有瀏覽器均支持
可以定制登錄窗體的外觀
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>

?

權限分配給角色而不是實際用戶
<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服務器是在下面的文件中:<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.安全聲明

?

開發、部署、使用Web應用程序的通常是不同的人,這就要求開發者有能力非常容易的將Web應用安全需求移交給部署者,部署者也應該有能力定制安全的各個方面而不需要修改代碼
Servlet容器允許我們在Web部署描述符中配置安全需求的細節

??jsp授權方式:

默認情況下,Web應用程序的所有資源允許被任何人訪問
為了對資源進行保護,可以做以下工作來限制對資源的訪問
Web資源集合:鑒別必須受保護的資源
授權限制:鑒別用戶所分配的角色
用戶數據限制:指定發送者和接受者之間傳輸數據的方式

  <security-constraint><web-resource-collection><web-resource-name>declarative security test</web-resource-name><url-pattern>/secure</url-pattern><http-method>POST</http-method></web-resource-collection><auth-constraint><role-name>supervisor</role-name></auth-constraint><user-data-constraint><transport-guarantee>NONE</transport-guarantee></user-data-constraint></security-constraint><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> <security-role><role-name>supervisor</role-name></security-role>

4.安全編程

有時候僅采用聲明的安全機制是不夠的
例如:假設允許一個Servlet被公司所有員工訪問,但是,針對管理層和普通員工該Servlet產生不同的輸出。這在種情況下,Servlet規范允許Servlet擁有處理安全的代碼,Servlet根據用戶所扮演的角色產生相應的輸出。

安全相關API

HttpServletRequest接口提供了3個方法用于識別用戶和角色
String getRemoteUser()
如果用戶通過認證,該方法返回用戶的登錄名稱。否則返回null值
Principal getUserPrincipal()
該方法返回一個包含認證通過用戶的java.security.Principal對象
Boolean isUserInRole(String rolename)
該方法用于判斷用戶是否是指定的角色

了解與安全相關的一些基本概念:認證就是鑒別用戶,授權就是鑒別用戶可以做什么,審核是記錄用戶的行為…
Servlet規范定義了4種認證機制
Servlet規范中安全聲明與安全編程的概念與應用

?

轉載于:https://www.cnblogs.com/Firesun/p/9753266.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450515.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言enum關鍵字

很多初學者對枚舉(enum)感到迷惑&#xff0c;或者認為沒什么用&#xff0c;其實枚舉(enum)是個很有用的數據類型。一、枚舉類型的使用方法 一般的定義方式如下&#xff1a;enum enum_type_name{ENUM_CONST_1,ENUM_CONST_2,...ENUM_CONST_n} enum_variable_name;注意&#xff1a…

Dubbo 需求、架構、使用Demo

只是整理下方便自己記錄 內容全部來自官網&#xff1a;http://dubbo.io/books/dubbo-user-book/preface/usage.html 一、需求 在大規模服務化之前&#xff0c;應用可能只是通過 RMI 或 Hessian 等工具&#xff0c;簡單的暴露和引用遠程服務&#xff0c;通過配置服務的URL地址進…

Ubuntu安裝之python開發

Ubuntu安裝之python開發 什么&#xff1f;&#xff1f;Ubuntu(烏班圖)開發&#xff1f;不會用&#xff1f;&#xff1f;怎么進行python開發&#xff1f;&#xff1f;&#xff1f; 烏班圖操作系統下載地址&#xff1a;http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-…

vimdiff和vim-fugitive安裝,使用教程

1、vimdiff的安裝 在終端執行 git config --global merge.tool vimdiff git config --global merge.conflictstyle diff3 git config --global mergetool.prompt false git config --global diff.tool vimdiff git config --global difftool.prompt false git config --…

在 PowerPoint 2016 中嵌入網頁

之前在智圖這個網站上做了一張地圖&#xff0c;在嵌入 PPT 里面的時候碰到了一些問題&#xff0c;現在把找到的解決方法寫下來。 PPT 里面自帶的 WebBrowser 控件可以實現網頁瀏覽的功能。在“開發工具”選項卡下的“其他控件”中找到“Microsoft Web Browser”&#xff0c;在畫…

js 正則表達式 整合

正則表達式:斷言 取字符串區間: /(?<[" star "]).*(?[" end "])/// 簡單封裝 Vue.prototype.strMatch (str,star,end) > { let regs new RegExp("(?<[" star "]).*(?[" end "])"); let req str…

dubbo 注冊中心zookeeper 手冊

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 zookeeper 注冊中心 Zookeeper 是 Apacahe Hadoop 的子項目&#xff0c;是一個樹型的目錄服務&#xff0c;支持變更推送&#xff0c;適…

數組 深入詳解

再論C語言數組 C語言處理數組的方式是它廣受歡迎的原因之一。C語言對數組的處理是非常有效的&#xff0c;其原因有以下三點&#xff1a;第一&#xff0c;除少數翻譯器出于謹慎會作一些繁瑣的規定外&#xff0c;C語言的數組下標是在一個很低的層次上處理的。但這個優點也有一個反…

oracle ins-30131錯誤

打開cmd 但是在我的環境沒效果&#xff0c;而我已知臨時目錄沒有問題。那么在命令行進入安裝軟件目錄&#xff0c;通過命令行啟動安裝程序&#xff0c;設置 ignorePrereq 檢查&#xff0c;此時數據庫軟件可以啟動安裝&#xff0c;是否會出現錯誤&#xff0c;就看忽略的檢查是否…

iOS開發UI篇—簡單介紹靜態單元格的使用

一、實現效果與說明 說明&#xff1a;觀察上面的展示效果&#xff0c;可以發現整個界面是由一個tableview來展示的&#xff0c;上面的數據都是固定的&#xff0c;且幾乎不會改變。 要完成上面的效果&#xff0c;有幾種方法&#xff1a; &#xff08;1&#xff09;可以直接利用代…

展示內容

今天課上展示了軟件 評價為過于簡單 還需另尋他法轉載于:https://www.cnblogs.com/wmqlzm/p/10041683.html

dubbo ,dubbo-provider、dubbo-consumer 配置參數說明

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 dubbo:consumer 服務消費者缺省值配置。配置類&#xff1a; com.alibaba.dubbo.config.ConsumerConfig 。同時該標簽為 <dubbo:refer…

laraval使用sqlite設置從多少開始遞增

DB::statement( "UPDATE SQLITE_SEQUENCE SET seq 起始值 WHERE name 表名" ); sqlite3默認就是1。 新建了含PRIMARY KEY AUTOINCREMENT 主鍵自增表(如 test1)后&#xff0c;會自動在sqlite_sequence表插入或更新一條信息&#xff0c;其中保存了相關主鍵的最大值&…

指針深入探討

C語言變量的內存實質 一、先來理解C語言中變量的實質 要理解C指針&#xff0c;我認為一定要理解C中“變量”的存儲實質&#xff0c;所以我就從“變量”這個東西開始講起吧&#xff01;先來理解理解內存空間吧&#xff01;請看下圖&#xff1a; 如上圖所示&#xff0c;內存只不…

springboot_yml配置

server: port: 8097 session-timeout: 30 tomcat.max-threads: 0 tomcat.uri-encoding: UTF-8 spring: application: name: feedback # 數據庫配置 datasource: name: test #url: jdbc:mysql://192.168.0.180:3306/dsdb #url: jdbc:m…

Python 字符串查找子串的方法之 index() 和 find()

find(substr, beg0, endlen(string)): 在[beg, end]范圍內查找substring&#xff0c;找到返回substr的起始下標&#xff0c;否則返回 -1。 1 string Hello Python 2 print(string.find(h, 0, len(string))) # 輸出 9 3 print(string.find(thon) # 輸出 84 print(strin.find(…

sqlite 設置向下遞增

因為 sqlite是沒有floor函數的 所以用 cast(x as int) - (x < cast(x as int)) 原理 cast(1.1 as int) 1 cast(-1.1 as int) -1&#xff08;我們想要的結果為2&#xff09; 如果x為非負 cast(x as int)是可以的 但是有負的話就加上后面 (x < cast(x as int))…

Docker 是什么,組成

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、Docker 是一個開源的應用容器引擎&#xff0c;讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中&#xff0c;然后發布到任…

VC6.0詳細教程

1 編制并運行一個簡單程序 1.1 編制并運行程序的“四步曲”1.2 工程(PROJECT)以及工程工作區(PROJECT WORKSPACE)1.3 啟動并進入VC6的集成開發環境1.4 創建工程并輸入源程序代碼(1)新建一Win32 Console Application工程(2)在工作區窗口中查看工程的邏輯架構(3)在工程中新建C源…

vim搜索替換工具

1、ag.vim(查找工具)安裝 在vimrc中添加 Plug rking/ag.vim 使用 :Ag 你要查找的內容 e open file and close the quickfix window. o open file (same as enter). go preview file (open but mainta…