程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> WebSphere >> 將Active Content Filtering用於Project Zero和WebSphere sMash應用程序的安

將Active Content Filtering用於Project Zero和WebSphere sMash應用程序的安

編輯:WebSphere

ACF 簡介

作為 ACF 入門的一部分,您必須先理解什麼是 Project Zero。如 下內容摘自 Project Zero Web 站點:

“Project Zero 是 IBM® 內部發起 的一個孵化器項目,側重於下一代動態 Web 應用程序的敏捷開發。Project Zero 引入 了一種簡單的環境,這種環境支持基於流行的 Web 技術創建、組裝和執行應用程序。 Project Zero 環境包括一個面向 Groovy 和 PHP 的腳本運行時,並且具有應用程序編 程接口,這些接口針對 REST 風格服務、集成 mashup 和富 Web 接口的生成進行了優化 ”。

Project Zero 主要針對的是一下代動態 Web 應用程序(通常歸類為 Web 2.0),本 文側重於交互式 Web 應用程序,這些應用程序可能會包含用戶提供的內容,比如 mashup、wiki 和 blog。為了支持這些應用程序,Project Zero 提供了 ACF 庫,應用 程序開發人員可以將其包括在 Zero 應用程序內。ACF 讓開發人員能夠避開經常在這類 應用程序出現的跨站點腳本等問題。

關於示例

作者留言:初次寫完本文 時,應用程序開發人員必須通過聲明方法(在應用程序的 zero.config 中定義顯式規則 )或編程方法(使用提供的 API)來利用 ACF。根據 Project Zero 社區和本文讀者反 饋的信息,開發團隊為以下場景提供某些默認級的 ACF 保護(要求將 zero.acf 添加為 依賴項):

請求參數:從所有發送到 URI 的入站請求參數中刪除活動內容(比 如 JavaScript、Applet 和 ActiveX)。這些參數被看作是 HTML 片段。

JSON 內容請求:從發送到 URI 的入站 JSON 對象的所有 String 值中刪除活動內容 。在這種情況下,已經指定所有內容的類型。

JSON 內容響應:從 URI 發送的出 站 JSON 對象的所有 String 值中刪除活動內容。在這種情況下,已經指定除 “text/html” 以外的所有內容類型。

要取消默認的 ACF 啟用,下 面的配置選項包含了示例應用程序的 zero.config"/config/acf/enableByDefault=false"。因為在某些情況下默認啟用有可 能不能滿足應用程序的要求,本文將把焦點集中在通過聲明和編程方法利用 ACF。在適 當的時候,本文將解釋通過默認標志利用啟用的各個小節。

本文提供的示例旨在 借助由簡到難的用例充分展示 ACF 。這些示例均構建在之前的示例之上。如下是這些示 例的一個摘要,每個示例會在隨後的章節詳細加以介紹:

示例 1 是一個很基本 的、啟用了 Ajax 的頁面,它允許用戶評論從外部接收的文章。這個示例展示了在用戶 評論或文章中包含活動內容時(比如 JavaScript)發生的情況。

示例 2 構建在示例 1 的基礎上,並包含對 ACF 庫的支持。這個示例展示了在文章 中包含活動內容(比如 JavaScript)時 ACF 過濾功能如何工作。

示例 3 構建 在示例 2 的基礎上,但支持使用 ACF 過濾請求參數這個功能。這個示例展示了當用戶 評論中包含活動內容 — 比如 JavaScript — 時 ACF 過濾功能如何工作。

可以從本文的 下載 部分下載這個示例應用程序,以獲得使用 ACF 特性的實際 操作經驗。此示例應用程序模擬了一種 Web 新聞聚合和 blog 應用程序,它允許向服務 器發表對當日新聞的評論,服務器反過來又會向其他查閱者顯示這些評論。如 圖 1 所 示,頁面的頂部顯示了新聞聚合的結果,從中可以看到被注入的潛在惡意內容(閃動的 紅色文本)。單擊 Original source of the news 標題窗格會顯示新聞聚合的原始 HTML 內容。也可以在底部的文本區域 Enter your comments here 發表評論,單擊 Post your comment 按鈕後,評論就會立即顯示在 All comments 區域。

圖 1. ACF 示例

我們將使用 IBM 最新的 Web 2.0 平台 Project Zero 來構建服務器端的組件。此示 例應用程序的前端使用的是新興的 Dojo 和 Ajax 技術。

Project Zero 通過 zero.acf 庫提供 ACF 支持,這個庫被配置為 ivy.xml 文件的一個應用程序依賴項。本 文提供了一個包含示例應用程序(名為 ACFSampleApp-1.0.0.zip)的 zip 文件。請使 用 zip 工具將這個文件解壓縮到磁盤。

針對命令行用戶:

根據說明在 WebSphere sMash Web 站點上安裝 IBM WebSphere sMash 命令行實用程序。

回到解壓縮示例應用程序的目錄。

通過 zero start 開始應用程序。

針對應用程序構建用戶:

根據說明在 WebSphere sMash Web 站點上安裝 IBM WebSphere sMash 命令行實用程序。

通 過導航到安裝 CLI 的 zerodirectory 目錄並運行 “startAppBuilder” 腳 本開始應用程序構建器。

使用面板左邊的 “Browse Applications” 鏈接從 WebSphere sMash 存儲庫安裝 OpenID 演示應用程序。

單擊與 ACFSampleApp(參見 下載)應用程序相關聯的播放按鈕開始應用程序。

接下來 ,將浏覽器指向 http://localhost:8080 以測試這個示例應用程序。

場景 1: ACF 響應過濾

