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