從零開始學習JavaWeb-15


???一、數據庫安全與防注入實戰??

1. ??SQL 注入原理與危害??
  • ??攻擊本質??:利用輸入漏洞篡改 SQL 語義,例如:

    SELECT * FROM users WHERE username = 'admin' OR '1'='1' -- AND password = 'xxx'

    OR '1'='1'導致條件永真,繞過密碼驗證。

  • ??危害??:數據泄露(用戶隱私)、越權操作(刪庫)、服務癱瘓。

2. ??防御方案??
  • ??預編譯(PreparedStatement)??:強制分離指令與參數

    String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, inputUser);  // 參數視為值而非代碼
    ps.setString(2, inputPass);
  • ??輸入校驗??:正則過濾特殊字符(如 '--

    if (!inputUser.matches("[a-zA-Z0-9_]+")) { throw new InvalidInputException("用戶名含非法字符");
    }
  • ??最小權限原則??:數據庫賬號僅授權必要操作(禁用 DROPDELETE)。

3. ??存儲過程與ORM框架??
  • ??存儲過程??:封裝 SQL 邏輯,減少動態拼接(但需防內部注入)

  • ??ORM 框架(如 MyBatis)??:

    <select id="getUser" resultType="User">SELECT * FROM users WHERE username = #{user} <!-- #{} 自動預編譯 -->
    </select>

???二、MySQL 深度優化策略??

1. ??索引優化與慢查詢分析??

??索引類型??

??適用場景??

??優化效果??

??B+樹索引??

等值查詢(=)、范圍查詢(>

減少全表掃描,速度提升 10-100 倍

??哈希索引??

精確匹配(無范圍查詢)

O(1) 查詢,但不支持排序

  • ??慢查詢日志??:

    -- 啟用慢查詢日志
    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 2; -- 閾值2秒

    分析工具:mysqldumpslow、Percona Toolkit。

2. ??事務隔離級別選擇??

??級別??

??臟讀??

??不可重復讀??

??幻讀??

??適用場景??

??READ UNCOMMITTED??

?

?

?

極少使用

??READ COMMITTED??

?

?

?

Oracle 默認

??REPEATABLE READ??

?

?

?

??MySQL 默認??

??SERIALIZABLE??

?

?

?

強一致性(金融系統)

??代碼設置??:

// JDBC 設置事務隔離級別
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);

???三、數據庫連接池調優??

1. ??核心參數配置(以 Druid 為例)??

??參數??

??推薦值??

??作用??

initialSize

CPU核心數

啟動時初始化連接數

maxActive

50

最大連接數(防數據庫過載)

minIdle

5

最小空閑連接(應對突發流量)

maxWait

3000

獲取連接超時時間(ms)

validationQuery

SELECT 1

心跳檢測 SQL

??監控集成??:

<!-- 啟用 Druid 監控 -->
<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern>
</servlet-mapping>

訪問 http://localhost:8080/druid查看 SQL 執行效率、慢查詢統計。


???四、綜合實戰:用戶管理系統安全優化??

1. ??架構分層設計??
graph TBA[View] --> B[Controller]B --> C[Service]C --> D[DAO]D --> E[MySQL]F[Filter] -->|全局安全控制| B
  • ??Filter 層??:統一防 XSS 攻擊(過濾請求參數)。

  • ??Service 層??:事務管理 + 密碼加密(BCrypt)。

2. ??關鍵代碼實現??
  • ??密碼加密存儲??:

    public String encryptPassword(String rawPassword) {return BCrypt.hashpw(rawPassword, BCrypt.gensalt());
    }// 驗證密碼
    public boolean checkPassword(String rawPassword, String hashedPassword) {return BCrypt.checkpw(rawPassword, hashedPassword);
    }
  • ??防 XSS 過濾器??:

    @WebFilter("/*")
    public class XssFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {HttpServletRequest request = (HttpServletRequest) req;XssRequestWrapper wrappedRequest = new XssRequestWrapper(request); // 包裝請求,過濾參數chain.doFilter(wrappedRequest, res);}
    }

???五、高并發場景解決方案??

1. ??讀寫分離(MySQL Replication)??

??角色??

??作用??

??配置示例??

??Master??

寫操作(INSERT/UPDATE)

binlog-do-db = appdb

??Slave??

讀操作(SELECT)

replicate-do-db = appdb

??代碼路由??:

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return TransactionSynchronizationManager.isCurrentTransactionReadOnly() ? "slave" : "master";}
}
2. ??緩存優化(Redis)??
  • ??緩存穿透??:布隆過濾器攔截非法查詢。

  • ??緩存雪崩??:隨機過期時間 + 熔斷降級。

