asp網(wǎng)站建設(shè)怎樣解決網(wǎng)站數(shù)據(jù)庫(kù)的安全?網(wǎng)站建設(shè)公司提醒對(duì)于采用“虛擬主機(jī)”的方式建立的中小型網(wǎng)站,其后臺(tái)數(shù)據(jù)庫(kù)絕大多數(shù)采用Access數(shù)據(jù)庫(kù)。如果有人通過(guò)各種方法獲得或者猜到數(shù)據(jù)庫(kù)的存儲(chǔ)路徑和文件名,則該數(shù)據(jù)庫(kù)可以被下載到本地。為了防止被非法下載和訪問(wèn),深圳網(wǎng)站建設(shè)公司安全工程師認(rèn)為可采取以下措施。
(1)改變數(shù)據(jù)庫(kù)名稱。為數(shù)據(jù)庫(kù)文件起一個(gè)復(fù)雜的非常規(guī)的名字,并放在幾層目錄下。所謂“非常規(guī)”,就是說(shuō)如果有一個(gè)數(shù)據(jù)庫(kù)要保存的是有關(guān)電子商店的信息,不把它命名為“eshop.mdb”,而是起一個(gè)比較怪的名稱,如d34ksfslf.mdb,再放在如/kdslf/i44/studi/的幾層目錄下,這樣黑客要想通過(guò)猜的方式得到Access數(shù)據(jù)庫(kù)文件就比較困難了。
(2)不把數(shù)據(jù)庫(kù)名寫(xiě)在程序中。許多人都把 DSN 寫(xiě)在程序中,如 DBPath=Server.MapPath("cmddb.mdb")conn.Open"driver={Microsoft Access Driver(*.mdb)};dbq="&DBPath,假如被人拿到了源程序,Access 數(shù)據(jù)庫(kù)的名字就一覽無(wú)余。因此建議在 ODBC里設(shè)置數(shù)據(jù)源,再在程序中這樣寫(xiě):conn.open"shujuyuan"。
(3)改變數(shù)據(jù)庫(kù)文件的擴(kuò)展名。如把a(bǔ)bc134.mdb改為abc134.asp,這樣在ASP文件及數(shù)據(jù)庫(kù)操作中仍然可以正常使用,但在非法訪問(wèn)者看來(lái),該文件已不是數(shù)據(jù)庫(kù)文件了。
(4)加密Access數(shù)據(jù)庫(kù)文件。選擇“工具”|“安全”|“加密”|“解密數(shù)據(jù)庫(kù)”,選取數(shù)據(jù)庫(kù)
(如employer.mdb),然后按“確定”按鈕,會(huì)出現(xiàn)“數(shù)據(jù)庫(kù)加密后另存為”窗口,將數(shù)據(jù)庫(kù)存為employer1.mdb。接著,employer.mdb會(huì)被編碼,然后存為employer1.mdb。要注意的是,以上的方法并不是對(duì)數(shù)據(jù)庫(kù)設(shè)置密碼,而只是對(duì)數(shù)據(jù)庫(kù)文件內(nèi)容加密,目的是為了防止他人使用別的工具來(lái)查看數(shù)據(jù)庫(kù)文件的內(nèi)容。接下來(lái)為數(shù)據(jù)庫(kù)設(shè)置密碼,首先打開(kāi)經(jīng)過(guò)編碼的employer1.mdb,在打開(kāi)時(shí),選擇“獨(dú)占”方式。然后選取功能表的“工具”|“安全”|“設(shè)置數(shù)據(jù)庫(kù)密碼”,輸入密碼即可。為employer1.mdb設(shè)置密碼之后,如果再使用Access數(shù)據(jù)庫(kù)文件,則Access會(huì)先要求輸入密碼,驗(yàn)證正確后才能啟動(dòng)數(shù)據(jù)庫(kù)。可以在ASP程序中的connection對(duì)象的open方法中增加PWD參數(shù)來(lái)訪問(wèn)有密碼保護(hù)的數(shù)據(jù)庫(kù)文件,例如:

這樣,即使別人得到了employer1.mdb文件,沒(méi)有密碼也無(wú)法看到employer1.mdb的內(nèi)容。
綜合使用上述方法,數(shù)據(jù)庫(kù)被非法下載的可能性就會(huì)降低。
asp網(wǎng)站建設(shè)如何防范SQL注入攻擊1.SQL注入攻擊的原理
許多動(dòng)態(tài)網(wǎng)站在編寫(xiě)程序時(shí),沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶通過(guò)向數(shù)據(jù)庫(kù)提交一段精心構(gòu)造的SQL查詢代碼(一般是在瀏覽器地址欄進(jìn)行,通過(guò)正常的WWW端口訪問(wèn)),根據(jù)程序返回的結(jié)果,收集網(wǎng)站與數(shù)據(jù)庫(kù)的信息,進(jìn)而非法獲得網(wǎng)站數(shù)據(jù)庫(kù)中的敏感信息或向其中添加自定義數(shù)據(jù),這就是SQL Injection,即SQL注入攻擊。SQL注入攻擊使用簡(jiǎn)單,危害大。被攻擊成功的網(wǎng)站往往被攻擊者掌握最高權(quán)限,可任意增刪數(shù)據(jù)。
為了說(shuō)明SQL注入攻擊的原理,可在本地網(wǎng)站http://localhost/進(jìn)行測(cè)試。
http://localhost/show.asp?ID=123 是一個(gè)正常的網(wǎng)頁(yè)地址,將這個(gè)網(wǎng)址提交到服務(wù)器后,服務(wù)器將進(jìn)行類似Select*from 表名 where 字段="&ID的查詢(ID即客戶端提交的參數(shù),本例是 123),然后將查詢結(jié)果返回給客戶端,如果在這個(gè)地址后面加上單引號(hào)“?”,服務(wù)器會(huì)返回下面的錯(cuò)誤提示:

字符串的語(yǔ)法錯(cuò)誤在查詢表達(dá)式?ID=123?? 中。

從這個(gè)錯(cuò)誤提示能看出下面幾點(diǎn):
(1)網(wǎng)站使用的是Access數(shù)據(jù)庫(kù),通過(guò)JET引擎連接數(shù)據(jù)庫(kù),而不是通過(guò)ODBC。
(2)程序沒(méi)有判斷客戶端提交的數(shù)據(jù)是否符合程序要求。
(3)該SQL語(yǔ)句所查詢的表中有一個(gè)名為ID的字段。
除了上述介紹的在頁(yè)面地址欄中加單引號(hào)“?”的方法判斷可否注入外,還可以在頁(yè)面地址后面分別加入“and 1=1”和“and 1=2”來(lái)測(cè)試網(wǎng)站能否注入,這就是經(jīng)典的 1=1、1=2測(cè)試法,通過(guò)其返回結(jié)果可以判斷能否注入。如下所示:
①http://localhost/show.asp?id=123
②http://localhost/show.asp?id=123 and 1=1
③http://localhost/show.asp?id=123 and 1=2
可以注入的表現(xiàn):
① 正常顯示(這是必然的,不然就是程序有錯(cuò)誤了)。
② 正常顯示,內(nèi)容基本與
①相同。
③ 提示BOF或EOF(程序未做任何判斷時(shí)),或提示找不到記錄(判斷了rs.eof時(shí)),或顯示內(nèi)容為空(程序加了on error resume next)。
不可以注入就比較容易判斷了,
①同樣正常顯示,②和③一般都會(huì)有程序定義的錯(cuò)誤提示,或提示類型轉(zhuǎn)換時(shí)出錯(cuò)。
不同的數(shù)據(jù)庫(kù)的函數(shù)、注入方法是有差異的,通常在注入之前,攻擊者還要判斷一下數(shù)據(jù)庫(kù)的類型。一般ASP最常搭配的數(shù)據(jù)庫(kù)是Access和SQLServer。
SQLServer有一些系統(tǒng)變量,如果服務(wù)器IIS提示沒(méi)有關(guān)閉,并且SQLServer返回錯(cuò)誤提示,則可以直接從出錯(cuò)信息中獲取,方法如下:

該語(yǔ)句前面的部分是正常的,重點(diǎn)在and user>0,我們知道,user是SQLServer的一個(gè)內(nèi)置變量,它的值是當(dāng)前連接的用戶名,類型為nvarchar。用一個(gè)nvarchar的值與int的數(shù)0比較,系統(tǒng)會(huì)先試圖將nvarchar的值轉(zhuǎn)換成int型,當(dāng)然,轉(zhuǎn)換的過(guò)程中肯定會(huì)出錯(cuò),SQLServer的出錯(cuò)提示類似于“將nvarchar的值‘abc’轉(zhuǎn)換成數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語(yǔ)法錯(cuò)誤”,其中,abc正是變量user的值,這樣,很容易就得到了數(shù)據(jù)庫(kù)的用戶名。
如果服務(wù)器IIS不允許返回錯(cuò)誤提示,那么如何判斷數(shù)據(jù)庫(kù)類型呢?攻擊者可以從Access和SQLServer的區(qū)別入手。Access和SQLServer都有自己的系統(tǒng)表,如存放數(shù)據(jù)庫(kù)中所有對(duì)象的表,Access是在系統(tǒng)表“msysobjects”中,但在Web環(huán)境下讀該表會(huì)提示“沒(méi)有權(quán)限”,而SQLServer是在表“sysobjects”中,在Web環(huán)境下可正常讀取。
在確認(rèn)可以注入的情況下,使用下面的語(yǔ)句:

如果數(shù)據(jù)庫(kù)是SQLServer,那么第一個(gè)網(wǎng)址的頁(yè)面與原頁(yè)面http://localhost/show.asp?id=123是大致相同的;而第二個(gè)網(wǎng)址,由于找不到表msysobjects,會(huì)提示出錯(cuò),就算程序有容錯(cuò)處理,頁(yè)面也與原頁(yè)面完全不同。
如果數(shù)據(jù)庫(kù)用的是Access,那么情況就有所不同。第一個(gè)網(wǎng)址的頁(yè)面與原頁(yè)面完全不同;第二個(gè)網(wǎng)址則視數(shù)據(jù)庫(kù)設(shè)置是否允許讀該系統(tǒng)表而定,一般來(lái)說(shuō)是不允許的,所以與原網(wǎng)址也是完全不同。大多數(shù)情況下,用第一個(gè)網(wǎng)址就可以得知系統(tǒng)所用的數(shù)據(jù)庫(kù)類型,第二個(gè)網(wǎng)址只作為開(kāi)啟IIS錯(cuò)誤提示時(shí)的驗(yàn)證。
好了,
深圳網(wǎng)站建設(shè)公司本文關(guān)于“asp網(wǎng)站建設(shè)怎樣解決網(wǎng)站數(shù)據(jù)庫(kù)的安全?”就分享到這里。如果您需要深圳網(wǎng)站建設(shè)公司為您定制開(kāi)發(fā)高端企業(yè)門戶網(wǎng)站,請(qǐng)咨詢我們網(wǎng)站在線客服或者撥打我們建站技術(shù)客服聯(lián)系電話,為您提供詳細(xì)的高端網(wǎng)站建設(shè)與網(wǎng)站安全解決方案。謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。