網絡安全之SQL注入

文章目錄

      • SQL注入的定義
      • SQL注入為什么會成功?
      • 為什么發生SQL注入?
      • SQL注入的分析
      • SQL的注入流程
        • 判斷SQL注入點
        • 判斷注入類型
      • SQL注入的通常方法
      • 防止SQL注入

SQL注入的定義

SQL注入是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。

當應用程序使用輸入內容來構造動態sql語句以訪問數據庫時,會發生sql注入攻擊。
如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字符串來傳遞,也會發生sql注入。

理解:
現代的注入手法,其實就是利用現成的表格數據來執行非常規指令。簡單的說,利用非該段執行文本數據,代替正常數據做運算從而得到正確解。能夠實現這種操作的技術就叫做sql注入。

SQL注入為什么會成功?

Sql注入攻擊是利用是指利用設計上的漏洞,在目標服務器上運行Sql語句以及進行其他方式的攻擊,動態生成Sql語句時沒有對用戶輸入的數據進行驗證是Sql注入攻擊得逞的主要原因。

為什么發生SQL注入?

程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患
用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據或進行數據庫操作

當應用程序使用輸入內容來構造動態sql語句以訪問數據庫時,會發生sql注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字符串來傳遞,也會發生sql注入。

sql注入可能導致攻擊者使用應用程序登陸在數據庫中執行命令。
如果應用程序使用特權過高的帳戶連接到數據庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態sql命令,或者作為存儲過程的輸入參數,這些表單特別容易受到sql注入的攻擊。而許多網站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中本身的變量處理不當,使應用程序存在安全隱患。這樣,用戶就可以提交一段數據庫查詢的代碼,根據程序返回的結果,獲得一些敏感的信息或者控制整個服務器,于是sql注入就發生了。

SQL注入的分析

對于Java數據庫連接JDBC而言,SQL注入攻擊只對Statement有效,對PreparedStatement是無效的,這是因為PreparedStatement不允許在不同的插入時間改變查詢的邏輯結構。
如驗證用戶是否存在的SQL語句為:用戶名'and password='密碼'

如果在用戶名字段中輸入: 'or 1=1'或是在密碼字段中輸入:'or 1=1'
將繞過驗證,但這種手段只對只對Statement有效,對PreparedStatement無效。相對Statement有以下優點:

1.防注入攻擊
2.多次運行速度快
3.防止數據庫緩沖區溢出
4.代碼的可讀性可維護性好
這四點使得PreparedStatement成為訪問數據庫的語句對象的首選,缺點是靈活性不夠好,有些場合還是必須使用Statement。

SQL的注入流程

判斷SQL注入點

找注入點是最關鍵,也最基礎的一個環節
本質原理:
找一個需要后臺處理后提交給數據的點,所有的輸入只要和數據庫進行交互的,都有可能觸發SQL注入
一般分為三大類:
Get參數觸發SQL注入
POST參數觸發SQL注入
Cookie觸發SQL注入

例如:
在常規的鏈接的參數中(鏈接?參數)找形如?id=num的搜索框
而驗證是否存在注入點方法有很多種
最常規也是最簡單的方法,引入單引號判斷是否注入點

http://host/test.php?id=100;返回錯誤說明有可能注入
http://host/test.php?id=100 and 1=1 返回正常
http://host/test.php?id=100 and 1=2 返回錯誤

判斷注入類型

數字型注入點

http://host/test.php?id=100 and 1=1
SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1'

字符型注入點

http://host/test.php?name=man' and '1'='1 
select * from student where  sname='張三'  or 1=1 --  and password='123'
"select id from users where username = ''+username +"'"  and password = ''  + password +"'" 

在表單中username的輸入框中輸入’ or 1=1-- ,password的表單中隨便輸入一些東西,假如這里輸入123.此時我們所要執行的sql語句就變成了select id from users where username = ’ ’ or 1=1-- and password = ‘123’,我們來看一下這個sql,因為1=1是true,后面 and password = '123’被注釋掉了。

搜索型注入點 — 目前常見的

http://host//test.php?keyword=python%' and 1=1 and '%'='

內聯式SQL注入 –常用
在 SQL語句中, AND的優先級是大于 OR的
先計算 AND,然后計算 OR,所以這里我們的語句會被 OR分為兩段 SQL語句

SELECT * FROM admin WHER username=''or''='' AND password ='fuzz'SELECT * FROM admin WHER username='fuzz' AND password =''or''=''SELECT * FROM admin WHER username='fuzz' AND password =''or''=''這里我們第一句是返回失敗的,但是我們的第二句''=''是返回成功的,OR邏輯是有一個是成功就返回成功,于是我們的整個語句就會返回成功

SQL注入的通常方法

SQL注入主要分兩種方式:

一是直接將代碼插入到與SQL命令串聯在一起并使得其以執行的用戶輸入變量。上面筆者舉的例子就是采用了這種方法。由于其直接與SQL語句捆綁,故也被稱為直接注入式攻擊法。

