當前位置:首頁 » 編程語言 » sql注射漏洞
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql注射漏洞

發布時間: 2023-03-25 15:16:44

1. 如何防範sql注入漏洞及檢測

以下是OMG我為大家收集整理的文章,希望對大家有所幫助。

SQL注入(SQLInjection)漏洞攻擊是目前網上最流行最熱門的黑客腳本攻擊方法之一,那什麼是SQL注入漏洞攻擊呢?它是指黑客利用一些Web應用程序(如:網站、論壇、留言本、文章發布系統等)中某些存在不安全代碼或SQL語句不縝密的頁面,精心構造SQL語句,把非法的SQL語句指令轉譯到系統實際SQL語句中並執行它,以獲取用戶名、口令等敏感信息,從而達到控制主機伺服器的攻擊方法。

1. SQL注入漏洞攻擊原理

1. 1 SQL注入漏洞攻擊實現原理

SQL(Structured Query Language)是一種用來和資料庫交互的語言文本。SQL注入的攻擊原理就是攻擊者通過Web應用程序利用SQL語句或字元串將非法的數據插入到伺服器端資料庫中,獲取資料庫的管理用戶許可權,然後將資料庫管理用戶許可權提升至操作系統管理用戶許可權,控制伺服器操作系統,獲取重要信息及機密文件。

SQL注入漏洞攻擊主要是通過藉助於HDSI、NBSI和Domain等SQL注入漏洞掃描工具掃描出Web頁面中存在的SQL注入漏洞,從而定位SQL注入點,通過執行非法的SQL語句或字元串達到入侵者想要的操作。下面以一段身份驗證的.NET代碼為例,說明一下SQL 注入攻擊的實現方法。

SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettings.AppSettings["DBconnStrings"]); string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + Txtusername.Text +"'";

DataSet userSet = new DataSet();

SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);

userAdapter.Fill(userSet, "Users");

Session["UserID"] =Txtusername.Text.ToString();

Session["type"] =type.Text.ToString();

Response.Redirect("/Myweb/admin/login.aspx");

從上面的代碼中可以看出,程序在與資料庫建立連接得到用戶數據之後,直接將username的值通過session傳給login.aspx,沒有進行任何的過濾和處理措施, 直接用來構造SQL 語句, 其危險系數是非常高的, 攻擊者只要根據SQL 語句的編寫規則就可以繞過身份驗證,從而達到入侵的目的。

1. 2 SQL注入漏洞攻擊分析

SQL注入可以說是一種漏洞,也可以說是一種攻擊。當程序中的變數處理不當,沒有對用戶提交的數據類型進行校驗,編寫不安全的代碼,構造非法的SQL語句或字元串,都可能產生這個漏洞。

例如Web系統有一個login頁面,這個login頁面控制著用戶是否有權訪問,要求用戶輸入一個用戶名和口令,連接資料庫的語句為:

“select * from users where username = 'username' andpassword = 'password'”

攻擊者輸入用戶名為aa or 1=1口令為1234 or 1=1之類的內容。我們可以看出實際上攻擊者並不知道真正的用戶名、口令,該內容提交給伺服器之後,伺服器執行攻擊者構造出的SQL命令,但由於攻擊者輸入的內容非常特殊,所以最後得到的SQL命令變成:

“select * from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1”

伺服器執行查詢或存儲過程,將用戶輸入的身份信息和資料庫users表中真實的身份信息進行核對,由於SQL命令實際上已被修改,存在永遠成立的1=1條件,因此已經不能真正驗證用戶身份,所以系統會錯誤地授權攻擊者訪問。

SQL 注入是通過目標伺服器的80埠進行的,是正常的Web訪問,防火牆不會對這種攻擊發出警告或攔截。當Web伺服器以普通用戶的身份訪問資料庫時,利用SQL注入漏洞就可能進行創建、刪除、修改資料庫中所有數據的非法操作。而當資料庫以管理用戶許可權的身份進行登錄時,就可能控制整個資料庫伺服器。

