国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于參數(shù)查詢防止SQL注入攻擊的方法

2012-01-12 06:41隋勵麗張恒博
大連民族大學學報 2012年5期
關鍵詞:注入式攻擊者語句

隋勵麗,張恒博

(大連民族學院計算機科學與工程學院,遼寧大連 116605)

基于參數(shù)查詢防止SQL注入攻擊的方法

隋勵麗,張恒博

(大連民族學院計算機科學與工程學院,遼寧大連 116605)

本文分析了SQL注入攻擊的原理和攻擊步驟的方法,針對ASP網站重點分析了SQL注入攻擊的實現(xiàn)原理、實現(xiàn)過程,并且針對性地提出了利用參數(shù)查詢有效預防SQL注入攻擊的策略實現(xiàn)。該策略包括檢查用戶輸入、使用類型安全的SQL參數(shù)、使用存儲過程、進行數(shù)據加密以及進行安全部署等,能很好地加強ASP網站應用程序的安全性,可有效防范絕大多數(shù)針對網站本身SQL注入式攻擊。

SQL;SQL注入攻擊;參數(shù)查詢;ADO

隨著互聯(lián)網的發(fā)展,大量的web網站開始涌現(xiàn),極大地方便了人們的信息獲取需求。與此同時,黑客針對網站的攻擊也屢屢出現(xiàn),造成了或多或少的經濟損失。在這些攻擊中,SQL注入攻擊是黑客最常用手段之一。由于SQL數(shù)據庫的廣泛使用,以及web程序、web服務器和數(shù)據庫服務器等的一些常見的漏洞,導致了SQL注入的普遍性與巨大危害性。因此,研究SQL注入攻擊及其應對方案對保障網站安全具有重要意義[1-6]。本文結合示例介紹SQL注入式攻擊行為以及如何對該類型的攻擊進行有效防范。

1 SQL注入攻擊

SQL注入攻擊源于英文“SQL Injection Attack”,以下簡稱SIA。目前對SQL注入技術還沒有標準的定義,常見的是對這種攻擊形式、特點的描述。所謂SQL注入攻擊,就是利用SQL注入技術來實施的網絡攻擊。在基于SQL Server服務器的Web應用程序中,因為開發(fā)周期和程序員水平差異等因素的影響,許多該類型的應用程序在設計與開發(fā)時沒有充分考慮到數(shù)據合法性校驗問題,對SQL語句傳入的參數(shù)沒有做出嚴格的檢查和處理,使其在應用中存在安全隱患。通常將存在SQL注入點的程序或者網站稱為SQL注入漏洞,即SQL注入是在有數(shù)據庫連接的Web應用程序中出現(xiàn)的一種漏洞,在這類應用程序中允許用戶輸入查詢條件,攻擊者將查詢條件嵌入到SQL查詢語句中,利用SQL語法構造出畸形的SQL語句,發(fā)送到與該應用程序相關聯(lián)的數(shù)據庫服務器中去執(zhí)行,導致攻擊者能夠欺騙數(shù)據庫服務器執(zhí)行非授權的任意查詢,根據程序查詢返回的結果,攻擊者可以獲取他想得到的信息,比如數(shù)據庫服務器管理員的賬號和密碼。

大多數(shù)程序都會或多或少地使用SQL語句和數(shù)據庫打交道。在程序代碼中,SQL語句以字符串的形式存在,如:

這個例子以數(shù)據列column1、column2的值分別為value1、value2作為過濾條件,從數(shù)據表table1中查詢column1、column2等數(shù)據列。其中column1為整數(shù)類型,column2為字符串類型。很多時候,value1與value2的值在程序運行時才能確定,這意味著SQL語句只能在程序運行中動態(tài)生成。不少開發(fā)人員喜歡采用字符串拼湊的方式生成SQL語句,形如

