程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 高效率創建安全的Java應用, 第2部分

高效率創建安全的Java應用, 第2部分

編輯:關於JAVA

使用 Rational AppScan 最大化 Java Web 應用程序的安全性

本文是系列教程的第 2 部分,主要內容是使用 Rational® Application Developer、Data Studio 和 Rational AppScan 創建安全的基於 Java® 的 Web 應用程序。在第 1 部分中,您已經使用 Rational Application Developer 開發了一個 Java Web 應用程序,然後在 WebSphere Application Server 上部署了這個用 Java Server Pages (JSP)技術開發的應用程序。

在您開始之前

本文適用於 Web 應用程序開發人員、 Web 應用程序測試人員、質量保證團隊、信息安全專業人員和任何希望確保自己的 Web 應用程序免受所有已知的網絡安全性攻擊的人們。本教程將向您介紹如何使用 IBM Rational AppScan 實現這一目標。

關於本系列

這兩篇教程的目標是通過 Rational Application Developer、Data Studio 和 Rational AppScan 的使用,增強您的 Web 應用程序開發技能。

第 1 部分使用 Rational Application Developer 和 Data Studio 的 pureQuery 特性,有效地創建了一個基於 Java 的 Wealth 管理 Web 應用程序。

在第 2 部分中,您將充分利用許多 Rational AppScan 所提供的特性,加強或者確保 Java 應用程序的安全性,並且修補發現的缺陷。

關於教程

本教程將向您介紹如何安裝、配置和使用 Rational AppScan 來掃描第 1 部分中所創建的 Java Web 應用程序。您將使用 Rational AppScan 掃描來確保您的 Web 應用程序遠離網絡安全性攻擊的困擾。通過本文的學習,您將了解到如何實現:

定制一份掃描模板;

執行一次掃描;

解釋掃描結果,並且從中獲得信息;

生成掃描報告;

使用 Rational AppScan 擴展;

本教程以對 Web 應用程序安全性的概述開始。概述中解釋了使用 Rational AppScan 的重要性,即確保能夠在應用程序開發過程中消除網絡安全性缺陷。另外,我們還介紹了 Rational AppScan 的部署和許可證,從而幫助您最大限度的使用 Rational AppScan 的各項功能。

系統需求

為了完成本文中的各個操作步驟,您需要:

一份 IBM Rational AppScan Standard Edition。一份完整的或者臨時的 Rational AppScan 許可證。Rational AppScan 的試用版本只允許查找一個默認的網站。您可以與您的 IBM Rational 銷售商聯系,獲得一份臨時的短期 Rational AppScan 許可證。

一台能夠同本系列教程第 1 部分的工作站或者服務器相連接的筆記本電腦。

Rational AppScan 和 Web 應用程序的安全性概述

在本小節中,我們將看到 Web 應用程序安全性的一般狀態,以及 Rational AppScan 在增強網絡程序的安全性中所發揮的作用。

網絡程序安全性概述

隨著因特網上 Web 應用程序和 Web 2.0 的爆發,越來越豐富的 Web 應用程序的功能性導致了從未有過的龐大和復雜的 Web 應用程序的產生,尤其是在電子商務網站和社會網絡站點上面。與此同時,另一種趨勢也日漸突出,那就是 Web 應用程序中的代碼缺陷越來越受到黑客的攻擊。

有證據顯示,與傳統的發生在網絡層上面的攻擊所不同的是,在 Web 應用程序層上面的攻擊數量呈現上升趨勢。任何面向網絡解決方案的網絡基礎構造同以往一樣的重要,但是我們現在已經到達了一個新的平台。因此,黑客現在已經將他們的關注點放到了安全缺陷更加豐富的區域,即 Web 應用程序中的代碼。黑客將目標直指由 Web 應用程序所控制的高價值的數據。

考慮到周圍的防火牆,它提供了抵御網絡層攻擊的保護措施,但是網絡防火牆幾乎還沒有提供抵御 Web 應用程序層缺陷的保護措施。舉例來說,防火牆可能只允許 https 網絡訪問 Web 服務器,但是防火牆並沒有檢查實際的 HTML Web 應用程序中的內容,而這些內容有可能正式問題所在。這種影響是巨大的,即使是 Web 應用程序代碼中最細微的缺陷(例如輸入框中的合法性),也會導致業務上的致命缺陷,並由此產生經濟上和客戶信譽度的重大損失。

黑客攻擊 Web 應用程序代碼的典型後果就是使得攻擊者跳過登錄系統,盜取用戶網絡會話,直接查詢、訪問和操縱後台數據庫。

針對 Web 應用程序的缺陷發起攻擊的風險是現實存在的,特別是當應用程序的數據同高價值的業務相關聯的時候(例如:支付卡信息),即使是敏感的個人數據也是具有出售價值的。由於數據被破壞,導致法定的、調節的和工業的標准需要征收大量的罰金。請您牢記,一旦將 Web 應用程序放到因特網上,那麼任何人就都有能力對其進行訪問,這其中當然包括那些可惡的黑客。這些黑客有足夠多的時間發現和探索 Web 應用程序代碼中的缺陷和弱點。考慮到本教程中所創建的 Web 應用程序具有一個財務主題和敏感的信息,所以在將其發布之前確保 Wealth Web 應用程序沒有缺陷是一件十分重要的事情。

考慮到這一背景以及日益增加的數據安全性要求,開發一個沒有安全缺陷的 Web 應用程序是一個非常關鍵的需求和基本目標。在這個教程中,您將使用 IBM 的 Rational AppScan 確保第 1 部分中所創建的 Wealth Java Web 應用程序遠離安全性缺陷,確保 Web 應用程序足夠安全地被放置在因特網上面。

Rational AppScan 概述

IBM 的 Rational AppScan 是一款針對 Web 應用程序缺陷測試的安全性套件。使用 Rational AppScan 能夠幫助您確保任何被開發出來的 Web 應用程序可以被安全地放到因特網中。Rational AppScan 是一款功能強大而且可以定制的掃描工具,不僅被用於開發和測試過程,而且經常被用於滲透測試,甚至是質量保證團隊和業務管理。