SQL注入的方法很多,在以手動方式進行攻擊時需要構造各種各樣的SQL語句,所以一般攻擊者需要豐富的經驗和耐心,才能繞過檢測和處理,提交語句,從而獲得想要的有用信息。這個過程需要花費很多的時間,如果以這種手動方式進行SQL注入漏洞攻擊,許多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等網站就會安全很多了,不是漏洞不存在了,而是手動入侵者需要編程基礎,但現在攻擊者可以利用一些現成的黑客工具來輔助SQL注入漏洞攻擊,加快入侵的速度,使SQL注入變得輕而易舉。

由於SQL注入漏洞攻擊利用的是通用的SQL語法,使得這種攻擊具有廣泛性。理論上說,對於所有基於SQL語言的資料庫管理系統都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。當然,各種系統自身的SQL擴展功能會有所不同,因此最終的攻擊代碼可能不盡相同。

1. 3 SQL注入漏洞攻擊過程

(1)繞過身份驗證

如一個login界面,需要輸入用戶名和口令,然後Post到另一個頁面,進行身份驗證,因此攻擊者只需在用戶名和口令的輸入框中都輸入aa or’1’=’1’的內容,那麼攻擊者就可以通過欺騙的驗證方式而直接進入下一個頁面,並擁有和正常登錄用戶一樣的全部特權。原因是什麼呢? 我們比較一下正常用戶登錄和攻擊者登錄時的兩種SQL語句:

1)正常用戶(如用戶名為admin,口令為1234567) :

SQL= " selectfrom users where username = ’admin’and password= ’1234567’ ";

2)攻擊者(用戶名和口令都為aa or’1’=’1’) :

SQL= " select * from users where username='aa or’1’=’1’'and password = ' aa or’1’=’1’'";

可以看到由and連接的兩個條件都被一個永遠成立的1=1所代替,執行的結果為true,資料庫會認為條件恆成立,會返回一個true,讓攻擊者以合法身份登錄進入下一個頁面。

(2)執行非法操作

如一個查詢頁面select1.asp? id=1,編程人員原本設計意圖是顯示id為1的查詢信息,而攻擊者利用程序中沒有對id內容進行檢查的機制,插入自己的代碼。

從select1.asp中摘錄一段關鍵代碼:

SQL= " select *from photo where photoid= 'id'";

可以看到,id沒有進行任何的處理,直接構成SQL語句並執行,而攻擊者在知道該系統資料庫中表名及欄位名的情況下,利用SQL語句特性(分號是將兩句SQL 語句分開的符號),直接向資料庫Tuser表中添加記錄:

select1.asp? id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理員'),然後攻擊者就可以直接用hack進行登錄了。通過這樣的方法,攻擊者還可以對系統做任何的事情,包括添加、刪除、修改系統資源的操作。

(3)執行系統命令

如果Web主機使用MSSQL資料庫管理系統,那麼攻擊者就可以用到xp_cmdshell這個擴展存儲過程,xp_cmdshell是一個非常有用的擴展存儲過程,用於執行系統命令,比如dir、net等,攻擊者可以根據程序的不同,提交不同的語句:

execmaster.dbo.xp_cmdshell " dir "; exec master.dbo.xp_cmdshell" net user hack 1234567 /add ";

execmaster.dbo.xp_cmdshell " net localgroup administrators hack /add ";

這樣就可以向Web主機系統中成功添加了一個管理員帳戶。

2. SQL注入漏洞攻擊的檢測方式及方法

2. 1檢測方式

SQL注入漏洞攻擊檢測分為入侵前的檢測和入侵後的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入漏洞掃描工具軟體。檢測的目的是為預防SQL注入漏洞攻擊,而對於SQL注入漏洞攻擊後的檢測,主要是針對審計日誌的查看,SQL注入漏洞攻擊成功後,會在Web Service和資料庫的審計日誌中留下“痕跡”。

2. 2檢測方法

(1)動態SQL檢查

動態的SQL語句是一個進行資料庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態的SQL語句替換成預編譯的SQL或者存儲過程對大多數應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數而不是命令來執行,這樣就限制了入侵者的行動。當然,它不適用於存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執行,資料庫仍然存在SQL注入漏洞攻擊的危險。

(2)有效性校驗

如果一個輸入框只可能包括數字,那麼要通過驗證確保用戶輸入的都是數字。如果可以接受字母,檢查是不是存在不可接受的字元,那就需要設置字元串檢查功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。

