本文帶給你們的內容是動態防護WAF的技術原理及編程實戰。css
將經過介紹ShareWAF的核心技術點,向你們展現動態防護的優點、實現思路,並以編程實戰的方式向你們展現如何在WAF產品開發過程當中應用動態防護技術。前端
ShareWAF是一款動態防護型WAF產品,其在反自動化***、反爬蟲等領域應用了動態防護技術。web
相比於傳統WAF,動態防護型的WAF,有很是顯著的優點:編程
【動態防護優點、原理】瀏覽器
歸納而言,優點體現爲兩個詞:主動防護、不可預見安全
傳統WAF,是靜待***來臨、識別***,再抵禦***。併發
應用動態防護技術後,WAF將逆轉***模式:再也不被動,而是時刻處於主動出擊、積極防禦狀態。ide
舉個例子:工具
假如打開一扇門:字體
傳統WAF狀態下,門後的景象老是同樣的。
若是是動態防護WAF,每次打開門看到的將是不一樣的景色,多是草原、多是麥田。即:隨機變化 、不可預測。
再舉個例子:
好比射箭:
傳統WAF狀態下,箭靶是固定的。
若是是動態防護WAF,箭靶將是隨機移動的。即:動態變化,目標不可預測。
具體到WAF產品中。
好比反暴力破解,傳統WAF可能採用一套規則,例如:訪問者IP或設備指紋+持續登陸行爲+連續嘗試登陸次數+登陸失敗次數,經過規則判斷是否屬於暴力破解行爲。
這是正統的、中規中矩的防衛理念,是被動式的。
在這個進程中,***者是能夠發起持續***的。並且,***者能夠經過使用代理、修改設備特徵等方式,規避WAF規則,嘗試對WAF進行Bypass。
而若是是動態防護
以ShareWAF爲例,在對抗暴力破解這一功能點上,採起的方式是徹底不一樣的:
ShareWAF會對被破解的某個關鍵點,進行動態封裝,好比:用戶名。
具體而言:保護前,用戶名在網頁中常常是username之類的固定元素名稱。暴力破解***者會用自動化的工具或腳本,自動對其賦值,而後發起請求、嘗試登陸,反覆進行此操做便是***過程。
ShareWAF會對username進行封裝,並且是動態的,用戶端發起訪問請求獲得的將再也不是username,每次獲得的都是某個隨機數符串。
這樣,自動化的工具或腳本,就沒法對關鍵的暴力破解點進行定位、賦值。***行爲在前端就被終結。
ShareWAF的反爬蟲也採用相似的理念。
【動態防護WAF編程實戰】
前面是理論,接下來是實戰,證實理論的可行性、演示如何在安全編程開發中應用動態防禦技術。
將經過例程,分別演示ShareWAF的反自動化***、反爬蟲功能的核心實現。
反自動化***
這裏將經過一個例程,一個最簡單的登陸頁面,模擬ShareWAF如何利用動態防護技術對暴力破解這類自動化***進行防護。
登陸頁而的關鍵內容,一般是這樣的:
<form>
User:<input name="username"/>
Pass:<input name="password"/>
</form>
展示在瀏覽器端是一個簡單的登陸頁,提供用戶名、密碼輸入,並進行登陸。
***者進行暴力破解時,可能採起的方式是:對username元素進行賦值,併發起登陸;或用Burp Suite等工具攔截數據並修改數據包進行枚舉破解。
這裏且再也不談傳統WAF的應對手段,直入主題,看ShareWAF是如何進行動態防護的。
例程代碼只有幾十行,展現最核心的"動態"概念。
這是一段NodeJS代碼,實現了一個web服務,其中融入了ShareWAF的動態防護理念。
代碼功能簡單分析:
重點一:動態變形池,用於存放username和動態變形內容的對應關係;
重點二:在頁面訪問時,進行username元素動態變形、將變形對應關係存儲到變形池,並將變形後的內容發送到瀏覽器端。這一步完成時,瀏覽器端本來一成不變的username元素將在每次訪問或刷新時發生動態變化:
留意上方的name值,本來應該是username,而這時隨機變化的字符串,兩張圖中name值是不一樣的,事實上,每次都是不一樣的。
假如***者本來採用自動化破解腳本:document.getElementById("username").value="***",這時將失效,由於username不見了,並且不可預見。
Burp Suite之類的數據包嗅探、截取、修改工具也失效了,由於關鍵字段username不見了。
動態防護的理念便是如此。固然,這並非所有,只是動態防護的一小部分應用。
重點3、動態變形過的username固然是須要還原的,不然將影響原有的業務功能。代碼中的"變形池"存放的是username和"變形碼(即:隨機變形的字符串)"對應關係。經過對應關係,能夠很輕鬆的還原回username,在WAF功能中,這時該將還原後的數據再轉發給被保護網站,實現正常的業務流程。
如圖:username已被還原:
反爬蟲
前一個例子是應用了針對內容的動態防護,在反爬蟲領域,動態防護又有所不一樣。
爬蟲有多種類型,下面要講的反爬蟲,準確的是說反內容爬蟲,防止內容被爬取,也能夠理解爲防止網頁內容被複制。
反內容爬蟲,慣用的一種方式是進行字體加密,即便用自定義字體。
但通常來講,自定義字體反爬容易被破解:***者獲取字體後,很容易進行逆向分析,得出字碼對應邏輯,進而還原出本來內容。ShareWAF的反內容爬蟲,在自定義字體的基礎上,加入了"動態"概念:
使字體成爲動態路徑、字體文件不可被下載。
這部分功能的實現,原理與以前相似,一樣是在將數據發往瀏覽器以前先對特定的內容:字體路徑,作動態變化處理,在收到請求時,再還原爲原始正確路徑,使文件可讀取。
有一點特殊之處是:爲了防止從網頁源碼中查看字體路徑、下載字體文件,又對"動態"路徑增長了訪問時間限制、使用一次即失效功能。如此,達到了:加載網頁時文件能夠正常讀取,但非法獲取文件路徑卻不能打開的目的。
效果展現:
在這兩張圖中能夠看到:字體路徑是變化的、從瀏覽器打開文件地址,文件不能讀取和下載。
使字體成爲動態字體,防止逆向分析。
動態自定義字體技術,在ShareWAF中稱其爲:動態字體變碼加密。
若是是傳統的自定義字體加密,至關於一種密碼技術,也相似於傳呼臺數字代碼表:
即用某個或某幾個數字,代替某個或某幾個文字。
具體到網頁文字內容加密反爬,是以下的效果:
也就是網頁中顯示正常的"文字",但在源碼中實際並不存在,存在的是"文字"對應的密碼字符。
這種文字,是不可複製的,總體複製網頁中的文字時,"密碼文字"部分將會缺失:
那麼,爬蟲也就沒法複製、沒法爬取內容。
這種技術的實現依賴於自定義字體,即網頁源碼中的css引入字體文件功能:
也就是須要引入自定義的字體文件。
自定義字體文件的相關知識不是本文的重點,在此略過。咱們的重點是實現"動態自定義自體文件"。
這樣作的緣由是:
若是使用一個固定的自定義字體文件,字體和數字的對應關係是能夠被分析得出的。如上面:
Ԕ;表示"我",ԕ;表示"你"等等。
爲了防止被分析出對應關係,咱們須要對字體的加密碼也進行動態處理。
在本例中,提供了一種方法,用於生成新的變碼字體:
這是運行效果:
能夠看到,出現了新的對應關係,與以前Ԕ;表示"我",ԕ;表示"你"是不一樣的。
這樣動態的改變字體編碼,就能夠防止文字和數字編碼的對應關係被分析獲取。
以上,即是ShareWAF動態防護技術在反自動化***、反爬蟲場景中的應用。