網(wǎng)站應(yīng)用開發(fā)時(shí)應(yīng)該注意到的安全問題
由于網(wǎng)站被黑的情況較多,以下總結(jié)網(wǎng)站應(yīng)用方面需要注意的安全問題:
表單數(shù)據(jù)驗(yàn)證
在數(shù)據(jù)被輸入程序前必須對(duì)數(shù)據(jù)合法性的檢驗(yàn)。非法輸入問題是最常見的Web應(yīng)用程序安全漏洞。
需要做到:對(duì)任何輸入內(nèi)容進(jìn)行檢查。接受所有可以接受的內(nèi)容,拒絕所有不能接受的內(nèi)容。
所有提交的表單數(shù)據(jù),都必須驗(yàn)證兩次,即提交前在客戶端用Javascript驗(yàn)證,提交后在服務(wù)器端用腳本再次驗(yàn)證,保證數(shù)據(jù)的合法性。尤其是對(duì)于必填項(xiàng),不僅需要同時(shí)在客戶端和服務(wù)端驗(yàn)證是否做了輸入,還要驗(yàn)證輸入的數(shù)據(jù)格式是否正確。
需要注意:在客戶端上的Javascript驗(yàn)證并不是真正意義上的檢查。比如惡意用戶很容易在自己的終端上禁用腳本執(zhí)行,從而防止客戶端的內(nèi)容檢查腳本運(yùn)行,使得他可以輸入惡意代碼并成功地提交表單。
對(duì)于圖像上傳功能,需要驗(yàn)證上傳圖像的格式及大小是否合乎要求。
防范SQL語句注入攻擊
程序需要對(duì)所有從外部接收到的數(shù)據(jù)進(jìn)行過濾,防止惡意攻擊。主要防范的字符有“'|script|exec|insert|select|delete|update|count|chr|mid|master|truncate|declare”。
使用積極的過濾而不是消極的過濾。 換句話說,就是檢查應(yīng)該輸入什么,而不是檢查不應(yīng)該輸入什么。只規(guī)定哪些內(nèi)容不應(yīng)該輸入,會(huì)留下太多的漏洞。因?yàn)橛泻芏鄡?nèi)容都不應(yīng)該被輸入。積極的過濾方式應(yīng)該包括:
• 是否為空(需要去掉空格后判斷)
• 是否是正確的數(shù)據(jù)類型 (字符串,整數(shù)等)
• 是否要求帶有參數(shù)
• 字符編碼是否允許
• 輸入內(nèi)容是否達(dá)到了內(nèi)容長度的最大或者最小界限
• 是否允許輸入空值
• 如果應(yīng)該輸入數(shù)字,那么確定數(shù)字大小的范圍。
• 輸入內(nèi)容是否造成了數(shù)據(jù)重復(fù),如果是,判斷這種情況是否可以接受。
• 輸入內(nèi)容是否符合格式要求(比如是否采用正則表達(dá)式)
• 如果是通過下拉列表選取的內(nèi)容,確保其包含了有效的值
地址欄變量需要進(jìn)行驗(yàn)證
對(duì)于從地址欄上接收到的變量,必須要驗(yàn)證其合法性。例如,如果從地址欄上收到了文章ID值,則需要驗(yàn)證ID是否為數(shù)字,是否有攻擊字符等。
跨站攻擊的預(yù)防
在驗(yàn)證提交的數(shù)據(jù)時(shí),為防止跨站攻擊 ,可以檢查上一個(gè)頁面是否為本站,另外,過濾<iframe>、<javascript>、<alert>,重點(diǎn)把“<”替換為“<”,把 “>”替換為“>”
目錄和文件夾的安全
用戶只能訪問網(wǎng)站目錄下的內(nèi)容,確保用戶不能訪問網(wǎng)站目錄以外的目錄。
程序中涉及文件包含的地方,要確認(rèn)所有包含的文件的位置正確。為了防止非法包含文件,應(yīng)特別小心“./”或“../”的使用。
后臺(tái)所有程序頁面需要做授權(quán)驗(yàn)證
如果未經(jīng)過成功登錄,不允許訪問任何一個(gè)后臺(tái)程序頁面。如果用Session驗(yàn)證,Session有效期不可以太長,建議為15分鐘。
成功登陸后的用戶,需要驗(yàn)證是否有某個(gè)操作的權(quán)限。
關(guān)鍵信息需要加密
對(duì)于密碼、會(huì)話令牌等關(guān)鍵信息,需要進(jìn)行加密后再保存到數(shù)據(jù)庫,不允許用明文方式。一般采用MD5加密方式。
配置文件安全
程序中的配置文件(重點(diǎn)是數(shù)據(jù)庫連接配置)需要重點(diǎn)進(jìn)行安全保護(hù),配置文件不能允許用戶直接訪問,配置文件的文件擴(kuò)展名不能為.inc、.txt,必須為可執(zhí)行腳本擴(kuò)展名,如.asp、.php、.jsp、.aspx…
數(shù)據(jù)庫安全
數(shù)據(jù)庫文件需要重點(diǎn)安全保護(hù),對(duì)于使用access數(shù)據(jù)庫的程序,不可以允許數(shù)據(jù)庫直接可以通過瀏覽器下載,數(shù)據(jù)庫文件的路徑和文件名稱需要不易猜測(cè)到,數(shù)據(jù)庫文件的擴(kuò)展名不能為.mdb。可以設(shè)置服務(wù)器來禁止此類型的文件下載。
使用“最低權(quán)限”限制數(shù)據(jù)庫用戶的權(quán)限。如果使用SQL SERVER或MySQL數(shù)據(jù)庫,可以考慮只給瀏覽用戶以讀權(quán)限,后臺(tái)用戶以讀、寫及刪權(quán)限。
資源的釋放
程序中的使用了關(guān)鍵資源后,必須進(jìn)行顯式釋放和關(guān)閉,尤其是數(shù)據(jù)庫連接、文件句柄等資源。
防止過分詳細(xì)的錯(cuò)誤提示。
攻擊者經(jīng)常會(huì)故意輸入錯(cuò)誤的內(nèi)容,進(jìn)而分析系統(tǒng)給出的錯(cuò)誤提示信息,從中獲取系統(tǒng)信息,發(fā)現(xiàn)可能存在的漏洞。
對(duì)于使用Access數(shù)據(jù)庫的用戶來說,過于詳細(xì)的錯(cuò)誤提示可能會(huì)暴露出數(shù)據(jù)庫文件的路徑。
友好的操作反饋提示
對(duì)于流程性的操作,需要給用戶的操作以友好性反饋提示,讓用戶了解自己的操作是否有問題,問題在什么地方。
例如,會(huì)員注冊(cè)表單,如果用戶提交時(shí),忘記填寫某些項(xiàng),可以在該項(xiàng)后以醒目的顏色來提示,提示的顯示最好以AJAX技術(shù)實(shí)現(xiàn)無刷新效果,提高用戶體驗(yàn)。
后臺(tái)的程序?qū)τ谝恍┎僮鳎鐒h除、審核,必須讓用戶確認(rèn)一下才可以執(zhí)行。
不管用戶操作成功或失敗,都需要給與提示信息。
驗(yàn)證碼的使用
對(duì)于用戶注冊(cè)、用戶登陸、調(diào)查問卷、在線反饋、評(píng)論等程序,需要加上驗(yàn)證碼,防止機(jī)器人繞過限制提交垃圾信息。