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