(3)數據表檢查

使用SQL注入漏洞攻擊工具軟體進行SQL注入漏洞攻擊後,都會在資料庫中生成一些臨時表。通過查看資料庫中最近新建的表的結構和內容,可以判斷是否曾經發生過SQL注入漏洞攻擊。

(4)審計日誌檢查

在Web伺服器中如果啟用了審計日誌功能,則Web Service審計日誌會記錄訪問者的IP地址、訪問時間、訪問文件等信息,SQL注入漏洞攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態網頁),審計日誌文件會急劇增加,通過查看審計日誌文件的大小以及審計日誌文件中的內容,可以判斷是否發生過SQL注入漏洞攻擊事件;另外還可以通過查看資料庫審計日誌,查詢某個時間段是否有非法的插入、修改、刪除操作。

(5)其他

SQL注入漏洞攻擊成功後,入侵者往往會添加特權用戶(如:administrator、root、sa等)、開放非法的遠程服務以及安裝木馬後門程序等,可以通過查看用戶帳戶列表、遠程服務開啟情況、系統最近日期產生的一些文件等信息來判斷是否發生過入侵。

3. SQL注入漏洞防範措施

SQL注入漏洞攻擊的防範方法有很多種,現階段總結起來有以下方法:

(1)數據有效性校驗。如果一個輸入框只可能包括數字,那麼要通過校驗確保用戶輸入的都是數字。如果可以接受字母,那就要檢查是不是存在不可接受的字元,最好的方法是增加字元復雜度自動驗證功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。另外限製表單數據輸入和查詢字元串輸入的長度也是一個好方法。如果用戶的登錄名最多隻有10個字元,那麼不要認可表單中輸入10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。

(2)封裝數據信息。對客戶端提交的數據進行封裝,不要將數據直接存入cookie中,方法就是在編程的代碼中,插入session、if、try、else,這樣可以有效地防止攻擊者獲取cookie中的重要信息。

(3)去除代碼中的敏感信息。將在代碼中存在的用戶名、口令信息等敏感欄位刪除,替換成輸入框。

SQL=" select from users where username = ’admin’and password= ’1234567’ "

如:這樣顯然會暴露管理員的用戶名、口令信息。可以將其修改成:

SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"

這樣就安全了很多,入侵者也是不會輕易的就獲取到用戶名、口令信息。

(4)替換或刪除單引號。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注入漏洞攻擊,單引號時常會無法約束插入數據的Value,可能給予輸入者不必要的許可權。用雙引號替換掉單引號可以使大部分SQL注入漏洞攻擊失敗。 如:

“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”

顯然會得到與

“select * from users where username='admin' and password= '1234567'”

相同的結果。

(5)指定錯誤返回頁面。攻擊者有時從客戶端嘗試提交有害代碼和攻擊字元串,根據Web Service給出的錯誤提示信息來收集程序及伺服器的信息,從而獲取想得到的資料。應在Web Service中指定一個不包含任何信息的錯誤提示頁面。

(6)限制SQL字元串連接的配置文件。使用SQL變數,因為變數不是可以執行的腳本,即在Web頁面中將連接資料庫的SQL字元串替換成指定的Value,然後將Web.config文件進行加密,拒絕訪問。

(7)設置Web目錄的訪問許可權。將虛擬站點的文件目錄禁止遊客用戶(如:Guest用戶等)訪問,將User用戶許可權修改成只讀許可權,切勿將管理許可權的用戶添加到訪問列表。

(8)最小服務原則。Web伺服器應以最小許可權進行配置,只提供Web服務,這樣可以有效地阻止系統的危險命令,如ftp、cmd、vbscript等。

(9)鑒別信息加密存儲。將保存在資料庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。

(10)用戶許可權分離。應盡可能的禁止或刪除資料庫中sa許可權用戶的訪問,對不同的資料庫劃分不同的用戶許可權,這樣不同的用戶只能對授權給自己的資料庫執行查詢、插入、更新、刪除操作,就可以防止不同用戶對非授權的資料庫進行訪問。

4. 結束語