這種生成SQL語句的方式存在安全隱患,很容易導致SQL注入式攻擊。又以上面的SQL語句為例,如果攻擊者為column2指定的值為“’OR‘’=‘”(不包含雙引號),則得到的SQL語句為

OR‘’=‘’,使WHERE子句形同虛設,table1中所有的記錄都會查詢出來。如果攻擊者更缺德一點,為column2指定的值為“’;DELETE FROM table1WHERE‘’=‘”(不包含雙引號),則得到的SQL語句為

執(zhí)行之后,數(shù)據表table1就被清空了[1]。

2 SQL注入的防御策略

以上的問題都可以通過參數(shù)化查詢解決。上面的SQL語句如果采用參數(shù)化查詢的方式,則表示為:

其中兩個問號(?)是待定的數(shù)據列的值。在有些開發(fā)平臺,問號的地方可能用有指定標記的命名參數(shù)代替,如:

不管是問號還是命名參數(shù),咋一看都似乎與字符串格式化差不多。不過,在參數(shù)化查詢中,程序直接把這個包含待定值的SQL語句提交給數(shù)據庫,由數(shù)據庫引擎為之生成查詢計劃,之后,程序以參數(shù)的方式提供這些值。數(shù)據庫引擎把參數(shù)中的值應用到查詢計劃中,然后執(zhí)行查詢結果。如果改變參數(shù)的值后再執(zhí)行,則得到不同的查詢結果,但SQL語句不需要重新提交,查詢計劃也不需要重新生成,參數(shù)的修改對查詢計劃沒有影響[3]。

哪怕參數(shù)中包含精心設計的特殊字符,也不會形成SQL注入式攻擊。參數(shù)改變的次數(shù)越多,則查詢計劃的重用性越高。與程序設計語言中的函數(shù)或過程類似,SQL語句的參數(shù)也可以分為輸入參數(shù)、輸出參數(shù)及輸入輸出參數(shù),其中輸入參數(shù)最為常見,上面的查詢例子中的兩個參數(shù)都是輸入參數(shù)。參數(shù)的類型可以是整數(shù)、浮點數(shù)、字符串乃至二進制數(shù)據,采用參數(shù)化查詢,可以很方便地導入二進制數(shù)據。

3 SQL注入防御策略的實現(xiàn)

參數(shù)化查詢得到各種主流編程語言和開發(fā)工具的廣泛支持。下面分別介紹ADO這3種數(shù)據訪問模型中的參數(shù)化查詢方式。

3.1 ADO中的參數(shù)化查詢

在ADO中,查詢的一般過程是創(chuàng)建Connection對象連接數(shù)據庫,再創(chuàng)建Command對象執(zhí)行SQL語句或存儲過程。如果SQL語句有返回數(shù)據,則用游標方式遍歷Recordset中的每一行,讀取查詢結果。在一般場合,Command對象可以省略,其只能由Connection對象和Recordset對象代替。不過如果采用參數(shù)化查詢,則少不了Com-mand對象。該對象創(chuàng)建后,先指定SQL語句,然后創(chuàng)建SQL語句中待定的各個參數(shù),給參數(shù)賦值后再執(zhí)行Command對象。

待定的參數(shù)用Parameter對象代表。在Parameter對象中,Name屬性可設置或返回參數(shù)名稱,Value屬性可設置或返回參數(shù)值,Direction屬性指示是輸入參數(shù)、輸出參數(shù)還是輸入輸出參數(shù),Type屬性定義參數(shù)的數(shù)據類型,其他幾個屬性可設置或返回參數(shù)特性。

Command對象有一個Parameters屬性,它是Parameters集合類型,其中包含SQL語句(或存儲過程)的所有參數(shù)。在Parameters集合中,可以通過名稱或序號訪問各個參數(shù)。通常用Command對象的CreateParameter方法創(chuàng)建每個Parameter對象,再用Parameters集合的Append方法添加進來。Command對象還有一個布爾類型的Prepared屬性,該屬性如果為True,則表示該指令在第一次執(zhí)行之前必須保存查詢語句[2]。

