標籤:security

Java Servlet安全性

Security分成四類
驗證(Authentication) – 使我們能檢驗的身份
授權(Authorization) – 限制只有特定的使用者或程式才能存取資源
保密(Confidentiality) – 確保只有參與者才能解讀通訊內容
完整性(Integrity) – 使我們能確認通訊內容在傳輸過程中未遭到竄改
以上四者全由數位憑證(digital certificate)寄術連結在一起,Java內建數位憑證的支援

一、HTTP身份驗證
1. Http基本驗證 – 採Base64編碼
2. 摘要驗證(digest authentication) – 以多個變因採帳號、密碼、URI、HTTP request method
、亂數值(nonce)

角色式驗證(Role-based authentication)
利用web.xml佈署描述檔裡的標簽,可以依據使用者是否持有特定的資格證明,來決定他們是否有權存取web應用系統裡的某些特定網頁(role屬性)

二、表單式驗證
每當伺服器收到requset,其存取對象是受保護的資源時,伺服器會檢查該使用者是否已經登入,也就是說,伺服器會在該使用者的HttpSession物件裡,尋找是否存在一個Principal物件,如果有則進一步檢查Principal的角色是否有權存取受保護資源的角色,則伺服器可將使用者再導引到該資源
缺點:和HTTP驗證法一樣,密碼是以明文形式傳送、不支援任何標準的登出機制

三、自定驗證

四、數位憑證
數位憑證技術關鍵在於public key cryptography,假設Jason想傳送一段密文給Willy,Jason首先得先找出Willy的public key,用它對訊息加密成密文。Willy收到密文之後,可用自己的private key解出原本的訊息,公鑰加密解決了私密性的問題

數位簽章(digital signature)則解決身份驗證的問題
數位簽章的關鍵在於key皆是非對稱的,Jason先用自己的private key對訊息加密,再用Willy的public key做第二次加密,Willy收到之後,先用自己的private key解密一次,再用Jason的public key做第二次解密以取得訊息

五、SSL
SSL協定使用公鑰加密技術來讓client server交換訊息,整個秘密通訊過程的所有細節都是由SSL負責,詳細運作原理可參考網路文件,或Java Servlet程式設計ch8