SQL注入漏洞攻擊在網上非常普遍,許多ASP、PHP論壇和文章管理系統、下載系統以及新聞系統都存在這個漏洞。造成SQL注入漏洞攻擊的主要原因是開發人員在系統開發的過程中編程不規范,沒有形成良好的編程習慣,問題的解決只有依賴於規范編程。此外,也可以使用現有的SQL注入漏洞掃描器對整個網站中的關鍵代碼進行掃描,查找網站頁面中存在的SQL注入點。對於有問題的頁面,可以及時刪除或更新。本文通過對SQL注入漏洞攻擊的方法、原理以及攻擊實施過程進行了闡述和總結,並給出了一些常見的SQL注入漏洞攻擊防範的方法。

2. 簡單分析什麼是SQL注入漏洞

轉:

SQL注入,由於程序在實際使用中,為了管理龐大的數據信息,就會使用到資料庫。資料庫可以方便程序對所有數據信息進行統一的存儲和分類組織,便於查詢更新。用戶在使用程序時,程序可以自動通過對資料庫的查詢,將所獲得的信息按照一定格式反饋給用戶,同時用戶也是通過互動式的對話框提交給程序數據,從而使程序按照用戶想要的信息進行查詢,反饋給用戶想要的信息。
對於程序這種資料庫操作,先來看一段代碼:
strKeyword = Request ["keyword"];
sqlQuery = "SELECT * FROM Aritcles WHERE Keywords LIKE '%" +strKeyword + "%'";
這段代碼的主要目的是按照用戶提交的關鍵字Keyword,對軟體連接資料庫中的文件進行搜索,找出所有包含用戶關鍵字的文章來。假設此時,我們提交給軟體「hack」這個數據,這時,「hack」這個關鍵字就會被傳遞給Keyword關鍵變數。接下來看看代碼的執行情況,keyword獲得數據「hack」後,被賦值給strKeyword變數,然後strKeyword變數被放入查詢語句,此時的查詢語句表現為:"SELECT * FROM Aritcles WHERE Keywords LIKE '%hack%'",這個查詢語句的意思就是從資料庫Aritcles表中查詢出所有包含「hack」這個關鍵字的文章。注意「hack」這個單詞是我們提交給程序的,因此可以對其隨意修改的。於是,可以這樣修改,把它變為「hack'; DROP TABLE Aritcles; --」。
現在看看程序會怎樣處理這個外部關鍵字數據。首先,查詢語句變成了:「SELECT * FROM Aritcles WHERE Keywords LIKE '%hack%'; DROP TABLE Aritcles; --」,我們知道DROP TABLE語句是在資料庫操作中刪除一個指定的表的意思,現在那個查詢語句的意思就變了,以中間的分號為標志,分成兩個部分,首先還是正常的查出所有包含hack關鍵字的文章。但是接下來……
由於程序使用的資料庫是微軟的SQL SERVER,該資料庫支持多命令語句執行,這些資料庫操作的命令語句都是由分號分隔開,然後依次執行的。這里的「DROP TABLE Aritcles; --」是一個完全合法的命令語句,「--」符號是SQL SERVER資料庫特有注釋標識,資料庫不執行任何命令。這樣,當這段查詢語句執行時,就會去執行一個刪除Aritcles表的資料庫命令。
像這樣,通過控制傳遞給程序資料庫操作語句的關鍵變數來獲得惡意控製程序資料庫,從而獲取有用信息或者製造惡意破壞的,甚至是控制用戶計算機系統的漏洞,就稱之為「SQL注入漏洞」。
SQL注入漏洞完全是利用了將包含了某種目的的SQL語句,通過關鍵變數插入到程序中正常的資料庫操作語句里。程序一旦發生注入漏洞,就會引發一系列安全隱患。
SQL注入漏洞是不分語言的,無論用什麼語言開發的程序,只要涉及對資料庫的操作,都可能存在SQL注入漏洞。雖然有時會因為編寫語言的要求,或者程序設置環境的不同,導致SQL注入漏洞很難被常用的方法利用,但是總可以找到突破的方法。

2

