日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具

發布時間:2025/4/14 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.關于SQL Injection
迄今為止,我基本沒有看到誰寫出一篇很完整的文章,或者說很成熟的解決方案(能做到 的人肯定很多,問題是沒有流傳開來,很遺憾) 我簡單的說幾點,希望啟發大家思考,起到拋磚引玉的作用

一、SQL Injection的原理
SQL Injection的實現方法和破壞作用有很多,但萬變不離其宗,其原理可以概括為一句話 :SQL Injection就是向服務器端提交事先準備好的數據,拼湊出攻擊者想要的SQL語句,以改變數據庫操作執行計劃。
我想,這么說也許不算精煉,但意思應該很明確了,這句話主要包含這么三層意思:
1.攻擊者通過何種途徑注入?
存在SQL Injection漏洞的地方都是應用程序需要根據客戶端環境構造SQL語句的地方。由此可以推論,只要存在"客戶端數據替換預定義變量"的地方,就有可能被注入。
客戶端提交數據可以有很多種方式:GET,POST,Client-Agent,Cookie,Server Enviroment...
2.攻擊者為什么可以將它想要的語句"注入"?
因為服務器端應用程序采用拼湊(請特別留意這個詞)SQL語句的方式,這使得攻擊者有機會在提交的數據中包含SQL關鍵字或者運算符,來構造他們想要的語句。
3.SQL Injection最終結果是什么?
改變數據庫操作執行計劃。
這個結果不一定是惡意的,只要你的SQL語句沒有按照你預期的計劃(plan)執行,那么就 可以視為被注入了,不管提交數據的人是不是惡意的。
設有這樣的sql語句:
update tableName set columnName1 = " $Client_Submit_Data " where PK_ID = 1234

$Client_Submit_Data是一個變量,它代表客戶端提交的數據,這里我就不管環境是ASP還 是PHP還是其他什么東西了。
假設這個操作是要更新一篇文章的標題,很多人是不是會這么構造SQL語句?我們看看$Cl ient_Submit_Data包含引號的情況,令$Client_Submit_Data = 誰能告訴我"sql injecti on"是什么?
那么sql語句將被拼湊成這樣:
update tableName set columnName1 = "誰能告訴我"sql injection"是什么?" where PK_ID = 1234
執行結果很明顯,將執行這樣的語句:update tableName set columnName1 = "誰能告訴我"
where子句被忽略掉了,很遺憾,你的數據庫中所有文章標題都會被update為"誰能告訴我 "

在這個例子當中,用戶應該是無心的——標題里面包括引號應該很正常吧——但結果卻和SQL Injection無異。

好啦,說了半天廢話,言歸正傳,說一下如何應對這種問題。

我相信這里的朋友都看過很多防止SQL Injection的文章了,也大都會通過replace來防范一些注入,問題是:你們知其然的時候是否知其所以然?

我認為,徹底解決SQL Injection的最好方法是:避免拼湊SQL語句。這就是我在上面要大家特別注意拼湊這個詞的原因。
SQL Injection之所以有機可乘,是因為絕大多數Server Application采用拼湊SQL語句的方式來構建應用程序(閱讀這個帖子的諸位,你們回首想想自己的項目,有幾個不是通過拼湊SQL語句的方式來操作數據庫?想想你們見過的被注入的案例,有幾個不是采用的拼湊SQL語句的應用),所謂拼湊SQL語句,簡單一點說就是:用連接字符串操作(ASP中的&和PHP中的.)將SQL關鍵字和客戶端提交的數據連接起來并發送給DBMS執行。這樣做直接導致 DBMS根本不知道你計劃(plan to)做什么,而只知道你要(is to)做什么,不是嗎,服務器端腳本總是將要執行的SQL語句構造好,然后發給數據庫,DBMS根本不知道客戶端數據 替換了變量之后,這個語句的執行計劃是否有變化。服務器端腳本總是粗暴的告訴DBMS:你只管這么做好了,別問我為什么。就像上面我提到的更新文章標題的例子,DBMS不知道你只想更新第1234篇文章的標題,它以為你就是要把所有的標題都變成這個,因為你的語句就是沒有where子句嘛!

說到這里,可能大家都明白了,所謂的最好方法是Stored Procedure。Yes! That is!

要想做出安全可靠的Server application,你最好把自己當作兩個人,一個DBA,一個Coder(ASP Coder,PHP Coder or others),很多人往往只知道:我在做一個BBS,我在做一個留言本,我在做一個新聞發布系統,我們的流程都是這樣的,給用戶一個表單,讓用戶提交,然后去寫數據庫,用的時候根據條件把數據記錄找出來,然后顯示。沒事,如果你 是一個業余愛好者,只想自己寫點小東西玩玩,這足夠了!如果你想把WebDev作為你的職業,或者說,你想成為一個非常專業的業余愛好者,你必須當自己是一個DBA+Coder,至于要不要是一個Designer就看你的能力和精力咯!

好了,點到為止,我就說這么多,徹底的解決方法是要在DBMS上寫入你的數據操作計劃,讓服務器在開始執行之前知道你的意圖,不要粗暴的告訴它:我就是要你執行這個命令,不要問我為什么!

實現方法嘛,目前比較普遍的,也比較容易實現的就是存儲過程了,應用存儲過程不僅可以從根本上解決SQL Injection這個安全問題,還會使得你的應用程序速度成倍增長(這個增長的幅度甚至可能達到一個數量級,這跟很多因素有關,不好一概而論),還會使得你開發的系統更想大型系統,擁有更好的架構體系(例如MVC模式)。

在 MySQL 4.1.x及其后續版本和ODBC中,提供了一種叫做prepared statements的東西,它 本質上也是一種存儲過程,一種系統預置(相對于用戶自定義)的存儲過程。

如果你沒有條件用上存儲過程(比如數據庫不支持,MySQL,Access,SQLite等都不支持),那么就只能將SQL Injection扼殺在搖籃里了。解決方法,我也只簡單的說一句:不要相信任何來自客戶端的數據。這個客戶端的數據,可以通過很多途徑被提交,比如get,post ,cookie,browser參數,IP地址,等等,只要不是服務器上獲取的就都算客戶端數據,只要是客戶端數據,都是不可信的,在TCP/IP這個大框架下,什么都是可以偽造的,包括IP地址。

凡是來自客戶端的數據,必須校驗——注意是校驗,不是過濾。基本上,不管你多聰明多細心(哪怕像我一樣,不許笑,不許笑,嚴肅點,嚴肅點,我們這兒講SQL Injection呢) 也無法窮舉可能被用于SQL Injection的符號和關鍵字,也無法預知替換掉他們是否會有副 作用,最好的辦法是不去判斷什么數據不符合條件,而改由判斷什么數據符合條件,假設你的一個系統用戶名只能是字母數字和下劃線,那么你就可以用[0-9a-zA-Z_]+這個正則來匹配它,如果不符合條件,拒之即可,這比費盡心思去過濾單引號分號逗號空格什么的要明了和簡潔的多。

當然如果你嫌存儲過程麻煩,你也可以使用參數化SQL語句,至少在asp.net可以這么做,請見本人的一篇文章:《在ADO.NET中使用參數化SQL語句的大同小異》,網址是:http://blog.csdn.net/zhoufoxcn/archive/2008/03/19/2195618.aspx,介紹在asp.net中使用參數化SQL語句應注意的事項。

春節前夕,數萬個用PHPBB作為論壇的網站被攻陷,大家有印象嗎?罪魁禍首只是一個單引 ,盡管PHP有magic_quotes_gpc,可還是被干掉了,原因是%2527在url_decode函數中會被解析為%27(因為%25就是百分號),%27正是引號,By the way,盡管博客中國的論壇也 是基于PHPBB的,但是那次我們幸免于難,因為在那之前我們被黑過一次了(汗),就是因為這個,哈哈! 其實,SQL Injection不是ASP編程領域特有的,Web開發最容易碰到,但Desktop Application也有,只要有數據庫的地方,只要采用拼湊SQL語句的方式,就可能存在Injection的機會,大家牢記,如果有條件,盡量把數據DBMS職責范圍的事情交給DBMS去做,如果沒條件,一定要注意校驗客戶端提交的數據,當然,雙管齊下也行,^_^

好了,最后,說句話給那些有志于從事WebDev工作的朋友,如果將來你進入這個領域,你把總結出來這篇文章,你應該會很順利的通過面試,并得到一個不錯的薪水等級。

?

附:微軟發布3款SQL Injection攻擊檢測工具

隨著 SQL INJECTION 攻擊的明顯增多,微軟近日發布了三個免費工具,幫助網站管理員和檢測存在的風險并對可能的攻擊進行攔截。

Scrawlr
下載地址:https://download.spidynamics.com/Products/scrawlr/

這個微軟和 HP合作開發的工具,會在網站中爬行,對所有網頁的查詢字符串進行分析并發現其中的 SQL INJECTION 風險。Scrawlr 使用了部分 HP WebInspect? 相同的技術,但只檢測 SQL INJECTION 風險。Scrawlr 從一個起始 URL 入口,爬遍整個網站,并對站點中所有網頁進行分析以找到可能存在的漏洞。

Microsoft Source Code Analyzer for SQL Injection
下載地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=58A7C46E-A599-4FCB-9AB4-A4334146B6BA&displaylang=en

這款被稱作 MSCASI 的工具可以檢測 ASP 代碼并發現其中的 SQL INJECTION 漏洞(ASP 代碼以 SQL INJECTION 漏洞著稱),你需要向 MSCASI 提供原始代碼,MSCASI 會幫你找到存在風險的代碼位置。

URLScan 3.0
下載地址: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1697

該工具會讓 IIS 限制某些類型的 HTTP 請求,通過對特定 HTTP 請求進行限制,可以防止某些有害的請求在服務器端執行。UrlScan 通過一系列關鍵詞發現惡意請求,并阻止惡意請求的執行。

轉載于:https://www.cnblogs.com/zhoufoxcn/archive/2008/08/06/2515701.html

總結

以上是生活随笔為你收集整理的SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 自拍偷拍中文字幕 | 99精品小视频 | av优选在线观看 | 久久久久久久99 | 少妇又紧又色又爽又刺激 | 伊人97| 又黄又爽又刺激的视频 | 这里只有精品6 | 美女黄视频网站 | 波多野结衣乳巨码无在线 | 91精品国产乱码久久久久 | 在线观看中文字幕第一页 | 国产xxxxwwww | 国产精品sm调教免费专区 | 成人做受黄大片 | 国产夜夜嗨 | 亚洲成人三区 | 青青青在线视频免费观看 | 一本久| 国产天堂资源 | 亚洲欧美黄 | 91九色精品| 国模视频在线 | 一区二区国产精品 | 色5月婷婷| 黄色欧美视频 | 久久午夜国产 | 国产电影一区二区三区 | 韩国三级视频在线 | 成人黄色在线观看视频 | 91一区二区三区在线观看 | 黑人满足娇妻6699xx | 麻豆成人在线观看 | 亚洲中午字幕 | 国产人妻互换一区二区 | 青草久久久| 香蕉久久一区二区三区 | 成人免费无码大片a毛片抽搐色欲 | 久久国产免费看 | 黄色免费在线看 | 国产v亚洲v天堂无码久久久 | 精品深夜av无码一区二区老年 | 五月天社区 | 亚洲熟女乱综合一区二区 | 日韩中文字幕免费视频 | 人人看人人射 | 九色视频自拍 | 国产精品一区无码 | 激情欧美在线 | 一道本在线视频 | av大片在线观看 | 国产日韩欧美电影 | 九九在线观看视频 | 亚洲 国产 日韩 欧美 | 国产一区二区久久 | 佐山爱在线视频 | 欧洲亚洲天堂 | 亚洲精品字幕在线 | 日本三级吃奶头添泬无码苍井空 | 瑟瑟视频在线观看 | 欧美精品1区 | 久久久久无码精品国产sm果冻 | 亚洲免费av片 | 高潮又黄又刺激 | 91精品国产91久久久久 | 欧美三级免费 | 波多野结衣绝顶大高潮 | 欧美日日| 天天综合网国产 | 亚洲精华液一区二区 | 欧美精品一区二区三区蜜臀 | 国产精品综合在线 | 欧美一区二区三区在线 | 免费播放毛片精品视频 | 亚洲丝袜在线观看 | 天堂男人av | 日本va视频 | 91在线观看免费高清完整版在线观看 | 久久久二区 | 亚洲成人黄色小说 | 亚洲石原莉奈一区二区在线观看 | 亚洲精品国产精品乱码不99 | 风间由美在线视频 | 日韩精品久久一区 | 九九色综合网 | 我的好妈妈在线观看 | 年代下乡啪啪h文 | 亚洲精品无码不卡在线播he | 色欲亚洲Av无码精品天堂 | 毛片久久久 | 欧美性一级 | 国产调教视频在线观看 | 怡红院成人影院 | 黄色性大片 | 天堂www中文在线资源 | 日本69式三人交 | 久草久草久草 | va视频在线观看 | 涩涩涩在线观看 |