明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

用ASP+SQL Server為頁面建一道防火墻

[摘要]為網(wǎng)頁設(shè)置防火墻的主要目的是根據(jù)網(wǎng)頁內(nèi)容對不同來訪者提供不同的服務(wù),利用Java Script或VB Script,我們很容易做到這一點。但網(wǎng)頁的源碼在客戶瀏覽器中可以被看到,訪問者可以查看所用的用戶鑒別方法,這只是一個表面形式的防火墻。ASP是Web上的客戶機/服務(wù)器結(jié)構(gòu)的中間層,雖然它使用腳本...
為網(wǎng)頁設(shè)置防火墻的主要目的是根據(jù)網(wǎng)頁內(nèi)容對不同來訪者提供不同的服務(wù),利用Java Script或VB Script,我們很容易做到這一點。但網(wǎng)頁的源碼在客戶瀏覽器中可以被看到,訪問者可以查看所用的用戶鑒別方法,這只是一個表面形式的防火墻。ASP是Web上的客戶機/服務(wù)器結(jié)構(gòu)的中間層,雖然它使用腳本語言(Java Script,VB Script等)編寫,程序代碼在服務(wù)器上運行,在客戶端僅可看到由ASP輸出的動態(tài)HTML文件,但ASP仍具有某些漏洞,采取一定手段也可以看到ASP程序的源碼。這時,通過ASP與SQL Server相結(jié)合,我們可以設(shè)計出簡單、高效、可靠的應(yīng)用程序。下面簡單介紹一下其建立過程。

一、建立Login
  在SQL Server上建立訪問者的Login和Password。

二、在網(wǎng)絡(luò)服務(wù)器上創(chuàng)建數(shù)據(jù)庫DSN
  使用“控制面板”中的“ODBC數(shù)據(jù)源管理器”創(chuàng)建某個數(shù)據(jù)庫的ODBC 數(shù)據(jù)資源名,即DSN,這樣以后可以通過使用數(shù)據(jù)庫DSN連接具體的數(shù)據(jù)庫。

  “ODBC數(shù)據(jù)源管理器”提供了三種DSN,分別為用戶DSN、系統(tǒng)DSN和文件DSN。其中,用戶DSN會把相應(yīng)的配置信息保存在Windows的注冊表中,但是只允許創(chuàng)建該DSN的登錄用戶使用。系統(tǒng)DSN同樣將有關(guān)的配置信息保存在系統(tǒng)注冊表中,但是與用戶DSN不同的是系統(tǒng)DSN允許所有登錄服務(wù)器的用戶使用。

  與上述兩種數(shù)據(jù)庫DSN不同,文件DSN把具體的配置信息保存在硬盤上的某個具體文件中。文件DSN允許所有登錄服務(wù)器的用戶使用,而且即使在沒有任何用戶登錄的情況下,也可以提供對數(shù)據(jù)庫DSN的訪問支持。此外,因為文件DSN被保存在硬盤文件里,所以可以方便地復(fù)制到其它機器中。這樣,用戶可以不對系統(tǒng)注冊表進(jìn)行任何改動就可直接使用在其它機器上創(chuàng)建的DSN。

  在以上三種數(shù)據(jù)庫DSN中,建議用戶選擇系統(tǒng)DSN或文件DSN,如果用戶更喜歡文件DSN的可移植性,可以通過在NT系統(tǒng)下設(shè)定文件的訪問權(quán)限獲得較高的安全保障。

  建立新的DSN,用戶首先選擇“添加”,然后在彈出窗口中選擇用戶將要建立連接的數(shù)據(jù)庫類型并選擇列表中的“SQL Server”項。如果用戶是建立文件DSN,則單擊“下一步”按鈕并在隨后的對話框中輸入所要建立的文件DSN的文件名和保存路徑。如果用戶建立的是系統(tǒng)DSN,單擊“完成”按鈕。

  在選擇完數(shù)據(jù)庫之后,用戶需要對數(shù)據(jù)庫DSN進(jìn)行設(shè)置。用戶需要選擇提供數(shù)據(jù)庫服務(wù)的具體服務(wù)器,設(shè)定登錄用戶名和口令,以及用戶將要連接的數(shù)據(jù)庫。

三、程序設(shè)計
  下面要實現(xiàn)的就是一個簡單的頁面防火墻的功能。此頁面只限制本單位內(nèi)部網(wǎng)的用戶進(jìn)行訪問(在此假設(shè)內(nèi)部網(wǎng)的IP地址是從10.61.96.至10.65.97.之間),如果是單位外部用戶進(jìn)行訪問則要求輸入訪問用戶名及密碼。在此要使用到request對象的ServerVariables屬性,通過它來獲得環(huán)境變量的值。

  程序源碼(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地址有效性檢驗及密碼驗證,包括兩方面的內(nèi)容:如果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%〉沒有訪問權(quán)限,或密碼不正確! 〈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 %〉

  恭喜您,您已經(jīng)通過了驗證,可以直接使用本站點的資源!

  〈%end if%〉

  〈/body〉

  〈/html〉

  稍微修改一下上面如IP地址等信息,該程序就可以運行了。

  當(dāng)然,上面只是實現(xiàn)在一個頁面中的防火墻功能。如果一個網(wǎng)站有多個頁面的話,可以設(shè)置一個session變量來對用戶進(jìn)行標(biāo)志,在下面的頁面中都進(jìn)行判斷。