最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot傳統(tǒng)WEB應用開啟CSRF的流程

 更新時間:2026年01月04日 08:48:03   作者:張占嶺  
CSRF是一種Web安全漏洞,攻擊者利用受害者合法會話誘使執(zhí)行非本意操作,文章介紹了CSRF的攻擊原理、適用禁用場景以及Spring Security和Django中的禁用示例,同時,對比了不同CSRF保護機制的工作原理和適用場景,感興趣的朋友跟隨小編一起看看吧

CSRF 是什么?

CSRF(Cross-Site Request Forgery,跨站請求偽造) 是一種常見的Web安全漏洞。攻擊者利用受害者已經(jīng)登錄的合法會話,誘使受害者執(zhí)行非本意的操作。

簡單比喻:

想象你在咖啡店會員卡里有錢,你每次消費只需要說“用會員卡支付”。攻擊者偽裝成服務員,在你面前說“用會員卡轉賬100元到XXX賬戶”。因為你已經(jīng)在咖啡店的系統(tǒng)中“登錄”了(身份已認證),系統(tǒng)就會執(zhí)行這個操作。

CSRF攻擊原理:

攻擊流程:

  • 用戶登錄:用戶登錄正常的網(wǎng)站A(如銀行網(wǎng)站),獲得登錄憑證(Cookie/Session)
  • 用戶訪問惡意網(wǎng)站:用戶在同一個瀏覽器中訪問了攻擊者的網(wǎng)站B
  • 惡意請求:網(wǎng)站B通過隱藏表單、圖片src、AJAX等方式,向網(wǎng)站A發(fā)送請求
  • 自動攜帶憑證:瀏覽器會自動攜帶網(wǎng)站A的Cookie
  • 網(wǎng)站A執(zhí)行請求:網(wǎng)站A看到合法Cookie,誤以為是用戶的自愿操作

攻擊示例:

<!-- 惡意網(wǎng)站上的代碼 -->
<img src="https://your-bank.com/transfer?to=hacker&amount=10000" width="0" height="0" />
<!-- 或隱藏表單 -->
<form action="https://your-bank.com/change-email" method="POST">
  <input type="hidden" name="email" value="hacker@evil.com">
</form>
<script>document.forms[0].submit();</script>

為什么有時要禁用CSRF保護?

適用禁用場景:

純API服務(無瀏覽器交互)

# 移動App通過API訪問后端
# 使用Token認證(JWT/OAuth),而不是Session
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

僅提供非狀態(tài)改變的操作

GET /api/users          # 只讀操作,通常不需要CSRF
POST /api/transfer      # 寫操作,需要CSRF

微服務內部通信

# 服務間調用使用服務憑證,而不是用戶會話
service-to-service: true

某些特殊框架/場景

// GraphQL通常使用token而不是session
// 或某些實時通信應用

具體框架中的禁用示例:

Spring Security:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()  // 禁用CSRF
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .httpBasic();  // 使用HTTP Basic認證
    }
}

Django:

# settings.py
CSRF_COOKIE_SECURE = False  # 禁用CSRF
# 或針對特定視圖
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def api_view(request):
    pass

CSRF保護機制對比:

保護機制工作原理適用場景
CSRF Token服務器生成Token,表單/請求必須攜帶傳統(tǒng)Web應用
SameSite CookieCookie僅在同站請求中發(fā)送現(xiàn)代瀏覽器支持
雙重Cookie驗證客戶端讀取Cookie并附加到請求兼容性較好
Referer檢查檢查請求來源簡單但不可靠
無(禁用)不驗證純API、內部服務

何時應該啟用/禁用CSRF?

應該啟用CSRF的場景:

  • ? 傳統(tǒng)的基于Session的Web應用
  • ? 用戶通過瀏覽器訪問的表單提交
  • ? 需要用戶交互的操作(轉賬、修改數(shù)據(jù))
  • ? 使用Cookie/Session進行身份認證

可以禁用CSRF的場景:

  • ? 純REST API,使用JWT/OAuth Token認證
  • ? 僅限移動App訪問的后端服務
  • ? 微服務間的內部通信
  • ? 只讀的公共API
  • ? 使用其他認證方式(API Key、HMAC簽名)

禁用CSRF后的替代安全方案:

# 替代方案示例:
1. JWT Token認證:
   每次請求攜帶: Authorization: Bearer <token>
2. API Key + Secret:
   請求簽名: X-Signature: sha256(api_secret + request_data)
3. OAuth 2.0:
   使用Access Token進行授權
4. CORS限制:
   Access-Control-Allow-Origin: https://trusted-domain.com
5. Rate Limiting:
   限制請求頻率防止濫用

最佳實踐建議:

// 在Spring中,可以針對不同端點配置不同的CSRF策略
public class SecurityConfig {
    protected void configure(HttpSecurity http) {
        http
            // 對Web頁面啟用CSRF
            .csrf(csrf -> csrf
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .csrfTokenRequestHandler(new CsrfTokenRequestAttributeHandler())
            )
                .requireCsrfProtectionMatcher(
                    new RequestMatcher() {
                        public boolean matches(HttpServletRequest request) {
                            // 僅對特定路徑啟用CSRF
                            return request.getRequestURI().startsWith("/web/");
                        }
                    })
            .and()
            // API端點使用無狀態(tài)認證
            .authorizeRequests()
                .antMatchers("/api/**").authenticated()
                .and()
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS); // API無狀態(tài)
    }
}

驗證 CSRF 是否生效

  • 檢查 Cookie:登錄后查看瀏覽器是否有 XSRF-TOKEN Cookie
  • 測試請求
    • 直接發(fā)送 POST 請求應該被拒絕(403 錯誤)
    • 攜帶正確的 CSRF Token 的請求應該成功
  • 檢查響應頭:某些配置下,響應頭會包含 CSRF Token
# 使用 curl 測試
# 1. 先獲取 CSRF Token(從登錄后的 Cookie 或響應頭)
# 2. 發(fā)送帶 CSRF Token 的請求
curl -X POST http://localhost:8080/api/test \
  -H "Content-Type: application/json" \
  -H "X-XSRF-TOKEN: YOUR_CSRF_TOKEN" \
  -H "Cookie: XSRF-TOKEN=YOUR_CSRF_TOKEN" \
  -d '{"data": "test"}'

總結:

禁用CSRF的前提條件:

  • 應用不使用Cookie/Session進行身份認證
  • 請求來源可控(如僅限移動App、內部服務)
  • 已實施同等或更強的安全措施替代
  • 確認攻擊面不會因此擴大

黃金法則:

如果用戶通過瀏覽器訪問你的網(wǎng)站,并且網(wǎng)站使用了Cookie/Session,那么永遠不要禁用CSRF保護。只有在完全理解風險并有替代方案時,才考慮為API服務禁用CSRF。

到此這篇關于springboot~傳統(tǒng)WEB應用開啟CSRF的文章就介紹到這了,更多相關java多線程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談mybatisPlus的Ipage分頁和map參數(shù)的問題

    淺談mybatisPlus的Ipage分頁和map參數(shù)的問題

    這篇文章主要介紹了mybatisPlus的Ipage分頁和map參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 用JAVA實現(xiàn)一套背壓機制

    用JAVA實現(xiàn)一套背壓機制

    背壓依我的理解來說,是指訂閱者能和發(fā)布者交互,可以調節(jié)發(fā)布者發(fā)布數(shù)據(jù)的速率,解決把訂閱者壓垮的問題,這篇文章主要介紹了用JAVA自己實現(xiàn)一套背壓機制,需要的朋友可以參考下
    2023-06-06
  • Java中數(shù)組的定義與使用詳解

    Java中數(shù)組的定義與使用詳解

    這篇文章主要給大家介紹了關于Java中數(shù)組的定義與使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • springboot 如何配置多個jndi數(shù)據(jù)源

    springboot 如何配置多個jndi數(shù)據(jù)源

    這篇文章主要介紹了springboot 如何配置多個jndi數(shù)據(jù)源的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Feign調用全局異常處理解決方案

    Feign調用全局異常處理解決方案

    這篇文章主要介紹了Feign調用全局異常處理解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 淺談Java引用和Threadlocal的那些事

    淺談Java引用和Threadlocal的那些事

    這篇文章主要介紹了Java引用和Threadlocal的那些事,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 淺談java反射和自定義注解的綜合應用實例

    淺談java反射和自定義注解的綜合應用實例

    本篇文章主要介紹了java反射和自定義注解的綜合應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • mybatisPlus實現(xiàn)邏輯刪除,自動生成創(chuàng)建時間和更新時間方式

    mybatisPlus實現(xiàn)邏輯刪除,自動生成創(chuàng)建時間和更新時間方式

    MyBatisPlus框架中,通過@TableField(fill=FieldFill.INSERT)和@TableField(fill=FieldFill.UPDATE)注解可以實現(xiàn)在插入和更新時自動填充字段,比如創(chuàng)建時間和更新時間,使用@TableLogic注解標識邏輯刪除字段
    2024-09-09
  • IntelliJ IDEA Java項目手動添加依賴 jar 包的方法(圖解)

    IntelliJ IDEA Java項目手動添加依賴 jar 包的方法(圖解)

    這篇文章主要介紹了IntelliJ IDEA Java項目手動添加依賴 jar 包,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Java實例精煉掌握語法

    Java實例精煉掌握語法

    本章節(jié)我們將為大家介紹?Java?實現(xiàn)幾大基礎問題,通過實例學習我們可以更快的掌握?Java?的應用,感興趣的朋友來看看吧
    2022-04-04

最新評論

吴忠市| 西城区| 阿鲁科尔沁旗| 潮安县| 庆安县| 嘉禾县| 习水县| 山阳县| 林芝县| 定州市| 德阳市| 石首市| 泉州市| 丰县| 阳原县| 大庆市| 旅游| 宝坻区| 九龙县| 即墨市| 柯坪县| 屏东县| 黄龙县| 福泉市| 镇远县| 永和县| 遵义县| 兴隆县| 龙岩市| 云龙县| 营口市| 阳春市| 江都市| 汉沽区| 江山市| 八宿县| 宿松县| 无棣县| 都安| 宁明县| 敦化市|