安全腳本程序的編寫 V1.0第2/3頁
更新時(shí)間:2006年11月23日 00:00:00 作者:
else
if session.contents("UserName")<>"" then
rstmp.open "Select * from User Where userName='"&session.contents("UserName")&"'",conn,3,3
rstmp("logins")=rstmp("logins")+1
rstmp("online")=1
rstmp.update
rstmp.close
Set rstmp=nothing
conn.close
set conn=nothing
response.redirect("index.asp")
end if
end if
end if
%>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="forum.css">
</head>
<body>
<%
function showAnnounce(ErrMsg)
on error resume next
response.write "<p align=center><font color='red'><strong><Big>哈哈</big></strong></font><BR><font
color='#0000FF'>"+ErrMsg+"</font><BR>"+chr(13)+chr(10)
%>
<tr>
<td width="100%">
<p align="center"><br>
<form action="login.asp" method="post">
輸入<INPUT name=username size=8 class='smallInput'>
<BR>哈哈<INPUT name=password size=8 class='smallInput' type=password>
</td>
</tr>
<tr>
<td width="100%">
<p align="center"><br>
<INPUT type="submit" name="B12" class='buttonface' value=μ???>
<font color="#FF0000"><br> <br>
*</font>錯(cuò)了
</td> </form>
</tr>
<%
end function
%>
###---checklogin.asp
<%
dim adname
dim passwd
adname=Request.Form("adname")
passwd=Request.Form("passwd")
if adname="" then
response.redirect "login.asp"
end if
if passwd="" then
response.redirect "login.asp"
end if
if adname="focus-admin" and passwd="1" then
response.redirect "manage.asp"
else
response.redirect "login.asp"
end if
%>
###---checklogin.asp----end
###---manage.asp
<%
dim where
dim where1
dim refererURL
dim refererURL2
dim refererURL3
refererURL=phyURL&"login.as"
refererURL2=phyURL&"edit.asp"
refererURL3=phyURL&"manage.a"
refererURL4=phyURL&"savearti"
where=Request.ServerVariables("HTTP_REFERER")
where=left(where,(len(phyURL)+8))
if where<>refererURL and where<> refererURL2 and where<>refererURL3 and where<>refererURL4 then
Response.Redirect "login.asp"
end if
const MaxPerPage=20
dim totalPut
dim CurrentPage
dim TotalPages
dim i,j
if not isempty(request("page")) then
currentPage=cint(request("page"))
else
currentPage=1
end if
%>
###---manage.asp-----end
2.2 cookie的問題
2.2.1 概念介紹
按照Netscape官方文檔中的定義,Cookie是在HTTP協(xié)議下,服務(wù)器或腳本可以維護(hù)客戶工作站上信息的一種方式。Cookie
是由Web服務(wù)器保
存在用戶瀏覽器上的小廣西文件,它可以包含有關(guān)用戶的信息(如身份識(shí)別號(hào)碼、密碼、用戶在Web站點(diǎn)購物的方式或用戶
訪問該站點(diǎn)的次數(shù))
。無論何時(shí)用戶鏈接到服務(wù)器,Web站點(diǎn)都可以訪問Cookie信息。
通俗地講,瀏覽器用一個(gè)或多個(gè)限定的文件來支持Cookie。這些文件在使用Windows操作系統(tǒng)的機(jī)器上叫做Cookie文件,在
Macintosh機(jī)器上
叫做magic Cookie 文件,這些文件被網(wǎng)站用來在上面存儲(chǔ)Cookie數(shù)據(jù)。網(wǎng)站可以在這些Cookie文件中插入信息,這樣對(duì)有
些網(wǎng)絡(luò)用戶就有些
副作用。有些用戶認(rèn)為這造成了對(duì)個(gè)人隱私的侵犯,更糟的是,有些人認(rèn)為Cookie是對(duì)個(gè)人空間的侵占,而且會(huì)對(duì)用戶的
計(jì)算機(jī)帶來安全性的危
害。
目前有些Cookie是臨時(shí)的,另一些則是持續(xù)的。臨時(shí)的Cookie只在瀏覽器上保存一段規(guī)定的時(shí)間,一旦超過規(guī)定的時(shí)間該
Cookie就會(huì)被系統(tǒng)清
除。例如在PHP中Cookie被用來跟蹤用戶進(jìn)程直到用戶離開網(wǎng)站。持續(xù)的Cookie則保存在用戶的Cookie文件中,下一次用戶
返回時(shí),仍然可以
對(duì)它進(jìn)行調(diào)用。
要了解Cookie,必不可少地要知道它的工作原理。一般來說,Cookie通過HTTP Headers從服務(wù)器端返回到瀏覽器上。首
先,服務(wù)器端在響應(yīng)
中利用Set-Cookie header來創(chuàng)建一個(gè)Cookie,然后,瀏覽器在它的請(qǐng)求中通過Cookie header包含這個(gè)已經(jīng)創(chuàng)建的
Cookie,并且反它返回
至服務(wù)器,從而完成瀏覽器的論證。 例如,我們創(chuàng)建了一個(gè)名字為login的Cookie來包含訪問者的信息,創(chuàng)建Cookie時(shí),
服務(wù)器端的Header如
下面所示,這里假設(shè)訪問者的注冊(cè)名是"Michael Jordan",同時(shí)還對(duì)所創(chuàng)建的Cookie的屬性如path、domain、expires等進(jìn)
行了指定。
Set-Cookie:login=Michael Jordan;path=/;domain=msn.com;
expires=Monday,01-Mar-99 00:00:01 GMT
上面這個(gè)Header會(huì)自動(dòng)在瀏覽器端計(jì)算機(jī)的Cookie文件中添加一條記錄。瀏覽器將變量名為"login"的Cookie賦值
為"Michael Jordon"。注意
,在實(shí)際傳遞過程中這個(gè)Cookie的值是經(jīng)過了URLEncode方法的URL編碼操作的。
這個(gè)含有Cookie值的HTTP Header被保存到瀏覽器的Cookie文件后,Header就通知瀏覽器將Cookie通過請(qǐng)求以忽略路徑的方
式返回到服務(wù)器
,完成瀏覽器的認(rèn)證操作。
此外,我們使用了Cookie的一些屬性來限定該Cookie的使用。例如Domain屬性能夠在瀏覽器端對(duì)Cookie發(fā)送進(jìn)行限定,具
體到上面的例子,
該Cookie只能傳達(dá)室到指定的服務(wù)器上,而決不會(huì)跑到其他的如www.hp.com的Web站點(diǎn)上去。Expires屬性則指定了該
Cookie保存的時(shí)間期
限,例如上面的Cookie在瀏覽器上只保存到1999年3月1日1秒。當(dāng)然,如果瀏覽器上Cookie太多,超過了系統(tǒng)所允許的范
圍,瀏覽器將自動(dòng)對(duì)
它進(jìn)行刪除。至于屬性Path,用來指定Cookie將被發(fā)送到服務(wù)器的哪一個(gè)目錄路徑下。
說明:瀏覽器創(chuàng)建了一個(gè)Cookie后,對(duì)于每一個(gè)針對(duì)該網(wǎng)站的請(qǐng)求,都會(huì)在Header中帶著這個(gè)Cookie;不過,對(duì)于其他網(wǎng)
站的請(qǐng)求Cookie是
絕對(duì)不會(huì)跟著發(fā)送的。而且瀏覽器會(huì)這樣一直發(fā)送,直到Cookie過期為止。
2.2.2 要點(diǎn)方法
setcookie-----送出 Cookie 信息到瀏覽器。
語法: int setcookie(string name, string value, int expire, string path, string domain, int secure);
返回值: 整數(shù)
本函數(shù)會(huì)跟著標(biāo)識(shí) Header 送出一段小信息字符串到瀏覽器。使用本函數(shù)要在送出 HTML 數(shù)據(jù)前,實(shí)際上 cookie 也算標(biāo)
識(shí)的一部份。本函數(shù)的
參數(shù)除了第一個(gè) name 之外,都是可以省略的。參數(shù) name 表示 cookie 的名稱;value 表示這個(gè) cookie 的值,這個(gè)參
數(shù)為空字符串則表示取
消瀏覽器中該 cookie 的數(shù)據(jù);expire 表示該 cookie 的有效時(shí)間;path 為該 cookie 的相關(guān)路徑;domain 表示
cookie 的網(wǎng)站;secure 則
需在 https 的安全傳輸時(shí)才有效。想得到更多的 cookie 信息可以到
http://www.netscape.com/newsref/std/cookie_spec.html,由
cookie 原創(chuàng)者 Netscape 所提供的完整信息。
對(duì)于一個(gè)網(wǎng)站會(huì)員而言,經(jīng)常存在需要一次注冊(cè),多次認(rèn)證的問題,例如我們經(jīng)常接觸到的論壇、社區(qū)等,一般采用手段
為cookie或 input
type=hidden來傳遞認(rèn)證參數(shù)。這里面有幾點(diǎn)隱患:
I. setcookie內(nèi)容必須完整包含帳號(hào)密碼,或類似的完整安全信息,如果只攜帶帳號(hào)信息或用某種權(quán)限標(biāo)志來認(rèn)證,極容
易造成非法入侵。
例如某站點(diǎn)中的會(huì)員更新頁面中攜帶的認(rèn)證信息是兩個(gè),用戶名和Uid(均為明文傳送)已知Uid對(duì)于每個(gè)會(huì)員是唯一的。由
于我們只需要知道對(duì)
方的帳號(hào)和Uid就可以更改對(duì)方信息(不需要知道密碼?。?,只要攻擊者知道Uid(攻擊者可以通過暴力猜測的方法來得到
Uid,有時(shí)候站點(diǎn)本身
也會(huì)泄露用戶的Uid,例如在論壇等處)那么,攻擊者就可以通過遍歷攻擊完成對(duì)任意一個(gè)帳號(hào)的信息更改。
II. 必須所有需要權(quán)限操作的頁面都必須執(zhí)行認(rèn)證判斷的操作。如果任何一頁沒有進(jìn)行這種認(rèn)證判斷,都有可能給攻擊者
以惡意入侵的機(jī)會(huì)。
III. 很多網(wǎng)站為了方便,將用戶名以及口令信息儲(chǔ)存在Cookie中,有的甚至以明文方式保存口令。如果攻擊者可以訪問到
用戶的主機(jī),就可能
通過保存的Cookie文件得到用戶名和口令。
3. 腳本保護(hù)的問題
3.1 概念介紹
在程序編寫時(shí)優(yōu)秀的程序員都會(huì)知道,用有意義的變量名,文件名有助于增加程序的可讀性,具有良好的程序風(fēng)格。這個(gè)
非常好但在腳本語言不太
適合,為了不讓惡意用戶猜到你的變量或數(shù)據(jù)庫名等信息,必須改掉這些信息。動(dòng)態(tài)的網(wǎng)頁在服務(wù)器端執(zhí)行后返回給客戶
的是執(zhí)行后的代碼,這可
以保護(hù)服務(wù)器端的很多不想叫或不能叫瀏覽者知道的信息。安全是相對(duì)的,每天都在有新的安全漏洞被發(fā)現(xiàn),如果惡意的
用戶在你之前知道了一個(gè)
可以看你的腳本源代碼的漏洞或這個(gè)漏洞一時(shí)間無法修補(bǔ)怎么辦?
3.2 主意要點(diǎn)
建議用一些比較怪異的名字命名,刪掉腳本中的注釋。如果還需要保持程序的可讀性的話,可以建立一個(gè)映射,你可以寫
個(gè)具有良好風(fēng)格的腳本程
序,然后再做一個(gè)變量名映射建立一個(gè)具有較安全命名方法的腳本,去掉這個(gè)腳本中的注視和所有能去掉的信息,修改時(shí)
作個(gè)同步就可以了
我們可以在程序的使用前對(duì)程序進(jìn)行加密,以保護(hù)我們自己的程序再萬一的情況下部被泄漏。
3.3 保護(hù)方法
相關(guān)文章
javascript asp教程第十一課--Application 對(duì)象
javascript asp教程第十一課--Application 對(duì)象...2007-03-03ASP編程入門進(jìn)階(八):內(nèi)置對(duì)象Session
ASP編程入門進(jìn)階(八):內(nèi)置對(duì)象Session...2007-01-01ASP編程入門進(jìn)階(十三):Ad & Content Rotator
ASP編程入門進(jìn)階(十三):Ad & Content Rotator...2007-01-01ASP 中 DateDiff 函數(shù)詳解 主要實(shí)現(xiàn)兩日期加減操作
ASP 中 DateDiff 函數(shù)詳解 主要實(shí)現(xiàn)兩日期加減操作...2007-11-11