用ASP+SQL Server為網頁建一道防火墻 《轉》
2024-05-04 11:06:31
供稿:網友
作者:李艷芳等
摘自賽迪網
為網頁設置防火墻的主要目的是根據網頁內容對不同來訪者提供不同的服務,利用java script或vb script,我們很容易做到這一點。但網頁的源碼在客戶瀏覽器中可以被看到,訪問者可以查看所用的用戶鑒別方法,這只是一個表面形式的防火墻。asp是web上的客戶機/服務器結構的中間層,雖然它使用腳本語言(java script,vb script等)編寫,程序代碼在服務器上運行,在客戶端僅可看到由asp輸出的動態html文件,但asp仍具有某些漏洞,采取一定手段也可以看到asp程序的源碼。這時,通過asp與sql server相結合,我們可以設計出簡單、高效、可靠的應用程序。下面簡單介紹一下其建立過程。
一、建立login
在sql server上建立訪問者的login和password。
二、在網絡服務器上創建數據庫dsn
使用“控制面板”中的“odbc數據源管理器”創建某個數據庫的odbc 數據資源名,即dsn,這樣以后可以通過使用數據庫dsn連接具體的數據庫。
“odbc數據源管理器”提供了三種dsn,分別為用戶dsn、系統dsn和文件dsn。其中,用戶dsn會把相應的配置信息保存在windows的注冊表中,但是只允許創建該dsn的登錄用戶使用。系統dsn同樣將有關的配置信息保存在系統注冊表中,但是與用戶dsn不同的是系統dsn允許所有登錄服務器的用戶使用。
與上述兩種數據庫dsn不同,文件dsn把具體的配置信息保存在硬盤上的某個具體文件中。文件dsn允許所有登錄服務器的用戶使用,而且即使在沒有任何用戶登錄的情況下,也可以提供對數據庫dsn的訪問支持。此外,因為文件dsn被保存在硬盤文件里,所以可以方便地復制到其它機器中。這樣,用戶可以不對系統注冊表進行任何改動就可直接使用在其它機器上創建的dsn。
在以上三種數據庫dsn中,建議用戶選擇系統dsn或文件dsn,如果用戶更喜歡文件dsn的可移植性,可以通過在nt系統下設定文件的訪問權限獲得較高的安全保障。
建立新的dsn,用戶首先選擇“添加”,然后在彈出窗口中選擇用戶將要建立連接的數據庫類型并選擇列表中的“sql server”項。如果用戶是建立文件dsn,則單擊“下一步”按鈕并在隨后的對話框中輸入所要建立的文件dsn的文件名和保存路徑。如果用戶建立的是系統dsn,單擊“完成”按鈕。
在選擇完數據庫之后,用戶需要對數據庫dsn進行設置。用戶需要選擇提供數據庫服務的具體服務器,設定登錄用戶名和口令,以及用戶將要連接的數據庫。
三、程序設計
下面要實現的就是一個簡單的頁面防火墻的功能。此頁面只限制本單位內部網的用戶進行訪問(在此假設內部網的ip地址是從10.61.96.至10.65.97.之間),如果是單位外部用戶進行訪問則要求輸入訪問用戶名及密碼。在此要使用到request對象的servervariables屬性,通過它來獲得環境變量的值。
程序源碼(firewall.asp)如下:
〈html〉
〈head〉
〈meta http-equiv="content-type" content="text/html; charset=gb_2312-80"〉
〈meta name="generator" content="microsoft frontpage express 2.0"〉
〈title〉firewall.asp〈/title〉
〈/head〉
〈body background="#800080 "〉
〈%
'使用request.servervariables("remote_addr")得到ip地址并保存在變量remoteip中
remoteip=request.servervariables("remote_addr")
stip=cstr(remoteip)
'取得ip地址第三個段的值并保存到stip中
for i=1 to 2
stip=right(stip,len(stip)-instr(1,stip,"."))
next
stip=left(stip,instr(1,stip,".")-1)
'ip地址有效性檢驗及密碼驗證,包括兩方面的內容:如果ip地址符合則通過驗證;如果ip地址不符合則檢驗輸入的用戶名、密碼是否正確
if (left(remoteip,5) 〈〉 "10.61" or stip〈"96" or stip〉"97") then
username=request.form("t1")
password=request.form("t2")
set fs = createobject("scripting.filesystemobject")
set thisfile = fs.opentextfile("dsn.txt")
db_loc=thisfile.readline
thisfile.close
cnstr=db_loc&&"uid="&&username&&";"&&"pid="&&password
on error resume next
set cn=server.createobject("adodb.connection")
cn.open cnstr
if err=3709 then %〉
〈p〉〈font color="#ff0000"〉對不起,用戶:〈%=username%〉沒有訪問權限,或密碼不正確! 〈br〉〈/font〉〈/p〉
〈form method="post"〉
〈p align="center"〉用戶名:〈input type="text" name="t1" size="20"〉口令:〈input type="password" name="t2" size="20"〉〈input type="submit" value="提交" name="b1"〉〈input type="reset" value="全部重寫" name="b2"〉
〈/p〉
〈/form〉
〈%end if
cn.close
set cn=nothing%〉
〈%else %〉
恭喜您,您已經通過了驗證,可以直接使用本站點的資源!
〈%end if%〉
〈/body〉
〈/html〉
稍微修改一下上面如ip地址等信息,該程序就可以運行了。
當然,上面只是實現在一個頁面中的防火墻功能。如果一個網站有多個頁面的話,可以設置一個session變量來對用戶進行標志,在下面的頁面中都進行判斷。
注:我沒有好好看原文,是朋友介紹我的。如果覺得不好,大家就別看了。反正我們現在都是dotnet了。。哈哈