網站程序的安全是系統開發人員必須考慮的重要因數之一,因為這涉及到網站的建設者、網站用戶的諸多安全問題,如果不處理好,可能會給系統的使用者和管理者帶來嚴重問題。同時Web應用程序的安全解決方案不僅是技術問題,還涉及到管理等多個方面。但本文僅從四個最常見的、基本的、可通用的方面加以介紹,并對每個安全問題從:為什么、怎樣解決、怎樣檢測三個層次以自問自答的方式加以通俗易懂的介紹。
其實此四種技術開發人員都可能使用過其中一種或者都使用過,但是有時我們在開發的過程中并沒有特意的引起重視,在每一個細節的處理時未注意網站的安全性,結果可能導致一些安全漏洞。希望通過此文使開發人員能夠更加注重系統安全性,尤其測試人員能夠通過監督去保證系統的安全性,提高產品質量。
1 防止SQL注入技術
為什么必須防止SQL注入?
相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。新手最容易忽略的問題就是SQL注入漏洞的問題。用NBSI 2.0對網上的網站掃描,就能發現部分網站存在SQL注入漏洞,用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據。
怎樣防止SQL注入?
比如URL、表單等提交信息時,通過一段防止SQL注入的過濾代碼即可防止出錯信息暴露,或者通過轉向,當系統出錯時轉到一個提示出錯的頁面等。同時服務器權限設置是一個非常重要的方面,由于涉及到服務器的配置比較多,本文不介紹。
對于文本型輸入,如果要進行檢查,就得根據字段本身的性質進行。例如如果是年齡,就得限定必須是數字,大小必須限定在一個范圍之間,比如說18-120之間。對于用戶名,應該建立一個集合,這個集合里存放有被允許的字符,或被禁止的字符。
這里特別需要說明的一點是關于檢查程序的問題。目前,程序對輸入數據的檢查是在前臺通過客戶端腳本完成的,這樣攻擊者很容易就可以繞過檢查程序。建議采用前后臺結合的方法,既可以保證效率,有可以提高安全性。
怎樣測試程序已防止了SQL注入?
如http://www.XXX.com/jiaren.asp?ID=544,此網站用ID來傳送數值,如果在ID數值后面加一個SQL敏感符號,英文單引號“’”,打開此鏈接,如果出現的是瀏覽器的默認出錯提示,則需要設置瀏覽器,使其錯誤提示出現,方法為打開瀏覽器:選項—Internet選項—高級,在設置里找到顯示友好的HTTP錯誤信息勾掉,確認后再刷新,如果此時出現了數據庫出錯的提示,如:Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e21',那么說明本程序并沒有防止SQL注入,反之如果只出現了如:“提醒您, URL有誤,請與管理員聯系”之類的提示,說明SQL已經防止了注入。檢測表單方法如:如提交腳本,在輸入框中輸入特殊字符如:script_等,在此不再敘述,測試者可以在網上找到很多這樣的方法。
2 驗證碼技術
為什么必須使用驗證碼?
普遍的客戶端交互如留言本、會員注冊等僅是按照要求輸入內容,但網上有很多攻擊軟件,如注冊機,可以通過瀏覽WEB,掃描表單,然后在系統上頻繁注冊,頻繁發送不良信息,造成不良的影響,或者通過軟件不斷的嘗試,盜取你的密碼。而我們使用通過使用驗證碼技術,使客戶端輸入的信息都必須經過驗證,從而可以解決這個問題。
怎樣使用驗證碼技術?
所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素,由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功后才能使用某項功能。放在會員注冊、留言本等所有客戶端提交信息的頁面,要提交信息,必須要輸入正確的驗證碼,從而可以防止不法用戶用軟件頻繁注冊,頻繁發送不良信息等。
怎樣測試驗證碼是否有效?
必須保證所有客戶端交互部分都輸入驗證碼,測試提交信息時不輸入驗證碼,或者故意輸入錯誤的驗證碼,如果信息都不能交,說明驗證碼有效,同時在驗證碼輸入正確下提交信息,如果能提交,說明驗證碼功能已完善。
3 密碼加密技術
為什么必須使用密碼加密?
沒有經過MD5加密的密碼直接顯示在數據庫表中,如果被黑客下載數據,查出數據庫中的密碼,或者內部開發人員通過數據庫查出用戶的密碼,都對以后用戶的信息安全造成很大的影響。如果使用MD5加密后的密碼,在數據庫中看到的是一連串經過加密的字符串,不能看到真正的密碼,這樣能更好地保護網站的安全。雖然黑客也可以使用暴力破解,但是我們再結合生成圖片驗證碼技術,那暴力破解的難度就將大大增強。
怎樣使用MD5加密技術?
MD5的全稱是Message-Digest Algorithm 5,當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然后再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。
怎樣測試密碼已經加密?
凡是經過加密的密碼,系統功能上多半有找回密碼的功能,這是表面的測試,測試人員可以調用開發人員的數據表,查詢是否經過加密,從而保證系統密碼的安全,一般對具有大量會員的商業性網站必須使用。
4 數據備份技術
為什么必須使用數據備份?
當網站被黑客攻擊或者其它原因丟失了數據,可以將備份的數據恢復到原始的數據,保證了網站在一些人為的、自然的不可避免的條件下的相對安全性。
怎樣使用數據備份?
一般人認為數據備份就只是數據庫的備份,其實還有動態變化的圖片、文件等也需要備份,因為文件、圖片一般我們是不寫入數據庫里保存的。
一般我們采用數據庫系統自動定時備份、定時自動刪除幾天以前的數據等,即可完成數據的備份功能。而圖片、文件一般是不能自動備份,需要手工操作,所以我們必須要定期手工對網站的圖片、文件進行備份操作。
怎樣測試數據已經備份?
對于已經做好的網站,數據庫系統都會自動備份到服務器某個文件夾下,那么測試時我們就需要讓程序開發人員提供可以下載數據備份文件的路徑,即可知道是否已經做了自動備份功能,而自動備份間隔時間的確定,需要根據網站的更新頻率來決定。
本文僅介紹四種網站程序的安全的解決方案,以及在此基礎上的檢測方法,以保證系統產品的安全性,提高產品質量,至于具體的詳細操作,方法有許多種,在此不予介紹。
網站程序的安全還有許多需要介紹的,尤其是服務器的配置,比如我們必須堅持服務器配置權限最小化原則等,在此僅從程序上去介紹,此四種網站程序的安全標準適合所有以數據庫為基礎的網站程序,無論你使用什么樣的開發語言,什么樣的開發平臺,都需要做好以上四個方面。