日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

SQL注入簡介

通俗的講,SQL注入就是惡意黑客或者競爭對手利用現(xiàn)有的B/S或者C/S架構(gòu)的系統(tǒng),將惡意的SQL語句通過表單等傳遞給后臺SQL數(shù)據(jù)庫引擎執(zhí)行。比如,一個黑客可以利用網(wǎng)站的漏洞,使用SQL注入的方式取得一個公司網(wǎng)站后臺的所有數(shù)據(jù)。試想一下,如果開發(fā)人員不對用戶傳遞過來的輸入進行過濾處理,那么遇到惡意用戶的時候,并且系統(tǒng)被發(fā)現(xiàn)有漏洞的時候,后果將是令人難以想象的。最糟糕的是攻擊者拿到了數(shù)據(jù)庫服務(wù)器最高級的權(quán)限,可以對整個數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)做任何操作。

通常情況下,SQL注入攻擊一般分為以下幾個步驟:

  • 判斷WEB環(huán)境是否可以注入SQL。對于一個傳統(tǒng)的WEB網(wǎng)頁來說,如果是一個簡單的靜態(tài)頁面,比如地址為http://www.news.com/100.html的網(wǎng)頁,這是一個簡單的靜態(tài)頁面,一般不涉及對數(shù)據(jù)庫的查詢。而如果這個網(wǎng)頁的網(wǎng)址變成了:http://www.news.com/news.asp?id=100 那么,這就是一個根據(jù)主鍵id來查詢數(shù)據(jù)的動態(tài)網(wǎng)頁了。攻擊者往往能夠在 id=100的后面加上一些自己的SQL,用來“欺騙”過應(yīng)用程序。
  • 尋找SQL注入點。當攻擊者確定某個頁面可以使用SQL注入之后,他一般會尋找可以SQL注入的點。而這些點往往就是網(wǎng)頁或者應(yīng)用程序中的用于向服務(wù)器發(fā)送用戶數(shù)據(jù)的表單了。一般的流程是,客戶端通過這些表單發(fā)送一些用戶信息的字段,比如用戶名和密碼,接著服務(wù)器就會根據(jù)這些字段去查詢數(shù)據(jù)庫。而如果用戶輸入了一些非法的字符,比如’這個符號,那么在SQL解析的時候,解析的結(jié)果可能并不是應(yīng)用開發(fā)人員想象中那樣。
  • 尋找系統(tǒng)的后臺。這一點就建立在破壞者對整個系統(tǒng)的了解程度上面了,如果攻擊者對整個系統(tǒng)了如指掌,那么實現(xiàn)攻擊也就是一件很簡單的事情了。
  • 入侵和破壞。當攻擊者攻破系統(tǒng)之后,整個系統(tǒng)從某種意義上來講已經(jīng)失去意義了。

SQL注入案例

一個簡單的php登錄驗證SQL注入

比如一個公司有一個用來管理客戶的客戶管理系統(tǒng),在進入后臺進行管理的時候需要輸入用戶名和密碼。

假設(shè)在客戶端傳給服務(wù)器的字段分別為用戶名username和密碼password,那么如果用來處理登錄的服務(wù)器端代碼對用戶的輸入做以下處理:

SpringMVC是如何利用攔截器防止SQL注入

 

上面的PHP代碼就是首先獲取客戶端POST過來的填寫在表單里面的用戶名和密碼,接著要MySQL去執(zhí)行下面這條SQL語句:

SELECT `id` FROM `users` WHERE `username` = username AND `password` = password;

可以看到上面的代碼沒有對用戶的輸入做任何的過濾,這是非常容易遭到黑客攻擊的。

比如,一個用戶在輸入用戶名的輸入框里面輸入了

user’;SHOW TABLES;--

那么就會解析為下面的SQL:

SELECT `id` FROM `users` WHERE `username` = ‘user’;SHOW TABLES;-- AND `password` = password;

可以看到被解析的SQL被拆分為了2條有用的SQL:

(1)SELECT `id` FROM `users` WHERE `username` = ‘user’;
(2)SHOW TABLES;