下面以網站程序為例,看一看SQL注入漏洞最經常被利用的地方,也是危害最大的地方。
都知道對於一個網站來說,可以說資料庫存放著網站所有的信息,WEB應用程序完全是憑借資料庫中的信息進行正常的運行的。一個網站程序中,最關鍵的一個部分就是對用戶的合法性的判斷,也就是看訪問它的用戶是不是一個注冊的用戶。這個時候,就會要求輸入用戶名和密碼,然後根據輸入的信息查詢資料庫,判斷是否存在用戶,並檢查密碼是不是一致,如果一致則承認合法用戶,否則將給予非法提示。下面看一段常常出現在論壇程序中的用戶認證程序代碼:
(1)admin1 = trim(request("name"))
(2)password1 = trim(request("password"))
(3)Set rs = Server.CreateObject ("ADODB.Recordset")
(4)sql = "select * from userlogin where name='"&admin1&"' and password='"&password1&"'"
(5)rs.Open sql,conn,1,1
(6)if rs.eof and rs.bof then
(7)response.write"<SCRIPT language=JavaScript>alert('用戶名或密碼不正確!')"
(8)response.write"javascript:history.go(-1)</SCRIPT>"
(9)response.end
(10)else
(11)session("name")=rs("name")
(12)session("password")=rs("password")
(13)response.Redirect("default.asp")
(14)end if
這段程序的第1和第2行分別通過Request對象獲得用戶名和密碼,第3行是建立一個資料庫操作集對象,第4行就是將用戶名以及密碼同時作為查詢條件放入到userlogin表中進行查詢,第5到第14行就是根據查詢結果進行判斷,彈出警告窗口,或者重定向網頁。
假設資料庫中有個用戶guest,密碼123456,那麼該用戶登錄時,認證代碼中的第4行則變為:sql = "select * from userlogin where name='guest' and password='123456'",這是一個合法查詢語句,所以用戶能正常登錄,反之則登錄不了。
看起來這是一個比較嚴格的認證代碼,但是事實呢?
現在,我們用戶名提交「'or 1='1」,密碼也是一樣,同樣也會成為合法用戶,這是為什麼?
當我們提交表單後,代碼通過Request對象獲得提交的用戶名'or 1='1以及密碼'or 1='1後,直接將這些數據放入了第4行的查詢語句中,於是變成了這樣:sql = "select * from userlogin where name=''or 1='1' and password=''or 1='1'"。我們先看1='1',這個絕對永遠為真,如果你說假,那麼你回小學學數學吧,學好再來看吧,呵呵~注意在大馬前面還有一個or,這代表者1='1'是作為一個條件選擇語句放入資料庫查詢的,這樣無論查詢語句中的用戶名和密碼是否正確,都會因為or後面的1='1'代碼,導致查詢語句返回值永遠為真,這樣就是繞過了看似嚴格的用戶認證,獲得了合法的許可權。

3. sql注入漏洞如何修復

一、打開domain4.1,在旁註檢測—」當前路徑」中輸入伺服器的域名或IP地址。

4. 安全漏洞XSS、CSRF、SQL注入以及DDOS攻擊

隨著互聯網的普及,網路安全變得越來越重要,程序員需要掌握最基本的web安全防範,下面列舉一些常見的安全漏洞和對應的防禦措施。

0x01: XSS漏洞

1、XSS簡介

跨站腳本(cross site script)簡稱為XSS,是一種經常出現在web應用中的計算機安全漏洞,也是亮陪web中最主流的攻擊方式。

XSS是指惡意攻擊者利用網站沒有對用戶提交數據進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,使別的用戶訪問都會執行相應的嵌入代碼。

2、XSS攻擊的危害

3、防止XSS解決方案

