摘 要 ASP+Access技術是小型Web站點開發(fā)的首選,但都存在一些安全隱患,本文就提高ASP+Access網(wǎng)站數(shù)據(jù)庫安全性給出了對策。
關鍵詞 Access 數(shù)據(jù)庫;安全隱患;對策
中圖分類號TP393.4文獻標識碼A文章編號1673-9671-(2009)111-0019-01
0前言
在眾多的網(wǎng)站開發(fā)技術中,ASP作為一種基于Web的編程技術,具有開發(fā)周期短、數(shù)據(jù)庫存取方便、執(zhí)行效率高等優(yōu)點,成為眾多網(wǎng)站程序員的首選工具。
Access雖然具有數(shù)據(jù)庫結(jié)構(gòu)簡單、功能齊全、使用維護方便等優(yōu)點,但ASP環(huán)境下的Access數(shù)據(jù)庫數(shù)據(jù)極易被他人下載、篡改,故良好的網(wǎng)絡數(shù)據(jù)庫設計和防范措施將有效地消除Access數(shù)據(jù)庫的安全隱患,提高其安全性。
1防范Access數(shù)據(jù)安全隱患之對策
防止數(shù)據(jù)庫文件被非法下載
(1)非常規(guī)命名法:防止數(shù)據(jù)庫被找到的最簡便的方法是為Access數(shù)據(jù)庫文件起一個復雜的非常規(guī)名字,并把它存放在多層目錄下。
(2)使用ODBC數(shù)據(jù):在ASP程序設計中, 應盡量使用ODBC數(shù)據(jù)源,不要把數(shù)據(jù)庫名直接寫在程序中,否則,數(shù)據(jù)庫名將隨ASP源代碼的失密而一同失密。例如:
DBPath = Server.MapPath (\"./akrej1it/kjh44w1/acd/a55vqx/fass9jzbal.mdb \")
conn.Open \"driver ={Microsoft Access Driver (*.mdb)};dbq=\"DBPath
可見,即使數(shù)據(jù)庫名字起得再怪異,隱藏的目錄再深,ASP源代碼失密后,數(shù)據(jù)庫也很容易被下載。如果使用ODBC數(shù)據(jù)源,即使失密,得到的也只是數(shù)據(jù)源的名字。例如:conn.open“ODBC-DSN 名”。
(3)改數(shù)據(jù)庫擴展名為inc:根據(jù)IIS 的特性,把后綴名改為“inc”,因為inc 文件在IIS上默認是不允許瀏覽的。在IIS中把數(shù)據(jù)庫所在的目錄設為不可讀,也可以防止被下載。
1.2 增強數(shù)據(jù)庫文件的加密機制
Access2000加密系統(tǒng)把加密的密碼字串放在“H42”開始的40個字節(jié)區(qū)域內(nèi),只要建一個與該數(shù)據(jù)庫同日期的沒有密碼的Access2000數(shù)據(jù)庫,找到密匙,那么還是可以得到數(shù)據(jù)庫密碼的,即使不使用日期信息,通過暴力破解也可以達到目的。另外,很多第三方軟件也可以輕松解密,得到密碼。
對策:基于上面分析,要想破密,首先就要分析Access 的版本,而版本信息就存儲于“H14”處。可以使用VB等工具修改“H14”的內(nèi)容(0 代表Access97,1 代表Access2000),為了更加安全,再隨意修改前面幾個字節(jié)的內(nèi)容,使此文件無法打開。
2程序設計中的提高安全性的對策
2.1 SQL 語句密碼驗證的安全漏洞
SQL 語句進行用戶密碼驗證時是通過一個類似下面這樣的語句來實現(xiàn)的:SQL=\"Select * from 用戶表where 姓名='\"+name+\"' and 密碼='\"+password+\"'\"(其中name 存放用戶名信息,password 存放密碼信息),上述語句來驗證用戶信息是合法有效的, 但存在安全隱患。比如用戶輸入的用戶名為\"admin'or ' 1=1\", 此時SQL 語句就變成SQL=\"Select * from 用戶表where 姓名='admin 'or' 1=1' and 密碼='\"+password+\"'\",而select語句在判斷查詢條件時,遇到or 操作就會忽略下面的and操作,這樣在上面的語句中1=1永遠為真,意味著無論密碼輸入什么值,均能通過上述的密碼驗證,顯然是不安全的。
對策:通過用戶名構(gòu)造SQL 語句查詢滿足條件的密碼,然后再與用戶輸入的密碼進行比較。
2.2 SQL 注入的隱患
SQL 注入就是用戶提交一段數(shù)據(jù)庫操作代碼,根據(jù)程序返回的結(jié)果,獲得某些數(shù)據(jù)。一些別有用心者,可以通過google、百度等搜索引擎搜索存在漏洞網(wǎng)站,通過注入掃描工具,掃描整個網(wǎng)站,就可以發(fā)現(xiàn)存在的SQL漏洞。SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問沒什么區(qū)別,如果管理員沒有查看IIS日志的習慣,可能被入侵很長時間都不會發(fā)覺。
對策:嚴格過濾用戶提交的可能存在安全隱患的特殊字符。比如:單引號、select、update、insert、delete、@、exec、alter、drop、create、backup、and、or、add、set、open、close 等, 但要注意ASP 對大小寫不敏感。
2.3 暴露文件路徑隱患
IIS服務器會對每個執(zhí)行錯誤給出詳細說明,并停止執(zhí)行,而IIS的默認設置又是將錯誤信息返回給用戶,這給網(wǎng)站帶來了安全隱患。用戶可以通過錯誤提示得到數(shù)據(jù)庫文件路徑等重要信息,進行SQL 注入。
對策:在可能出錯的頁面,特別是在數(shù)據(jù)庫連接文件中加上\"On Resume Next\"語句。用戶請求,IIS 解析出錯后,繼續(xù)執(zhí)行下面語句而不提示錯誤信息。
2.4 繞過用戶驗證的隱患
對于一些需要訪問權(quán)限的頁面(比如系統(tǒng)管理界面),必須有合法的身份才能進入。有些人通過其它手段知道了此頁面的地址,而此人并非此系統(tǒng)的合法用戶,則可直接在地址欄輸入頁面的地址進入系統(tǒng),達到攻擊的目的。
對策:利用seesion 對象來驗證登錄者的身份信息,不建議使用cookies來驗證,因為cookies可以被偽造,而seesion 無法偽造,除非偽造者擁有服務器的權(quán)限。只要在有必要的頁面開始加上:
<% if seesion(\"用戶名\")==\"\" Then
response.write \"