第一個場景是使用 ACF 響應過濾阻止惡意內容。ACF 響應過濾能 夠基於一組過濾規則(在本文稍後部分介紹)從響應消息中剝離活動內容(比如 JavaScript)。在運行示例應用程序時,可以看到在頁面頂部的新聞頭部已經注入了閃 爍顯示的惡意文本,這些惡意文本源自第一個新聞提要的某些活動內容(JavaScript 代 碼)。通過單擊 Original source of the news 標題框可以查看此新聞提要的源代碼, 如 圖 2 所示:

圖 2. 新聞頭部的惡意文本

現在,我們來看看如何使用 ACF 響應過濾阻止這些惡意文本對應用程序進行破壞。 ACF 響應過濾可由 zero.config 配置文件控制。要啟用 ACF 響應過濾,需要如下條目 (參見 清單 1):

清單 1. 配置 ACF 響應過濾

# ACF filter  rule
@include  "${/config/dependencies/zero.acf}/config/acf.config"{
 "conditions"  : "/request/path =~ /resources/newsViewer(.*)"
}

這個示 例提供了此配置。要啟用 ACF,只需在 zero.config 文件中去掉對這部分的注釋並重啟 Project Zero 服務器即可。如圖 3 所示,配置屬性中的這兩行就可以告知 ACF 引擎使 用 ACF 提供的默認預定義規則集過濾掉源自 URI /resources/newsViewer 的任何活動 內容。

圖 3. 配置 ACF 響應過濾

再次運行此應用程序,就不會看到閃爍顯示的煩人文本了。

場景 2:ACF 請 求過濾

處理以 Web 2.0 為主題的應用程序通常都會允許用戶向托管服務器輸入 或發表內容。當服務器呈現惡意內容(比如 JavaScript)時,就會產生安全性問題。在 示例應用程序中,用戶可以向服務器發表評論。要展示惡意腳本的破壞性,可以在 Enter comments 區域輸入清單 2 所示的文本:

清單 2. 示例惡意腳本

<script>alert("You are under attack!")</script>

單擊 Post your comment 按鈕,會看到 All comments 結果區域為空白,這時,煩 人的 JavaScript 以彈出的方式顯示。

那麼,該如何過濾 HTTP 請求和阻止惡意 JavaScript 攻擊呢?為實現此目的,ACF 提供了一組功能強大的 API。這些 API 會基 於一組過濾規則告訴您是否有活動內容(比如 JavaScript)包含在 HTTP 請求參數中。 如果找到了活動內容,就可以拋出一個適當的異常並使用 Project Zero 的另一個庫( 稱為 XMLEncoder,可以對這些活動內容進行編碼)以確保它不會在運行時執行。在我們 的示例中,處理外來的注釋 POST 請求的服務器端組件是 commentHandler.groovy 類。 這也是添加 ACF 請求過濾代碼的地方。可以通過去掉對本文所提供的代碼的注釋來啟用 此特性,如 圖 4 所示:

圖 4. 啟用 ACF 請求過濾

這次無需重啟 Zero 服務器就可以測試此特性。重新加載應用程序頁面並在評論區域 張貼相同的 JavaScript。很顯然,您將不能再張貼有害的內容,如 圖 5 所示:

圖 5.ACF 請求過濾的一個示例

客戶端過濾

作者留言:上面描述的場景是默認 ACF 啟用的理想用例。在這一 場景,用戶將通過用 JSON 編寫的消息發布活動內容,這個消息與上面描述的 JSON 內 容請求場景相匹配。在這一場景,在為應用程序提供已解碼的 JSON 數據之前,將從 JSON 值中刪除 JSON 字符串的惡意部分。

到目前為止,您主要是在服務器端看 到了 ACF 在阻止惡意攻擊方面的有力保護。要進一步提高應用程序的安全性,必須考慮 使用一些現代 JavaScript 庫引入的客戶端編碼功能,比如 Dojo 框架。例如,Dojo 的 富文本編輯器能夠自動地將用戶輸入的內容編碼為 HTML 代碼,使用這些代碼是相對安 全的。注意:雖然客戶端編碼非常有用,但是它不能夠代替在服務器端的進行 ACF 過濾 ,因為用戶能夠輕易地避開在客戶端執行的操作。

本文中的示例應用程序提供了 一種基於 Dojo 的富文本編輯器。要測試此應用程序,需要將浏覽器指向 http://localhost:8080/clientfilter.gt。如 圖 6 所示,通過 Dojo 編輯器張貼的 JavaScript 在發送給服務器之前就已經編碼完畢。因此,所張貼的內容將不會被浏覽器 解釋為活動 JavaScript。

圖 6. Dojo 編輯器實現

作者留言:上面描述的場景是默認 ACF 啟用的理想用例。在這個場景中,用戶將通 過編碼為 url 形式的消息發布活動內容,這個消息與上面描述的請求參數場景相匹配。 在這個場景,在應用程序訪問請求參數之前,將從請求參數中刪除請求參數值中的惡意 部分。

結束語

通過本文,您已經看到了 ACF 是如何通過啟用過濾活動內 容來為應用程序部署提供增強的靈活性的,而且整個過程無需開發人員對應用程序進行 任何重大更改。這種增強的靈活性讓應用程序能夠更好地遠離活動內容方面的問題,比 如跨站點腳本(XSS),XSS 是很多 Web 2.0 應用程序上常見的攻擊。請試用這個示例 應用程序並將您的反饋通過 Project Zero 論壇提供給我們。

來源:http://www.ibm.com/developerworks/cn/web/wa-pz-acf/

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