防SQL注入正規表示式的方法 菜鳥級可用

2022-04-30 12:12:09 字數 2744 閱讀 4953

首先了解一下什麼是sql注入(網路找的)

sql注入是從正常的www埠訪問,而且表面看起來跟一般的web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對sql注入發出警報,如果管理員沒檢視iis日誌的習慣,可能被入侵很長時間都不會發覺。

但是,sql注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的sql語句,從而成功獲取想要的資料,是高手與「菜鳥」的根本區別。

最容易忽略的問題就是sql注入漏洞的問題。用nbsi

2.0對網上的一些asp**稍加掃瞄,就能發現許多asp**存在sql注入漏洞,教育網裡高校內部機構的一些**這種漏洞就更普遍了,可能這是因為這

些防範措施的用處,須先詳細講解利用sql注入漏洞入侵的過程。新手們看明白啦。

相當大一部分程式設計師在編寫**的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。如這是乙個正常的**http://localhost/lawjia/show.asp?id=444,將這個**提交到伺服器後,伺服器將進行類似select

* from 表名 where 字段="&id的查詢(id即客戶端提交的引數,本例是即444),再將查詢結果返回給客戶端,如果這裡客戶端故意提交這麼乙個**:

and user>0,這時,伺服器執行select * from 表名 where 字段=444 and

user>0這樣的查詢,當然,這個語句是執行不下去的,肯定出錯,錯誤資訊如下:

·錯誤型別:

microsoft ole db provider for odbc drivers

(0x80040e07)

[microsoft][odbc sql server driver][sql server]將 nvarchar

值 'sonybb' 轉換為資料型別為 int 的列時發生語法錯誤。

/lawjia/show.asp, 第 47 行

但是別有用心的人從這個出錯資訊中,可以獲得以下資訊:該站使用ms_sql資料庫,用odbc連線,連線帳號名為:sonybb。所謂sql注入

(sql

injection),就是利用程式設計師對使用者輸入資料的合法性檢測不嚴或不檢測的特點,故意從客戶端提交特殊的**,從而收集程式及伺服器的資訊,從而獲

取想得到的資料。通常別有用心者的目標是獲取**管理員的帳號和密碼。比如當某個人知道**管理員帳號存在表login中,管理員帳號名為admin,他

想知道管理員密碼,這裡他從客戶端接著提交這樣乙個**:

from login where user_name='admin')>0,返回的出錯資訊如下:

·錯誤型別:

microsoft ole db provider for odbc drivers

(0x80040e07)

[microsoft][odbc sql server driver][sql server]將 varchar

值 '!@#*&admin' 轉換為資料型別為 int 的列時發生語法錯誤。

/lawjia/show.asp, 第 47 行

你知道嗎?上面標紅的部分就是管理員帳號admin的密碼!雖然很複雜,讓人看幾遍也記不住的,但它就這樣顯示在你面前了,這時您就可以用這個帳號和密

碼接管人家的**了!這時你可能還會說,如果他不是事先知道管理員帳號存在表login中,而且知道管理員帳號為admin,那他就不可能獲得管理員密

碼。你錯了,只要人家願意多花時間嘗試,他將可以獲得資料庫連線帳號許可權內所能獲得的所有資訊!具體過程請參看網上的這篇文章:sql注入漏洞全接觸。

先了解到這裡。針對我的專案需求我寫了乙個非常簡單的正規表示式來進行過濾。

**如下:

1public

static

bool

isregexnumber(

string

str)28

else912

} 在網上找了一些感覺都比我這好多多的。

1bool

checkparams(

params

object

args)2;

3if(lawlesses

==null

||lawlesses.length

<=0)

return

true

; //

構造正規表示式,

例:lawlesses是=號和

'號,則正規表示式為 .*[=}'].

*5string

str_regex="

.*[";6

for(

inti=0

;i<

lawlesses.length-1

;i++)7

str_regex

+=lawlesses[i]+"

|";8

str_regex

+=lawlesses[lawlesses.length-1

]+"].*";

9//foreach(object arg in args)

1013

else

if(arg 

isicollection)

//如果是乙個集合,則檢查集合內元素是否字串,是字串,就進行檢查 18}

19}20}

21return

true

;}

正規表示式防止SQL注入

本來對正規表示式不是很了解,但由於專案需要,專案主要沒有採用儲存過程方式來儲存 sql語句,所以很有可能被黑客用sql注入攻擊,現在就在網上找了找解決辦法,在業務層來過濾sql語句,防止sql注入攻擊,主要是採用了正規表示式,因為正規表示式對字串的操作是很強大的.首先用乙個validate 類來封裝...

sql正規表示式 SQL中的正規表示式

sql正規表示式 sql中的正規表示式 sql的查詢語句中,有時會需要引進正規表示式為其複雜搜尋指定模式。下面給出一些 regexp 在mysql 語句中應用 非全部 1 匹配字串的開始部分。mysql select fo nfo regexp fo 0mysql select fofo regex...

SQL 正規表示式

由mysql提供的模式匹配的其他型別是使用擴充套件正規表示式。當你對這類模式進行匹配測試時,使用regexp和not regexp操作符 或rlike和not rlike,它們是同義詞 擴充套件正規表示式的一些字元是 匹配任何單個的字元。乙個字元類 匹配在方括號內的任何字元。例如,abc 匹配 a ...