[摘 要] 本文針對電子商務(wù)網(wǎng)站源碼設(shè)計中常見的安全問題進(jìn)行了分析,并結(jié)合實際給出了相應(yīng)的解決方法或建議。
[關(guān)鍵詞] 電子商務(wù)網(wǎng)站 源碼設(shè)計 數(shù)據(jù)庫安全
網(wǎng)站數(shù)據(jù)庫作為信息的聚集體,是電子商務(wù)網(wǎng)站運營的基礎(chǔ),通常保存著重要的商業(yè)數(shù)據(jù)和客戶信息,這些信息安全性至關(guān)重要,關(guān)系到企業(yè)興衰成敗。然而,在實際應(yīng)用中,一些企業(yè)網(wǎng)站數(shù)據(jù)庫里一些商業(yè)數(shù)據(jù)卻被攻擊者竊取后公布于眾、公司商業(yè)網(wǎng)站中的產(chǎn)品價格又被惡意修改等等類似的案例比比皆是,數(shù)據(jù)的安全性和企業(yè)的自身利益受到了嚴(yán)重的威脅。筆者就電子商務(wù)網(wǎng)站源碼設(shè)計中容易出現(xiàn)安全問題進(jìn)行分析,并提出解決的對策。
一、電子商務(wù)網(wǎng)站源碼設(shè)計中常見的安全問題
1.代碼設(shè)計中命名設(shè)計的安全問題
對網(wǎng)站文檔名、網(wǎng)站目錄名、數(shù)據(jù)庫名及數(shù)據(jù)表文檔名、數(shù)據(jù)表中字段元素進(jìn)行命名設(shè)計時,因設(shè)計人員在工作中的一些習(xí)慣,使用與中文意義相對應(yīng)的英文或拼音方式直接命名,愛把數(shù)據(jù)庫放在Data或Database等目錄下,對數(shù)據(jù)庫的命名通常采用Data、Database等,對數(shù)據(jù)表的命名常以User、Admin、Product等命名,對數(shù)據(jù)表中敏感字段的命名也常采用Username、Password、Pwd、Price等方式命名。這樣的命名易猜測,從而易泄露重要數(shù)據(jù)信息,易暴露網(wǎng)站數(shù)據(jù)庫的存儲位置,使得網(wǎng)站的數(shù)據(jù)易被非法竊取。
2.數(shù)據(jù)庫連接的代碼安全問題
下面是一個ASP連接遠(yuǎn)程SQL數(shù)據(jù)庫的簡單例子:
<%Set conn=Server.CreateObject(“ADODB.Connection”)connstr=”driver={SQLServer};server=202.108.32.94;uid=sa;pwd=PASSWORD;database=/data/database.mdb”Conn.open connstr%>
此例暴露了使用這種數(shù)據(jù)庫連接文件的兩大安全問題。一方面,將服務(wù)器的地址(server=202.108.32.94)、數(shù)據(jù)庫用戶的用戶名及口令(uid=sa;pwd=PASSWORD;)、數(shù)據(jù)庫文件名及文件存儲路徑(database=/data/database.mdb)直接存放在數(shù)據(jù)庫連接文件中,一旦這些連接文件中的內(nèi)容外泄,網(wǎng)站數(shù)據(jù)庫能被攻擊者惡意下載或篡改;另一方面,在源代碼編寫時,直接使用數(shù)據(jù)庫管理系統(tǒng)提供的默認(rèn)賬號Sa,使得攻擊者能利用這個漏洞,通過構(gòu)建特殊的用戶權(quán)限,直接操縱數(shù)據(jù)庫系統(tǒng)管理軟件,危及網(wǎng)站數(shù)據(jù)庫的安全。
3.使用SQL語句導(dǎo)致的安全問題
SQL語句導(dǎo)致的注入漏洞存在于任何使用SQL語句的網(wǎng)站中,注入漏洞可以說是2004年以來影響最大的漏洞,它利用了程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。攻擊者可以通過在正常數(shù)據(jù)庫查詢代碼的后面添加特殊字符的方法,根據(jù)程序返回的結(jié)果,獲得數(shù)據(jù)庫中的表名、字段名,達(dá)到探測數(shù)據(jù)庫信息或提升權(quán)限等目的。一般情況下,注入點較多出現(xiàn)在各個網(wǎng)站的提供輸入注冊信息或查詢和操作數(shù)據(jù)庫的頁面。例如,一般程序設(shè)計人員通過下列select語句進(jìn)行查找:(select * from users where userid=’“userid”’and pwd=’“pasword”’)。針對本語句,我們只要構(gòu)造一個特殊的用戶名和密碼,如aa’or’1’=’1,這樣,select語句將變成(select * from Users where use rid=’aa’or’1’=’1’and pwd=’“pasword”’)。由于有or運算符和“1=1”恒成立的條件,使得數(shù)據(jù)庫的所有記錄都滿足此條件而實現(xiàn)登錄。同理,還可以通過update語句、insert語句等進(jìn)行SQL注入攻擊。
二、解決電子商務(wù)網(wǎng)站源碼設(shè)計中常見安全問題的對策
1.采用非常規(guī)命名法
針對網(wǎng)站文檔名、網(wǎng)站目錄名、數(shù)據(jù)庫及數(shù)據(jù)表文檔名、數(shù)據(jù)字段名、數(shù)據(jù)庫連接文件名、后臺管理員用戶名等關(guān)系到網(wǎng)站數(shù)據(jù)庫安全的命名,不使用系統(tǒng)默認(rèn)的或者有特殊含義容易被猜測到的命名,盡量使用無規(guī)則的英文字母。例如,對于網(wǎng)上書店的數(shù)據(jù)庫文件不要簡單地命名“bookshop.mdb”,而是要以非常規(guī)的名字命名,如用“jxgn.mdb”。這樣,對于一些通過猜測的方式得到數(shù)據(jù)庫相關(guān)信息的非法訪問起到了有效地阻止作用。
2.防止數(shù)據(jù)庫被下載
通常有3種方法。方法一,在數(shù)據(jù)庫文件名后面加上#號,例如name#.mdb,這樣IIS就以為是在請求該目錄中默認(rèn)的文件名,例如index.asp,如果IIS找不到就會發(fā)出403禁止瀏覽目錄的錯誤警告;方法二,在IIS中是把數(shù)據(jù)庫所在的目錄設(shè)為不可讀,這樣就可以防止被下載;方法三,在數(shù)據(jù)庫連接文件中使用ODBC 數(shù)據(jù)源,攻擊者即使獲得了建立數(shù)據(jù)庫鏈接的源代碼,也無法從源代碼中看到數(shù)據(jù)庫的名字和存放路徑。
3.防止SQL語句導(dǎo)致的注入漏洞
第一,完善管理權(quán)限。不在程序中使用較高權(quán)限訪問數(shù)據(jù)庫,例如,不使用Sa身份訪問SQL數(shù)據(jù)庫,盡量使用Windows 2000身份驗證模式進(jìn)行SQL Server的身份驗證。
第二,保持良好的程序開發(fā)習(xí)慣。編寫數(shù)據(jù)庫查詢程序時,利用兩個單引號來標(biāo)注任何輸入的變量給SQL程序。或采用使用replace函數(shù)屏蔽單引號的方法, 針對類似于(select * from users Where userid=’“ Userid”’ and PWd=’“Password”’)的select語句使用replace函數(shù)替換為:(select * from users where userid=’replace(request.form(“userid”),’,“)’and pwd=’replace(request.form(“password”),’,”)’。
第三,隱藏核心代碼。不使用SQL語句直接訪問數(shù)據(jù)庫,而是使用存儲過程或XML Web Service可以較好地保護(hù)核心程序代碼和數(shù)據(jù)庫結(jié)構(gòu)不至外泄。
三、結(jié)束語
電子商務(wù)網(wǎng)站的數(shù)據(jù)庫的安全性問題是近年來倍受關(guān)注的問題,確保其安全是一個系統(tǒng)工程?,F(xiàn)僅從電子商務(wù)網(wǎng)站源碼設(shè)計的角度,討論了存在的安全問題,通過對這些問題的分析,將有助于加強(qiáng)網(wǎng)站開發(fā)人員的安全意識,減少開發(fā)過程給網(wǎng)站數(shù)據(jù)庫帶來的安全隱患。
參考文獻(xiàn):
[1]秦 拯:Window s NT 站點的安全性研究.計算機(jī)科學(xué),2001;28 (3):55~57
[2]趙乃真:電子商務(wù)網(wǎng)站建設(shè)實例.北京:清華大學(xué)出版社,2005:61