全部產品
Search
文件中心

Web Application Firewall:Web應用整合SDK

更新時間:Oct 25, 2024

您必須在應用中整合SDK,才能配置網頁防爬情境化規則。本文介紹了如何為Web應用整合WAF防護SDK(以下簡稱SDK)。

組件

Web SDK整合套件括Web採集器、非同步介面回應群組件。

Web採集器

Web採集器將用戶端瀏覽器或容器環境下的特徵納入整體antibot攻防體系,進一步識別出多種網路層特徵無法覆蓋的攻擊手法,提升攻防效果。

Web採集器採集到的特徵經過混淆加密後,在根網域名稱下植入cookie,並通過請求上報,對效能影響較小。

Web採集器採集的內容主要分為三部分:

  • 瀏覽器或容器環境資訊:常見的如瀏覽器型號版本、螢幕解析度、時區特性與時間戳記等。

  • 特定攻防探針:主要是針對一些常見的瀏覽器層級Bot指令碼、driver、自動化容器的探針。

  • 使用者操作行為:主要指使用者在頁面上的滑鼠、鍵盤、觸屏事件。

    說明

    出於隱私考慮,鍵盤只會採集擊鍵時間,不會採集具體按下了哪個鍵。

非同步介面回應群組件

非同步介面回應群組件使Web應用程式能在API介面上響應antibot攻防體系下發給用戶端的挑戰(目前包括JS校正和Captcha挑戰)。採用此組件後,如果WAF給某一API介面下發挑戰response,非同步介面回應群組件探測到該挑戰response後,會作出響應。

非同步介面回應群組件為純功能性組件,不涉及任何安全功能,不會進行任何資料擷取或上報。

非同步介面回應群組件工作原理如下:

  1. 非同步介面回應群組件會全域重寫頁面上的xmlHttpRequest(xhr)、Fetch、Form等通用的API介面請求對象,在API介面請求對象上額外封裝一層代碼,不會影響原始對象的各種特性。

  2. Hook完畢後,非同步介面回應群組件會先於頁面上的其他JS代碼,判斷請求的response是否為WAF返回用戶端的挑戰類處置手段(JS校正與captcha挑戰)。

  3. 如果發現response並非WAF返回(而是來源站點返回),非同步介面回應群組件不會執行任何響應,會把response處理許可權向下透傳給網站本身的JS代碼。如果發現response是WAF返回的,非同步介面回應群組件會解析返回的response中的演算法內容、執行WAF要求的JS運算、並在運算之後攜帶JS校正驗證簽名重新發起請求。該重新發起的請求會被WAF驗簽放過,成功回源。

相容性說明

  • 環境相容性:相容IE8核心以上各類瀏覽器與用戶端容器。

  • 相容性依賴:用戶端請求可以正常攜帶cookie上報。容器或請求本身不支援cookie,則組件功能會被影響。

  • Hook相容:對於一些特殊業務,非同步API介面的請求本身採用的hook原生XHR、form、Fetch等對象會與非同步介面回應群組件產生衝突。

部署方式

自動整合

自動整合需要網站HTML頁面請求經由WAF。無需客戶網頁代碼改造即可部署完成,並且可以享受線上熱更新。

在配置網頁防爬情境化的防護情境定義時,選擇自動整合後,Bot管理在處理HTML頁面response時,會主動將HTML格式解開,並將Web採集器組件、非同步介面處理組件插入到dom結構中,並返回給用戶端。更多資訊,請參見配置防護情境定義

說明

對於已經壓縮的HTML頁面,目前注入式部署只支援content-encoding:gzip的壓縮方式,暫不支援br與deflate壓縮。

手工整合

適合於無法滿足自動整合的情境,包括HTML頁面流量沒有經過antibot攻防體系,或壓縮類型不支援等。需要滿足兩個原則:

  • 所有需要依賴antibot攻防體系挑戰處置的API介面,所在的HTML頁面都必須接入此SDK。

  • 擷取SDK連結。訪問BOT管理頁面,在情境化防護頁簽,單擊建立模板,在防護情境定義設定精靈頁面,配置Web SDK整合時,選擇手動整合後單擊擷取SDK連結。請將如下<script>節點置於頁面上所有其他<script>節點之前以保證最先載入:

    <script src="//g.alicdn.com/frontend-lib/frontend-lib/2.3.66/jquery_240828.min.js"></script>

本地化式部署

該部署方案僅用於某些特殊情況,如頁面csp不允許從alicdn上載入資源,或因為某些原因需要將所有組件完全本地化到自身業務網域名稱下。不推薦採用該方式部署。

若要本地化部署,您可以在本地區名下建立兩份JS資源,將CDN上JS中的代碼內容全部拷貝到本地,然後採用類似“SDK接入式部署”的原則將本地化的JS資源載入到頁面。