【網絡安全】SQL注入

? ? ? ? 如果文章不足還請各位師傅批評指正!

????????想象一下,你經營著一家咖啡店,顧客可以通過店內的點單系統下單。這個系統會根據顧客的輸入,向后廚發送指令,比如“為顧客A準備一杯拿鐵”。

????????然而,如果有個不懷好意的顧客,在點單時輸入了“給我一杯拿鐵;再給所有顧客免費升級到特大杯”,那么后廚可能會按照這個指令執行,導致你的咖啡店損失慘重。

????????在網絡安全領域,這種類似的情況就是SQL注入。SQL注入是指攻擊者在Web應用程序中輸入惡意的SQL代碼片段,這些代碼片段會與原本的數據庫查詢語句合并執行,從而欺騙數據庫執行非授權的操作。就好比在正常的訂單系統中偷偷加入了一些額外的指令,讓數據庫按照攻擊者想要的方式去執行。

一、什么是 SQL 注入

????????SQL 注入是一種常見的網絡攻擊手段,它專門針對程序員在編寫代碼時的疏忽。

????????你在網上注冊了一個賬號,填寫用戶名和密碼后點擊提交。正常情況下,網站會將你輸入的信息發送到數據庫進行驗證,看看用戶名是否存在,密碼是否正確。但如果網站對用戶輸入的數據沒有進行嚴格的檢查,黑客就有機會在你輸入的內容里添加一些特殊的 SQL 語句。比如,在用戶名框里輸入 “' or '1'='1”(別小看這串字符,它可是有大 “威力” 的),這時候網站傳給數據庫的查詢語句就可能變成了 “SELECT * FROM users WHERE username = ' ' or '1'='1' AND password = ' 你輸入的密碼 '” 。由于 “1'='1” 這個條件永遠成立,黑客就能繞過密碼驗證,輕松登錄系統,獲取他們不該得到的數據,這就是 SQL 注入的可怕之處!

二、SQL 注入的類型

(一)聯合查詢注入

????????這種注入方式就像是黑客找到了網站數據顯示的 “秘密通道”。

????????當網站有明確的數據回顯位置時,黑客就能利用它來獲取各種信息。比如說,有一個學生信息查詢網站,輸入學生 ID 就能顯示學生的姓名、年齡等信息。黑客發現這個網站存在注入漏洞后,就可以通過 “order by” 語句來判斷數據庫表的列數,假設發現有 3 列。接著,他們使用 “union select” 語句,構造出類似 “-1' union select 1,user (),database () --+” 這樣的攻擊語句(這里的 “-1” 是為了讓原查詢不返回數據,“user ()” 和 “database ()” 是 SQL 函數,分別用于獲取數據庫的使用者和當前數據庫名),網站就會把數據庫的使用者和數據庫名顯示出來,黑客就這樣輕松獲取到了敏感信息。

(二)報錯注入

????????有些網站比較 “粗心”,雖然沒有給黑客提供數據回顯的位置,但卻沒有屏蔽數據庫的報錯信息,這就給了黑客可乘之機。

????????報錯注入就是利用這一點,通過一些特殊的函數讓數據庫報錯,然后從報錯信息中獲取數據。例如 “updatexml ()” 函數,黑客在訪問網站時輸入 “?id=1' and updatexml (1,concat (0x7e,(select user ()),0x7e),1) --+” ,數據庫就會報錯,而報錯信息里會顯示出當前數據庫的使用者信息。就好像黑客故意在數據庫里制造混亂,然后從混亂中找到他們想要的東西。

(三)布爾盲注

????????布爾盲注就像是黑客在和網站玩猜謎游戲。

????????當網站關閉了錯誤回顯和數據回顯,但頁面會根據輸入的對錯發生變化時,黑客就可以用這種方法。比如一個登錄頁面,正常輸入用戶名和密碼,頁面會提示 “登錄成功” 或 “用戶名或密碼錯誤” 。黑客通過構造 “and 1=1” 和 “and 1=2” 這樣的語句,如果輸入 “and 1=1” 時頁面顯示正常,輸入 “and 1=2” 時頁面有變化,就說明存在注入點。然后,他們利用 “substr ()”“ascii ()” 等函數,結合二分法來逐個猜解數據庫里的數據。這就好比黑客每次問網站一個關于數據的 “小問題”,根據網站的回答來慢慢拼湊出完整的數據。