3.2 ASP防御SQL注入舉例

為了使大家對ADO中的參數(shù)化查詢有更清晰的認識,這里舉一個例子。在這個例子中,在login.htm網頁上輸入賬號和密碼后,提交執(zhí)行op.asp訪問Access數(shù)據庫。數(shù)據庫路徑為d:siatest.mdb,里面的數(shù)據表usertable包含兩個數(shù)據列,其中username,password都為文本類型。

Login.htm中輸入賬號文本框名稱為UID,輸入密碼文本框名稱為PWD,form表單的action屬性值為”op.asp”

Op.asp的代碼如下:

以上程序,如果把CommandText的值改為:" select*from usertable where username="&uid&"and password="&pwd&";",當賬號輸入1 or‘1’=1,密碼輸入任何值都能通過。而本程序賬號輸入1 or‘1’=1,密碼輸入任何值都不能通過,只有賬號和密碼都正確,才能通過。由此可見本方法有效防止了SQL注入攻擊。

4 結語

本文針對ASP網站,重點介紹SQL注入攻擊的實現(xiàn)原理、實現(xiàn)過程、防御策略及防御策略實現(xiàn),這些策略包括:檢查用戶輸入、使用類型安全的SQL參數(shù)、使用存儲過程、進行數(shù)據加密以及進行安全部署等。全部使用這些策略能很好地加強ASP網站應用程序的安全性,可有效防范絕大多數(shù)針對網站本身SQL注入式攻擊。當然,網絡環(huán)境的安全性和系統(tǒng)平臺的安全性也不容忽視,只有各個環(huán)節(jié)的安全性得到強化,才能最大限度保障安全。

[1]王志虎.SQL注入攻擊及其預防方法研究[J].煤炭技術,2011(1):95-97.

[2]佟利亭.Asp中利用參數(shù)對象實現(xiàn)參數(shù)查詢[J].福建電腦,2009(5):178.

[3]王小鑒.SQL參數(shù)化查詢詳解[J].電腦編程技巧與維護,2011(1):42-48.

[4]高洪濤.SQL注入攻擊途徑及策略分析[J].網絡安全技術與應用,2011(3):14-16.

[5]吳國標.SQL注入攻擊原理與防范[J].紹興文理學院學報:自然科學版,2010(4):64-68.

[6]李婷.ASP.NET網站中SQL注入攻擊及防范[J].科技資訊,2010(34):23.

A Method to Defend against SQL Injection Attack Based on Parameter Query

SUI Li-li,ZHANG Heng-bo
(School of Computer Science&Engineering,Dalian Nationalities University,Dalian Liaoning 116605,China)

This paper describes the principle and the methods of SQL injection attacks.And the paper puts the emphasis on the implementation methods and procedures of SQL injection attacks to the ASP website.The strategies are proposed to defend SQL injection attacks effectively by using the parameter query methods,which include checking user input,using type-safe SQL parameters,using stored procedures and so on.And the data encrypting and security deployment are used as well.The methods proposed in this paper can reinforce the security of the ASP web application,and can effectively prevent the website from the most of SQL injection attacks.

SQL;SIA;parameter query;ADO

TP393.08

A

1009-315X(2012)05-0495-03

2011-11-07;最后

2012-02-10

隋勵麗(1972-),女,遼寧營口人,講師,主要從事計算機應用技術研究。

(責任編輯 劉敏)

猜你喜歡
注入式攻擊者語句
機動能力受限的目標-攻擊-防御定性微分對策
重點:語句銜接
GE發(fā)電機轉子接地保護的原理
高中化學教學模式的探討與學習
正面迎接批判
紅外導引頭注入式閉環(huán)試驗的邊界能力及一致性
有限次重復博弈下的網絡攻擊行為研究
改進注入式混合有源濾波器的研究與仿真分析
如何搞定語句銜接題
作文語句實錄