SQL注入是什麼?如何防止?

2020-12-27 php中文網

SQL注入是一種注入攻擊,可以執行惡意SQL語句。下面本篇文章就來帶大家了解一下SQL注入,簡單介紹一下防止SQL注入攻擊的方法,希望對大家有所幫助。

什麼是SQL注入?

SQL注入(SQLi)是一種注入攻擊,,可以執行惡意SQL語句。它通過將任意SQL代碼插入資料庫查詢,使攻擊者能夠完全控制Web應用程式後面的資料庫伺服器。攻擊者可以使用SQL注入漏洞繞過應用程式安全措施;可以繞過網頁或Web應用程式的身份驗證和授權,並檢索整個SQL資料庫的內容;還可以使用SQL注入來添加,修改和刪除資料庫中的記錄。

SQL注入漏洞可能會影響使用SQL資料庫(如MySQL,Oracle,SQL Server或其他)的任何網站或Web應用程式。犯罪分子可能會利用它來未經授權訪問用戶的敏感數據:客戶信息,個人數據,商業機密,智慧財產權等。SQL注入攻擊是最古老,最流行,最危險的Web應用程式漏洞之一。

SQL注入攻擊的類型

SQL注入攻擊可以通過多種方式執行。在選擇特定攻擊方法之前,攻擊者可能會觀察系統的行為。

帶內注入

這是典型的攻擊,攻擊者可以通過相同的通信通道發起攻擊並獲得結果。這是通過兩種帶內技術完成的:

● 基於錯誤的SQL注入:從顯示的錯誤消息中獲取有關資料庫的信息

● 基於聯合的SQL注入:依賴於攻擊者能夠將UNION ALL被盜信息的結果與合法結果連接起來。

這兩種技術都依賴於攻擊者修改應用程式發送的SQL,以及瀏覽器中顯示的錯誤和返回的信息。如果應用程式開發人員或資料庫開發人員無法正確地參數化他們在查詢中使用的值,那麼它會成功。兩者都是試錯法,可以檢測到錯誤。

盲注入

也稱為推理SQL注入,盲注入攻擊不會直接從目標資料庫中顯示數據;相反,攻擊者會仔細檢查行為中的間接線索。HTTP響應中的詳細信息,某些用戶輸入的空白網頁以及資料庫響應某些用戶輸入需要多長時間,這些都可以是線索,具體取決於攻擊者的目標。他們還可以指向攻擊者嘗試的另一個SQLi攻擊途徑。

帶外注入

這種攻擊有點複雜,當攻擊者無法在單個直接查詢 - 響應攻擊中實現其目標時,攻擊者可能會使用此攻擊。通常,攻擊者會製作SQL語句,這些語句在呈現給資料庫時會觸發資料庫系統創建與攻擊者控制的外部伺服器的連接。以這種方式,攻擊者可以收集數據或可能控制資料庫的行為。

二階注入就是一種帶外注入攻擊。在這種情況下,攻擊者將提供SQL注入,該注入將由資料庫系統的單獨行為存儲和執行。當二級系統行為發生時(它可能類似於基於時間的作業或由其他典型管理員或用戶使用資料庫觸發的某些事情)並且執行攻擊者的SQL注入,那就是當「伸出」到系統時攻擊者控制發生了。

如何防止SQL注入攻擊?

以下建議可以幫助防止SQL注入攻擊成功:

不要使用動態SQL

避免將用戶提供的輸入直接放入SQL語句中;最好使用準備好的語句和參數化查詢,這樣更安全。

不要將敏感數據保留在純文本中

加密存儲在資料庫中的私有/機密數據;這樣可以提供了另一級保護,以防攻擊者成功地排出敏感數據。

限制資料庫權限和特權

將資料庫用戶的功能設置為最低要求;這將限制攻擊者在設法獲取訪問權限時可以執行的操作。

避免直接向用戶顯示資料庫錯誤

攻擊者可以使用這些錯誤消息來獲取有關資料庫的信息。

對訪問資料庫的Web應用程式使用Web應用程式防火牆(WAF)

這為面向Web的應用程式提供了保護,它可以幫助識別SQL注入嘗試;根據設置,它還可以幫助防止SQL注入嘗試到達應用程式(以及資料庫)。