// 查詢優化:先查緩存,未命中再查庫
public User getUserById(int id) {String key = "user:" + id;User user = redisTemplate.opsForValue().get(key);if (user == null) {user = userDao.findById(id); // 數據庫查詢redisTemplate.opsForValue().set(key, user, 30, TimeUnit.MINUTES);}return user;
}

???六、總結與知識圖譜??

??模塊??

??核心技術點??

??企業級實踐??

??數據庫安全??

預編譯 + 輸入校驗 + 權限控制

防御 SQL 注入/XSS 攻擊

??MySQL 優化??

B+樹索引 + 慢查詢分析 + 事務隔離

提升查詢效率至毫秒級

??連接池調優??

參數配置 + 實時監控

支撐 5000+ TPS 并發

??高并發架構??

讀寫分離 + Redis 緩存

應對百萬級用戶請求

??學習路線圖??:

graph LRA[基礎] --> B[Servlet/JSP]B --> C[JDBC/連接池]C --> D[會話管理]D --> E[安全防護]E --> F[高并發架構]

??“安全是系統的生命線,性能是用戶體驗的基石”??

??動手實踐??:

  1. 注入防御測試:嘗試攻擊自己的系統(如輸入 ' OR 1=1 --),驗證防護有效性。

  2. 慢 SQL 優化:通過 EXPLAIN分析查詢計劃,添加復合索引。

  3. 壓力測試:用 JMeter 模擬 1000 并發用戶,優化連接池參數。


??擴展挑戰??:

  • 整合 ??Spring Security?? 實現 RBAC 動態權限控制。

  • 使用 ??ShardingSphere?? 實現分庫分表。

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

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

相關文章

深入理解深度學習中的“Batch”

文章目錄 **一、什么是Batch?為什么需要它?** **二、Batch Size(批次大小)的影響** **三、Batch, Epoch 和 Iteration 的關系** **四、案例分析** 在深度學習領域,“Batch”(批次)是一個核心且至關重要的概念。它指的是在模型訓練過程中,一次性輸入給神經網絡進行處理的…

27.語言模型

語言模型&#xff0c;是NLP方向一直主力研究的&#xff0c;通過訓練機器&#xff0c;來讓機器學習人類語言的內在規律&#xff0c;理解自然語言&#xff0c;并將其轉換為計算機語言。 目前的主流語言模型&#xff0c;如GPT、Deepseek等&#xff0c;并不是簡單的搜索背誦。他們的…

小智ai+mcp+n8n的智能組合

小智aimcpn8n的智能組合1 小智ai的版本2 n8n的配置3 mcp的demo4 工作流json? 之前有寫過小智ai的介紹&#xff0c;它提供了流暢且豐富的用戶語音交互能力。n8n提供了靈活且穩定的后臺工作流的能力&#xff0c;如果這兩個工具進行組合&#xff0c;可以打造一個好玩又好用的智能…

【DataGrip】連接達夢數據庫后,能查詢數據但是看不到表的幾種情況分析,達夢數據庫驅動包下載DmJdbcDriver18.jar

大概分為以下兩類情況&#xff0c;配置問題和驅動包的問題 DmJdbcDriver18.jar點擊下載 1.配置了表不可見 左上角點擊過濾的圖標&#xff0c;把table勾上就可以 2.Introspect using JDBC metadata 未勾選 1&#xff09;老版本的DataGrip 在options選項下 3&#xff09;新版…

全面解析 `strncasecmp` 字符串比較函數

1) 函數的概念與用途 strncasecmp 是 C 語言中一個非常實用的字符串處理函數&#xff0c;它執行不區分大小寫的字符串比較&#xff0c;但只比較前 n 個字符。這個函數的名字來源于"string n case-compare"&#xff08;字符串前n個字符不區分大小寫比較&#xff09;。…

高級SQL優化 | 告別 Hive 中 GROUP BY 的大 KEY 數據傾斜!PawSQL 自適應優化算法詳解

數據傾斜讓你的Hive查詢慢如蝸牛&#xff1f;單個熱點分組拖垮整個集群&#xff1f;PawSQL獨家算法GroupSkewedOptimization來拯救&#xff01;&#x1f3af; 痛點直擊&#xff1a;當數據傾斜遇上分組操作想象這樣一個場景&#xff1a;你的電商平臺有1000萬VIP用戶訂單和100萬普…

HUMS 2023齒輪箱數據分析

HUMS問答&#xff1a;https://humsconference.com.au/HUMS2023datachallenge/questions-answers.html 數據集申請&#xff1a;https://www.dst.defence.gov.au/our-technologies/helicopter-main-rotor-gearbox-planet-gear-fatigue-crack-propagation-test 歷年試卷&#xff1…

智慧工地:科技賦能與管理革新下的建筑業新圖景

隨著數字技術的深度滲透&#xff0c;智慧工地正以“技術落地 行業變革 管理創新”的三重突破&#xff0c;重構施工場景的核心邏輯&#xff0c;推動建筑業從傳統粗放式發展向精細化、智能化轉型。一、技術落地&#xff1a;用科技筑牢安全防線&#xff0c;提升施工效率技術是智…

[docker/大數據]Spark快速入門

[docker/大數據]Spark快速入門1. 概述 1.1 誕生背景Spark官方文檔&#xff1a;https://spark.apache.ac.cn/docs/latest/Spark 由加州大學伯克利分校 AMP 實驗室于 2009 年開發&#xff0c;2013 年成為 Apache 頂級項目&#xff0c;旨在解決 MapReduce 的三大核心問題&#xff…

CSS 定位的核心屬性:position

&#x1f9e9; 一、CSS 定位的核心屬性&#xff1a;positionposition 屬性用于定義一個元素在頁面中的定位方式&#xff0c;它決定了&#xff1a;元素在頁面中的定位規則是否脫離文檔流元素的位置是相對于誰&#xff08;父元素、瀏覽器窗口、自身等&#xff09;? 可選值如下&a…

數據結構之深入探索快速排序

基準值的選定 我們之前已經用四種不同的方式實現了快速排序&#xff0c;如果還沒有學習過的伙伴們可以看一下這篇文章哦&#xff1a;數據結構之排序大全&#xff08;3&#xff09;-CSDN博客 那我們既然已經學習了這么多種方法&#xff0c;為什么還要繼續探索快速排序呢&#…

《遞歸與迭代:從斐波那契到漢諾塔的算法精髓》

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、洛谷刷題、C/C基礎知識知識強化補充、C/C干貨分享&學習過程記錄 &#x1f349;學習方向&#xff1a;C/C方向學習者…

《LINUX系統編程》筆記p3

可重用函數不使用全局部變量&#xff0c;可以重復使用的函數.stat 命令作用&#xff1a;顯示一個文件或文件夾的“元信息”。文件基本信息文件&#xff08;File&#xff09;&#xff1a;顯示所查詢對象的名稱。大小&#xff08;Size&#xff09;&#xff1a;文件的大小&#xf…

大模型0基礎開發入門與實踐:第3章 機器的“統計學”:機器學習基礎概念掃盲

第3章 機器的“統計學”&#xff1a;機器學習基礎概念掃盲 1. 引言 想象一下&#xff0c;你是一位古代的農夫&#xff0c;畢生的經驗告訴你&#xff1a;烏云密布、燕子低飛&#xff0c;那么不久便會下雨。你并沒有學習過氣象學&#xff0c;也不懂大氣壓和水汽凝結的原理。你的“…

Java調用Ollama(curl方式)

1. 安裝Ollama Search 2. 調用 相關依賴 <dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.14</version></dependency><dependency>&…

nodejs koa框架使用

1: KOA 是express 打造的下一代web 開發框架提供更小更強的的核心功能&#xff0c;通過Promise 、async/await 進行異步編程&#xff0c;koa 可以不使用回調&#xff0c;解決了回調地獄的問題 blueBird 是nodejs 最出名的Primise 實現&#xff0c;除了實現標準的promise 之外&a…

2025年圖像處理與光學國際會議(ICIPO 2025)

2025年圖像處理與光學國際會議&#xff08;ICIPO 2025&#xff09; 2025 International Conference on Image Processing and Optics一、大會信息會議簡稱&#xff1a;ICIPO 2025 大會地點&#xff1a;中國北京 審稿通知&#xff1a;投稿后2-3日內通知 投稿郵箱&#xff1a;iac…

Kubernetes 構建高可用、高性能 Redis 集群

k8s下搭建Redis高可用1. 部署redis服務創建ConfigMap創建 Redis創建 k8s 集群外部2. 創建 Redis 集群自動創建 redis 集群手動創建 redis 集群驗證集群狀態3. 集群功能測試壓力測試故障切換測試4. 安裝管理客戶端編輯資源清單部署 RedisInsight控制臺初始化控制臺概覽實戰環境使…

文件IO的基礎操作

Java針對文件進行的操作:文件系統操作,File類(file類指定的路徑,可以是一個不存在的文件)文件內容操作 : 流對象分為兩類(1)字節流 以字節為基本的讀寫單位的 二進制文件 InputStream OutputStream(2)字符流 以字符為基本的讀寫單位的 …

【模版匹配】基于深度學習

基于深度學習的模版匹配 概述 本報告整理了2024-2025年最新的、可直接使用的模板匹配相關論文、方法和開源代碼實現。所有方法都提供了完整的代碼實現和預訓練模型&#xff0c;可以直接應用到實際項目中。 一、輕量級現代模板匹配框架 1.1 UMatcher - 4M參數的緊湊型模板匹…