一次次的SQL注射入侵,一次次的網站被黑,總是那句話,漏洞在所難免,難道一點辦法都沒嗎?這篇文章就是為大家解析下SQL注 射的原理,以及給出一些預防方法。
一:基礎篇
分析下漏洞產生的原因,主要還是參數沒完全過濾。
cntid = Request("cntid")
這樣的語句就存在一個注入攻擊,首先,沒驗證是否為整數
解決方法:
<% 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
%>
這是一個最基礎的過濾,如果提交非法參數效果如圖1:
那么我們還需要注意什么?
用戶名的注冊,必須過濾掉一些特殊符號,繼續剛才的話題,我們假設是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 " 用戶名中含有非法字符(“=”,“%”,
“?”,“&”,“;”,“,”,“”,” ”,“>”,“<”,“$”,“#”,“@”) <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
%>
利用這個原理,我們還能過濾一些可能存在cookies跨站腳本的地方:
只要過濾cookie,java這樣的字眼,方法同上。需要注意的事,類似與用戶登陸的地方,用戶名一定要username =replace(request("username "),"",""),意思就是把’過濾成”,這樣做的目的就是預防’ or ‘’=’這樣的入侵。
可是如果類似www.xx.com/list.asp? action = search
我們可以這樣過濾
<% action=request("action")
select case action
case "search"
call search()
case else
call search()
end select
sub search ()
這里是search的內容
end sub
%>
大家可以看到無論對錯,都執行search。這樣也可以預防SQL。
二:密碼安全
采用不可逆加密是必須的選擇,防止別人探測到密碼后暴力破解,MD5用艿氖迪址淺<虻ィ?姹閎フ腋鯩D5函數體,很多源代碼都 帶。
<!-- #include file=" md5.asp" --> 這里是引入MD5函數
<% dim username
username =md5(md5(replace(request("username "),"","")))
%>
這里就實現了2次MD5加密,一般2-3次就足夠了,暴力破解比較困難:)
COOKIES欺騙問題很嚴重,所以一般后臺管理員一定要session驗證。實現方法
我們在登入成功后寫入
session("btadmin")=rsadmin("admin")
建立一個驗證函數cookies.asp
內容如下
<%
if session("btadmin")="" then
response.redirect "admin.asp"
end if
%>
在每個管理員操作文件的開頭加上
<!--#include file="cookies.asp" -->
這樣就可以預防非法登陸了:)
我們經??吹津炞C碼這樣的東西,這樣做是為了預防暴力破解。
實現方法,假設登入為login.asp
我們在開頭加:
<%
dim p
randomize ‘對隨機數生成器做初始化的動作
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:
三:數據庫安全
爆庫的方法越來越多,我們來看下:如圖3
按X檔案以前文章一位大俠說的,將/替換為 %5c,確實很多網站都存在這樣的漏洞。大家可以清楚的看到數據庫地址。
偶什么方法可以預防呢?
。。。(代碼見雜志)。。。。。。。。。。。
這是一個數據庫連接文件,大部分為conn.asp
關鍵在與on error resume next出錯了也執行下一句
我們看下他的運行效果。
除了圖片顯示不正常外,沒暴露數據庫:)
其實浪心建議用WIN2003做服務器,當你用%5c 來替換的時候
_blank>http://127.0.0.1/fourm.asp?cntid=4
自動換成%5cfourm.asp/多個/
_blank>http://127.0.0.1%5cfourm.asp/?cntid=4
找不到服務器,唯一的結果,更厲害:)
還有一種方法就是不讓對方下載數據庫
方法是
新建一個notdown表,字段為nodown, 數據類型為ole 如圖4
保存為mdb.mdb
OK,我們寫個nodown.asp
代碼如下
。。。(代碼見雜志)。。。。。。。。。。。
把他同數據庫一同上傳到你的空間,或者本地做個IIS,運行nodown.asp
提示添加記錄成功。
OK,把數據庫重新命名為mdb.asp
直接在瀏覽器里輸入數據庫地址:提示
Active Server Pages 錯誤 ASP 0116
丟失腳本關閉分隔符
/bbs/cntlovebbs.asp,行 44042
Script 塊缺少腳本關閉標記(%>)。
用快車下載提示HTTP 500錯誤
OK到這里數據庫安全也過去了:)下面說下浪心新的思維:)沒任何技術難度,會VB的都會寫:)
四:安全的后臺登入
。。。(代碼見雜志)。。。。。。。。。。。
OK了:)程序簡單的出奇,他的功能可不小哦:)你的網站可以比以前安全許多。
原文轉自:http://www.anti-gravitydesign.com