csrf漏洞修復

漏洞說明:通過篡改請求頭中的Referer值依舊能夠訪問到接口。
通過http請求頭里面的Referer隨意訪問接口
在這里插入圖片描述

通過下面兩個代碼類程序來實現你的程序不會被攻擊,里面有兩個實體,如果你感覺這個程序對你有用,聯系我,我私發你,代碼就不做過多的解釋,原理不難

package com.datalook.manage.filter;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @description:* @author: guoyunlong* @create: 2023-11-23 13:08**/
@Configuration
public class CsrfFilterConfig implements WebMvcConfigurer{@Beanpublic CsrfFilterInterceptor myCsrfInterceptor(){return  new CsrfFilterInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {//這里可以添加多個攔截器registry.addInterceptor(myCsrfInterceptor()).addPathPatterns("/**")//img和resources為靜態資源.excludePathPatterns("/img/**").excludePathPatterns("/images/**").excludePathPatterns("/resources/**").excludePathPatterns("/actuator/**").excludePathPatterns("/actuator/prometheus/**").excludePathPatterns("/permission/**");}@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/login").allowedOrigins("*").allowCredentials(true).allowedMethods("GET", "POST", "DELETE", "PUT").maxAge(3600);}}
package com.datalook.manage.filter;import com.datalook.util.common.ComponentProperties;
import com.datalook.util.common.StringUtils;
import com.datalook.util.log.LogUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @description:* @author: guoyunlong* @create: 2023-11-23 13:08**/
@Component
public class CsrfFilterInterceptor implements HandlerInterceptor {@Autowiredprivate ComponentProperties security;public boolean preHandle(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o) throws Exception {String referer = request.getHeader("Referer");String serverName = request.getServerName();//如果 referer 為空放行if (!StringUtils.hasText(referer)) {return true;}URL url = null;try {url = new URL(referer);} catch (MalformedURLException e) {httpServletResponse.setContentType("application/json; charset=UTF-8");httpServletResponse.getWriter().write("系統不支持當前域名的訪問!");LogUtil.error("域名:{}解析異常", url);}referer = url.getHost();if (StringUtils.hasText(referer)) {// 不啟用或者已忽略的domain不攔截if (!security.getCsrf().isEnable() || isExcludesDomain(referer)) {return true;}}// 判斷是否存在外鏈請求本站if (StringUtils.hasText(referer) && referer.indexOf(serverName) < 0) {LogUtil.error("攔截到非法請求:=> 服務器域名:{} => 非法訪問域名:{}", serverName, referer);httpServletResponse.setContentType("application/json; charset=UTF-8");httpServletResponse.getWriter().write("系統不支持當前域名的訪問!");return false;} else {return true;}}/*** 判斷是否為忽略的域名** @param urlPath URL路徑* @return true-忽略,false-過濾*/private boolean isExcludesDomain(String urlPath) {if (security.getCsrf().getExcludesDomain() == null || security.getCsrf().getExcludesDomain().isEmpty()) {return false;}return security.getCsrf().getExcludesDomain().stream().map(pattern -> Pattern.compile("^" + pattern)).map(p -> p.matcher(urlPath)).anyMatch(Matcher::find);}
}

使用postman來測試修復后的結果,如果別人使用隨意一個域名是可以訪問你的接口或者頁面的
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166263.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS 7 安裝 Weblogic 14 版本

安裝JDK程序 注意&#xff1a;安裝weblogic前&#xff0c;先安裝JDK&#xff01;&#xff08;要求jdk(1.7以上)&#xff09;&#xff1a; 一、創建用戶組weblogic及用戶weblogic groupadd weblogic useradd -g weblogic weblogic二、將下載好的jdk及weblogic上傳至/home/webl…

2分鐘快速實現非邏輯卷磁盤擴容

在虛擬機環境中&#xff0c;您可以擴展虛擬硬盤的大小而不影響數據。以下是擴展 /dev/sdb 磁盤從200G到500G并擴展 /dev/sdb1 分區到新大小的步驟&#xff1a; 關閉相關服務&#xff1a;確保沒有服務正在訪問 /app 分區。 關閉虛擬機&#xff1a;關閉您要更改磁盤大小的虛擬機…

「首屆廣州百家新銳企業」名單出爐!數說故事遴選入圍

11月20日&#xff0c;由中共廣州市委統戰部、市工商聯、市工信局、市國資委、市科技局聯合主辦的首屆廣州百家新銳企業融通創新交流會在廣州成功舉辦。 為推動廣州市中小民營企業的創新發展&#xff0c;踐行新發展理念&#xff0c;厚植廣州產業根基&#xff0c;現場發布首屆廣…

qt實現播放視屏的時候,加載外掛字幕(.srt文件解析)

之前用qt寫了一個在windows下播放視頻的軟件&#xff0c;具體介紹參見qt編寫的視頻播放器&#xff0c;windows下使用&#xff0c;精致小巧_GreenHandBruce的博客-CSDN博客 后來發現有些視頻沒有內嵌字幕&#xff0c;需要外掛字幕&#xff0c;這時候&#xff0c;我就想著把加載…

SELinux零知識學習二十六、SELinux策略語言之類型強制(11)

接前一篇文章:SELinux零知識學習二十五、SELinux策略語言之類型強制(10) 二、SELinux策略語言之類型強制 3. 訪問向量規則 AV規則就是按照對客體類別的訪問許可指定具體含義的規則,SELinux策略語言目前支持四類AV規則: allow:表示允許主體對客體執行允許的操作。nevera…

docker compose啟動多個服務,如何查看多個服務的日志

使用docker-compose的--scale啟動多個服務&#xff0c;如何查看多個服務的日志 docker-compose -f yml路徑 logs -f --tail 100第一個-f指定yml路徑&#xff0c;不然會報錯誤no configuration file provided: not found 第二個-f是ogs的參數&#xff0c;表示實時刷新&#xff…

YOLOv5結合華為諾亞VanillaNet Block模塊

???YOLOv5實戰寶典--星級指南:從入門到精通,您不可錯過的技巧 ??-- 聚焦于YOLO的 最新版本, 對頸部網絡改進、添加局部注意力、增加檢測頭部,實測漲點 ?? 深入淺出YOLOv5:我的專業筆記與技術總結 ??-- YOLOv5輕松上手, 適用技術小白,文章代碼齊全,僅需 …

力扣labuladong一刷day19天花式遍歷

力扣labuladong一刷day19天花式遍歷 文章目錄 力扣labuladong一刷day19天花式遍歷一、48. 旋轉圖像二、54. 螺旋矩陣三、59. 螺旋矩陣 II 一、48. 旋轉圖像 題目鏈接&#xff1a;https://leetcode.cn/problems/rotate-image/ 思路&#xff1a;把矩陣向右旋轉90度&#xff0c;要…

完美解決AttributeError: ‘NoneType‘ object has no attribute ‘append‘

文章目錄 一、原始代碼二、修改后的代碼--最后一行代碼append進行了修改總結 一、原始代碼 logits_list [] # 創建一個空列表來存儲每個logitslabels_list []for i, batch in enumerate(test_tasks):with torch.no_grad():logits, labels, loss, acc self.fast_adapt(batc…

斯坦福大學引入FlashFFTConv來優化機器學習中長序列的FFT卷積

斯坦福大學的FlashFFTConv優化了擴展序列的快速傅里葉變換(FFT)卷積。該方法引入Monarch分解&#xff0c;在FLOP和I/O成本之間取得平衡&#xff0c;提高模型質量和效率。并且優于PyTorch和FlashAttention-v2。它可以處理更長的序列&#xff0c;并在人工智能應用程序中打開新的可…

【Python百寶箱】Python中的音視頻處理: 探索多樣化的庫和工具

Python中的音視頻處理: 探索多樣化的庫和工具 前言 在數字化時代&#xff0c;音視頻處理不僅僅是娛樂產業的需求&#xff0c;還滲透到了教育、醫療、安防等多個領域。Python作為一門強大而靈活的編程語言&#xff0c;為開發人員提供了豐富的資源來處理和分析音視頻數據。本文…

SQL Server Profiler基礎使用

文章目錄 SQL Server Profiler基礎使用簡介如何打開直接打開Microsoft SQL Server Management Studio工具欄打開 配置跟蹤新建跟蹤跟蹤屬性配置常規配置事件選擇 啟動跟蹤跟蹤時執行腳本跟蹤記錄 暫停跟蹤停止跟蹤 SQL Server Profiler基礎使用 簡介 一個圖形界面工具&#x…

逆矩陣相關性質與例題

1.方陣的行列式&#xff1a;就是將方陣中的每一個元素轉換至行列式中。 1.性質一&#xff1a;轉置方陣的行列式等于轉置前的行列式。&#xff08;對標性質&#xff1a;行列式與它的轉置行列式相等&#xff09; 2.性質二&#xff1a;|ka||a|*k的n次方&#xff0c;n為方陣階數。 …

芯片設計—低功耗isolation cell

&#xff08;一&#xff09;低功耗isolation cell的目的 低功耗架構設計需要前后端拉通規劃&#xff0c;前端設計有PMU功耗管理單元&#xff0c;比如A模塊電壓常開&#xff0c;B模塊電壓可關斷&#xff0c;那么請思考&#xff0c;當B模塊關斷電壓后&#xff0c;B模塊輸出到A模…

PDF控件Spire.PDF for .NET【轉換】演示:將在 C#/VB.NET 中將 PDF 轉換為 PCL

本文我們將演示如何通過調用 Spire.PDF 提供的方法 PdfDocument.SaveToStream() 將 PDF 頁面轉換為 HTML、Word、SVG、XPS、PDF 并將它們保存到流中。并且從Spire.PDF版本4.3開始&#xff0c;它新支持轉換定義范圍的PDF頁面并將其保存到流中。 Spire.Doc 是一款專門對 Word 文…

精益制造中的周轉箱和工具柜優勢

制造業&#xff08;Manufacturing industry&#xff09;是指機械工業時代利用某種資源&#xff08;物料、能源、設備、工具、資金、技術、信息和人力等&#xff09;&#xff0c;按照市場要求&#xff0c;通過制造過程&#xff0c;轉化為可供人們使用和利用的大型工具、工業品與…

大語言模型概述(二):基于亞馬遜云科技的研究分析與實踐

上期介紹了大語言模型的定義和發展歷史&#xff0c;本期將分析基于亞馬遜云科技的大語言模型相關研究方向&#xff0c;以及大語言模型的訓練和構建優化。 大語言模型研究方向分析 Amazon Titan 2023 年 4 月&#xff0c;亞馬遜云科技宣布推出 Amazon Titan 大語言模型。根據…

redis運維(十七)事務

一 redis事務 事務核心參考 ① 基礎概念 1、場景引入核心&#xff1a;通過現象思考原因? 2、事務的概念 3、事務四大特性說明&#xff1a; redis只具備部分特性 重點1&#xff1a; 原子性和一致性 重點2&#xff1a; 隔離性和持久性 ② redis的事務 1、基礎鋪墊備注&…

runapi的學習記錄

安裝地址 git clone https://github.com/star7th/showdoc.git 默認賬號與密碼 showdoc 123456 首頁 訪問地址&#xff1a;http://192.168.51.2:4042/web/#/ 進入ShowDoc首頁 登錄showdoc文檔系統 http://192.168.51.2:4042/web/#/user/login 默認賬號密碼showdoc/12345…

unity Terrain 性能問題

在實踐過程中unity發生進入場景GPU爆顯存的情況&#xff0c;經過調查發現是使用Terrain造成的問題&#xff0c;這個問題在使用一個Terrain的時候并不會發生&#xff0c;但是在使用多個時會發生。 似乎在使用過程中Terrain會直接把Terrain的整個地圖加載&#xff0c;造成移動設…