而后面驗證密碼的部分就被注釋掉了。這樣攻擊者就輕松的獲得了這個數(shù)據(jù)庫里面的所有表的名字。同樣的道理,如果攻擊者在輸入框里面輸入:

’;DROP TABLE [table_name];--

那么,這一張表就被刪除了,可見后果是非常嚴重的。

而用戶如果在用戶名輸入框里面輸入了:user’or 1=1--

那么會被解析成:

SELECT `id` FROM `users` WHERE `username` = ‘user’
or 1=1-- AND `password` = password;

這里可以看到1=1永遠為真,這樣不用輸入用戶名就直接可以登入系統(tǒng)了。

一個ASP新聞動態(tài)頁面的id查詢

比如有一個新聞網(wǎng)站的動態(tài)頁面是這種格式:

http://www.news.com/news.asp?id=100

那么當用戶在瀏覽器的地址框里面輸入

http://www.news.com/news.asp?id=100;and user>0

那么如果這個網(wǎng)站的數(shù)據(jù)庫用的是SQL Server的話,那么SQL Server在解析的時候,由于user是SQL Server的一個內(nèi)置變量,它的值就是當前連接數(shù)據(jù)庫的用戶,那么SQL在執(zhí)行到這里的時候會拿一個類型為nvarchar的和一個int類型的比較。比較過程中就必然涉及類型的轉(zhuǎn)化,然而不幸的是,轉(zhuǎn)化過程并不是一帆風(fēng)順,出錯的時候SQL Server將會給出類似將nvarchar值”aaa”轉(zhuǎn)為為int的列時發(fā)生語法錯誤。這個時候攻擊者就輕松的獲得了數(shù)據(jù)庫的用戶名。

SpringMVC攔截器防止SQL注入

為了有效的減少以及防止SQL注入的攻擊,開發(fā)人員在開發(fā)的時候一定不要期待用戶的輸入都是合理的,當用戶輸入完畢之后,應(yīng)該嚴謹?shù)膶τ脩籼峤坏臄?shù)據(jù)進行格式上的檢查以及過濾,盡可能的減少被注入SQL 的風(fēng)險。

一般來說,不同的服務(wù)器端語言都有不同的解決方案。比如拿中小型企業(yè)采用得最多的PHP語言來說,PHP的官方就為開發(fā)者提供了這樣的一些函數(shù),比如mysql_real_escape_string()等。

接下來會詳細介紹如何通過SpringMVC的攔截器實現(xiàn)防止SQL注入的功能。

這里以我的大數(shù)據(jù)人才簡歷庫的攔截器為例。

自定義攔截器類SqlInjectInterceptor實現(xiàn)HandlerInterceptor接口

核心處理方法

SpringMVC是如何利用攔截器防止SQL注入

 

配置攔截器

SpringMVC是如何利用攔截器防止SQL注入

 

SQL注入總結(jié)

安全問題從古至今都有著非常高的關(guān)注度,如今互聯(lián)網(wǎng)高速發(fā)達,各種網(wǎng)絡(luò)應(yīng)用層出不窮。不管是現(xiàn)在炙手可熱的云計算和大數(shù)據(jù),還是傳統(tǒng)的B/S或者C/S架構(gòu)的網(wǎng)絡(luò)應(yīng)用,數(shù)據(jù)的安全性是至關(guān)重要的。從應(yīng)用層面來講,網(wǎng)絡(luò)應(yīng)用的開發(fā)者可以通過完善軟件的架構(gòu),盡量減少因為BUG而導(dǎo)致的數(shù)據(jù)泄漏的問題。開發(fā)者可以不斷的審視與完善自己的系統(tǒng),站在攻擊者的角度上去開發(fā)某些關(guān)鍵的安全性要求比較高的環(huán)節(jié),如銀行支付部分等,這樣能夠在一定程度上面減少SQL注入等應(yīng)用層面攻擊數(shù)據(jù)庫的風(fēng)險。

分享到:
標簽:注入 SQL
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定