防範SQL注入的幾種方法 3

2021-09-21 12:11:26 字數 3286 閱讀 4024

對於一些整機使用的站點來說防止通過

80埠攻擊而直接拿到整機管理許可權,這一點就變得至關重要了。對

xp_cmdshell 

的過濾就成為首要,很多站點的程式都是用

get或者是

get與

post

混合來提交資料的,對於此,我們給出一種防止

get進行

sql注入的程式:如程式體(5)

fqys=request.servervariables("query_string") 

dim nothis(18) 

nothis(0)="net user" 

nothis(1)="xp_cmdshell" 

nothis(2)="/add" 

nothis(3)="exec%20master.dbo.xp_cmdshell" 

nothis(4)="net localgroup administrators" 

nothis(5)="select" 

nothis(6)="count" 

nothis(7)="asc" 

nothis(8)="char" 

nothis(9)="mid" 

nothis(10)="'" 

nothis(11)=":" 

nothis(12)="""" 

nothis(13)="insert" 

nothis(14)="delete" 

nothis(15)="drop" 

nothis(16)="truncate" 

nothis(17)="from" 

nothis(18)="%" 

errc=false 

for i= 0 to ubound(nothis) 

if instr(fqys,nothis(i))<>0 then 

errc=true 

end if 

next 

if errc then 

response.write "" 

response.end 

end if 

程式體(5)

我要做點宣告的是:以上的程式只是對

get方式提交的資料進行的過濾,千萬不要盲目套用。

像其他一些來自

asp request 

物件(reques

、request.querystring

、request.form

、request.cookies

和request.servervariables) 

的使用者輸入的攻擊方法的方法,大致都集中在指令碼期望的輸入變數是數字變數

(id) 

上,當然我們不能只看數字變數,比如:

[url] ... and left[/url](userpasswor 

d,1)='a 

[url] ... sp;and userpasswor [/url]

d=』or』』=』 

另外,如何單一的防止類似這樣的注入錯誤

?[url] ;delete forum_forum;--&page=33 

防範程式

: 程式體

(6)……addtopic.asp?action=add…… 

……addtopic.asp?action=delect…… 

action1=trim(request.querystring())

if left(action1,7)<>"action=" then '

限定querystring

必須為action=

error(err01)'

錯誤處理

else

action=request.querystring("action")'

取得querystring的值

end if

select case action'

對querystring

進行處理

case "add"

.....

case "delete"

......

case else '

如果querystring

沒有這個值則進行錯誤處理

error(err02)

end select 

程式體(6) 

出現這樣的攻擊,使我們的站長們不得不又再次頭痛,這裡我可以給出大家乙個解決最好辦法,一般的來說,使用者名稱長度字元數不會超過

15個字元,大都為

14字元。那麼我們從長度出發,來進行過濾:如程式體(7)

name=replace(name,」』」,」」) 

if len(name)>16 then 

response.write 「 

你要做什麼

?」 response.end 

end if 

程式體(7)

為什麼我們這裡以及過濾了單引號,怎麼還要再次取乙個長度限制呢?不多說了,看看

4ngel

的文章先

《饒過'

限制繼續射入

>> .

別問我怎麼轉數字格式,我不會,嘿嘿

…^_^!

還繼續回到我們的主題

,」 指令碼期望的輸入變數是數字變數

(id)」.

怎樣進行注入防範,天吶

,方法太多了,最直接的就是判斷是否是數字整型

,還有一些比較個

*的驗證辦法

,我們一一介紹一下如:

程式體(8)一,

判斷數字是否是整型

p_lngid = clng(request("id")) 

二取字長

這一點我相信一般的資料長度不會大於

8位所以

: if len(id)>8 then 

response.write 「bedpost」 

response end 

end if 

三我認為這是一種比較冒險的辦法

,就是再進行一次資料庫的查詢

,如果資料庫表內沒有相同的值與之相同那麼返回錯誤

. sql = "select name from category where id="&id 

set temp=conn.execute(sql) 

if temp.bof or temp.eof then 

response.redirect("index.asp") 

else 

cat_name=temp("name") 

end if 

set temp=nothing 

防止sql注入的幾種方法

sql注入攻擊的總體思路 1 尋找到sql注入的位置 2 判斷伺服器型別和後台資料庫型別 3 針對不通的伺服器和資料庫特點進行sql注入攻擊sql注入攻擊例項 比如在乙個登入介面,要求輸入使用者名稱和密碼 可以這樣輸入實現免帳號登入 使用者名稱 or 1 2 密 碼 點登陸,如若沒有做特殊處理,那麼...

SQL 注入與防範方法

前言 所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。首先要有乙個思想觀念 1.以下例項中,輸入的使用者名稱必須為字母 數字及下劃線的組合,且使用者名稱長度為 8 到 20 個字元之間 if preg match w...

SQL注入的防範

所謂sql注入,就是通過把sql命令偽裝成正常的http請求引數,傳遞到服務端,欺騙伺服器最終執行惡意的sql命令,達到入侵目的。攻擊者可以利用sql注入漏洞,查詢非授權資訊,修改資料庫伺服器的資料,改變表結構,甚至是獲取伺服器root許可權。預編譯語句使用引數佔位符來替代需要動態傳入的引數,這樣攻...