javascript
SpringSecurity csrf验证忽略某些请求
? ? ? ? ? ?前幾天項目中遇到springSecurity問題,研究了大半天,掉進了csrf的坑,先認識一下csrf
CSRF概念:CSRF跨站點請求偽造(Cross—Site Request Forgery),跟XSS攻擊一樣,存在巨大的危害性,你可以這樣來理解:
? ? ? ?攻擊者盜用了你的身份,以你的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發送郵件、發消息,盜取你的賬號,添加系統管理員,甚至于購買商品、虛擬貨幣轉賬等。?如下:其中Web A為存在CSRF漏洞的網站,Web B為攻擊者構建的惡意網站,User C為Web A網站的合法用戶。
? ? ? ?CSRF攻擊攻擊原理及過程如下:
? ? ? ?1.?用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;
? ? ? ?2.在用戶信息通過驗證后,網站A產生Cookie信息并返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A;
? ? ? ?3.?用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
? ? ? ?4.?網站B接收到用戶請求后,返回一些攻擊性代碼,并發出一個請求要求訪問第三方站點A;
? ? ? ?5.?瀏覽器在接收到這些攻擊性代碼后,根據網站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網站A發出請求。網站A并不知道該請求其實是由B發起的,所以會根據用戶C的Cookie信息以C的權限處理該請求,導致來自網站B的惡意代碼被執行。?
所以在實際的網站中你可以使用,springsecurity默認是開啟的,所以你在每次訪問的時候你得在你的前端加上頭,不會加的可以看其他博客
? ? ? ?但是在一些訪問的時候如果一些接口沒帶請求的頭就是csrf,這樣就會說沒有權限,比如支付寶,微信的回調等,這些是不會加的,所以我們要忽略。
? ? ? 在網上百度了很久也沒有找到,于是自己翻看源碼找到了方法。
?
第一種:配置的時候直接配置忽略方法。
? ? 代碼如下 直接如圖紅框配置即可。
?
第二種:添加RequestMatcher
代碼如下
public class CsrfSecurityRequestMatcher implements RequestMatcher { private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$"); private RegexRequestMatcher unprotectedMatcher = new RegexRequestMatcher("/unprotected", null); @Override public boolean matches(HttpServletRequest request) { if(allowedMethods.matcher(request.getMethod()).matches()){ return false; } return !unprotectedMatcher.matches(request); } }?
將這個配置到httpconfig中
這樣一些不加頭的請求就不會被攔截了,解決了問題。
?
?有什么問題可以加我qq1058179540
?
轉載于:https://www.cnblogs.com/bingshu/p/8691445.html
總結
以上是生活随笔為你收集整理的SpringSecurity csrf验证忽略某些请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随笔(随更新)
- 下一篇: Java ee第四周作业