(四)時間盲注

????????時間盲注是最 “狡猾” 的一種注入方式。

????????當網站沒有任何形式的回顯,連錯誤信息都不顯示時,黑客就會利用睡眠函數來判斷注入是否成功。在 MySQL 里有個 “Benchmark ()” 函數可以用來測試性能,黑客會構造類似 “?id=1' and if (ascii (substr (user (),1,1))>1, sleep (5),0) --+” 的語句。如果頁面加載時間明顯變長了 5 秒,就說明這個語句被執行了,也就意味著存在注入點。這就好像黑客在網站上偷偷設置了一個 “定時器”,通過觀察網站的反應時間來獲取信息。

(五)堆疊注入

????????堆疊注入在 MySQL 上不太常見,但在 Mssql 中比較多見。

????????它就像是黑客找到了一條能直接進入數據庫的 “捷徑”,可以用分號分割來執行多個語句。比如,黑客輸入 “root';DROP database user;”,服務器生成的 SQL 語句就會變成 “select * from user where name='root';DROP database user;” ,這樣第一條語句查詢數據,第二條語句就能把整個 user 數據庫刪除,危害極大。

三、注入點方式類型

(一)數字型注入

????????這種注入發生在網站對數字類型的參數處理不當的時候。

????????比如一個商品詳情頁面,URL 可能是 “xxx.com/product?id=1” ,這里的 “id” 就是數字型參數。如果網站沒有對這個參數進行嚴格驗證,黑客就可以嘗試在 “id” 參數后添加特殊的 SQL 語句,如 “xxx.com/product?id=1; DROP TABLE products;”(當然,實際情況中可能需要根據數據庫類型和網站架構進行調整),這樣就有可能導致商品信息表被刪除。

(二)字符型注入

????????字符型注入通常出現在處理字符串參數的地方,比如登錄頁面的用戶名和密碼輸入框。

????????就像前面提到的萬能密碼 “' or '1'='1” ,就是利用了字符型注入的漏洞。黑客在輸入框中輸入特殊字符和 SQL 語句,讓數據庫的查詢邏輯發生改變,從而達到非法訪問的目的。

(三)搜索型注入

????????搜索框也是黑客經常攻擊的目標。

????????當你在網站的搜索框里輸入關鍵詞時,如果網站沒有對輸入進行過濾,黑客就可以輸入特殊的 SQL 語句。比如,在搜索框輸入 “' or 1=1 --” ,原本的搜索語句可能就會變成 “SELECT * FROM articles WHERE title LIKE '%' or 1=1 -- %'” ,這樣黑客就能獲取到所有文章的信息,而不僅僅是符合搜索關鍵詞的文章。

四、如何預防SQL注入攻擊?

(一)輸入驗證

對用戶輸入的數據進行嚴格的驗證和過濾,確保輸入中不包含惡意的SQL代碼。就像咖啡店要仔細檢查顧客的訂單,確保沒有不合理的要求一樣。

(二)使用預編譯語句

預編譯語句(如PreparedStatement)可以在執行前對SQL語句進行編譯,將用戶輸入作為參數傳遞,這樣用戶輸入就不會改變SQL語句的結構,從而有效防止SQL注入。

(三)限制數據庫權限

為Web應用程序設置專用的數據庫用戶,并嚴格限制該用戶的權限,使其只能執行必要的操作。這就像是給咖啡店的員工設置權限,讓他們只能接觸和操作自己職責范圍內的事物,避免因權限過大而引發問題。

(四)隱藏錯誤信息

避免將詳細的數據庫錯誤信息直接顯示在頁面上,而是顯示友好的錯誤提示。這樣可以防止攻擊者從錯誤信息中獲取敏感信息,就像咖啡店的后廚出現問題時,不會直接把錯誤的訂單細節展示給顧客,而是由店員出面友好地解釋情況。

五、SQL相關靶場

????????用心的小伙伴可以發現我在主頁自己搭建sqllab搭建報錯,問題應該出在數據庫沖突,還沒解決,總之新手伙伴們可以試下這個在線連接,網上也可以找到相關通關教程。