0x02:CSRF攻擊(跨站點請求偽造

1、CSRF簡介

CSRF(Cross-site request forgery)跨站請求偽造,也被稱為「One Click Attack」或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。

XSS主要是利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求,來利用受信任的網站。與XSS攻擊相比,CSRF更具危險性。肢旦

2、CSRF攻擊的危害

主要的危害來自於,攻擊者盜用用戶身份,發送惡意請求。比如:模擬用戶發送郵件,發消息,以及支付、轉歷鍵擾賬等。

3、防止CSRF的解決方案

0x03:SQL注入漏洞

1、簡介

SQL注入是比較常見的網路攻擊方式之一,主要是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,實現無帳號登錄,甚至篡改資料庫。

2、SQL注入的危害

3、SQL注入的方式

通常情況下,SQL注入的位置包括:

4、防止SQL注入的解決方案

0x04:DDOS攻擊

1、DOS攻擊和DDOS簡稱

2、DDOS的危害

3、如何防禦DDOS攻擊

總之就是既要做好過濾與編碼並使用參數化語句,也要把重要的信息進行加密處理,這樣SQL注入漏洞才能更好的解決。

5. 如何防範SQL注入漏洞及檢測

SQL注入漏洞攻擊的防範方法有很多種,現階段總結起來有以下方法:
(1)數據有效性校驗。如果一個輸入框只可能包括數字,那麼要通過校驗確保用戶輸入的都是數字。如果可以接受字母,那就要檢查是不是存在不可接受的字元,最好的方法是增加字元復雜度自動驗證功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。另外限製表單數據輸入和查詢字元串輸入的長度也是一個好方法。如果用戶的登錄名最多隻有10個字元,那麼不要認可表單中輸入10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。
(2)封裝數據信息。對客戶端提交的數據進行封裝,不要將數據直接存入cookie中,方法就是在編程的代碼中,插入session、if、try、else,這樣可以有效地防止攻擊者獲取cookie中的重要信息。
(3)去除代碼中的敏感信息。將在代碼中存在的用戶名、口令信息等敏感欄位刪除,替換成輸入框。
SQL=" select from users where username = 』admin』and password= 』1234567』 "
如:這樣顯然會暴露管理員的用戶名、口令信息。可以將其修改成:
SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"
這樣就安全了很多,入侵者也是不會輕易的就獲取到用戶名、口令信息。
(4)替換或刪除單引號。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注入漏洞攻擊,單引號時常會無法約束插入數據的Value,可能給予輸入者不必要的許可權。用雙引號替換掉單引號可以使大部分SQL注入漏洞攻擊失敗。 如:
「select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'」
顯然會得到與
「select * from users where username='admin' and password= '1234567'」
相同的結果。
(5)指定錯誤返回頁面。攻擊者有時從客戶端嘗試提交有害代碼和攻擊字元串,根據Web Service給出的錯誤提示信息來收集程序及伺服器的信息,從而獲取想得到的資料。應在Web Service中指定一個不包含任何信息的錯誤提示頁面。
(6)限制SQL字元串連接的配置文件。使用SQL變數,因為變數不是可以執行的腳本,即在Web頁面中將連接資料庫的SQL字元串替換成指定的Value,然後將Web.config文件進行加密,拒絕訪問。
(7)設置Web目錄的訪問許可權。將虛擬站點的文件目錄禁止遊客用戶(如:Guest用戶等)訪問,將User用戶許可權修改成只讀許可權,切勿將管理許可權的用戶添加到訪問列表。
(8)最小服務原則。Web伺服器應以最小許可權進行配置,只提供Web服務,這樣可以有效地阻止系統的危險命令,如ftp、cmd、vbscript等。
(9)鑒別信息加密存儲。將保存在資料庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。
(10)用戶許可權分離。應盡可能的禁止或刪除資料庫中sa許可權用戶的訪問,對不同的資料庫劃分不同的用戶許可權,這樣不同的用戶只能對授權給自己的資料庫執行查詢、插入、更新、刪除操作,就可以防止不同用戶對非授權的資料庫進行訪問。

6. sql注入攻擊的原理

sql注入攻擊的原理:SQL 注入(SQLi)是一種可執行惡意 SQL 語句的注入攻擊。這些 SQL 語句可控制網站背後的資料庫服務。攻擊者可利用 SQL 漏洞繞過網站已有的安全措施。他們可繞過網站的身份認證和授權並訪問整個 SQL 資料庫的數據。他們也可利用 SQL 注入對數據進行增加、修改和刪除操作。

為了發起 SQL 注入攻擊,攻擊者首先需要在網站或應用程序中找到那些易受攻擊的用戶輸入。這些用戶輸入被有漏洞的網站或應用程序直接用於 SQL 查詢語句中。攻擊者可創建這些輸入內容。這些內容往往被稱為惡意載體,它們是攻擊過程中的關鍵部分。隨後攻擊者將內容發送出去,惡意的 SQL 語句便會在資料庫中被執行。

7. 信息安全試題 什麼是sql注入漏洞

SQL是操作資料庫數據的結構化查詢語言,網頁的應用數據和後台資料庫中的數據進行交互時會採用SQL。而SQL注入是將Web頁面的原URL、表單域或數據包輸入的參數,修改拼接成SQL語句,傳遞給Web伺服器,進而傳給資料庫伺服器以執行資料庫命令。如Web應用程序的開發人員對用戶所輸入的數據或cookie等內容不進行過濾或驗證(即存在注入點)就直接傳輸給資料庫,就可能導致拼接的SQL被執行,獲取對資料庫的信息以及提權,發生SQL注入攻擊。
SQL注入漏洞有什麼特點?
1、廣泛性:任何一個基於SQL語言的資料庫都可能被攻擊,很多開發人員在編寫Web應用程序時未對從輸入參數、Web表單、Cookie等接受到的值進行規范性驗證和檢測,通常會出現SQL注入漏洞。
2、隱蔽性:SQL注入語句一般都嵌入在普通的HTPP請求中,很難與正常語句區分開,所以當前許多防火牆都無法識別予以警告,而且SQL注入變種極多,攻擊者可以調整攻擊的參數,所以使用傳統的方法防禦SQL注入效果非常不理想。
3、危害大:攻擊者可以通過SQL注入獲取到伺服器的庫名、表名、欄位名,從而獲取到整個伺服器中的數據,對網站用戶的數據安全有極大的威脅。攻擊者也可以通過獲取到的數據,得到後台管理員的密碼,然後對網頁頁面進行惡意篡改。這樣不僅對資料庫信息安全造成嚴重威脅,對整個資料庫系統安全也有很大的影響。
4、操作方便:互聯網上有很多SQL注入工具,簡單易學、攻擊過程簡單,不需要專業的知識也可以自如運用。

8. 簡單分析什麼是SQL注入漏洞

SQL是操作資料庫數據的結構化查詢語言,網頁的應用數據和後台資料庫中的數據進行交互時會採用SQL。
SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。它是利用現有應用程序,將惡意的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。

9. 如何修復SQL注入漏洞

以下是OMG我為大家收集整理的文章,希望對大家有所幫助。

SQL注入是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。其實就是就是提交精心構造的資料庫語句,使其反饋一些有用的數據。說白了就是去欺騙資料庫,假如只有web伺服器的話,是沒法進行SQL注入的。

網上常用的注入手法有兩種,一種是猜測,讓資料庫暴出用戶名、密碼等信息;另一種直接繞過認證,取得許可權。相對應,要想修復此類漏洞,就必須禁止特殊數據的提交或將特殊提交的數據修改。

下面是不同腳本語言下的防注入過濾代碼,其實思想是一致的。

1、 PHP防注入過濾代碼

php 代碼復制內容到剪貼板

<!-- ?php

/*************************

說明: 判斷傳遞的變數中是否含有非法字元 如$_POST、$_GET

功能: 防注入

使用方法: 將下列代碼保存為ak,php,調用方式 在數據提交頁加上include("ak.php");

**************************/

function dowith_sql($str)

//實現將特徵碼兩邊加.

{

$refuse_str="exec|and|or|select|update|from|where|order|by|*|delete||insert|into|values|create|table|

database|set|char|asc|cast|declare| </script|script|iframe|3bomb|c.js|;";>

//定義防注入的字元

$arr=explode("|",$refuse_str);

//將$refuse_str中的值單獨取出

for($i=0;$i<count($arr);$i++) p=""> </count($arr);$i++)>

{

$replace="[".$arr[$i]."]";

$str=str_replace($arr[$i],$replace,$str);

//在變數$str中搜索字元串$arr[$i],並將其替換為字元串[$replace]

}

return $str;

}

