特黄特色三级在线观看免费,看黄色片子免费,色综合久,欧美在线视频看看,高潮胡言乱语对白刺激国产,伊人网成人,中文字幕亚洲一碰就硬老熟妇

學習啦>學習電腦>電腦安全>網(wǎng)絡安全知識>

如何防范SQL注入漏洞及檢測

時間: 若木632 分享

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

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

  1. SQL注入漏洞攻擊原理

  1. 1 SQL注入漏洞攻擊實現(xiàn)原理

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

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

  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");

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

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

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

  例如Web系統(tǒng)有一個login頁面,這個login頁面控制著用戶是否有權訪問,要求用戶輸入一個用戶名和口令,連接數(shù)據(jù)庫的語句為:

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

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

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

  服務器執(zhí)行查詢或存儲過程,將用戶輸入的身份信息和數(shù)據(jù)庫users表中真實的身份信息進行核對,由于SQL命令實際上已被修改,存在永遠成立的1=1條件,因此已經(jīng)不能真正驗證用戶身份,所以系統(tǒng)會錯誤地授權攻擊者訪問。

  SQL 注入是通過目標服務器的80端口進行的,是正常的Web訪問,防火墻不會對這種攻擊發(fā)出警告或攔截。當Web服務器以普通用戶的身份訪問數(shù)據(jù)庫時,利用SQL注入漏洞就可能進行創(chuàng)建、刪除、修改數(shù)據(jù)庫中所有數(shù)據(jù)的非法操作。而當數(shù)據(jù)庫以管理用戶權限的身份進行登錄時,就可能控制整個數(shù)據(jù)庫服務器。

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

  由于SQL注入漏洞攻擊利用的是通用的SQL語法,使得這種攻擊具有廣泛性。理論上說,對于所有基于SQL語言的數(shù)據(jù)庫管理系統(tǒng)都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。當然,各種系統(tǒng)自身的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所代替,執(zhí)行的結果為true,數(shù)據(jù)庫會認為條件恒成立,會返回一個true,讓攻擊者以合法身份登錄進入下一個頁面。

  (2)執(zhí)行非法操作

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

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

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

  可以看到,id沒有進行任何的處理,直接構成SQL語句并執(zhí)行,而攻擊者在知道該系統(tǒng)數(shù)據(jù)庫中表名及字段名的情況下,利用SQL語句特性(分號是將兩句SQL 語句分開的符號),直接向數(shù)據(jù)庫Tuser表中添加記錄:

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

  (3)執(zhí)行系統(tǒng)命令

  如果Web主機使用MSSQL數(shù)據(jù)庫管理系統(tǒng),那么攻擊者就可以用到xp_cmdshell這個擴展存儲過程,xp_cmdshell是一個非常有用的擴展存儲過程,用于執(zhí)行系統(tǒng)命令,比如dir、net等,攻擊者可以根據(jù)程序的不同,提交不同的語句:

  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主機系統(tǒng)中成功添加了一個管理員帳戶。

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

  2. 1檢測方式

  SQL注入漏洞攻擊檢測分為入侵前的檢測和入侵后的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入漏洞掃描工具軟件。檢測的目的是為預防SQL注入漏洞攻擊,而對于SQL注入漏洞攻擊后的檢測,主要是針對審計日志的查看,SQL注入漏洞攻擊成功后,會在Web Service和數(shù)據(jù)庫的審計日志中留下“痕跡”。

  2. 2檢測方法

  (1)動態(tài)SQL檢查

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

  (2)有效性校驗

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

  (3)數(shù)據(jù)表檢查

  使用SQL注入漏洞攻擊工具軟件進行SQL注入漏洞攻擊后,都會在數(shù)據(jù)庫中生成一些臨時表。通過查看數(shù)據(jù)庫中最近新建的表的結構和內容,可以判斷是否曾經(jīng)發(fā)生過SQL注入漏洞攻擊。

  (4)審計日志檢查

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

  (5)其他

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

  3. SQL注入漏洞防范措施

  SQL注入漏洞攻擊的防范方法有很多種,現(xiàn)階段總結起來有以下方法:

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

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

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

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

  如:這樣顯然會暴露管理員的用戶名、口令信息??梢詫⑵湫薷某桑?/p>

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

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

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

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

  顯然會得到與

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

  相同的結果。

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

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

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

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

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

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

  4. 結束語

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

75369