????????在線靶場:https://sqli-labs.bachang.org/

????????sql-libs是一個專門用于學習和測試SQL注入的開源平臺,它提供了一系列的注入場景和關卡,幫助開發者和安全測試人員深入理解SQL注入的原理和防范方法。

? ? ? ? 再次感謝!是小白是小白是小白,如果文章不足還請師傅批評指正。感謝~

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

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

相關文章

解決Mawell1.29.2啟動SQLException: You have an error in your SQL syntax問題

問題背景 此前在openEuler24.03 LTS環境下的Hive使用了MySQL8.4.2,在此環境下再安裝并啟動Maxwell1.29.2時出現如下問題 [ERROR] Maxwell: SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f…

Oracle APEX IR報表列寬調整

目錄 1. 問題:如何調整Oracle APEX IR報表列寬 2. 解決辦法 1. 問題:如何調整Oracle APEX IR報表列寬 1-1. 防止因標題長而數據短,導致標題行的文字都立起來了,不好看。 1-2. 防止因數據太長而且中間還沒有空格,把列…

pytorch 14.3 Batch Normalization綜合調參實踐

文章目錄 一、Batch Normalization與Batch_size綜合調參二、復雜模型上的Batch_normalization表現1、BN對復雜模型(sigmoid)的影響2、模型復雜度對模型效果的影響3、BN對復雜模型(tanh)的影響 三、包含BN層的神經網絡的學習率優化…

Model.eval() 與 torch.no_grad() PyTorch 中的區別與應用

Model.eval() 與 torch.no_grad(): PyTorch 中的區別與應用 在 PyTorch 深度學習框架中,model.eval() 和 torch.no_grad() 是兩個在模型推理(inference)階段經常用到的函數,它們各自有著獨特的功能和應用場景。本文將詳細解析這兩…

Swagger go中文版本手冊

Swaggo(github.com/swaggo/swag)的注解語法是基于 OpenAPI 2.0 (以前稱為 Swagger 2.0) 規范的,并添加了一些自己的約定。 主要官方文檔: swaggo/swag GitHub 倉庫: 這是最權威的來源。 鏈接: https://github.com/swaggo/swag重點關注: README.md: 包含了基本的安裝、使用…

物聯網設備遠程管理:基于代理IP的安全固件更新通道方案

在物聯網設備遠程管理中,固件更新的安全性直接關系到設備功能穩定性和系統抗攻擊能力。結合代理IP技術與安全協議設計,可構建安全、高效的固件更新通道。 一、代理IP在固件更新中的核心作用 網絡層隱匿與路由優化 隱藏更新源服務器:通過代理I…

【C++重載操作符與轉換】句柄類與繼承

目錄 一、句柄類的基本概念 1.1 什么是句柄類 1.2 句柄類的設計動機 1.3 句柄類的基本結構 二、句柄類的實現方式 2.1 基于指針的句柄類 2.2 值語義的句柄類 2.3 引用計數的句柄類 三、句柄類與繼承的結合應用 3.1 實現多態容器 3.2 實現插件系統 3.3 實現狀態模式…

谷歌曾經的開放重定向漏洞(如今已經修復) -- noogle DefCamp 2024

