軟件安全開發生命周期概述_第1頁
軟件安全開發生命周期概述_第2頁
軟件安全開發生命周期概述_第3頁
軟件安全開發生命周期概述_第4頁
軟件安全開發生命周期概述_第5頁
已閱讀5頁,還剩68頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20101軟件安全開發生命周期軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20102 軟件安全開發生命周期(SDL) 基于WEB應用程序的SDL目錄7Safe Company Overview

2、 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20103 簡介 安全需求分析 安全設計 安全編程 安全測試 安全部署及安全響應 軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20104 簡介 安全開發周期,即Security Development Lifecycle (SDL),是

3、微軟提出的從安全角度指導軟件開發過程的管理模式。SDL不是一個空想的理論模型。它是微軟為了面對現實世界中安全挑戰,在實踐中的一步步發展起來的軟件開發模式。 典型的軟件開發流程中,如瀑布模型,中心圍繞著產品功能,完全沒有安全方面的考慮。這樣的開發流程可以造就功能上相對完善的軟件,但是無法滿足在安全上的需要。由于軟件開發過程中未進行任何有效的安全控制措施,導致軟件開發后由于其固有的安全隱患所引起的安全事件頻頻發生,給黑客及惡意人員可趁之機,由此導致的經濟損失不可估量。 軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 20

4、09Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20105 雖然目前企業和組織已經逐步意識到軟件安全的重要性,但是他們把目光更多的聚焦到了軟件開發后的漏洞掃描或滲透測試,盡管這個過程能夠發現和解決大多數的安全隱患,但是后期的安全評估和安全整改,將帶來更大的成本投入和人力投入;甚至由于開發人員的流動導致許多安全漏洞無法得到解決。據美國國家標準局(NIST)早年發表的一份調查報告估計,更好的安全控制措施將為后期安全整改的總體成本節省三分之一以上的費用,且有效規避70%以上由于軟件安全隱患所引發的安全事件。 軟件安全開發生命周期7Safe C

5、ompany Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20106軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20107 簡介 安全需求分析 安全設計 安全編程 安全測試 安全部署及安全響應 軟件安全開發生命周期7Safe Company Overview 20

6、09Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20108 安全需求分析設定安全目標 在需求分析階段,加入以下的安全考慮 q產品提供的安全功能q產品如何安全的與用戶(或其它軟件模塊)交互q特別的,安全方面的考慮對產品開發計劃的影響q產品的風險評估和威脅模型(threat modeling)q產品的缺省功能配置軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Cours

7、e, 7Safe2010/11/10DBAppsecurtiy 20109 簡介 安全需求分析 安全設計 安全編程 安全測試 安全部署及安全響應 軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201010 安全設計安全設計 在安全設計階段,特別加入以下兩方面的考慮 q減少攻擊界面。例如,對一個網絡軟件的設計,它需要監聽那些網絡端口,是否可以減少監聽端口的數目?那些用戶可以與這些端口建立連接,是否要加強身份驗

8、證?q深層防御。底層模塊的設計中,假設上層模塊有可能出現安全漏洞。對傳遞的數據考慮進一步校驗軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201011 簡介 安全需求分析 安全設計 安全編程 安全測試 安全部署及安全響應 軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe

9、2010/11/10DBAppsecurtiy 201012 安全安全編程編程 獨立、完整且集中的輸入驗證獨立、完整且集中的輸入驗證 創建并使用了獨立的用戶輸入驗證模塊以完成對所有用戶的輸入校驗,以此可帶來: q統一的輸入檢測策略q統一的驗證邏輯q統一的錯誤驗證處理q降低升級和維護成本軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201013校驗全部的程序輸入校驗全部的程序輸入 保證所有變量在使用之前都經過

