一次次的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" --> 這樣就可以預防非法登陸了:) 我們經常看到驗證碼這樣的東西,這樣做是為了預防暴力破解。 實現方法,假設登入為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了:)程式簡單的出奇,他的功能可不小哦:)你的網站可以比以前安全許多。 |
|