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