2007.9月號-164期 程式開發安全自我評量解答 解答名師/王寧疆、楊志強
◎科目:程式
在這一期的大哉問練功集當中,我們將要討論使用者輸入資料驗証對資訊系統的安全性的重要程度。根據OWASP(Open Web Application Security
Project)公佈十大網頁安全漏洞中,發生頻率最高的十種網頁安全漏洞中,因為未妥善驗証使用者輸入的資料而引起的安全問題以85%的比例勇奪第一名,資訊系統中對使用者輸入的資料的驗証的重要性由此可見一般。因此我們特別設計了和資料輸入驗証有關的五個題目,測驗一下讀者對資料輸入驗証基本概念的了解程度。
第一題答案
正確答案:D
說明:
ASP.NET提供了六種可以用來執行資料驗証的控制項,協助製作網頁的程式設計師進行驗証使用者輸入的資料是否正確的工作。您可以在Visual Studio 2005的[工具箱]視窗的[驗証]項目中看到這六個控制項,如圖1所示。
圖1:ASP.NET提供6種資料驗証的控制項
1. RequiredFieldValidator控制項負責驗証使用者是否有在指定的欄位中輸入資料,網頁上必須輸入資料的重要欄位可以利用RequiredFieldValidator控制項來進行驗証的工作。
2. RangeValidator控制項可以用來驗証使用者輸入的資料是否有落在某一個範圍之內,例如網頁上輸入員工年齡的欄位就可以搭配RangeValidator控制項,驗証使用者輸入的資料是否是介於20~60之間的數字。
3. RegularExpressionValidator控制項可以用來驗証使用者輸入的資料是否符合某種特定的格式,例如網頁想要限制使用者輸入的身分証字號,手機號碼,信用卡號,或者是電子郵件是否符合正確的格式,就可以利用RegularExpressionValidator控制項來達成。
4. 當網頁想比較使用者輸入的資料是否有大於0,是否有小於100,或是使用者在網頁上兩個不同的欄位中輸入的資料是否相同時,就可以利用
CompareValidator控制項來完成所需要的功能,例如網頁上供使用者執行申請帳號的畫面就可以利用CompareValidator控制項來比較使用者在[密碼]欄位中輸入的密碼,是否和[再輸入一次密碼]欄位中輸入的密碼相同。
5. 如果上述四種可以用來執行資料輸入驗証的控制項無法滿足網頁對資料驗証功能的需求,網頁還是可以利用CustomValidator控制項執行自訂資料驗証的工作。最後一種和資料驗証有關的控制項是ValidationSummary控制項。
6. ValidationSummary控制項負責顯示網頁上因為資料驗証失敗,需要顯示給使用者看的錯誤訊息。 當網頁上有需要使用者輸入電子郵件的欄位時,就可以使用RequiredFieldValidator控制項驗証使用者是否有輸入電子郵件資料。如果要驗証使用者輸入的電子郵件資料的格式是否正確,就可以使用RegularExpressionValidator控制項來進行驗証的動作。圖2所示即為設定RegularExpressionValidator控制項的ValidationExpression屬性,選擇所驗証的資料必須符合[網際網路電子郵件地址]格式的畫面:

