SQL注入攻擊零距離

來源:互聯網
上載者:User

 

一次次的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了:)程式簡單的出奇,他的功能可不小哦:)你的網站可以比以前安全許多。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.