WEB三大攻擊之 SQL注入與防護

2021-09-10 07:49:03 字數 1466 閱讀 4656

from:

定義

sql攻擊(英語:sql injection),簡稱注入攻擊,是發生於應用程式之資料庫層的安全漏洞。簡而言之,是在輸入的字串之中注入sql指令,在設計不良的程式當中忽略了檢查,那麼這些注入進去的指令就會被資料庫伺服器誤認為是正常的sql指令而執行,因此遭到破壞或是入侵。

只要是支援批處理sql指令的資料庫伺服器,都有可能受到此種手法的攻擊。

誘因

在應用程式中若有下列狀況,則可能應用程式正暴露在sql injection的高風險情況下:

下面的gif展示的是sql注入的示意:

**解釋

假設某個**的登入驗證的sql查詢**為

select * from `user` where (username = 'username') and (password = 'password');
如果惡意將username和password傳入的值設定為:

username = '1' or '1'='1';

password = '1' or '1'='1';

即為:

select * from user where (username = '1' or '1'='1') and (password = '1' or '1'='1');
由於or 1=1 總是為真(true),原sql語句等同於:

select * from user;
危害資料表中的資料外洩,例如個人機密資料,賬戶資料,密碼等。

資料結構被黑客探知,得以做進一步攻擊(例如select * from sys.tables)。

資料庫伺服器被攻擊,系統管理員賬戶被竄改(例如alter login sa with password='******')。

獲取系統較高許可權後,有可能得以在網頁加入惡意鏈結、惡意**以及xss等。

經由資料庫伺服器提供的作業系統支援,讓黑客得以修改或控制作業系統(例如xp_cmdshell "net stop iisadmin"可停止伺服器的iis服務)。

破壞硬碟資料,癱瘓全系統(例如xp_cmdshell "format c:")。

防護

在設計應用程式時,完全使用引數化查詢(parameterized query)來設計資料訪問功能。

在組合sql字串時,先針對所傳入的引數作字元取代(將單引號字元取代為連續2個單引號字元)。

使用其他更安全的方式連線sql資料庫。例如已修正過sql注入問題的資料庫連線元件。

使用sql防注入框架開發。

jdbc之防sql注入攻擊

1 sql注入攻擊 由於dao中執行的sql語句是拼接出來的,其中有一部分內容是由使用者從客戶端傳入,所以當使用者傳入的資料中包含sql關鍵字時,就有可能通過這些關鍵字改變sql語句的語義,從而執行一些特殊的操作,這樣的攻擊方式就叫做sql注入攻擊 preparedstatement利用預編譯的機制...

注入攻擊之sql注入

在1998年,一位名為rfp的黑客發表了一篇題為 nt web technology vulnerabilities 的文章 注入攻擊的兩個條件 1 使用者能夠克制資料的輸入 在這裡,使用者能夠控制變數 2 原本要執行的 憑藉了使用者的輸入 一般輸入乙個 單引號就能引起執行查詢語句的語法錯誤,有些伺...

sql防注入防範sql注入式攻擊js版本

asp版的防範sql注入式攻擊 response.write alert 非法位址!response.write location.href error.asp response.write end if 以下是較為簡單的防範方法,這些都是大家比較熟悉的方法,我就是 過來。希望能給你一點幫助 主要是...