10、嚴格的校驗,防止被污染的數據進入程序。校驗全部的輸入長度校驗全部的輸入長度 通過限制輸入長度,可以有效的控制一些攻擊使其不給系統帶來過大的威脅:qSQL InjectqXSSqFile Includeq軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201014校驗全部的輸入類型校驗全部的輸入類型 不同的程序所接收到的參數類型應嚴格區分并校驗,對于非法的類型應有相關異常進行處理以防止其進入程序。不使用任何方式

11、驗證失敗的數據不使用任何方式驗證失敗的數據 當程序對某個數據校驗失敗時(如:校驗數據類型),相關的異常處理程序應拋棄該數據并中斷操作,而不應對數據進行任何的修復嘗試。對對HTTP所有內容進行校驗所有內容進行校驗 除需對傳統的HTTP GET、POST等數據進行嚴格校驗外,還應對HTTP內所有可能使用到的字段進行校驗,防止字段中包含惡意字符而污染程序,如:qRefererqHostqCookieq軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11

12、/10DBAppsecurtiy 201015校驗向用戶輸出的數據校驗向用戶輸出的數據 當程序通過查詢后臺數據庫或其他方式從后臺獲取數據后,在將數據輸出給用戶前應對該數據進行校驗,校驗其中是否包含有非法字符、可執行客戶端腳本等惡意信息。使用安全的使用安全的SQL查詢方式查詢方式 在進行SQL查詢時,必須使用安全的查詢方式,如:Prepared Statement,以避免查詢語句中由用戶惡意插入SQL語句所帶來的風險。禁止使用禁止使用JavaScript進行任何校驗進行任何校驗 由于JavaScript為客戶端腳本,因此任何試圖使用JavaScript對用戶數據進行校驗的行為都可能被用戶構造的本

13、地腳本所繞過,因此,所有校驗工作應由服務端程序完成而不是客戶端。軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201016使用安全、統一的編碼或轉義方式使用安全、統一的編碼或轉義方式 創建并使用獨立、統一的編碼或轉移方式,而且編碼或轉移中,至少應包含對以下類別數據的編碼或轉移:q可能造成SQL注入的數據,如:分號、單引號等q可能造成XSS的數據,如:script、javascript等設定有安全的權限邊界設

14、定有安全的權限邊界 所有的程序都應清楚的了解到自己能做什么,而在其所能做的范圍之外,均屬于其權限邊界之外,應嚴格禁止對其權限之外的任何操作。校驗被調用的后臺命令校驗被調用的后臺命令 若程序需要調用后臺可執行程序,則在調用時,應通過使用完整路徑或對程序進行HASH校驗等方式保證程序的調用正確。軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201017校驗被調用的文本或配置文件校驗被調用的文本或配置文件 若程序

15、需要調用后臺文本或配置文件,則在調用前,應相對文件或配置文件的完整性和有效性進行檢查,以確保讀入的文本或配置文件是正確可用的。確保程序所記錄的日志可控確保程序所記錄的日志可控 若程序需要記錄額外的操作日志等信息,應保證這些日志中的某些或全部內容不來自用戶輸入,否則用戶可能通過外部惡意提交信息的方式填充日志。軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201018 簡介 安全需求分析 安全設計 安全編程 安

16、全測試 安全部署及安全響應 軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201019 安全測試安全測試 安全測試是什么?在產品的生命周期中,特別是產品開發基本完成到發布階段,對產品進行檢驗以驗證產品符合安全需求定義和產品質量標準的過程。 安全測試目標提升產品安全質量盡量在發布前兆到安全問題予以修補降低成本度量安全 當前安全測試方法有模式匹配方法,將程序看作字符串狀態機模型,將程序看作狀態機黑盒模型,將程序

17、看作黑盒子白盒模型,將程序看作路徑的組合軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201020 安全測試安全測試 當前安全測試的問題 覆蓋性 完備性 可度量性 當前安全測試困難 測試理論很難適用于安全領域 安全測試基礎理論薄弱,當前測試方法缺少理論指導,也缺乏技術產品工具 測試 VS 安全測試 BUG VS 安全漏洞 (并非是BUG的一個子集) 信息泄露,WMF,LNK,SYN FLOOD漏洞是BUG嗎