圖2:驗証使用者輸入的電子郵件格式是否正確
我們除了可以選擇RegularExpressionValidator控制項提供的現成的標準運算式來驗証使用者輸入的資料是否符合正確的格式以外,也可以自訂驗証資料的標準格式。
圖3所示即為利用RegularExpressionValidator控制項驗証使用者輸入的電子郵件格式是否正確的網頁執行的情形。
當使用者輸入的電子郵件資料不符合指定格式的規定,網頁就會顯示錯誤訊息,告訴使用者所輸入的資料發生錯誤的原因。 圖3:使用者輸入的電子郵件資料不符合規定格式的錯誤訊息。
正確答案:A
說明:
OWASP(Open Web Application Security Project)公佈十大網頁安全漏洞包括:
1、未妥善驗証使用者輸入的資料
2、權限管制出現漏洞
3、身分驗証發生漏洞與Session管理不當
4、Cross Site Scripting漏洞
5、緩衝區溢滿
6、植入執行命令
7、錯誤處理不當/錯誤訊息顯示不當
8、機密資料(包括金鑰、密碼、憑証)保管不當,演算法選擇不當,亂數產生不當…等
9、癱瘓攻擊
10、不安全的設定,啟用不需要的服務,使用預設帳號,預設密碼,機密檔案存取權限管制不當
其中因為未妥善驗証使用者輸入的資料而引起的安全問題以85%的比例勇奪第一名,是危害資訊系統安全最烈的元兇,也是有意建置高安全性的資訊系統最需要努力達成的重要目標。
正確答案:D
說明:
正確驗証使用者輸入資料的三個步驟為:
1、列出能夠接受的正確資料的清單
2、剔除系統不能夠接受的資料
3、將有問題的資料轉化成無害的資料。
舉例來說,如果系統只能接受長度為8~16個字元的使用者帳號,則過長或過短的使用者帳號都會在第一道驗証關卡被剔除。第二道驗証關卡負責驗証通過第一道關卡的資料中是否內含有害的資料,例如有攻擊性的SQL敘述,或是有攻擊性的javascript,如果有的話則將之剔除,不能被系統所接受。通過第二道關卡驗証的資料會進入第三道資料驗証手續,由第三道資料驗証將疑為有害的資料轉化成無害的資料,再為系統所用。例如使用者輸入到系統的Javascript就是屬於可能有害,也可能是無害的資料,針對這些有疑問的資料,可以透過HttpUtility類別提供的HtmlEncode方法,或是UrlEncode方法編碼之後再交給系統處理。
正確答案:B
說明:
所謂黑名單(BlackList)資料驗証法的做法是列出系統不能接受的資料,只要使用者輸入的資料符合黑名單的規定,就會被剔除,不能為系統所使用,而白名單(WhiteList)資料驗証法的做法是列出系統可以接受的資料,只要使用者輸入的資料符合白名單的規定,就能夠安全地為系統所使用。使用黑名單過濾系統能夠接受的資料是比較不安全的做法,因為如果系統能夠接受的資料漏列在黑名單中,造成的影響是原本應該被摒除的資料能夠通過系統的資料驗証機制的檢查,而進入系統,形成危害。使用白名單過濾系統能夠接受的資料是比較安全的做法,因為如果系統能夠接受的資料漏列在白名單中,造成的影響是原本應該能夠交給系統處理的資料會被摒除,其所造成的影響是資料驗証失誤,但是不會對系統的安全造成衝擊。
正確答案:D
說明:
檢查使用者輸入的資料是否過長,檢查使用者輸入的資料是否內含惡意,具攻擊性的字元,使用Regular Expression驗証使用者輸入的資料的格式是否正確等等都是正確的資料驗証做法,但是給公司內部員工使用的系統或網站不需要注意資料驗証的問題則是一個錯誤的觀念,因為駭客不一定來自公司的外部,公司內部還是有可能有員工在扮演駭客,因此系統執行資料驗証的基本原則是千萬不要信任使用者輸入的資料,即便是系統接收的資料是來自公司內部的員工,來自檔案的內容,或是來自資料庫中的記錄。
◎科目:資料庫
說明:
本題主要是詢問哪些工具,可以匯出資料庫資料,成為一般的文字檔案,其中BCP.EXE可以完成此作業,Bulk Insert是T-SQL陳述式,該陳述式僅能匯入資料,無法匯出。此外,OPENROWSET
BULK函數,主要運用在大量資料匯入,不適宜匯出。最後,DTSWizard.exe 匯入匯出精靈可以完成資料轉入與轉出等作業
說明:
本題主要是說明哪些函數與指令,可以轉入指定文字檔案資料到資料庫裡面,其中OPENROWSET可以搭配BULK關鍵字,將文字檔案轉入到資料庫,過程中需要搭配格式檔案。此外,OPENQUERY與OPENDATASOURCE是搭配連結伺服器,跨伺服器進行資料查詢,不適用在文字資料轉入。最後,BULK
INSERT雖然可以轉入資料,但是撰寫方式,並不是如題目所示。
說明:
本題主要是說明SSIS封裝,如果儲存在資料庫的時候,就是會以MSDB為主要儲存的資料庫,實際儲存的系統資料表為『dbo.sysdtspackages90』。
說明:
本題主要是說明SSIS控制流程中的迴圈容器,如何搭配SSIS變數進行迴圈處理,撰寫方式如圖4。
圖4:迴圈搭配變數處理方式
說明:
本題主要是說明SSIS控制項目中,如果要將整數,轉換成文字的時候,需要使用DT_WSTR函數進行轉換,撰寫方式如圖5。

圖5:運算式搭配變數處理方式
|