讓Spring Security更安全的配置辦法

2021-07-11 06:04:05 字數 1630 閱讀 2046

spring security, 不錯的安全框架,但在實際專案中, 如何讓安全更安全呢? 以下是在實際專案中總結的經驗之談.

(以spring secuirty 4.0.1版本為基礎)

1.登入時的引數名(username, password)不要使用預設的. 登入,退出的url不要使用預設的.

secuiry中預設的使用者名稱引數為username, 密碼為password; 在配置中修改不要使用預設的, 如username修改為uid, password為pwd__等等;

同樣, 登入的url與退出時的url也配置為不使用預設的, 乙個配置參考如下

2.公升級spring secuirty到4.0或之後的版本, 啟用csrf, 防止跨站請求偽造登入

如果還在使用secuirty 3或更老的版本, 公升級到4.0或之後 的版本, security將預設啟用csrf, 可防止跨站請求偽造登入, 或是用機器登入

若不需要csrf的場景(如對外的api介面), 可在security配置中關閉, 在

3.退出時清除維持會話(session)的cookie

預設情況在退出時security會呼叫session的invalidate()方法, 但不會清除維持會話的cookie, 

我們要配置為在退出時清除該cookie ---  使用不同的伺服器的cookie值可能不同, 以tomcat使用的預設cookie名為jsessionid為例, 其配置如下

也可擴充套件乙個logoutsuccesshandler的實現類來完成該功能.

4.進入登入頁面時使用新的session, 銷毀舊的session

也就是在進入登入頁面的請求中呼叫session的invalidate()方法, 強**務器使用乙個新的session id.示例如下

5.使用者密碼的儲存除了加密外, 還需要salt

使用者密碼的安全永遠不能忽略, 不僅要使用不可逆的加密演算法(如md5), 還需要配置salt值,且是動態的salt值(一般使用username或使用者的其他屬性),示例配置如下

其他一些相關的設定

1.使用者名稱usernmae的輸入框新增 autocomplete='off' 屬性

這是乙個在頁面上禁止瀏覽器記住輸入框中輸入過的使用者名稱的設定, 新增後就永遠不記住之前人登入的使用者名稱了,示例如下:

2.記錄登入失敗的資訊與次數.

在security中配置authenticationfailurehandler類的實現, 記住使用者登入失敗的資訊,或新增如登入失敗三次就需要有驗證碼等功能, 防止暴力破解使用者資訊.

3.concurrent session控制同一賬號同時登入的人數.

若需要乙個賬號同時只能有乙個(或具體的數量)在登入,則新增該配置, 具體參考spring security相關文件.

spring security 安全框架

本文 http itblood.com spring security security framework.html 安全常識 acegi介紹 以宣告式方式為基於spring的web應用新增認證和授權控制 acegi體系結構 認證管理器 訪問控制管理器。認證 authenticationproce...

SpringSecurity認證流程

在之前的文章 springboot spring security 基本使用及個性化登入配置 中對springsecurity進行了簡單的使用介紹,基本上都是對於介面的介紹以及功能的實現。這一篇文章嘗試從原始碼的角度來上對使用者認證流程做乙個簡單的分析。在具體分析之前,我們可以先看看springse...

SpringSecurity使用技巧

1 鑑權處理頁通常包括四個方面的設定,分別是鑑權失敗 鑑權成功 未鑑權訪問 已鑑權但訪問了受保護許可權。如何自 定義這四類處理。鑑權失敗的預設處理頁面是 spring security login?login error 其預設處理類為 urlauthenticationfailurehandler...