18、?軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201021 安全測試安全測試 假設條件 測試:導致問題的數據是用戶不小心構成的(只考慮提供給用戶的界面) 安全測試:導致問題的數據是攻擊者處心積慮構成的(考慮所有攻擊界面,包括可污染/滲透傳遞的界面) 思考域 測試:功能本身 安全測試:功能,系統機制,外部環境,應用與數據自身安全風險與安全屬性 問題發現模式 測試:違反功能定義的輸出 安全測試:違反權限,能力

19、與約束 黑盒:狀態或行為異常 灰盒:未完備的約束檢測 靜態白盒:基于規范軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201022 安全測試安全測試 安全測試與滲透測試 出發點與目的 成本 測試對象 覆蓋/完備/度量 解決方案 過程參與軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course

20、, 7Safe2010/11/10DBAppsecurtiy 201023軟件安全開發生命周期安全自身要素 安全包括了三個層次安全功能(特性)安全策略(部署,配置,全局設計準則)安全實現安全測試是對以上幾個層次的驗證和度量外部防護系統是一種補充保護7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201024 安全測試安全測試 安全功能測試 是否足夠 是否實現 實現正確性 安全策略測試 是否足夠 是否實現 實現正確性 代碼自身安全

21、 數據邊界檢測是否正確足夠 體系設計是否正確足夠 權限限制與檢測是否正確足夠 處理邏輯是否正確軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201025 安全測試安全測試 黑盒思路:基于功能與邊界值 FUZZ 智能FUZZ 全局數據結構 白盒思路:基于路徑 源碼審計 二進制靜態分析 二進制數據流動態追蹤分析軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, I

22、nfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201026 簡介 安全需求分析 安全設計 安全編程 安全測試 安全部署及安全響應 軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201027 安全部署及安全響應安全部署及安全響應 安全部署軟件需提供相應的文檔和工具,指導用戶如何安全的使用。 安全響應當前任何一個軟件開發模式

23、(包括SDL在內),都無法確保發布的軟件沒有安全漏洞。因此,需要事先制訂對應的相應模式,包括:(內部或外部發現的)安全漏洞以何種途徑匯報如何評估安全漏洞的嚴重級別開發安全補丁的流程測試安全補丁的流程發布安全補丁的流程如何在以后開發中避免類似的安全漏洞,等等軟件安全開發生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201028 軟件安全開發生命周期(SDL) 基于WEB應用程序的SDL目錄7Safe Company Ov

24、erview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201029 概述概述 在公開提供的 SDL 文檔中,找不到專門針對如何保護 Web 應用程序或在線服務的指南。誠然,大多數 SDL 非實現要求同樣適用客戶端/服務器和 Web 應用程序。就象威脅模型對 Web 窗體應用程序與 Windows 窗體應用程序同樣重要。而對 SOAP 服務和對 Windows 服務執行最終安全審查也同樣重要。但對于跨站點腳本 (XSS) 和 SQL 注入等與 Web 相關的漏洞會是怎

25、樣的情況呢?如果 SDL 如此注重防御客戶端/服務器應用程序的緩沖區溢出,它為什么會忽視針對在線服務發起的 XSS 攻擊這一 Web 頭號公敵的防御呢?下面以JAVA編程安全為例說明。基于WEB應用程序的SDL7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201030 簡介 跨站腳本(XSS) 注入漏洞(Injection Flaws) 惡意文件執行 不安全的直接對象引用 跨站點請求偽造(CSRF) 信息泄露和錯誤處理不當 殘

