用ASP+SQL Server爲網頁建一道防火牆 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
http://www.softhouse.com.cn/docs/southpark631.html 用ASP SQL Server爲網頁建一道防火牆 作者:李豔芳等 摘自賽迪網 爲網頁設置防火牆的主要目的是根據網頁內容對不同來訪者提供不同的服務,利用JavaScript或VBScript,我們很容易做到這一點。但網頁的源碼在客戶瀏覽器中可以被看到,訪問者可以查看所用的用戶鑒別方法,這只是一個表面形式的防火牆。ASP是Web上的客戶機/伺服器結構的中間層,雖然它使用腳本語言(JavaScript,VBScript等)編寫,程式碼在伺服器上運行,在用戶端僅可看到由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.R至10.65.97.R之間),如果是單位外部用戶進行訪問則要求輸入訪問用戶名及密碼。在此要使用到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變數來對用戶進行標誌,在下面的頁面中都進行判斷。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |