SQL 注入式攻擊的本質(zhì)
更新時(shí)間:2008年12月22日 15:34:43 作者:
SQL 注入式攻擊,又是注入式攻擊,沒想到2008年這個(gè)老掉牙的東西又出來攪風(fēng)攪雨
更沒想到的是這么老掉牙的東西居然還能跑出來攪風(fēng)攪雨,而且造成了如此大的破壞,有文章還說注入式攻擊還會有“第三波”攻擊潮,到時(shí)候會更加難以察覺,連微軟的大佬都跑出來澄清說與微軟的技術(shù)與編碼無關(guān),微軟為此還專門推出了三個(gè)檢測軟件,那么這個(gè)SQL注入式攻擊的漏洞究竟是怎么造成的呢?
正如微軟的大佬所說的,是由于網(wǎng)站程序的開發(fā)人員編碼不當(dāng)造成的,不光是ASP、ASP.NET,也包括JSP、PHP等技術(shù),受影響的也不僅僅是Access和SQL Server數(shù)據(jù)庫,也包括Oracle和MySql等其他關(guān)系數(shù)據(jù)庫,和人家微軟沒什么關(guān)系。事實(shí)上不光是基于B/S架構(gòu)的系統(tǒng)或網(wǎng)站存在這樣的問題,基于C/S架構(gòu)的系統(tǒng)也存在這樣的問題,只不過由于C/S架構(gòu)的特點(diǎn)決定了不可能像B/S系統(tǒng)這樣影響這么廣泛。那么為什么說這個(gè)問題是開發(fā)人員編碼不當(dāng)造成的呢,下面我們就來具體分析。
首先讓我們來看一下以下這兩條SQL查詢語句
語句1:select * from news where newstype=1
語句2:select * from news where newstype=1;drop table news
語句3:select * from news where newstype='社會新聞'
語句4:select * from news where newstype='社會新聞';drop table news--'
大家都知道語句1的作用是查詢news表中newstype字段值等于1的所有記錄,其中newstype字段的類型是一種數(shù)值型,比如Int、SmaillInt、TinyInt、Float等等;語句2實(shí)際上是兩條語句,第一條的作用和語句1的作用相同,第二條的作用是刪除數(shù)據(jù)庫中的news表。語句3和語句4的功能和語句1、語句2的基本相同,所不同的是語句3、4里的newstype字段是字符型的,比如:char、varchar、nvarchar、text等等
不管是在ASP還是ASP.NET還是JSP或PHP,一般我們都會采用“select * from news where newstype=”+v_newstype的方法來構(gòu)造語句1,或者“select * from news where newstype='”+v_newstype+"'"來構(gòu)造語句3,其中v_newstype是一個(gè)變量,如果v_newstype的值等于1,構(gòu)造出來的就是語句1了,如果v_newstype的值等于"社會新聞",構(gòu)造出來的就是語句3了,但是很不幸的是如果我們忽略了對v_newstype的檢查,通過這個(gè)方法構(gòu)造出來的也可能是語句2或者語句4,比如v_newstype的值為“1;drop table news”或“社會新聞';drop table news--”,如果我們的疏忽讓別人給利用了,就會給我們造成巨大的損失,SQL注入式攻擊正是利用了我們的這個(gè)疏忽,所以說SQL注入式攻擊的根源來自開發(fā)人員的編碼不當(dāng)和你所使用的平臺、開發(fā)工具以及系統(tǒng)架構(gòu)等等都沒有任何直接的關(guān)系。
既然SQL注入式攻擊是由于編碼人員編碼不當(dāng)造成的,那究竟怎么樣的編碼才是恰當(dāng)?shù)木幋a才不會受到SQL注入攻擊呢,下一篇我們將繼續(xù)介紹。
正如微軟的大佬所說的,是由于網(wǎng)站程序的開發(fā)人員編碼不當(dāng)造成的,不光是ASP、ASP.NET,也包括JSP、PHP等技術(shù),受影響的也不僅僅是Access和SQL Server數(shù)據(jù)庫,也包括Oracle和MySql等其他關(guān)系數(shù)據(jù)庫,和人家微軟沒什么關(guān)系。事實(shí)上不光是基于B/S架構(gòu)的系統(tǒng)或網(wǎng)站存在這樣的問題,基于C/S架構(gòu)的系統(tǒng)也存在這樣的問題,只不過由于C/S架構(gòu)的特點(diǎn)決定了不可能像B/S系統(tǒng)這樣影響這么廣泛。那么為什么說這個(gè)問題是開發(fā)人員編碼不當(dāng)造成的呢,下面我們就來具體分析。
首先讓我們來看一下以下這兩條SQL查詢語句
語句1:select * from news where newstype=1
語句2:select * from news where newstype=1;drop table news
語句3:select * from news where newstype='社會新聞'
語句4:select * from news where newstype='社會新聞';drop table news--'
大家都知道語句1的作用是查詢news表中newstype字段值等于1的所有記錄,其中newstype字段的類型是一種數(shù)值型,比如Int、SmaillInt、TinyInt、Float等等;語句2實(shí)際上是兩條語句,第一條的作用和語句1的作用相同,第二條的作用是刪除數(shù)據(jù)庫中的news表。語句3和語句4的功能和語句1、語句2的基本相同,所不同的是語句3、4里的newstype字段是字符型的,比如:char、varchar、nvarchar、text等等
不管是在ASP還是ASP.NET還是JSP或PHP,一般我們都會采用“select * from news where newstype=”+v_newstype的方法來構(gòu)造語句1,或者“select * from news where newstype='”+v_newstype+"'"來構(gòu)造語句3,其中v_newstype是一個(gè)變量,如果v_newstype的值等于1,構(gòu)造出來的就是語句1了,如果v_newstype的值等于"社會新聞",構(gòu)造出來的就是語句3了,但是很不幸的是如果我們忽略了對v_newstype的檢查,通過這個(gè)方法構(gòu)造出來的也可能是語句2或者語句4,比如v_newstype的值為“1;drop table news”或“社會新聞';drop table news--”,如果我們的疏忽讓別人給利用了,就會給我們造成巨大的損失,SQL注入式攻擊正是利用了我們的這個(gè)疏忽,所以說SQL注入式攻擊的根源來自開發(fā)人員的編碼不當(dāng)和你所使用的平臺、開發(fā)工具以及系統(tǒng)架構(gòu)等等都沒有任何直接的關(guān)系。
既然SQL注入式攻擊是由于編碼人員編碼不當(dāng)造成的,那究竟怎么樣的編碼才是恰當(dāng)?shù)木幋a才不會受到SQL注入攻擊呢,下一篇我們將繼續(xù)介紹。
相關(guān)文章
GBase與梧桐數(shù)據(jù)庫窗口函數(shù)使用的方法比較
這篇文章主要給大家介紹了關(guān)于GBase與梧桐數(shù)據(jù)庫窗口函數(shù)使用的比較,文中包括排序類和統(tǒng)計(jì)類窗口函數(shù)的定義、語法和示例,窗口函數(shù)可以進(jìn)行復(fù)雜的數(shù)據(jù)分析,提高查詢性能,并適應(yīng)不同的數(shù)據(jù)分析需求,需要的朋友可以參考下2024-11-11
在PostgreSQL中實(shí)現(xiàn)遞歸查詢的教程
這篇文章主要介紹了在PostgreSQL中實(shí)現(xiàn)遞歸查詢的教程,包括在遞歸查詢內(nèi)排序等方法的介紹,需要的朋友可以參考下2015-04-04
利用Navicat Premium導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)信息至Excel的方法
這篇文章主要介紹了利用Navicat Premium導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)信息至Excel的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
如何利用分析函數(shù)改寫范圍判斷自關(guān)聯(lián)查詢詳解
這篇文章主要給大家介紹了關(guān)于如何利用分析函數(shù)改寫范圍判斷自關(guān)聯(lián)查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用sql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
redis數(shù)據(jù)庫查找key在內(nèi)存中的位置的方法
這篇文章主要介紹了redis數(shù)據(jù)庫查找key在內(nèi)存中的位置的方法,需要的朋友可以參考下2014-03-03

