SQL注入攻擊零距離(lí)

發布時間:2007年02月24日      浏覽次數:2626 次
一(yī)次次的sql注射入侵,一(yī)次次的網站被黑,總是那句話(huà),漏洞在所難免,難道一(yī)點辦法都沒嗎(ma)?這篇文章就是爲大(dà)家解析下(xià)sql注 射的原理,以及給出一(yī)些預防方法。
一(yī):基礎篇
分(fēn)析下(xià)漏洞産生(shēng)的原因,主要還是參數沒完全過濾。
cntid = request("cntid")
這樣的語句就存在一(yī)個注入攻擊,首先,沒驗證是否爲整數
解決方法:
<% dim cntid
cntid =replace(request("cntid "),"","")
if (not isnumeric(cntid)) then
call error
response.end
end if
sub error()
response.write " <table align=center width=300 border=0
cellpadding=4 cellspacing=0 >"
response.write " <tr > "
response.write " <td colspan=2 height=15> "
response.write " <div align=center>
操作: 參數錯誤!</div>"
response.write " </td>"
response.write " </tr>"
response.write " <tr> "
response.write " <td colspan=2 height=23> "
response.write " <div align=center><br><br>"
response.write " 參數錯誤!!!非法探測已經被記錄 <br><br>"
response.write " <a href=javascript:onclick=history.go(-1)>返回</a>"
response.write " <br><br></div></td>"
response.write " </tr> </table></body></html>"
end sub
%>
這是一(yī)個最基礎的過濾,如果提交非法參數效果如圖1:
那麽我(wǒ)(wǒ)們還需要注意什麽?
用戶名的注冊,必須過濾掉一(yī)些特殊符号,繼續剛才的話(huà)題,我(wǒ)(wǒ)們假設是username.
<% dim username
username =replace(request("username "),"","")
if instr(username,"=")>0 or instr(username,"%")>0 or instr(username,chr(32))>0 or instr(username,"?")>0 or instr(username,"&")>0 or instr(username,";")>0 or
instr(username,",")>0 or instr(username,"")>0 or instr(username,",")>0 or instr
(username,chr(34))>0 or instr(username,chr(9))>0 or instr(username,"")>0 or
instr(username,">")>0 or instr(username,"<")>0 or instr(username,"$")>0 or instr
(username,"#")>0 or instr(username,"@")>0 then
call error
response.end
end if
sub error()
response.write " <table align=center width=300 border=0
cellpadding=4 cellspacing=0 >"
response.write " <tr > "
response.write " <td colspan=2 height=15> "
response.write " <div align=center>操作: 參數錯
誤!</div>"
response.write " </td>"
response.write " </tr>"
response.write " <tr> "
response.write " <td colspan=2 height=23> "
response.write " <div align=center><br><br>"
response.write " 用戶名中(zhōng)含有非法字符(“=”,“%”,
“?”,“&”,“;”,“,”,“”,””,“>”,“<”,“$”,“#”,“@”) <br><br>"
response.write " <a
href=javascript:onclick=history.go(-1)>返回</a>"
response.write " <br><br></div></td>"
response.write " </tr> </table></body></html>"
end sub
%>
利用這個原理,我(wǒ)(wǒ)們還能過濾一(yī)些可能存在cookies跨站腳本的地方:
隻要過濾cookie,java這樣的字眼,方法同上。需要注意的事,類似與用戶登陸的地方,用戶名一(yī)定要username =replace(request("username "),"",""),意思就是把’過濾成”,這樣做的目的就是預防’ or ‘’=’這樣的入侵。
可是如果類似www.xx.com/list.asp? action = search
我(wǒ)(wǒ)們可以這樣過濾
<% action=request("action")
select case action
case "search"
call search()
case else
call search()
end select
sub search ()
這裏是search的内容
end sub
%>
大(dà)家可以看到無論對錯,都執行search。這樣也可以預防sql。
二:密碼安全
采用不可逆加密是必須的選擇,防止别人探測到密碼後暴力破解,md5用艿氖迪址淺<虻姹闳腋鯩d5函數體(tǐ),很多源代碼都 帶。
<!-- #include file=" md5.asp" --> 這裏是引入md5函數
<% dim username
username =md5(md5(replace(request("username "),"","")))
%>
這裏就實現了2次md5加密,一(yī)般2-3次就足夠了,暴力破解比較困難:)
cookies欺騙問題很嚴重,所以一(yī)般後台管理員(yuán)一(yī)定要session驗證。實現方法
我(wǒ)(wǒ)們在登入成功後寫入
session("btadmin")=rsadmin("admin")
建立一(yī)個驗證函數cookies.asp
内容如下(xià)
<%
if session("btadmin")="" then
response.redirect "admin.asp"
end if
%>
在每個管理員(yuán)操作文件的開(kāi)頭加上
<!--#include file="cookies.asp" -->
這樣就可以預防非法登陸了:)
我(wǒ)(wǒ)們經常看到驗證碼這樣的東西,這樣做是爲了預防暴力破解。
實現方法,假設登入爲login.asp
我(wǒ)(wǒ)們在開(kāi)頭加:
<%
dim p
randomize ‘對随機數生(shēng)成器做初始化的動作
p = int((8999 * rnd) + 1000)
session("cntcode")=p %>
插入驗證代碼的表格
<tr>
<td valign=middle>請輸入驗證碼</td>
<td valign=middle>
<input name=yanzhen type=text>
在左邊框輸入: <%=session("cntcode")%></td></tr>
最後驗證程序:
<%
if request("yanzhen")="" or trim(session("cntcode"))
<>trim(replace(request("yanzhen"),"","")) then
response.write " 請正确輸入您的驗證碼。"
response.end
else
%>
程序運行效果如圖2:
三:數據庫安全
爆庫的方法越來越多,我(wǒ)(wǒ)們來看下(xià):如圖3
按x檔案以前文章一(yī)位大(dà)俠說的,将/替換爲 %5c,确實很多網站都存在這樣的漏洞。大(dà)家可以清楚的看到數據庫地址。
偶什麽方法可以預防呢?
。。。(代碼見雜(zá)志(zhì))。。。。。。。。。。。
這是一(yī)個數據庫連接文件,大(dà)部分(fēn)爲conn.asp
關鍵在與on error resume next出錯了也執行下(xià)一(yī)句
我(wǒ)(wǒ)們看下(xià)他的運行效果。
除了圖片顯示不正常外(wài),沒暴露數據庫:)
其實浪心建議用win2003做服務器,當你用%5c 來替換的時候
_blank>http://127.0.0.1/fourm.asp?cntid=4
自動換成%5cfourm.asp/多個/
_blank>http://127.0.0.1%5cfourm.asp/?cntid=4
找不到服務器,唯一(yī)的結果,更厲害:)
還有一(yī)種方法就是不讓對方下(xià)載數據庫
方法是
新建一(yī)個notdown表,字段爲nodown, 數據類型爲ole 如圖4
保存爲mdb.mdb
ok,我(wǒ)(wǒ)們寫個nodown.asp
代碼如下(xià)
。。。(代碼見雜(zá)志(zhì))。。。。。。。。。。。
把他同數據庫一(yī)同上傳到你的空間,或者本地做個iis,運行nodown.asp
提示添加記錄成功。
ok,把數據庫重新命名爲mdb.asp
直接在浏覽器裏輸入數據庫地址:提示
active server pages 錯誤 asp 0116
丢失腳本關閉分(fēn)隔符
/bbs/cntlovebbs.asp,行 44042
script 塊缺少腳本關閉标記(%>)。
用快車(chē)下(xià)載提示http 500錯誤
ok到這裏數據庫安全也過去(qù)了:)下(xià)面說下(xià)浪心新的思維:)沒任何技術難度,會vb的都會寫:)
四:安全的後台登入
。。。(代碼見雜(zá)志(zhì))。。。。。。。。。。。
ok了:)程序簡單的出奇,他的功能可不小(xiǎo)哦:)你的網站可以比以前安全許多。
免責聲明:本站相關技術文章信息部分(fēn)來自網絡,目的主要是傳播更多信息,如果您認爲本站的某些信息侵犯了您的版權,請與我(wǒ)(wǒ)們聯系,我(wǒ)(wǒ)們會即時妥善的處理,謝謝合作!