定期測試與資料庫交互的Web應用程式

這樣做可以幫助捕獲可能允許SQL注入的新錯誤或回歸。

將資料庫更新為最新的可用修補程序

這可以防止攻擊者利用舊版本中存在的已知弱點/錯誤。

總結:SQL注入是一種流行的攻擊攻擊方法,但是通過採取適當的預防措施,例如確保數據加密,保護和測試Web應用程式,以及您是最新的補丁程序,您可以採取有意義的步驟來保持您的數據安全。

以上就是什麼是SQL注入?如何防止SQL注入攻擊?的詳細內容,更多請關注php中文網其它相關文章!

相關焦點

  • SQL注入攻擊詳解
    參考:https://blog.csdn.net/yue510/article/details/924317481、什麼是Sql注入攻擊SQL注入攻擊通過構建特殊的輸入作為參數傳入
  • 徹底幹掉噁心的 SQL 注入漏洞, 一網打盡!
    這裡需要注意的是,使用了PreparedStatement 並不意味著不會產生注入,如果在使用PreparedStatement之前,存在拆分sql語句,那麼仍然會導致注入,如// 拼接 sqlString sql = "SELECT *
  • Myql SLEEP函數和SQL注入
    那麼該操作有什麼用?為什麼要用它呢?通常,有一些操作需要一段時間來操作,操作時候需要暫時操作或者更新(比如數據鎖,比如記錄一個Pos點後,備份一個從庫),當然也有可能是黑客攻擊。sqlmap是使用Python編寫的一款資料庫sql注入掃描工具,目前支持常見的mysql、oracel、postgresql、sql server,access,db2,sqlite等數據的安全漏洞(sql注入)。
  • 什麼是SQL 注入?
    SQL注入是一種非常常見的資料庫攻擊手段,SQL注入漏洞也是網絡世界中最普遍的漏洞之一。大家也許都聽過某某學長通過攻擊學校資料庫修改自己成績的事情,這些學長們一般用的就是SQL注入方法。SQL注入其實就是惡意用戶通過在表單中填寫包含SQL關鍵字的數據來使資料庫執行非常規代碼的過程。簡單來說,就是數據「越俎代庖」做了代碼才能幹的事情。
  • SQL 注入攻防入門詳解
    這幾天把sql注入的相關知識整理了下,希望大家多多提意見。(對於sql注入的攻防,我只用過簡單拼接字符串的注入及參數化查詢,可以說沒什麼好經驗,為避免後知後覺的犯下大錯,專門查看大量前輩們的心得,這方面的資料頗多,將其精簡出自己覺得重要的,就成了該文)下面的程序方案是採用 ASP.NET + MSSQL,其他技術在設置上會有少許不同。
  • SQL注入、XSS以及CSRF分別是什麼?
    什麼是SQL注入、XSS和CSRF?本篇文章就來帶大家了解一下SQL注入、XSS和CSRF,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。SQL注入SQL注入是屬於注入式攻擊,這種攻擊是因為在項目中沒有將代碼與數據(比如用戶敏感數據)隔離,在讀取數據的時候,錯誤的將數據作為代碼的一部分執行而導致的。典型的例子就是當對SQL語句進行字符串拼接的時候,直接使用未轉義的用戶輸入內容作為變量。
  • 淺談開啟magic_quote_gpc後的sql注入攻擊與防範
    ';這時候通過url地址欄輸入的單引號(')將被加上反斜線,該sql語句將失效。對於數字型注入攻擊,必須在任何的數字型參數放入資料庫之前使用intval()對參數進行強制轉換成數字,從而可以斷絕數字型注入漏洞的產生。
  • 特殊場景的sql注入思路
    上一篇介紹了sql注入的基礎知識以及手動注入方法,但是在實際的環境中往往不會像靶場中那樣簡單。今天我就來為大家介紹一種特殊場景的sql注入思路。用戶名與密碼分開驗證的情況第一個場景我們以We Chall平臺的Training: MySQL II 一題為例。
  • SQL注入的幾種類型和原理
    在上一章節中,介紹了SQL注入的原理以及注入過程中的一些函數,但是具體的如何注入,常見的注入類型,沒有進行介紹,這一章節我想對常見的注入類型進行一個了解
  • Java web安全黑客攻防之sql注入
    1.什麼是sql注入sql注入通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙伺服器執行惡意的SQL命令通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙伺服器執行惡意的SQL
  • 何謂SQL 注入,這個漫畫告訴你
    轉自:https://jizhi.im/blog/post/sql_injection_intro先來看一副很有意思的漫畫:今天我們來聊一聊SQL注入相關的內容。何謂SQL注入?SQL注入是一種非常常見的資料庫攻擊手段,SQL注入漏洞也是網絡世界中最普遍的漏洞之一。大家也許都聽過某某學長通過攻擊學校資料庫修改自己成績的事情,這些學長們一般用的就是SQL注入方法。SQL注入其實就是惡意用戶通過在表單中填寫包含SQL關鍵字的數據來使資料庫執行非常規代碼的過程。
  • SQL注入常規Fuzz全記錄
    前言本篇文章是在做ctf bugku的一道sql 盲注的題(題目地址:注入題目)中運用了fuzz的思路,完整記錄整個fuzz的過程
  • web安全之SQL注入(16)——delete和like注入
    delete from users where id=14 一般情況是網站後臺的sql語句,當我們測試刪除功能是否存在注入時,一定你要是用and測試,不要使用or測試。當使用or進行測試,跟一個布爾假值,這時如果前面的條件為真,你使用or跟一個假值,只會刪除一條數據,這裡問題不大,繼續測試
  • SQL 注入常規 Fuzz 全記錄
    (給數據分析與開發加星標,提升數據技能)來自:FreeBuf.COM,作者:Conanwww.freebuf.com/articles/web/190019.html前言本文是在做ctf bugku的一道sql
  • SQL Server應用程式的高級Sql注入
    [概 要] 這篇文章討論常用的"sql注入"技術的細節,應用於流行的Ms IIS/ASP/SQL-Server平臺。這裡探討有關這種攻擊各種可以注入程序訪問數據和資料庫防範的方法。如果攻擊者可以插一系列的SQL語句進入應用程式的數據查詢時,Sql注入攻擊就可能發生。 一個典型的SQL語句是這樣的: select id, forename, surname from authors 這個查詢語句將會從'authors'表中返回'id','forename'和'surname'列的所有行。
  • desc巧用及反引號 ` SQL注入——【61dctf】 inject writeup
    $_GET['table']:"test";$table = Filter($table);mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();$sql = "select 'flag{xxx}' from secret_{$table}";$ret = sql_query($sql);echo $ret[0];?
  • 最詳細的SQL注入相關的命令整理
    /display.asp,行177、 列出當前所有的資料庫名稱:select * from master.dbo.sysdatabases 列出所有列的記錄select name from master.dbo.sysdatabases 僅列出name列的記錄8、 不需xp_cmdshell支持在有注入漏洞的SQL伺服器上運行CMD命令:create
  • Django QuerySet查詢基礎與技巧.有了她,再也不用擔心SQL注入了.
    相對直接使用SQL而言,QuerySet可以防止大部分SQL注入,而且提高代碼可讀性。畢竟Django的模型和具體表名不太一樣,需要查閱才得知表名,而且寫一大串SQL代碼可能直接把人看暈。假如碰到模型變動(改名、增刪欄位等),SQL可能又要重新調整。所以,能使用QuerySet的情況下,最好使用QuerySet。還有重要一點,QuerySet是懶惰的。
  • 在MSSQL注入中學到的新姿勢
    0x02 注入由於該注入點已經修復,所以無法復現,就簡單複述一下前期的測試過程。目標WEB程序過濾了一些常見的SQL注入關鍵字例如:SELECT、AND、CHAR()等,但是目標WEB應用程式為了防止XSS攻擊將<與>替換為空,所以利用SEL<ECT可以繞過關鍵字檢測
  • 【乾貨】SQL注入之Order-by-Leak
    $sql = "select * from user order by $inject";4. $result = $db->query($sql);5. show_fileds($result); // 講查詢結果按順序列印出來這個時候注入點在order by 後面,order by 後面是不能帶union select,而且此處也是不存在報錯注入的。唯一顯示是通過該處查詢得到的user表的所有內容。