用ASP+SQL Server為網頁建一道防火牆 《轉》
來源:互聯網
上載者:User
asp+|server|防火牆|網頁 作者:李豔芳等
摘自賽迪網
為網頁設定防火牆的主要目的是根據網頁內容對不同來訪者提供不同的服務,利用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了。。哈哈