26、缺的認證和會話管理 不安全的加密儲存 不安全的通信 限制URL訪問失效JAVA安全編程OWASP TOP 10 AND ESAPI7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201031簡介 OWASP TOP 10 OWASP(開放Web應用安全項目- Open Web Application Security Project)是一個開放社群、非營利性組織,目前全球有82個分會近萬名會員,其主要目標是研議協助解決Web軟體

27、安全之標準、工具與技術文件,長期 致力于協助政府或企業了解并改善網頁應用程式與網頁服務的安全性。 OWASP TOP 10是10個最關鍵的Web應用安全問題清單。 這份名單是每隔數年更新(最近2010年)。 名單上都是那些通常很簡單的,危險的安全問題。 這里是一個以在OWASP十大項目的鏈接。/index.php/Category:OWASP_Top_Ten_Project7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/1

28、0DBAppsecurtiy 201032 ESAPI(Enterprise Security API) 其實簡單一點來說,ESAPI就是為編寫出更加安全的代碼設計出來的一些API,方便使用者 調用,從而方便的編寫安全的代碼。它本身是開源的,同時提供JAVA版本和.NET版本。 代碼下載地址:http:/ 下圖顯示了提供的API與OWASP列出的10個安全問題的涵蓋關系: 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010

29、33What is an Enterprise Security API?The ESAPI Family Community Breakdown7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201034OWASPWhat is an Enterprise Security API?Addressing The OWASP Top TenOWASP Top TenOWASP ESAPIA1: InjectionA2: Cros

30、s Site Scripting (XSS)A3: Broken Authentication and Session ManagementA4: Insecure Direct Object ReferenceA5: Cross Site Request Forgery (CSRF)A6: Security MisconfigurationA7: Insecure Cryptographic StorageA8: Failure to Restrict URL AccessA9: Insufficient Transport Layer ProtectionA10: Unvalidated

31、Redirects and ForwardsEncoderEncoder, ValidatorAuthenticator, User, HTTPUtilitiesAccessReferenceMap, AccessControllerUser (CSRF Token)SecurityConfigurationEncryptorAccessControllerHTTPUtilitiesAccessController7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11

32、/10DBAppsecurtiy 201035OWASPWhat is an Enterprise Security API?OWASP ESAPI Project ScorecardAuthentication2.0Identity2.0Access Control2.01.4Input Validation2.0Output Escaping2.01.42.0Canonicalization2.01.42.0Encryption2.01.4Rand

33、om Numbers2.01.4Exception Handling2.0Logging2.01.41.4Intrusion Detection2.0Security Configuration2.01.41.4WAF2.02.02.07Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201036 下圖顯示結合ESAPI設計

34、你的程序7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201037 下圖簡單呈現ESAPI如何運作7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201038跨站腳本(XSS)定義 跨站腳本是最普遍的web應用安全漏洞。當應用程序在發送給瀏覽器的頁面中包含用戶提

35、供的數據,但沒有經過適當驗證或轉譯那些內容,這就導致跨站腳本漏洞。危害 攻擊者能在受害者瀏覽器中執行腳本以劫持用戶會話、迫害網站、插入惡意內容、重定向用戶、使用惡意軟件劫持用戶瀏覽器等等。種類 已知有三種著名跨站漏洞:1)存儲式;2)反射式;3)基于DOM。 反射式跨站腳本通過測試或代碼分析很容易找到。 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201039解決之道 驗證輸入 驗證輸入很簡單 - 檢查每個輸入的有效性。 這

36、可能意味著很多東西,但在典型的和簡單的情況下,這意味著檢查輸入類型和數據的長度。 例如,如果你是從一個文本框接受一個標準的郵政編碼,你會知道,唯一有效的類型是一個數字(0-9),而長度應該是6,不能多也不能少。 并非所有 的案件都如此簡單,但很多是相似的。 下圖顯示驗證輸入的架構。 這里的關鍵是,一切都進行驗證,所有的輸入,這并不來自于應用程序(包括用戶輸入,請求頭,Cookie,數據庫數據.)。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBApps

37、ecurtiy 2010407Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201041u 實例 getValidInput(java.lang.String context, java.lang.String input, java.lang.String type, int maxLength, boolean allowNull, ValidationErrorList errors) isValidInput(java.

38、lang.String context, java.lang.String input, java.lang.String type, int maxLength, boolean allowNull) String validatedFirstName = ESAPI.validator().getValidInput(FirstName, myForm.getFirstName(), FirstNameRegex, 255, false, errorList); boolean isValidFirstName = ESAPI.validator().isValidInput(FirstN

39、ame, myForm.getFirstName(), FirstNameRegex, 255, false); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201042 編碼輸出 對驗證輸入的另一面就是編碼輸出。 編碼輸出,是用來確保字符 被視為數據,而不是作為HTML元字符被瀏覽器解析。 這些技術定義一些特殊的“轉義”字符。 沒有正確轉義的數據它仍然會在瀏覽器中正確解析。 編碼輸出只是讓瀏覽器知道數據是不是要被解析,達到

40、攻擊無法實現的目的。 需要編碼的部分: 1、HTML實體 2、HTML屬性 3、Javascript 4、CSS 5、URL 下圖像顯示編碼輸出的架構。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010437Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20

41、1044u 實例1HTML實體編碼/performing input validation String cleanComment = ESAPI.validator().getValidInput(comment, request.getParameter(comment), CommentRegex, 300, false, errorList); /check the errorList here . . /performing output encoding for the HTML context String safeOutput = ESAPI.encoder().encodeF

42、orHTML( cleanComment ); u 實例2URL編碼/performing input validation String cleanUserName = ESAPI.validator().getValidInput(userName, request.getParameter(userName), userNameRegex, 50, false, errorList); /check the errorList here . . /performing output encoding for the url context String safeOutput = /adm

43、in/findUser.do?name= + ESAPI.encoder().encodeForURL(cleanUserName); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201045注入漏洞(Injection Flaws)定義 簡單來說,注入往往是應用程序缺少對輸入進行安全性檢查 所引起的,攻擊者把一些包含指令的數據發送給解釋器,解釋器會把收到的數據轉換成指令執行,注入漏洞十分普遍,通常能在SQL查詢、LDAP查

44、詢、Xpath查詢、OS命令、程序參數等中出現。危害 注入能導致數據丟失或數據破壞、缺乏可審計性或是拒絕服務。注入漏洞有時甚至能導致完全接管主機。種類 SQL注入、XPATH注入、LDAP注入、OS命令注入等。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201046解決之道 SQL注入實例String sqlString = SELECT * FROM users WHERE fullname = + form.getFul

45、lName() + AND password = + form.getPassword() + ; 正常:username=tony,password=123456SELECT * FROM users WHERE username = tony AND password = 123456 攻擊: username=tony,password= OR 1 = 1SELECT * FROM users WHERE username = tony AND password = OR 1 = 1 參數化查詢預處理7Safe Company Overview 2009Dan Haagman, Info

46、Security 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201047 使用PreparedStatement()綁定變量 下面的代碼示例使用一個PreparedStatement,Java的一個參數化查詢的執行情況,執行相同的數據 庫查詢。 String custname = request.getParameter(customerName); / This should REALLY be validated too / perform input validation to detect attacks String

47、 query = SELECT account_balance FROM user_data WHERE user_name = ? ; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( ); 使用存儲過程7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe201