Rational AppScan 的首要功能就是掃描和測試 Web 應用程序的缺陷,它能夠捕獲到成千上萬個安全問題,例如:SQL 注入、跨站點腳本(XSS)以及緩沖區溢出等。Rational AppScan 中的安全性測試還可以定期升級;新的測試和更新被添加到 Rational AppScan 的測試文件夾中,作為新被發現的 Web 應用程序缺陷。

Rational AppScan 的報告和許可

Rational AppScan 具有內嵌的報告功能,它可以將掃描結果以 Adobe PDF 文件的方式生成出來。這些報告在 Rational AppScan 中都是可以定制的。請您參見 下載部分查看本文中所生成的所有報告。Rational AppScan 自帶了大量的預先定義的報告格式,它們能夠滿足絕大多數的國際標准和工業需求。其中包括:支付卡行業數據安全標准(PCI DSS)、SOX、HIPPA、OWASP Top Ten、WASC Threat Classification、ISO 17799/27001 以及 SANS Top Ten 等。

在購買 Rational AppScan 之前,您需要花一定的時間考慮您打算如何在環境中部署和使用 Rational AppScan。您應當對 Rational AppScan 的許可證許可系統和兩種典型的部署方法有一個很好的理解。Rational AppScan 被安裝和綁定在一台特定的機器上,但是這台機器(以及 AppScan)能夠被多個用戶使用。應用程序許可證將 Rational AppScan 同機器的 MAC 地址(網卡地址)和硬盤序列號綁定在一起。所以,在部署 Rational AppScan 之前,請您花時間考慮並且決定采用哪種安裝策略是最佳的。

第一個典型的選項就是在一台中心“測試”服務器上安裝 Rational AppScan,這樣做能夠很好的管理和控制應用程序的使用。這種策略類型適用於在單一的測試環境中使用 Rational AppScan。

筆記本電腦的安裝

將 Rational AppScan 安裝到一台筆記本電腦上較之安裝到一台服務器上具有更大的靈活性。如果您計劃在不同網絡的多個測試環境中使用 Rational AppScan 的話,那麼我建議您采用這一策略。

在結束您的部署策略之前,您必須考慮 Rational AppScan 的使用是否得到許可證授權。舉例來說,購買一份 Rational AppScan 的許可證,從而在一個特定的站點內測試 Web 應用程序,這種情況就是可以接受的。

注意:Rational AppScan 許可證系統在2008年底之前將轉變為標准的 IBM Rational 許可證結構。

在本教程中,您將在一台與第 1 部分中所創建的 Wealth Java Web 應用程序網絡連通的筆記本電腦上安裝並且使用 Rational AppScan。當然,Rational AppScan 也可以被安裝在第 1 部分中所使用的同一台機器上,並且執行本地掃描。

安裝 Rational AppScan

在這一小節中,您將在一台筆記本電腦中安裝 Rational AppScan 應用程序。Rational AppScan 需要被安裝和運行在任何一款基於現代的 Microsoft® Windows® 並且安裝有 Java Runtime 的平台上面。

安裝步驟

將 Rational AppScan 應用程序安裝在一台筆記本電腦上是一個相對簡單的操作過程。

雙擊安裝文件,啟動 InstallShield 向導,如圖 1 中所示。

圖 1. 啟動 InstallShield 向導

如果安裝程序檢測到 Microsoft .NET Framework 2.0 或者其更高版本沒有被安裝,那麼安裝過程將在繼續下一步之前,首先安裝 Microsoft .NET Framework 3.0。

閱讀並且點擊 I accept the terms in the license agreement,然後點擊 Next。

圖 2. 許可證

接收默認的安裝路徑。

圖 3. 選擇一個安裝路徑

Rational AppScan 應用程序已經被安裝好了。然而,在使用 Rational AppScan 和運行掃描之前,您需要做一些保存工作。

Rational AppScan 軟件升級概述

當 Rational AppScan 啟動時,它會自動詢問 IBM 服務器來核對 Rational AppScan 是否是最新版本的。通常在第一次運行 Rational AppScan 時,您應當保證升級是可以提供的,從而 Rational AppScan 可以自動地下載並且使用它們。

Rational AppScan 同反病毒軟件產品的升級類似,其原因是新的 Web 應用程序缺陷會不斷地被發現。因此,Rational AppScan 支持團隊通過升級軟件的方法,將新的測試和變化引入到現有的測試庫中。這一處理過程確保 Rational AppScan 能夠測試最新出現的 Web 應用程序的安全性缺陷。

對於升級處理過程來說,您的 Rational AppScan 工作站或者服務器必須同因特網相連接。升級可以從客戶支持入口中被手動下載,這一入口保證內部開發人員可以訪問到,而外部網絡是無法連通的。

Rational AppScan 的升級

現在是升級 Rational AppScan 的時候了。

啟動 Rational AppScan,如圖 4 中所示。

圖 4. Rational AppScan 連接到 IBM 服務器,檢查是否需要更新

點擊 Install 開始自動下載和安裝過程(請參見圖 5 所示)。

圖 5. 升級後自動地被安裝

安裝過程結束後,點擊 View Update Log,如圖 5 中所示,它顯示了實際的升級細節。現在,升級操作已經完成,下一步是許可證 Rational AppScan。

Rational AppScan 許可證概述

我們一起來看一下許可證 Rational AppScan 的步驟。

重新啟動 Rational AppScan 並且點擊面板左側的 Security Issues 標簽。作為您所購買的 AppScan (或者試用版本)的一部分,您將獲得一個通過電子郵件發送的 License Serial Key (LSK),以及如何下載 AppScan 許可證文件的提示說明。點擊 Help > License (請參見圖 6 所示)。

圖 6. 選擇許可證選項

在圖 7 中所顯示的許可證選項窗口上,點擊 Obtain License Online。

圖 7. 點擊 Obtain License Online

於是,AppScan 許可證網站被打開:https://licensing.watchfire.com (請參見圖 8 所示)。完成表單,其中的紅色區域必須填寫。

圖 8. AppScan 許可證網站的表單

您需要知道 MAC 地址和 AppScan 被安裝到的硬板卷標。在線生成的許可證文件將會把 AppScan 應用程序的安裝和使用鎖定到特定的系統上。

為了找到這些細節,請您在 DOS 提示行中(在 Windows 中運行 cmd)鍵入 ipconfig/all,從而顯示您所使用的網卡的 MAC 地址。然後執行 vol,從而顯示您的硬盤驅動器卷標序列號。在 AppScan 許可證網站表單的底部填寫系統的詳細信息,如圖 9 中所示。

圖 9. AppScan 許可證網站表單的系統詳細信息部分

最後,接受許可證協議,並且點擊屏幕底部的 Continue (請參見圖 10 所示)。

圖 10. 接受許可證協議

一旦您擁有了許可證文件,請將其導入到 AppScan 之中。返回到圖 6 並且再次從 Help 下拉菜單中選擇 License 選項,啟動許可證選項屏幕。這一次請您點擊 Load License File。

定位到位於 AppScan License 目錄下的下載的許可證文件,並且點擊 Open (請參見圖 11 所示)。

圖 11. 位於 AppScan License 目錄下的下載的許可證文件

恭喜您!Rational Appscan 現在已經可以被使用了。

Rational AppScan 的運行

至此,您已經安裝了 Rational AppScan,現在我們開始測試,並且在 Wealth 應用程序上運行一個掃描。

為測試 Web 應用程序做好准備

在本教程中,您將 Rational AppScan 安裝在一台不同於第 1 部分中那台安裝有 Rational Application Developer、Data Studio、以及隨後開發 Wealth Java Web 應用程序的機器上。如果您缺乏硬件資源,Rational AppScan 也可以被安裝在同一台機器上,並且您可以通過輸入 http://localhost:9080/wealth/ 作為掃描 URL 對 Wealth Web 應用程序進行本地掃描。

在掃描之前獲得許可

在使用 AppScan 對一個 Web 應用程序進行掃描之前,請確保您已經獲得了許可權。當在您的測試環境之外掃描 Web 應用程序的時候,這一點尤其重要。在沒有許可的情況先使用 AppScan 對第三方網站進行掃描會產生嚴重的法律後果。

我們需要確保您的 Wealth Java 應用程序在線並且在您的 Rational Application Developer 平台上正確運行。在 Rational Application Developer 內部,點擊 Open Web Perspective > Web,然後選擇 Servers 標簽(請參見圖 12 中所示),並且查看網絡服務器是否已經啟動。如果沒有啟動,右鍵單擊並且選擇 Start。根據您的硬件性能,這可能需要花費一段時間。

圖 12. 啟動 Rational Application Developer 的 WebSphere

接下來,您需要測試是否能夠從您的 Rational AppScan 筆記本電腦訪問您的 Wealth Web 應用程序。首先確保筆記本電腦和 Web 應用程序在同一個網絡中:在您的網絡浏覽器中鍵入 http://<ip address of RAD>:9080/Wealth/login.jsp。

在這個例子中,Rational Application Developer 工作站的 IP 地址是 192.168.0.4,所以您的 URL 就是 http://192.168.0.4:9080/Wealth/login.jsp。

一旦開啟,我們就可以對 Wealth Web 應用程序進行測試了,登錄並且點擊一系列的鏈接以確保每件事都響應正常。

至此,我們已經知道 Wealth Web 應用程序可以正常工作,並且可以被 Rational AppScan 設備看到,所以您現在就能夠進行第一次掃描了。

在您進行掃描之前,還需要好好理解一下 Rational AppScan 的掃描模板。

掃描模板概述

Rational AppScan 是一款功能強大的缺陷掃描工具,它能夠在大量的缺陷區域中發現成千上萬個弱點。其中某些測試區域,例如測試 Web 服務器和 Web 服務,和確保您的應用程序代碼沒有缺陷並不相關。因此,您需要裁剪您的缺陷掃描,剪除掉那些我們並不感興趣的區域。

Rational AppScan 使用掃描模板,即被保存下來的用於某種特定類型的缺陷掃描的掃描配置。掃描模板使我們能夠將這些定制的配置應用並且保存到特定的掃描中。Rational AppScan 自帶若干個預先定義的掃描模板。然後,定制自己的掃描模板具有許多優勢,例如:確保確保重新掃描時的精確復現以及同其他開發人員和團隊進行共享等。

掃描應用程序

使用並且保存您自己定制的掃描模板,以便下一次重新掃描時使用。

從 Rational AppScan 歡迎窗口中選擇 Create New Scan,或者從 Rational AppScan 內部點擊 File 下拉菜單並且選擇 New,如圖 13 中所示。

圖 13. Rational AppScan 歡迎窗口

接下來,確保 Launch Scan Configuration 向導被選中,並且從預定義模板中點擊 Default,如圖 14 中所示。

圖 14. 啟動掃描配置向導被選中

然後,我們選擇想要執行的掃描類型: Web 應用程序掃描或者網絡服務掃描。網絡服務掃描包括基礎構造,例如網絡服務器的配置等。這種掃描類型同您的開發流程無關,所以我們選擇 Web 應用程序掃描Web Application Scan,它專門用於掃描 Web 應用程序內部的缺陷,如圖 15 中所示。

圖 15. 選擇 Web 應用程序掃描

您被要求輸入掃描的 Starting URL,如圖 16 中所示。

圖 16. 請求輸入掃描的 Starting URL

選項 Full Scan Configuration 允許您詳細地定制掃描,但是在本文中,由於您的 Web 應用程序相對小型而且並不復雜,所以您只需按照掃描配置向導點擊下一步即可。輸入您的 Web 應用程序的 URL:http://192.168.0.4:9080/Wealth/。

不要輸入 login.jsp 或者 welcome.jsp,只需輸入 URL 根目錄即可,這是因為 Rational AppScan 將自動發現和分析 Web 應用程序的所有方面。

大小寫敏感的路徑對於運行在 Linux 或者 Unix 平台上的網絡服務器來說,是十分重要的。

如果您需要配置代理設置來訪問目標 Web 應用程序服務器,那麼在屏幕底部提供了這一操作。與使用 IP 地址不同的是,您的目標 Web 應用程序將擁有一個完整的因特網地址或者內部域名。如果出現代理問題,您應當進入該屏幕並且對設置進行相應的修改。請注意 AppScan 並不支持代理例外。如果 localhost 被設置為例外的話,您應當在 AppScan 中將其設置為 Don't Use Proxy。

點擊 Next 進入 Login 管理屏幕(如圖 17 中所示)。

圖 17. 登陸管理

登錄管理

Login 管理是掃描的關鍵部分。您希望 Rational AppScan 測試用戶所能看到和做到的每一件事情;因此 Rational AppScan 需要能夠以一名普通用戶的身份許可證(登錄)到您的 Wealth Web 應用程序中。您可以有多種選擇,一種是被提示,即每當 Rational AppScan 發現一個登錄頁面時,它就會停止掃描並且將該頁面顯示在屏幕上。隨後,您以一位用戶的身份登錄,Rational AppScan 記錄下那些登錄細節,並且使用這些信息完成後續的 Web 應用程序測試。

為了使您的掃描能夠順利地進行而不被中斷,請使用自動選項。在開始掃描之前,為 Rational AppScan 提供登錄的詳細信息,並且將它們保存在掃描模板中,已被日後使用。

選擇 Automatic 單選按鈕,如圖 17 中所示,然後輸入用戶名 tyler 和密碼 tyler (或者您在第 1 部分中所使用的其他用戶名和密碼)。

您擁有配置 “In-Session” 檢測的選項,Rational AppScan 會有管理用戶網絡會話和找到登出頁面等問題。對於本教程來說,不存在這一問題。

點擊 Next。

Rational AppScan “策略”是指特定組的 Rational AppScan 測試。
您需要在您的掃描中運行 Web application 測試,所以您需要限制測試執行的數量以適應 Web 應用程序的測試。請您選擇 Application-Only 策略,並且點擊 Next,如圖 18 中所示。

圖 18. 選擇 Test Policy

最後,Rational AppScan 詢問您是否准備好開始掃描;如果是,請您點擊開始全面自動掃描單選按鈕,並且點擊 Next,如圖 19 中所示。

圖 19. 先生們,開始行動吧!

您的掃描需要被保存,所以請選擇 Yes,如圖 20 中所示。

圖 20. 在開始掃描前所需要完成的最後一件事情

輸入名稱 WealthScan (如圖 21 中所示),並且點擊 Save。

圖 21. 輸入掃描名稱

掃描開始執行。

掃描執行

掃描的時間依賴於目標 Web 應用程序的復雜性和規模,帶寬、處理速度、以及掃描內部的測試方向數量等。您的應用程序相對較小,所以您的掃描只需幾分鐘的時間即可完成。

當掃描被執行時,第一個 Rational AppScan 決定 Web 應用程序的范圍,並且列出將要被掃描的 Web 應用程序文件和 URL。下一個 Rational AppScan 負責根據所選擇的策略,對 Web 應用程序的每個部分進行一系列缺陷掃描。

當掃描運行時,選擇 View > Scan Log。您可以看到掃描的詳細情況。在圖 22 中,您可以看到自動用戶登錄在發揮作用(藍色加亮),不同的掃描細節和分析被執行,並且測試的失敗消息以紅色加亮的方式被返回給使用者。

圖 22. 始終觀察進展情況

在 Rational AppScan 的右下區域,您能找到 Issue Severity Gauge,它負責掃描的實施更新。在此之下是 Web 應用程序內部被發現和被訪問的 URL 以及未完成和已完成測試的數量。圖 23 中顯示了第一次掃描的結果。

圖 23. Issue Severity Gauge

掃描完成

掃描結果出來了,壞消息是您的 Wealth Java Web 應用程序存在問題。Rational AppScan 一共返回了18個問題,並且按照安全性級別對其進行分類。也就是說,您有8個高風險的缺陷、3個中等風險的、兩個低風險的、以及3個信息相關的問題,所有這些都需要被調查和解決。

不用擔心,Rational AppScan 將繼續幫助您完成後面的操作。如果您經歷過第三方 Web 應用程序的滲透測試,那麼您就會知道往往後面的報告會告訴您這裡存在一個問題,但是並不解釋缺陷到底是什麼、如何修正它、或者有關實際測試的任何細節。然而,Rational AppScan 會為您完成所有這些工作。

Rational AppScan 以 “.jsp” 文件的方式顯示它所發現的每一個問題,然後根據嚴重性級別進行歸類,如圖 24 中所示。

圖 24. 掃描結果

現在我們來理解這些被發現的問題,不用擔心,這正是 Rational AppScan 發揮作用的時候。

點擊第一個問題,顯示為一個 Cross-Site Script(XSS)缺陷。詳細信息被顯示在屏幕右下方的面板上,如圖 25 中所示。我們建議您放大這個面板以便觀察。

圖 25. 理解一個被發現的安全性問題

建議

在建議一節中,Rational AppScan 詳細解釋了它所發現的安全性缺陷的類型。在這個例子中,是一個 XSS 缺陷。在頂部是關於這個缺陷及其嚴重性的一個簡要概述,在窗口的左下角是詳細的描述文本。在右側是一個視頻解釋,這是一個很好的學習幫助。

回到左側的建議一欄。如果您需要了解進一步的信息,這裡有一個指向 WASC ( Web 應用程序安全性集團)的鏈接,其中提供了進一步的信息和建議。WASC 是一家致力於 Web 應用程序安全性的公司。

如果您不知道什麼是 XSS 缺陷,那麼請觀看 Rational AppScan 所提供的視頻。

修補缺陷

至此,您已經完成了對應用程序的掃描,並且發現了缺陷。下面我們使用 Rational AppScan 解決這些問題。

修正建議

我們現在已經知道什麼是 XSS 問題,以及為什麼必須將其消除。現在,我們學習如何修正它。點擊修正建議標簽,如圖 26 中所示。

圖 26. 修正

Rational AppScan 以一種開發人員友好的方式解釋了如何修正 Web 應用程序內部的問題。

Rational AppScan 甚至提供了阻止該問題的 Java 代碼示例行,如圖 27 中所示。Rational AppScan 真好像將修正問題的工作簡化到連小孩子都可以完成的地步了。

圖 27. Rational AppScan 的修正代碼

請求和響應

“請求和響應”提供了關於 Rational AppScan 對於您的 Web 應用程序進行實際測試的信息。Rational AppScan 首先發送一個正常的請求,然後再次發送同樣的請求,但是根據缺陷測試稍作修改。如果您看到圖 28 的話(其中顯示“測試”打開),那麼紅色加亮的文本就是 Rational AppScan 針對您的 Web 應用程序所進行的實際測試(也就是變體)。這樣做使您能夠看到測試的具體細節。請注意代碼窗口是如何顯示測試的以及用紅色顯示了被修改的內容,這使您能夠選擇 AB 加亮按鈕來調整到響應部分。您可以使用這一信息來手動地重現攻擊,或者進行同類型的您自己的具體測試,然後將其保存在 Rational AppScan 中。您甚至可以在網絡浏覽器中顯示測試的結果。

圖 28. 請求和響應

變體就是 Rational AppScan 向您的 Web 應用程序服務器所發送的對原始測試請求所進行的細微修改。

如果您懷疑由 Rational AppScan 所提供的測試結果的有效性,您可以向 IBM Rational AppScan 支持團隊發送錯誤定位報告。這一過程使得 Rational AppScan 將測試的細節通過電子郵件發送到 IBM 進行進一步地分析,但是請不用擔心,這些詳細信息默認情況下都是被加密後發送的。

修正具體問題

Rational AppScan 告訴您在 http://192.168.0.4:9080/wealth/realestate.jsp 中存在一個 Cross-Site Scripting(XSS)缺陷,也就是說 address 輸入框可以被用於注入腳本(<scripts>),從而允許跨站點腳本攻擊的發生。這種類型的攻擊將導致攻擊者盜取或者操縱一個經過許可證的用戶的網絡會話。

縱觀 Rational AppScan 的結果,很明顯在 city、create、state、value 和 zip 中存在類似的 XSS 問題,它們都被標記為 “Stored Cross-Site-Scripting”。

點擊 Fix Recommendation 標簽。Rational AppScan 提示了如何通過篩選有效字符修正這些問題,例如:"&"、";"、"<"、"@" 等,並且提供了完成之一工作的 Java 代碼。

所以,您需要在您的 Java 代碼中添加負責輸入有效性檢查的代碼,如列表 1 中所示,其含義是只接受以字母和數字字符。

列表 1. 輸入有效性檢查

if(request.getMethod().equals("POST")){
     Pattern input = Pattern.compile("[a-zA-Z0-9]*");
      Matcher m = input.matcher(userid);
      boolean match = m.matches();

查看列表上的第二個缺陷,Rational AppScan 指出 http://192.168.0.4:9080/wealth/ 和 http://192.168.0.4:9080/wealth/login.jsp 易於遭受 Session Fixation 的攻擊。Rational AppScan 告訴您,由於您的應用程序允許由用戶浏覽器創建會話 ID,所以一個用戶的網絡會話可能被盜取或者操縱。Rational AppScan 介紹了修正方法:您需要確保您的 Web 應用程序不接受由用戶浏覽器所創建的會話。因此,您需要使用戶當前繪畫無效,並且在用戶被許可證之後創建一個新的隨機會話 ID 。要完成這一操作,您需要將列表 2 中所示的代碼添加到 login.jsp 文件中。

列表 2. 使現有的網絡會話無效

session.invalidate();
     session = request.getSession(true);
     session.setAttribute("userid", userid);

在 logout.jsp 文件上,您需要結束會話:session.setAttribute("userid", null);。

列表上面的第三個問題是另一種經典的 Web 應用程序安全性缺陷:SQL 注入。SQL 注入使得攻擊者能夠通過執行在 Web 應用程序輸入欄中所輸入的 SQL 語句,操縱後台數據庫。Rational AppScan 提示您 zip 輸入框已經被影響。同 XSS 一起,Rational AppScan 解釋了輸入框的有效性,並且修正了這一缺陷。

至此,我們完成了高級別問題的修正。接下來,您將看到有關 Database Error Pattern Found 的幾個中等級別的問題。

Database Error Pattern 是指返回一個數據庫錯誤的測試。導致這種錯誤的原因是缺乏用戶輸入檢查,即應用程序易遭受 SQL 注入或者 XSS 的攻擊。檢查建議。您需要確保對用戶輸入的全面檢查,從而防止數據庫錯誤和可能的缺陷在下一次掃描中出現。

接下來是列表上兩個低級別的問題,它們都是 Session Identifier Not Updated。Rational AppScan 提示您黑客有可能盜取或者操縱會話和 cookie。同 Session Fixation 問題一樣,您需要您的應用程序創建用戶的會話 ID。

我們來看問題列表的最後部分,這裡有三個信息級別的問題,即這些問題並不是真正的 Web 應用程序缺陷,但是可能是一個潛在的問題和威脅。您可以通過 Rational AppScan 看到 .jsp 文件中的注釋。Rational AppScan 警告您這些注釋可能包含敏感的信息,而這些信息是您不願意公之於眾或者被黑客獲得的。在現實生活中,我所遇到的經典問題就是當測試 Web 應用程序的輸入框時,開發人員將用戶名和密碼以背景色的形式放在注視中,以方便測試者閱讀。所以,您需要檢查這些注釋,最好將它們從您的代碼中移除。請記住,您的代碼是面向大眾的,所以安全性最佳實踐就是將注釋刪掉,因此請將所有可能向黑客暴露 Web 應用程序的任何信息的可能性都消除掉。

通過點擊左側的 Remediation tasks,您可以過濾需要修正的列表,如圖 29 所示。

圖 29. 補救任務

最後,我們檢查 Application Data,它將告訴我們有關 Rational AppScan 處理 Web 應用程序的每件事情,所以您將會看到文件夾樹形結構以及 Rational AppScan 按著這一方式所發現的所有網頁。您應當總是核查兩遍以確保 Rational AppScan 正確無誤的發現了所有 Web 應用程序文件。

在您對代碼做出改變之前,請簡要地看一下 Rational AppScan 報告,正常情況下先生成一個安全性報告,然後將其提供給負責作出修正的開發人員。

Rational AppScan 安全性報告

現在您有一組問題需要您的開發人員進行修正。您需要以一種好的報告格式將 Rational AppScan 的結果和建議提供給他們。

選擇 Tools > Report,如圖 30 中所示。

圖 30. 啟動報告向導

在報告中,您會發現大量預先載入的 Rational AppScan 報告,並且它們被劃分為若干個主題。由於您希望生成一個內部報告以幫助開發人員解決問題,所以請照著默認報告去做。鍵入 Security Report。

從模板選項中選擇 Developer。

完成報告選項,如圖 31 中所示。請注意, Web 應用程序是用 Java 而不是 .NET 或者 PHP 編寫的,所以將這兩個從報告中去掉,您不需要知道如何修正那些語言中的問題。

圖 31. 創建一個報告

點擊 Layout,如圖 32 所示,使您能夠定義報告的外觀,並且添加公司商標或者任何其他的頁面內容。實際應用中往往在頁腳處添加 Company Confidential。您也應當將這些報告注明為高度敏感的信息。

圖 32. 報告

選擇 Save 並且為您的報告命名,如圖 33 中所示。

圖 33. 保存並命名您的報告

您的報告已經被保存為 PDF 格式的文件。

至此,您的報告可以提供給開發人員了。在這個例子中,開發人員正是您自己!所以,您需要通過報告發現並且修改您的 Java Web 應用程序代碼。

修正 Java 代碼

至此,您應當已將較好地理解了什麼內容需要修正,以及如何修正。現在,我們來修正代碼中的安全性缺陷。

打開 Rational 應用程序開發器,並且按照加粗字體(如列表 3 中所示)對代碼進行更改,或者您也可以將下面的代碼段復制粘貼過去。

列表 3. 通過最初的新的網絡服務器上的會話和有效性檢查更新 login.jsp 文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<jsp:useBean id="users" class="com.ibm.ds.users.UsersDataImpl" scope="page" />
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@page import="com.ibm.ds.users.Users" %>
<%@page import="pureQuery.example.*" %>
<%@page import="com.ibm.pdq.runtime.*" %>
<%@page import="java.util.regex.*" %>
<html>
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application Developer">
</head>
<body>
<h1>Login</h1>

<%
   String userid = request.getParameter("userid");
   String password = request.getParameter("password");

   session.invalidate();
   session = request.getSession(true);
   session.setAttribute("userid", userid);

   if(request.getMethod().equals("POST")){

     boolean matchu = false;
     boolean matchp = false;

     if(userid != null && !userid.equals("") &&
           password != null && !password.equals("")){
       Pattern input = Pattern.compile("[a-zA-Z0-9]*");
        Matcher m = input.matcher(userid);
        matchu = m.matches();

       input = Pattern.compile("[a-zA-Z0-9]*");
        m = input.matcher(password);
        matchp = m.matches();
     }

     if(matchu && matchp && (userid != null &&
                    !userid.equals("")) &&
       (password != null && !password.equals("")) &&
       userid.length() <= 50 && password.length() <= 50 &&
       request.getParameter("login") != null &&
           request.getParameter("login").equals("Login")){

       Data d = SampleUtil.getData("jdbc:db2://localhost:50000/WEALTH",
    "<enter_username_here>", "<enter_password_here>");
       users.setData(d);
       Users u = users.getUsers(userid);

       if(u != null && u.getPassword().equals(password)){
         session.setAttribute("userid", userid);
         response.sendRedirect("welcome.jsp");
       }
       else{
         out.println("Error logging in.<br/><br/>");
       }
     }
     else
       out.println("Error logging in.<br/><br/>");
   }
%>
<form method="post">
   userid: <input name="userid"/><br/>
   Password: <input name="password" type="password"/><br/>
   <input type="submit" name="login" value="Login"/>
</form>
</body>
</html>

請注意,HTML 注釋被轉換到 JSP 注釋。此處您還執行了前面所討論的變化,包括輸入有效性,即用戶名或者密碼是否為字母和數字。請注意,您還確保一個 POST 請求被發出,名為“登錄”的登錄按鈕被正確地賦予 POST 請求中的相應值。

列表 4 中的修正確保了任何用戶都能夠在適當的時候登出您的 Wealth 應用程序。

列表 4. 更新 logout.jsp 文件,拆卸該會話

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>logout</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application Developer">
</head>
<body>
<%
   String userid = (String)session.getAttribute("userid");
   if(userid != null){
     session.setAttribute("userid", null);
     session.invalidate();
     response.sendRedirect("login.jsp");
   }
%>
</body>
</html>

與將注釋從 HTML 變為 JSP 不同,該會話被拆卸以便用戶可以完全地登出。

在列表 5 中,您對代碼進行變化,以防止 SQL 注入攻擊的發生。

列表 5. 更新 realestate.jsp 文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<jsp:useBean id="realestate" class="com.ibm.ds.realestate.RealestateDataImpl"
                                scope="page" />
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@page import="java.util.Iterator" %>
<%@page import="com.ibm.ds.realestate.Realestate" %>
<%@page import="pureQuery.example.*" %>
<%@page import="com.ibm.pdq.runtime.*" %>
<%@page import="java.math.BigDecimal" %>
<%@page import="java.util.regex.*" %>
<html>
<head>
<title>realestate</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application Developer">
</head>
<body>
<h1>Your realestate holdings</h1>
<table
  border="1"><tr><th>Address</th><th>City</th>
  <th>Zip</th><th>State</th><th>Value</th></tr>
<%
   String userid = (String)session.getAttribute("userid");

   if(userid == null){
     response.sendRedirect("login.jsp");
   }
   Data d = SampleUtil.getData("jdbc:db2://localhost:50000/WEALTH",
  "<enter_username_here>", "<enter_password_here>");
   realestate.setData(d);
   Iterator i = realestate.getRealestates(userid);

   Realestate curr = null;

   double total = 0;
   while(i.hasNext()){
     curr = (Realestate) i.next();
     out.println("<tr><td>"+curr.getAddress()+"</td><td>"
                     +curr.getCity()+
           "</td><td>"+curr.getZip()+"</td><td>"
            +curr.getState()+
           "</td><td>$"+curr.getPropertyValue()
            +"</td></tr>");
     total += curr.getPropertyValue().doubleValue();
   }
   if(total > 0)
     total = Math.round(total*100.0)/100.0;
%>
</table>
<h3>Total value: $<% out.print(total); %></h3>
<br><h4>Enter new real estate:</h4>
<%
   if(request.getMethod().equals("POST") & request.getParameter("create" )
                     != null){
     String address = request.getParameter("address");
     String city = request.getParameter("city");
     String state = request.getParameter("state");
     String zip = request.getParameter("zip");
     String value = request.getParameter("value");

     if(!address.equals(") & !city.equals(") &
       !zip.equals(") & !state.equals(") & !value.equals(")){
       Pattern input = Pattern.compile("[a-zA-Z0-9\\p{Blank}]*");
        Matcher m = input.matcher(address);
        boolean matcha = m.matches();

       input = Pattern.compile("[a-zA-Z\\p{Blank}]*");
        m = input.matcher(city);
        boolean matchc = m.matches();

       input = Pattern.compile("[a-zA-Z][a-zA-Z]");
        m = input.matcher(state);
        boolean matchs = m.matches();

       input = Pattern.compile("[0-9][0-9][0-9][0-9][0-9]");
        m = input.matcher(zip);
        boolean matchz = m.matches();

       if(matcha & matchc & matchs & matchz){
         try{
           realestate.createRealestate(new BigDecimal(value), address, city,
              zip, state, userid);
           response.sendRedirect("realestate.jsp");
         }catch(Exception e){ out.println("Error adding new real estate. 
                      <br/><br/>"); }
       }
       else
         out.println("Error adding new real estate.<br/><br/>");
     }
     else
       out.println("Error adding new real estate.<br/><br/>");
   }
  %>
<form method="post">
   Address: <input name="address"/><br/>
   City: <input name="city"/><br/>
   Zip: <input name="zip"/><br/>
   State: <input name="state"/><br/>
   Value: $<input name="value"/><br/>
   <input type="submit" name="create" value="Create"/>
</form>
<a href="welcome.jsp">back</a>
</body>
</html>

此處的四個字符串和整數輸入框需要設置有效性檢驗,以防止 SQL 注入攻擊。BigDecimal 類完成了內部輸入有效性驗證,所以您無需對值參數執行輸入有效性驗證,您可能會發現向用戶顯示有用的錯誤是十分有用的。如果所有內容都通過了輸入有效性驗證,那麼新的記錄就將被添加到數據庫中。再次指出,HTML 注釋被轉換為 JSP 注釋,以便它們不會出現在 HTML 之中。

列表 6. 更新 securities.jsp 文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<jsp:useBean id="securities" class="com.ibm.ds.securities.SecuritiesDataImpl"
                                scope="page" />
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@page import="java.util.Iterator" %>
<%@page import="com.ibm.ds.securities.Securities" %>
<%@page import="pureQuery.example.*" %>
<%@page import="com.ibm.pdq.runtime.*" %>
<%@page import="java.net.*" %>
<%@page import="java.io.*" %>
<html>

<head>
<title>securities</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application Developer">
</head>
<body>
<h1>Your stock and options holdings</h1>
<table
  border="1"><tr><th>Sybmol</th><th>Description</th>
  <th>Quantity*</th><th>Type</th><th>Current price**
  </th><th>Total value</th><th>Quote date</th></tr>
<%
   String userid = (String)session.getAttribute("userid");

   if(userid == null){
     response.sendRedirect("login.jsp");
   }
   Data d = SampleUtil.getData("jdbc:db2://localhost:50000/WEALTH",
  <enter_username_here>", "<enter_password_here>");
   securities.setData(d);
   Iterator i = securities.getSecuritiess(userid);

   Securities curr = null;
   double total = 0;
   while(i.hasNext()){
     curr = (Securities) i.next();

     String str = "http://finance.yahoo.com/d/quotes.csv?s="+curr.getSymbol()
                               +"&f=nd1l1";
     URL url = new URL(str);
     URLConnection conn = url.openConnection();
     DataInputStream in = new DataInputStream ( conn.getInputStream ( ) ) ;
     BufferedReader br = new BufferedReader(new InputStreamReader(in));
     String line = null;
     if(br.ready())
       line = br.readLine();

     String company = line.substring(line.indexOf('"')+1,
                     line.indexOf('"', line.indexOf('"')+1));

     String date = line.substring(line.indexOf("\",\")+3,
                    line.indexOf("\",", line.indexOf("\",\")+4));

     String price = line.substring(line.indexOf("\",", line.indexOf("\",\")+4)+2);

     int multQuantity = curr.getQuantity();
     if(curr.getSecuritytype().equals("option"))
       multQuantity = curr.getQuantity()*100;

     float totalValue = Float.parseFloat(price)*multQuantity;
     totalValue = (float)(Math.round(totalValue*100.0)/100.0);

     out.println("<tr><td>"+curr.getSymbol()+"</td><td>"
      +company+
           "</td><td>"+curr.getQuantity()+"</td><td>"+
           curr.getSecuritytype()+"</td><td>$"+price+
           "</td><td>$"+totalValue+"</td><td>"
   +date+"</td></tr>");

     total += totalValue;
   }
   if(total > 0)
     total = Math.round(total*100.0)/100.0;
%>
</table>
<h3>Total value: $<% out.print(total); %></h3>
* # of contracts for options<br/>** Delayed quotes, as retrieved from
                           Yahoo! Finance&trade;
<br/><br/><a href="welcome.jsp">back</a>
</body>
</html>

這類問題的唯一錯誤就是 HTML 中的注釋。請注意,此處將 HTML 注釋變為 JSP 注釋。

最終,使該會話無效,如列表 7 中所示。

列表 7. 更新 welcome.jsp 文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>welcome</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Rational Application Developer">
</head>
<body>
<%
   String userid = (String)session.getAttribute("userid");

   session.invalidate();
   session = request.getSession(true);
   session.setAttribute("userid", userid);

   if(userid == null){
     response.sendRedirect("login.jsp");
   }
%>
<h1>Welcome <% out.print(userid); %>!</h1>
See your <a href="securities.jsp">securities</a><br/>
See your <a href="realestate.jsp">real estate</a><br/><br/>
<a href="logout.jsp">logout</a>
</body>
</html>

最後,將 welcome.jsp 中的 HTML 注釋修改為 JSP 注釋,並且按照前面所討論的那樣,使該會話無效。

在更新完 Rational 應用程序開發器中的所有 jsp 文件之後,對 Wealth Web 應用程序的工作情況進行全面測試。

第二次掃描

至此,您已經對 Java 代碼進行了更新和測試。現在,我們再次運行 Rational AppScan 並且觀察修正了多少個缺陷。

在運行另一個掃描之前,請檢查您的數據表中的數據,這是由於上一個 Rational AppScan 掃描可能會對測試數據添加新的記錄,包括 XSS,從而導致測試發生錯誤。在這個例子中,請注意 Rational AppScan 向安全性數據表中添加了 50 個左右的條目。

在檢查過數據表之後,您就可以啟動另一個掃描了。

在 Rational AppScan 中,點擊 New 或者 File > New,如圖 34 中所示。

圖 34. 選擇您先前創建的掃描模板 WealthScan

接下來,向導再次啟動,並且上一個掃描模板中的信息和設置被裝在進來。如果您希望精確按照上一次的設置進行掃描,請按下 Next 三次,然後選擇 Application-Only 並點擊 Finish。

接下來,您被提示保存您的第二次掃描。將其命名為 WeathScan2,在此之後掃描就將開始。

一旦掃描完成,您應當注意到上一次掃描所檢測到的安全性缺陷都已經被解決了,新生成報告中沒有顯示任何新的問題。

至此,您已經成功地消除了 Wealth Web 應用程序中所有已知的安全性缺陷!

Rational Appscan 報告選擇和擴展

在最後一個小節中,您將看到您所能創建的一些不同的報告,以及使用 Rational AppScan 所能進行的擴展。

Rational AppScan 報告

現在,您的 Web 應用程序已經遠離了安全性缺陷,您能夠創建一些專業的質量保證報告。這樣的報告可以被作為版本控制流程的一部分,證明您的 Web 應用程序已經成功地通過了安全性測試,並且可以被放置到因特網上(請參見 下載 查看從您的掃描中所生成的報告)。

您的最後一次掃描仍然在 Rational AppScan 中打開,選擇 Tools > Report。

現在選擇一個適當的報告模板。圖 35 顯示了一個標准報告的例子。

圖 35. 工業標准報告

圖 36 顯示了一組可供選擇的調整依從報告。

圖 36. 調整依從報告

增量分析報告

當測試大型 Web 應用程序的時候,往往需要通過 Rational AppScan 進行多次掃描,才能夠將所有的安全性漏洞填補上。有時您會發現,當您修補好一個安全性問題的同時,會出現更多的安全性問題。因此,生成增量分析報告從而顯示您的處理過程是十分有用的。

增量分析將對比上一次掃描和此次掃描之間的區別。在您現有的掃描中,選擇 Tools > Report > Delta Analysis Report,然後定位到另一個您想要進行比較的報告(請參見圖 37 所示)。

圖 37. 增量分析報告

Rational AppScan 使您能夠創建您自己特有的報告模板(請參見圖 38 所示),並且這一過程簡單易學。

圖 38. 創建您自己的報告

Rational AppScan 擴展

在 Rational AppScan 中,另外一個有用並且完全定制的特性就是 Rational AppScan Extensions 的使用。擴展就是將額外的功能添加到 Rational AppScan 之中(請參見圖 39 所示)。它們可以把從開發工具到電子郵件通知的任何東西添加到我自己的個人喜好擴展中,該擴展將掃描結果直接導出到一個 PowerPoint 的陳述之中。

圖 39. 選擇 Rational AppScan 中的 Extension Manager

Rational AppScan 擴展易於編寫和整合到 Rational AppScan 之中。IBM 支持若干個免費下載的擴展(請參見圖 40 所示),請訪問:http://axf.watchfire.com/。

圖 40. 選擇安裝

其中一個最有用的擴展就是電子郵件通知擴展(Email Notification Extension)。為了顯示整合它們是多麼地容易以及它們是如何工作的,這裡提供一個最簡要的擴展.教程。

首先,浏覽 http://axf.watchfire.com/ 並且下載 Mail-E-Vent Extension。

該擴展下載後是一個 zip 文件,但是請您不要解壓該文件,因為 .zip 格式將被用於導入到 Rational AppScan 之中(請參見圖 41 所示)。

圖 41. 定位到您所下載的 Mail-E-Vent Zip 文件

Mail Extension 被安裝。

關閉 Rational AppScan 應用程序,然後重新將其打開(請參見圖 42 所示)。

圖 42. 返回到 Extension Manager 並且打開新的 "Mail-E-Vent" 安裝

選擇 Save and Test Settings,並且核對您的測試電子郵件(請參見圖 43 所示)。就是這些,簡單吧!

圖 43. 成功的測試電子郵件

現在,Rational AppScan 將自動地發送一個電子郵件通知(以及一個報告),當一次掃描結束時,Rational AppScan 丟失了到 Web 應用程序的連通性;當掃描暫停時,請求一個登錄提示。這個特殊的擴展在掃描更大型和更加復雜的 Web 應用程序時是非常有用的。您將收到一封 Rational AppScan “需要” 您的電子郵件,我想您不得不說這十分有意思。

最後,您可以輕易地創建一個您自己的擴展。IBM 在其網站上提供了所有擴展特性的源代碼,所以您能夠看到生產過程是多麼的簡單。您能夠很輕易地將 Rational AppScan 整合到您的業務系統之中,並且生成額外的特性來滿足您的任何特定需求。

總結

您已經確保了在本系列的第 1 部分中所創建的 Java Web 應用程序不再受到任何已知的安全性攻擊的困擾。Wealth Web 應用程序的最終版本能夠被上傳到因特網服務器上,並且您不必擔心它會受到 Web 應用程序層的攻擊。從本教程中,您已經了解到 Web 應用程序安全性的重要性,花時間制定一份 Rational AppScan 的配置策略、定制掃描模板、如何執行一次掃描、解釋結果、修補 Web 應用程序代碼中的缺陷、以及生成安全性報告等。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved