天天看點

猿創征文|Java中的權限認證如何了解

一、什麼是認證和授權?如何設計一個權限認證架構?

認證: 就是對系統通路者的身份進行确認。 使用者名密碼登入、 二維碼登入、手機短信登入、指紋、刷臉。。。

授權:就是對系統通路者的行為進行控制。授權通常是在認證之後,對系統内的使用者隐私資料進行保護。背景接口通路權限、前台控件的通路權限。

RBAC模型: 主體 -》 角色 -》 資源 -》通路系統的行為。

認證和授權也是對一個權限認證架構進行擴充的兩個主要的方面。

二、Cookie和Session有什麼差別?

1、session儲存在伺服器,用戶端不知道其中的資訊;cookie儲存在用戶端,伺服器能夠知道其中的資訊。

2、session中儲存的是對象,cookie中儲存的是字元串。

3、session不能區分路徑,同一個使用者在通路一個網站期間,所有的session在任何一個地方都可以通路到。而cookie中如果設定了路徑參

數,那麼同一個網站中不同路徑下的cookie互相是通路不到的。

4、session需要借助cookie才能正常。如果用戶端完全禁止cookie,session将失效。

分布式Session的幾種實作方式

1 .基于資料庫的Session共享

2 .基于NFS共享檔案系統

3 .基于memcached 的session,如何保證 memcached 本身的高可用性?

4 . 基于resin/tomcat web容器本身的session複制機制

5 . 基于TT/Redis 或 jbosscache 進行 session 共享。

6 . 基于cookie 進行session共享

三、如果沒有Cookie,Session還能進行身份驗證嗎?

當伺服器tomcat第一次接收到用戶端的請求時,會開辟一塊獨立的session空間,建立一個session對象,同時會生成一個session id,通過響應頭的方式儲存到用戶端浏覽器的cookie當中。以後用戶端的每次請求,都會在請求頭部帶上這個session id,這樣就可以對應上服務端的一些會話的相關資訊,比如使用者的登入狀态。

如果沒有用戶端的Cookie,Session是無法進行身份驗證的。

當服務端從單體應用更新為分布式之後,cookie+session這種機制要怎麼擴充?

1、session黏貼: 在負載均衡中,通過一個機制保證同一個用戶端的所有請求都會轉發到同一個tomcat執行個體當中。問題: 當這個tomcat執行個體出現問題之後,請求就會被轉發到其他執行個體,這時候使用者的session資訊就丢了。

2、session複制: 當一個tomcat執行個體上儲存了session資訊後,主動将session 複制到叢集中的其他執行個體。問題: 複制是需要時間的,在複制過程中,容易産生session資訊丢失。

3、session共享: 就是将服務端的session資訊儲存到一個第三方中,比如Redis。

四、什麼是CSRF攻擊?如何防止?

CSRF: Cross Site Requst Forgery 跨站請求僞造

一個正常的請求會将合法使用者的session id儲存到浏覽器的cookie。這時候,如果使用者在浏覽器中打來另一個tab頁, 那這個tab頁也是可以獲得浏覽器的cookie。黑客就可以利用這個cookie資訊進行攻擊。

攻擊過程:

1、某銀行網站A可以以GET請求的方式發起轉賬操作。 www.xxx.com/transfor.do?accountNum=100&money=1000 accountNum表示目标賬戶。這個請求肯定是需要登入才可以正常通路的。

2、攻擊者在某個論壇或者網站上,上傳一個圖檔,連結位址是 www.xxx.com/transfer.do?accountNum=888&money=10000 其中這個accountNum就是攻擊者自己的銀行賬戶。

3、如果有一個使用者,登入了銀行網站,然後又打開浏覽器的另一個tab頁,點選了這個圖檔。這時,銀行就會受理到一個帶了正确cookie的請求,就會完成轉賬。使用者的錢就被盜了。

CSRF方式方式:

1、盡量使用POST請求,限制GET請求。POST請求可以帶請求體,攻擊者就不容易僞造出請求。

2、将cookie設定為HttpOnly : respose.setHeader(“Set-Cookie”,“cookiename=cookievalue;HttpOnly”)。

3、增加token;