題目描述: 上周,我決定創建自己的搜索引擎。這有點難,所以我背上了另一個。我也在8000端口上嘗試了一些東西。 未發現題目任何交互,但是存在一個加密js const _0x43a57f _0x22f9; (function(_0x3d7d57, _0x426e05) {const _0x16c3fa _0x22f9, _0x3187…

【C#】ToArray的使用

在 C# 中&#xff0c;ToArray 方法通常用于將實現了 IEnumerable<T> 接口的集合&#xff08;如 List<T>&#xff09;轉換為數組。這個方法是 LINQ 提供的一個擴展方法&#xff0c;位于 System.Linq 命名空間中。因此&#xff0c;在使用 ToArray 方法之前&#xff0…

資產管理平臺—chemex

1、簡介 Chemex CMDB&#xff08;Configuration Management Database&#xff09;是一個基于現代微服務架構的資產管理與自動化平臺&#xff0c;專為 IT 基礎設施與業務資產管理而設計。其核心目標是解決大規模系統運維中資產信息混亂、配置分散、數據不一致等問題&#xff0c…

【AI】mcp server是什么玩意兒

文章目錄 背景mcp server的必要性mcp server的基本概念mcp server的架構與核心組件總結 背景 劈里啪啦的整了一堆概念&#xff0c;對mcp server還是只停留在知道個詞的地步。 雖然目前大模型的對話生成能力很強&#xff0c;但是大模型&#xff08;如deepseek&#xff09;并不能…

c# 數據結構 樹篇 入門樹與二叉樹的一切

事先聲明,本文不適合對數據結構完全不懂的小白 請至少學會鏈表再閱讀 c# 數據結構 鏈表篇 有關單鏈表的一切_c# 鏈表-CSDN博客 數據結構理論先導:《數據結構&#xff08;C 語言描述&#xff09;》也許是全站最良心最通俗易懂最好看的數據結構課&#xff08;最遲每周五更新~~&am…

《Cookie Cutter》中2000多張精靈表與10000個2D光源的管理之道

一個小團隊如何在多個平臺上以優秀的效果展示手繪動畫&#xff1f;Subcult Joint 工作室給出了答案。他們用六年時間開發出了游戲《Cookie Cutter》。游戲中使用了數千個使用傳統動畫技術制作的高分辨率資產&#xff0c;而且這些資產都在 Unity 中進行了優化。由于工作室需要在…

什么是實景VR?實景VR應用場景

實景VR&#xff0c;即基于真實場景的虛擬現實技術&#xff0c;是利用計算機技術生成三維環境&#xff0c;以模擬并再現真實世界場景的技術。 用戶通過佩戴VR設備&#xff08;如VR頭盔、手柄等&#xff09;或通過電腦設備&#xff0c;可以沉浸在一個高度仿真的虛擬環境中&#…

內核性能測試(60s不丟包性能)

以xGAP-200-SE7K-L&#xff08;雙口10G&#xff09;在飛騰D2000上為例&#xff08;單通道最高性能約2.8Gbps) 單口測試 0口&#xff1a; tcp&#xff1a; taskset -c 4 iperf -c 1.1.1.1 -i 1 -t 60 -p 60001 taskset -c 4 iperf -s -i 1 -p 60001 udp&#xff1a; taskse…

58. 區間和

題目鏈接&#xff1a; 58. 區間和 題目描述&#xff1a; 給定一個整數數組 Array&#xff0c;請計算該數組在每個指定區間內元素的總和。 輸入描述 第一行輸入為整數數組 Array 的長度 n&#xff0c;接下來 n 行&#xff0c;每行一個整數&#xff0c;表示數組的元素。隨后…

C#進階(2)stack(棧)

前言 我們前面介紹了ArrayList,今天就介紹另一種數據結構——棧。 這是棧的基本形式,博主簡單畫了一下,你看個意思就行,很明顯,這種數據有一種特征:先進后出。因為先進來的數據會在下面,下面是密閉的,所以只能取后面進來的。 C#為我們封好了這種數據結構,我們不用擔…

汽車工廠數字孿生實時監控技術從數據采集到三維驅動實現

在工業智能制造推動下&#xff0c;數字孿生技術正成為制造業數字化轉型的核心驅動力。今天詳細介紹數字孿生實時監控技術在汽車工廠中的應用&#xff0c;重點解析從數據采集到三維驅動實現的全流程技術架構&#xff0c;并展示其在提升生產效率、降低成本和優化決策方面的顯著價…

git|gitee倉庫同步到github

參考&#xff1a;一次提交更新兩個倉庫&#xff0c;Get 更優雅的 GitHub/Gitee 倉庫鏡像同步 文章目錄 進入需要使用鏡像功能的倉庫&#xff0c;進入「管理」找到「倉庫鏡像管理」選項&#xff0c;點擊「添加鏡像」按鈕綁定github綁定成功后再次點擊添加鏡像如何申請 GitHub 私…

原生小程序+springboot+vue+協同過濾算法的音樂推薦系統(源碼+論文+講解+安裝+部署+調試)

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統背景 在數字音樂產業迅猛發展的當下&#xff0c;Spotify、QQ 音樂、網易云音樂等音樂平臺的曲…