程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> 關於asp+access的安全問題分析

關於asp+access的安全問題分析

編輯:關於ASP編程
眾所周知,asp+access最大的安全隱患在於access數據庫可以被別人 
  下載,而現在提供的很多asp空間都是只支持access數據庫,這樣一來, 
  asp+access的安全問題就顯得很突出了。 

  1.Access數據庫的存儲隱患 
  在ASP+Access應用系統中,如果獲得或者猜到Access數據庫的存儲路 
  徑和數據庫名,則該數據庫就可以被下載到本地。 

  2.Access數據庫的解密隱患 
  由於Access數據庫的加密機制非常簡單,所以即使數據庫設置了密碼, 
  解密也很容易。該數據庫系統通過將用戶輸入的密碼與某一固定密鑰進行 
  異或來形成一個加密串,並將其存儲在*.mdb文件中從地址“&H42”開 
  始的區域內。由於異或操作的特點是“經過兩次異或就恢復原值”,因 
  此,用這一密鑰與*.mdb文件中的加密串進行第二次異或操作,就可以輕 
  松地得到Access數據庫的密碼。基於這種原理,可以很容易地編制出解密 
  程序。 

  由此可見,無論是否設置了數據庫密碼,只要數據庫被下載,其信息就沒有任何安全性可言了。 

  3.程序設計中的安全隱患   
  ASP代碼利用表單(form)實現與用戶交互的功能,而相應的內容會反 
  映在浏覽器的地址欄中,如果不采用適當的安全措施,只要記下這些內 
  容,就可以繞過驗證直接進入某一頁面。例如在浏覽器中敲入“…… 
  page.asp?x=1”,即可不經過表單頁面直接進入滿足“x=1”條件的頁 
  面。因此,在設計驗證或注冊頁面時,必須采取特殊措施來避免此類問題 
  的發生。 

  ========== 
  解決方案 
  ========== 

  提高數據庫的安全性 
  由於Access數據庫加密機制過於簡單,因此,如何有效地防止Access 
  數據庫被下載,就成了提高ASP+Access解決方案安全性的重中之重。 

  1.非常規命名法 
  防止數據庫被找到的簡便方法是為Access數據庫文件起一個復雜的非常 
  規名字,並把它存放在多層目錄下。例如,對於網上書店的數據庫文件, 
  不要簡單地命名為“book.mdb”或“store.mdb”,而是要起個非常規的 
  名字,例如:faq19jhsvzbal.mdb,再把它放在 
  如./akkjj16t/kjhgb661/acd/avccx55 之類的深層目錄下。這樣,對於 
  一些通過猜的方式得到Access數據庫文件名的非法訪問方法起到了有效的 
  阻止作用。 

  2.使用ODBC數據源 
  在ASP程序設計中,應盡量使用ODBC數據源,不要把數據庫名直接寫在 
  程序中,否則,數據庫名將隨ASP源代碼的失密而一同失密。例如: 
  DBPath = Server.MapPath(“./akkjj16t/ 
  kjhgb661/acd/avccx55/faq19jhsvzbal.mdb ”) 
  conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath 
  可見,即使數據庫名字起得再怪異,隱藏的目錄再深,ASP源代碼失密 
  後,數據庫也很容易被下載下來。如果使用ODBC數據源,就不會存在這樣 
  的問題了: 
  conn.open “ODBC-DSN名” 
  對ASP頁面進行加密 
  為有效地防止ASP源代碼洩露,可以對ASP頁面進行加密。一般有兩種方 
  法對ASP頁面進行加密。一種是使用組件技術將編程邏輯封裝入DLL之中; 
  另一種是使用微軟的Script Encoder對ASP頁面進行加密。但是,使用組 
  件技術存在的主要問題是每段代碼均需組件化,操作比較煩瑣,工作量較 
  大;而使用Script Encoder對ASP頁面進行加密,操作簡單、收效良好。 
  Script Encoder方法具有許多優點: 

  ⑴.HTML仍具有很好的可編輯性。Script Encoder只加密在HTML頁面中 
  嵌入的ASP代碼,其他部分仍保持不變,這就使得我們仍然可以使用 
  FrontPage或Dreamweaver等常用網頁編輯工具對HTML部分進行修改、完 
  善,只是不能對ASP加密部分進行修改,否則將導致文件失效。 
  ⑵.操作簡單。只要掌握幾個命令行參數即可。Script Encoder的運行 
  程序是screnc.exe,其使用方法如下: 
  screnc [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile 
  其中的參數含義如下: 
  s:屏蔽屏幕輸出; 
  f:指定輸出文件是否覆蓋同名輸入文件; 
  xl:是否在.asp文件的頂部添加@Language指令; 
  l:defLanguag指定缺省的腳本語言; 
  e:defExtension 指定待加密文件的擴展名。 
  ⑶.可以批量加密文件。使用Script Encoder可以對當前目錄中的所有 
  的ASP 文件進行加密,並把加密後的文件統一輸出到相應的目錄中。例 
  如: 
  screnc *.asp c:\temp 
  ⑷. Script Encoder是免費軟件。該加密軟件可以從微軟網站下載: 
  http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe。下載後,運行安裝即可。 

  利用Session對象進行注冊驗證 
  為防止未經注冊的用戶繞過注冊界面直接進入應用系統,可以采用Session對象進行注冊驗證。Session對象最大的優點是可以把某用戶的信息保留下來,讓後續的網頁讀取。 

  3.改數據庫擴展名 
  你也可以將數據庫的擴展名改為.asp,當然在定位數據庫的時候也要 
  用類似database.asp的文件名,這樣數據庫不會被輕易的下載,而數據 
  還可以正常的讀出寫入。 

  4.向數據庫內加錯誤的asp代碼 
  如果以為做完第3項以後就萬事大吉了那就錯了,雖然數據庫的擴展名 
  變成了.asp,但是當對方猜到了你的數據庫路徑以後還是可以下載的,只 
  不過慢了一些,對方可以等頁面完全打開以後“另存為”就可以了。要解 
  決這個問題可以載數據庫內添加錯誤的asp代碼。你可以先建立一個隱藏 
  表,表內只有一列,並且插入這樣一行: 

  這樣一來對方打開數據庫的頁面時就只會出現asp腳本的錯誤信息,而不 
  會下載你的數據庫了。 

  5.對於程序設計中隱患的解決一例 
  大多數人都認為網站只要加了登錄密碼就無法正常進入了。而請您看下 
  面的驗證語句: 

  sql="select uname,pwd from uinfo where " 
  sql=sql&"uname='"&request.form("uname")&"'" 
  sql=sql&" and pwd='"&request.form("pwd")&"'" 
  rs.open sql,conn,1,1 
  if rs.eof or rs.bof then 
  response.write "對不起,錯誤的用戶名/密碼!" 
  else 
  response.write "登錄成功!" 
  end if 

  可能已經有讀者看出來了這段代碼是十分危險的,只要對方知道用戶名就 
  可以登錄,你可以在密碼框裡輸入“' or '1'='1”就可以了,其原理很 
  簡單,就是利用了sql查詢語句,大家注意,用此方法提交以後的sql語句 
  變成了:(如果用戶名為administrator) 
  select uname,pwd from uinfo where uname='administrator' and pwd='' or '1'='1' 
  如果用戶名administrator存在的話那麼這個記錄是可以被選出來的,之 
  後當然就是可以正常登錄了。 

  解決方案: 

  sql="select uname,pwd from uinfo where " 
  sql=sql&"uname='"&request.form("uname")&"'" 
  rs.open sql,conn,1,1 
  if rs.eof or rs.bof then 
  response.write "對不起,本站沒有此用戶!" 
  else 
  if rs.fields("pwd")=trim(request.form("pwd")) then 
  response.write "登錄成功!" 
  else 
  response.write "錯誤的用戶名/密碼!" 
  end if 
  end if 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved