對於一些整機使用的站點來說防止通過
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許可權。預編譯語句使用引數佔位符來替代需要動態傳入的引數,這樣攻...