48、0/11/10DBAppsecurtiy 201048String custname = request.getParameter(customerName); / This should REALLY be validated try CallableStatement cs = connection.prepareCall(call sp_getAccountBalance(?); cs.setString(1, custname); ResultSet results = cs.executeQuery(); / result set handling catch (SQLExcepti

49、on se) / logging and error handling 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201049 使用ESAPI /ESAPI version of query Codec ORACLE_CODEC = new OracleCodec(); /were using oracle String query = SELECT name FROM users WHERE id = + ESAPI.e

50、ncoder().encodeForSQL( ORACLE_CODEC, validatedUserId) + AND date_created = + ESAPI.encoder().encodeForSQL( ORACLE_CODEC, validatedStartDate) +; myStmt = conn.createStatement(query); . /execute statement and get results7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Sa

51、fe2010/11/10DBAppsecurtiy 201050惡意文件執行定義 惡意文件執行是一種能夠威脅任何網站形式的漏洞,只要攻擊者在具有引入(include)功能程式的參數中修改參數內容,WEB服務器便會引入惡意程序內容從而受到惡意文件執行漏洞攻擊。危害 攻擊者可利用惡意文件執行漏洞進行攻擊取得WEB服務器控制權,進行不法利益或獲取經濟利益。解決之道 實例1驗證輸入,使用ESAPI驗證上傳文件名7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBA

52、ppsecurtiy 201051 if (!ESAPI.validator().isValidFileName(upload, filename, allowedExtensions, false) throw new ValidationUploadException(Upload only simple filenames with the following extensions + allowedExtensions, Upload failed isValidFileName check); 實例2使用ESAPI檢查上傳文件大小 ServletFileUpload upload =

53、 new ServletFileUpload(factory); upload.setSizeMax(maxBytes); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201052不安全的直接對象引用定義 所謂“不安全的對象直接引用”,即Insecure direct object references,意指一個已經授權的用戶,通過更改 訪問時的一個參數,從而訪問到了原本其并沒有得到授權的對象。Web應 用往往在生成Web頁

54、面時會用它的真實名字,且并不會對所有的目標對象訪問時來檢查用戶權限,所以這就造成了不安全的 對象直接引用的漏洞。 我們看如下的一個示例,也許這樣就更容易理解什么是不安 全的對象直接引用。 攻擊者發現他自己的參數是6065, 即?acct=6065;他可以直接更改參數為6066, 即?acct=6066;這樣他就可以直接看到6066用 戶的賬戶信息了。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010537Safe Comp

55、any Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201054危害 這種漏洞能損害參數所引用的所有數據。除非名字空間很稀疏,否則攻擊者很容易訪問該類型的所有數據。解決之道 案例1使用ESAPI的AccessReferenceMap實現使用非直接的對象引用 MyObject obj; / generate your object Collection coll; / holds objects for display in UI /create ESA

56、PI random access reference map AccessReferenceMap map = new RandomAccessReferenceMap(); /get indirect reference using direct reference as seed input String indirectReference = map.addDirectReference(obj.getId(); /set indirect reference for each object - requires your app object to have this method o

57、bj.setIndirectReference(indirectReference); /add object to display collection coll.add(obj); /store collection in request/session and forward to UI . 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201055 案例2 檢查訪問。 來自不受信源所使用的所有直接對象引用都必須包含訪問

58、控制檢測,這樣才能確保用戶對要求的對象有訪問權限。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201056跨站點請求偽造(CSRF)定義 跨站請求偽造,也被稱成為“one click attack” 或者session riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,并且攻擊方式幾乎相左。XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶

59、的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防范的資源也相當稀少)和難以防 范,所以被認為比XSS更具危險性。危害 攻擊者能讓受害用戶修改可以修改的任何數據,或者是執行允許使用的任何功能 。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201057解決之道 第一步,新建CSRF令牌添加進用戶每次登陸以及存儲在http session里,這種令牌至少對每個用戶會話來說應該是唯一的,或者是對每

60、個請求是唯一的。 /this code is in the DefaultUser implementation of ESAPI /* This users CSRF token. */ private String csrfToken = resetCSRFToken(); . public String resetCSRFToken() csrfToken = ESAPI.randomizer().getRandomString(8, DefaultEncoder.CHAR_ALPHANUMERICS); return csrfToken; 7Safe Company Overview 2009Dan

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論