Spring Boot 安全性最佳實(shí)踐
1.實(shí)施 HTTPS
HTTPS 在傳輸過程中對(duì)數(shù)據(jù)進(jìn)行加密,防止未經(jīng)授權(quán)的各方截獲和破譯敏感信息。這對(duì)于處理用戶憑證、金融交易或任何其他機(jī)密數(shù)據(jù)的應(yīng)用程序尤為重要。因此,安全通信是不容置疑的。您必須使用 HTTPS 來保護(hù)傳輸中的數(shù)據(jù)。
在應(yīng)用程序?qū)傩灾校_保啟用 TLS/SSL:
server.port=8443 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=yourpassword server.ssl.key-password=yourpassword
調(diào)整文件路徑,確保將 "keystore.jks"、"key-store-password "和 "key-password "替換為實(shí)際的 keystore 文件、keystore 密碼和私鑰密碼。
如果想強(qiáng)制執(zhí)行 HTTPS 并完全禁止 HTTP 訪問,可以修改 Spring Security 配置,將所有 HTTP 流量重定向到 HTTPS。下面是實(shí)現(xiàn)方法:
@Override protected void configure(HttpSecurity http) throws Exception { http .requiresChannel() .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null) .requiresSecure() .and() .authorizeRequests() .antMatchers("/").permitAll() // Allow access to the home page .anyRequest().authenticated() .and() .formLogin().and() .httpBasic().and() .csrf().and(); // Retaining CSRF configuration }
.requiresChannel().requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null).requiresSecure() 對(duì)所有請(qǐng)求強(qiáng)制執(zhí)行 HTTPS。requestMatchers 部分用于處理應(yīng)用程序位于代理或負(fù)載平衡器后面的情況,X-Forwarded-Proto 用于確定協(xié)議。如果要在 Spring Boot 應(yīng)用程序中使用 WebSecurityConfigurerAdapter 強(qiáng)制執(zhí)行 HTTPS,可以配置安全設(shè)置以確保安全連接。下面是一個(gè)完整的示例:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .requiresChannel() .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null) .requiresSecure() // Enforce HTTPS .and() .authorizeRequests() .antMatchers("/").permitAll() // Allow access to the home page .anyRequest().authenticated() .and() .formLogin().and() .httpBasic().and() .csrf().and(); // Retain CSRF protection } }
實(shí)施 HTTPS 后,徹底測(cè)試應(yīng)用程序,確保功能無縫連接。定期監(jiān)控 SSL/TLS 配置,檢查是否存在漏洞或證書過期。
2.激活 CSRF 保護(hù)
跨站請(qǐng)求偽造(CSRF)攻擊可能是毀滅性的。Spring Security 默認(rèn)啟用 CSRF 保護(hù)。請(qǐng)確保沒有誤將其禁用:
http .csrf().disable(); // Avoid this in production
3.嚴(yán)格驗(yàn)證輸入
絕不相信用戶輸入。始終驗(yàn)證類型、長(zhǎng)度、格式和范圍。使用 Spring 內(nèi)置的驗(yàn)證功能:
import javax.validation.constraints.NotEmpty; public class UserInput { @NotEmpty(message = "Name cannot be empty") private String name; // getters and setters }
4.使用參數(shù)化查詢
SQL 注入是網(wǎng)絡(luò)應(yīng)用程序中常見的非常關(guān)鍵的漏洞,攻擊者可以完全接管應(yīng)用程序的數(shù)據(jù)庫。
在 Spring Boot 中,可以通過使用參數(shù)化查詢或 JPA 資源庫來緩解 SQL 注入攻擊:
@Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT u FROM User u WHERE u.email = :email") User findByEmail(@Param("email") String email); }
5.啟用方法級(jí)安全
當(dāng)未經(jīng)授權(quán)或低權(quán)限用戶可以訪問應(yīng)用程序的敏感功能(如通常由管理員角色訪問的功能)時(shí),就會(huì)出現(xiàn)方法級(jí)授權(quán)問題。
這一問題在網(wǎng)絡(luò)應(yīng)用程序中非常普遍,已成為 OWASP 評(píng)選的網(wǎng)絡(luò)應(yīng)用程序十大漏洞之一。
您可以使用 Spring 安全注解在方法級(jí)別限制訪問權(quán)限,從而避免這一安全問題:
@PreAuthorize("hasRole('ADMIN')") public void deleteUser(Long id) { // deletion logic }
6.加密敏感數(shù)據(jù)
想要避免數(shù)據(jù)泄露?敏感數(shù)據(jù)應(yīng)該加密。使用 Spring 的 @EncryptablePropertySource 對(duì)屬性文件進(jìn)行加密:
@EncryptablePropertySource(name = "EncryptedProperties", value = "classpath:encrypted.properties") @Configuration public class EncryptionConfig { // Configuration details }
7.定期更新依賴項(xiàng)
Spring Boot 漏洞經(jīng)常出現(xiàn)在第三方軟件包和插件中。及時(shí)更新依賴項(xiàng),下載開發(fā)人員創(chuàng)建的補(bǔ)丁,確保已知的安全漏洞得到修復(fù)。使用 Maven 或 Gradle 等工具可輕松進(jìn)行管理。
最近,Trivy 等開源依賴關(guān)系掃描工具增加了對(duì)掃描易受攻擊的 Java 依賴關(guān)系的支持。
8.實(shí)施正確的身份驗(yàn)證和授權(quán)
利用 Spring Security 強(qiáng)大的身份驗(yàn)證和授權(quán)機(jī)制。配置身份驗(yàn)證提供程序、userDetailsService 和密碼編碼器:
@Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); }
9.審計(jì)和記錄安全事件
安全審計(jì)對(duì)于正確評(píng)估組織應(yīng)用程序的安全狀況至關(guān)重要。我們強(qiáng)烈建議跟蹤所有與安全相關(guān)的事件。Spring Boot Actuator 和 Spring Security 的審計(jì)功能非常有用:
public class CustomAuditListener extends AbstractAuthenticationAuditListener { @Override public void onApplicationEvent(AbstractAuthenticationEvent event) { // Logging logic } }
10.進(jìn)行安全測(cè)試
定期測(cè)試應(yīng)用程序是否存在安全漏洞。
您可以使用 Spring Boot 自身的測(cè)試功能來編寫測(cè)試:
@SpringBootTest public class SecurityConfigurationTest { // Test cases }
但這種方法可能會(huì)很耗時(shí),尤其是因?yàn)槟枰獮槎喾N類型的安全漏洞創(chuàng)建和維護(hù)所有測(cè)試用例。更快、更可靠的替代方法是使用支持 Spring Boot 的專用 API 測(cè)試工具(如 Escape),它將直接在 CI/CD 中根據(jù) 100 多種安全最佳實(shí)踐和漏洞測(cè)試您的應(yīng)用程序,并幫助您修復(fù)所有問題。
結(jié)論
????? 這篇文章基于Spring Security, Spring Boot 中的安全性不是事后的想法,而是應(yīng)用程序設(shè)計(jì)的一個(gè)重要方面。通過遵循這些最佳實(shí)踐,開發(fā)人員可以顯著改善 Spring Boot 應(yīng)用程序的安全狀況。請(qǐng)記住,全面的安全性不僅需要最佳實(shí)踐,還需要實(shí)施強(qiáng)大的訪問控制措施、執(zhí)行安全的編碼實(shí)踐以及采用最新的安全技術(shù),從而大幅降低風(fēng)險(xiǎn)敞口,保護(hù)您的寶貴資產(chǎn)免受潛在威脅。
今天先到這兒,希望對(duì)云原生,技術(shù)領(lǐng)導(dǎo)力, 企業(yè)管理,系統(tǒng)架構(gòu)設(shè)計(jì)與評(píng)估,團(tuán)隊(duì)管理, 項(xiàng)目管理, 產(chǎn)品管管,團(tuán)隊(duì)建設(shè) 有參考作用 , 您可能感興趣的文章:
領(lǐng)導(dǎo)人怎樣帶領(lǐng)好團(tuán)隊(duì)
構(gòu)建創(chuàng)業(yè)公司突擊小團(tuán)隊(duì)
國(guó)際化環(huán)境下系統(tǒng)架構(gòu)演化
微服務(wù)架構(gòu)設(shè)計(jì)
視頻直播平臺(tái)的系統(tǒng)架構(gòu)演化
微服務(wù)與Docker介紹
Docker與CI持續(xù)集成/CD
互聯(lián)網(wǎng)電商購物車架構(gòu)演變案例
互聯(lián)網(wǎng)業(yè)務(wù)場(chǎng)景下消息隊(duì)列架構(gòu)
互聯(lián)網(wǎng)高效研發(fā)團(tuán)隊(duì)管理演進(jìn)之一
消息系統(tǒng)架構(gòu)設(shè)計(jì)演進(jìn)
互聯(lián)網(wǎng)電商搜索架構(gòu)演化之一
企業(yè)信息化與軟件工程的迷思
企業(yè)項(xiàng)目化管理介紹
軟件項(xiàng)目成功之要素
人際溝通風(fēng)格介紹一
精益IT組織與分享式領(lǐng)導(dǎo)
學(xué)習(xí)型組織與企業(yè)
企業(yè)創(chuàng)新文化與等級(jí)觀念
組織目標(biāo)與個(gè)人目標(biāo)
初創(chuàng)公司人才招聘與管理
人才公司環(huán)境與企業(yè)文化
企業(yè)文化、團(tuán)隊(duì)文化與知識(shí)共享
高效能的團(tuán)隊(duì)建設(shè)
項(xiàng)目管理溝通計(jì)劃
構(gòu)建高效的研發(fā)與自動(dòng)化運(yùn)維
某大型電商云平臺(tái)實(shí)踐
互聯(lián)網(wǎng)數(shù)據(jù)庫架構(gòu)設(shè)計(jì)思路
IT基礎(chǔ)架構(gòu)規(guī)劃方案一(網(wǎng)絡(luò)系統(tǒng)規(guī)劃)
餐飲行業(yè)解決方案之客戶分析流程
餐飲行業(yè)解決方案之采購戰(zhàn)略制定與實(shí)施流程
餐飲行業(yè)解決方案之業(yè)務(wù)設(shè)計(jì)流程
供應(yīng)鏈需求調(diào)研CheckList
企業(yè)應(yīng)用之性能實(shí)時(shí)度量系統(tǒng)演變
如有想了解更多軟件設(shè)計(jì)與架構(gòu), 系統(tǒng)IT,企業(yè)信息化, 團(tuán)隊(duì)管理 資訊,請(qǐng)關(guān)注我的微信訂閱號(hào):
文章來源:http://www.zghlxwxcb.cn/news/detail-860073.html
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
該文章也同時(shí)發(fā)布在我的獨(dú)立博客中-Petter Liu Blog。文章來源地址http://www.zghlxwxcb.cn/news/detail-860073.html
到了這里,關(guān)于Spring Boot 安全性最佳實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!