二是一種間接的攻擊方法,它將惡意代碼注入要在表中存儲或者作為原書據存儲的字符串。在存儲的字符串中會連接到一個動態的SQL命令中,以執行一些惡意的SQL代碼。注入過程的工作方式是提前終止文本字符串,然后追加一個新的命令。如以直接注入式攻擊為例。就是在用戶輸入變量的時候,先用一個分號結束當前的語句。然后再插入一個惡意SQL語句即可。由于插入的命令可能在執行前追加其他字符串,因此攻擊者常常用注釋標記“—”來終止注入的字符串。執行時,系統會認為此后語句位注釋,故后續的文本將被忽略,不背編譯與執行。

注入大致方法:  
  先猜表名 And (Select count(*) from 表名)<>0
  猜列名 And (Select count(列名) from 表名)<>0
  或者也可以這樣

and exists (select * from 表名)
and exists (select 列名 from 表名)

返回正確的,那么寫的表名或列名就是正確
這里要注意的是,exists這個不能應用于猜內容上,例如and exists (select len(user) from admin)>3這樣是不行的

防止SQL注入

防止SQL注入,我們需要注意以下幾個要點:

1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和 雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
6.sql注入的檢測方法一般采取輔助軟件或網站平臺來檢測,軟件一般采用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻擊等。

數據庫操作,是觸發技術使用的關鍵。
圍繞這一點,可以想到許多系統層面的防護。
第一點就是,避免使用普適性的名詞去做主要關鍵詞,可以做適當的修改變形。sql注入其實也是技術門檻比較高的,它需要破解者對于項目網站本身就有一定的了解。
第二點可以考慮加強過濾手段,通過對于主要關鍵詞周邊風險詞的限制降低風險。根據理論模型來看,這種語句過濾可以極大程度防范技術侵入。

更多相關一
更多相關二

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

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

相關文章

4個空格和一個tab有什么區別_火花塞為什么一換就是4個?只換一個不行嗎?

火花塞不是一個經常被提及的配件&#xff0c;但如果火花塞老化&#xff0c;車輛的整體性能將受到影響&#xff0c;更換火花塞其實也是日常保養的一部分&#xff0c;就像換機油和三濾一樣。不知道大家是否注意到&#xff0c;在做完保養之后&#xff0c;維修師傅會幫你檢查一下火…

小型云臺用的是什么電機_直流電機的工作原理是什么?未來的電動車都會用直流電機嗎?...

說起直流電機&#xff0c;其實我們每個人&#xff0c;每天都在用。是嗎&#xff1f;別驚訝&#xff0c;是的。手機&#xff0c;我們每天都在用&#xff0c;有消息或者有電話時&#xff0c;手機就開始振動。這個振動就是用直流電機來實現的。當然&#xff0c;直流電機在其他領域…

C語言、C++學習路線

文章目錄C語言 C語言大綱 C語言知識點總結圖 C語言視頻推薦基礎篇進階篇速成篇基礎入門之游戲實戰篇C語言核心鏈表文檔教程視頻教程文件C語言實例C C大綱崗位分析 C與C 編程基礎四大件數據結構與算法計算機網絡操作系統設計模式C視頻推薦C語言 C語言大綱 C語言知識點總結圖 C語…

2020年日歷_2020年《故宮日歷》發布:濃縮紫禁城600年滄桑

2020年《故宮日歷》。中國網記者 劉維佳/攝中國網8月26日訊(記者 劉維佳) 2020年《故宮日歷》發布會今日在故宮博物院建福宮舉行。2020年為庚子鼠年&#xff0c;亦正值紫禁城建成六百周年&#xff0c;因此&#xff0c;2020年《故宮日歷》是為紀念紫禁城六百周年而特別呈現。故宮…

計算機二級(C語言)備考

文章目錄考試詳情一點建議公共基礎知識&#xff08;10分&#xff09;著重點資源視頻教程文檔練習題考試詳情 一、選擇題 40分 二、程序填空題 18分 三、程序修改題 18分 四、程序設計題 24分 考試時間&#xff1a;120分鐘 一點建議 多練習題目&#xff0c;多思考&#xff0c…

jav簡單的個人博客網站代碼_每個人都可以擁有的個人博客網站

題記------去過的地方越多&#xff0c;越知道自己想回到什么地方去&#xff01;雨又下了一夜&#xff0c;曾經多少次覺得下雨天是最適合睡覺的天氣。而最近的雨&#xff0c;總感覺有些嘈雜&#xff0c;總怕吵醒遠方睡夢中的星&#xff0c;晨。以至于翻來覆去睡不著。但是&#…

實用的編程網站—良好的開端

文章目錄在線編程網站編程資源網編程源碼網編程學習網在線編程網站 nyist_acm 領扣 力扣 洛谷 計蒜客 牛客網 藍橋杯ACM在線 HUSTOJ LiberOJ EduCoder PIPIOJ Codeabbey C語言網 hihocoder 賽碼網 編程資源網 搜云盤 IT視頻學習網 798資源網 Java知識分享網…

泰禾光電機器人研發_機器之眼 | 3D相機能讓機器人看見什么?

“中國制造2025”&#xff0c;其核心環節之一就是機器人智能化。視覺技術代表了機器的眼睛和大腦&#xff0c;機器視覺將使得機器人智能化變成現實。為了使機器人能夠勝任更復雜的工作&#xff0c;機器人不但要有更好的控制系統&#xff0c;還需要更多地感知環境的變化。機器人…