foreach ($_GET as $key=>$value)

//遍歷獲GET方法獲得的參數$_GET的值傳給$key,並賦值給$value

{

$_GET[$key]=dowith_sql($value);

//將$value中的特徵碼處理傳個$_GET[$key]

}

foreach ($_POST as $key=>$value)

{

$_POST[$key]=dowith_sql($value);

}

?>

上面的防注入的方法只是防了GET與POST方法提交的數據,但是,WEB伺服器讀取數據的順序是,先取GET中的數據,沒有再去POST中的數據,沒有還會再去COOKIES中的數據,上面的代碼還沒有防cookies注入。防cookies注入就比較簡單了,cookies的id值一般只為阿拉伯數字,但是cookies注入必須得在id中構造代碼,只要在獲得參數UID後,對其進行過濾就可以了,代碼如下:

php 代碼復制內容到剪貼板

<!-- ?php

if($_COOKIE[id]!=null) {

//判斷cookies不為空

foreach ($_COOKIE[id] as $key=>$id){

//讀取cookies中的值

if (is_numeric($id)<0){

echo " ";

}

}



?>

將上述代碼保存為hk.php。

所以在平時應用時,在網頁上加上include("ak.php");與include("hk.php");

2、 ASP防注入過濾代碼

<%

--------說明------------------

使用方法: 在需要防注的頁面頭部用 SSI ʱ B>
包含就可以了

友情提示:把代碼復制到CONN.asp(資料庫連接文件) 那麼,只要包含了CONN的所有文件都防注了

-------- ------------------------

Dim xf_Post,xf_Get,xf_In,xf_Inf,xf_Xh,xf_db,xf_dbstr

自定義需要過濾的字串,用 "|" 分隔

xf_In = "|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

xf_Inf = split(xf_In,"|")

If Request.Form<>"" Then

For Each xf_Post In Request.Form

For xf_Xh=0 To Ubound(xf_Inf)

If Instr(LCase(Request.Form(xf_Post)),xf_Inf(xf_Xh))<>0 Then

Response.Write ""

Response.Write "非法操作!系統做了如下記錄↓
"

Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"
"

Response.Write "操作時間:"&Now&"
"

Response.Write "操作頁面:"&Request.ServerVariables("URL")&"
"

Response.Write "提交方式:POST
"

Response.Write "提交參數:"&xf_Post&"
"

Response.Write "提交數據:"&Request.Form(xf_Post)

Response.End

End If

Next

Next

End If

If Request.QueryString<>"" Then

For Each xf_Get In Request.QueryString

For xf_Xh=0 To Ubound(xf_Inf)

If Instr(LCase(Request.QueryString(xf_Get)),xf_Inf(xf_Xh))<>0 Then

Response.Write ""

Response.Write "非法操作!系統已經給你做了如下記錄↓
"

Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"
"

Response.Write "操作時間:"&Now&"
"

Response.Write "操作頁面:"&Request.ServerVariables("URL")&"
"

Response.Write "提交方式:GET
"

Response.Write "提交參數:"&xf_Get&"
"

Response.Write "提交數據:"&Request.QueryString(xf_Get)

Response.End

End If

Next

Next

End If

%>

同樣,再將cookies防一下,代碼加在數據提交頁。

if(Request.Cookies["uid"]!=null)

{

uid=Request.Cookies["uid"].value;

isnumeric cooidesID = new isnumeric();

//這是一個類

if (cooidesID.reIsnumeric(ruid))

//如果是數字就運行下面的

{

string str="select * from userTable where id="+uid;

...

}

}

3、 JSP防注入過濾代碼

10. sql注入漏洞如何修復

要防止sql注入其實不難,你知道原理就可以了。
1、所有的sql注入都是從用戶的輸入開始的。如果你對所有用戶輸入進行了判定和過濾,就可以防止sql注入了。用戶輸入有好幾種,我就說說常見的吧。
2、文本框、地址欄里***.asp?中?號後面的id=1之類的、單選框等等。一般sql注入都用地址欄里的。。。。
3、對於所有從上一頁傳遞過來的參數,包括request.form
、request.qurrystring等等進行過濾和修改。如最常的***.asp?id=123
,我們的id只是用來對應從select
里的id,而這id一般對應的是一個數據項的唯一值,而且是數字型的。這樣,我們只需把id的值進行判定,就可以了。