云計算學習路線

文章目錄說明云計算學習路線云計算技術支撐Linux 基礎環境搭建文檔教程Linux學習視頻推薦云計算基礎知識docker容器KVM&#xff08;推薦一本書《深度實踐KVM》&#xff09;OpenStackK8S&#xff08;Kubernetes&#xff09;說明 云計算和大數據未來十年必然趨勢成為社會的生產資…

c語言將數組初始化為1_c語言之數組初始化

c語言之數組初始化在c語言中&#xff0c;我們經常會有兩種初始化的方式(一維數組)&#xff1a;方式一int arr[20];這種方式是在c語言編譯階段對數組分配了固定的內存空間&#xff0c;但沒有為c語言賦值&#xff0c;此時&#xff0c;對該數組進行打印輸出的話&#xff0c;則會輸…

算法學習路線圖

關于算法的討論 如何系統地學習數據結構與算法&#xff1f;| 自學數據結構與算法最全路線 編程指北 動態規劃-背包問題 最小生成樹(MST)—prim和kruskal算法 用回溯法(backtracking algorithm)求解N皇后問題(N-Queens puzzle) n皇后問題[分支限界法] 克魯斯卡爾算法(Krus…

python中以表示語塊_scikitlearn:將數據擬合成塊與將其全部擬合到on

這取決于您使用的矢量器。在CountVectorizer統計文檔中單詞的出現次數。它為每個文檔輸出一個(n_words, 1)向量&#xff0c;其中包含每個單詞在文檔中出現的次數。n_words是文檔中的單詞總數(也就是詞匯表的大小)。它也適合詞匯表&#xff0c;這樣您就可以反省模型(看看哪個詞是…

大數據學習路線

文章目錄學習教程&#xff08;不全&#xff09;文檔教程大數據實戰項目項目源碼廣義的定義 &#xff1a;是指物理世界到數字世界的映射和提煉。通過發現其中的數據特征&#xff0c;從而做出提升效率的決策行為。 狹義的定義&#xff1a;通過獲取存儲、分析&#xff0c;從大容量…

input層級高 小程序_獲客、引流成本越來越高?開發小程序:低成本獲客、引流...

在最近幾年時間中&#xff0c;各行各業都有不少企業、商家反應&#xff1a;獲客成本越來越高。對此&#xff0c;小編的建議是&#xff1a;去開發一個微信小程序。這是為什么&#xff1f;下面將讓帶著豐富小程序開發以及運營經驗的&#xff0c;來自上海數字商圈的產品經理&#…

聚寬macd底背離_許多散戶不知道:MACD月線金叉,MACD月金叉都會帶來一波牛市!...

MACD吸收了移動平均線的優點。移動平均線的買賣交易在趨勢明顯時效果很好&#xff0c;但是一旦遇到牛皮盤整行情&#xff0c;移動平均線所發出的信號就過于頻繁而且極其不準確&#xff0c;在期貨市場的保證金杠桿效應下容易使投資者遭受致命損失。而MACD恰好能做到&#xff1a;…

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable)

Ubuntu 安裝軟件報錯問題 錯誤信息如下&#xff1a; E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable) 解決方案&#xff1a; sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lockinit 6 #重啟apt-get…

ubuntu 報錯E: Unable To Locate Package Software-properties-common

Ubuntu16.04 安裝docker-ce [傻瓜教程] 錯誤描述&#xff1a; Unable To Locate Package Software-properties-common 解決方案&#xff1a; apt-get updateapt-get install python-software-propertiesapt-get install apt-fileapt-file updateapt-get install software-p…

dbscan算法中 參數的意義_無監督機器學習中,最常見的聚類算法有哪些?

在機器學習過程中&#xff0c;很多數據都具有特定值的目標變量&#xff0c;我們可以用它們來訓練模型。但是&#xff0c;大多數情況下&#xff0c;在處理實際問題時&#xff0c;數據不會帶有預定義標簽&#xff0c;因此我們需要開發能夠對這些數據進行正確分類的機器學習模型&a…

大數據與云計算的理解與基本認識

文章目錄大數據海量數據產生的原因?大數據的出現與發展為我們生活帶來了什么&#xff1f;傳統的數據處理&#xff0c;存儲手段在海量數據當中有什么劣勢&#xff1f;大數據數據存儲手段&#xff1f;大數據分析在商業上的應用&#xff1f;云計算什么是虛擬化&#xff1f;虛擬化…

造完家怎么拆東西_吸頂燈燈管怎么拆?吸頂燈拆燈管的注意事項有哪些?

吸頂燈出現故障&#xff0c;檢查是因為燈管給壞了&#xff0c;就需要對吸頂燈的燈光進行拆卸&#xff0c;那么&#xff0c;吸頂燈燈管怎么拆?打算將吸頂燈的燈管給拆了的時候&#xff0c;也應該要能夠清楚具體拆卸的事宜&#xff0c;保證拆卸效果&#xff0c;吸頂燈拆燈管的注…