大前端時代安全性如何做

2021-09-11 11:42:01 字數 2953 閱讀 4164

想知道 chrome 更多的除錯使用技巧,看看這篇文章

本人從這2個角度(網頁所見非所得、查介面請求沒用)出發,制定了下面的反爬方案。

# 比如需要正確顯示的資料為「19950220」

1. 先按照自己需求利用相應的規則(數字亂序對映,比如正常的0對應還是0,但是亂序就是 0 <->

1,1 <->

9,3 <->

8,...)製作自定義字型(ttf)

2. 根據上面的亂序對映規律,求得到需要返回的資料 19950220 -> 17730220

3. 對於第一步得到的字串,依次遍歷每個字元,將每個字元根據按照線性變換(y=kx+b)。線性方程的係數和常數項是根據當前的日期計算得到的。比如當前的日期為「2018-07-24」,那麼線性變換的 k 為 7,b 為 24。

4. 然後將變換後的每個字串用「3.1415926」拼接返回給介面呼叫者。(為什麼是3.1415926,因為對數字偽造反爬,所以拼接的文字肯定是數字的話不太會引起研究者的注意,但是數字長度太短會誤傷正常的資料,所以用所熟悉的 π)

​```

1773 -> 「1*7+24」 + 「3.1415926」 + 「7*7+24」 + 「3.1415926」 + 「7*7+24」 + 「3.1415926」 + 「3*7+24」 -> 313.1415926733.1415926733.141592645

02 -> "0*7+24" + "3.1415926" + "2*7+24" -> 243.141592638

20 -> "2*7+24" + "3.1415926" + "0*7+24" -> 383.141592624

​```

# 前端拿到資料後再解密,解密後根據自定義的字型 render 頁面

1. 先將拿到的字串按照「3.1415926」拆分為陣列

2. 對陣列的每1個資料,按照「線性變換」(y=kx+b,k和b同樣按照當前的日期求解得到),逆向求解到原本的值。

3. 將步驟2的的到的資料依次拼接,再根據 ttf 檔案 render 頁面上。

複製**

下面以node.js為例講解後端需要做的事情

比如後端返回的是323.14743.14743.1446,根據我們約定的演算法,可以的到結果為1773

反爬公升級版

個人覺得如果乙個前端經驗豐富的爬蟲開發者來說,上面的方案可能還是會存在被破解的可能,所以在之前的基礎上做了公升級版本

組合拳1: 字型檔案不要固定,雖然請求的鏈結是同乙個,但是根據當前的時間戳的最後乙個數字取模,比如 demo 中對4取模,有4種值 0、1、2、3。這4種值對應不同的字型檔案,所以當爬蟲絞盡腦汁爬到1種情況下的字型時,沒想到再次請求,字型檔案的規則變掉了 ?

組合拳2: 前面的規則是字型問題亂序,但是只是數字匹配打亂掉。比如1->4,5->8。接下來的套路就是每個數字對應乙個unicode 碼,然後製作自己需要的字型,可以是 .ttf、.woff 等等。

這幾種組合拳打下來。對於一般的爬蟲就放棄了。

反爬手段再公升級

上面說的方法主要是針對數字做的反爬手段,如果要對漢字進行反爬怎麼辦?接下來提供幾種方案

方案2:將**的重要字型,將 html 部分生成,這樣子爬蟲要識別到需要的內容成本就很高了,需要用到 ocr。效率也很低。所以可以攔截掉一部分的爬蟲

方案3:看到攜程的技術分享「反爬的最高境界就是 canvas 的指紋,原理是不同的機器不同的硬體對於 canvas 畫出的圖總是存在畫素級別的誤差,因此我們判斷當對於訪問來說大量的 canvas 的指紋一致的話,則認為是爬蟲,則可以封掉它」。

本人將方案1實現到 demo 中了。

根據詞云,將每個字生成對應的 unicode 碼

將詞云包括的漢字做成乙個字型庫「年」對應的unicode碼是「\u5e75」 。利用這種規則製作我們需要的字型庫

在每次呼叫介面的時候服務端做的事情是:服務端封裝某個方法,將資料經過方法判斷是不是在詞雲中,如果是詞雲中的字元,利用規則(找到漢字對應的 unicode 碼,再根據凱撒加密,設定對應的偏移量,demo 中為1,將每個漢字加密處理)加密處理後返回資料

客戶端做的事情:

@font-face

@font-face

h2 h3,a

複製**

傳送門

實現的效果

頁面上看到的資料跟審查元素看到的結果不一致

去檢視介面資料跟審核元素和介面看到的三者不一致

頁面每次重新整理之前得出的結果更不一致

對於數字和漢字的處理手段都不一致

這幾種組合拳打下來。對於一般的爬蟲就放棄了。

ttf轉svg

demo 位址

執行步驟

//客戶端。先檢視本機 ip 在 demo/spider-develop/solution/solution1.js 和 demo/spider-develop/solution/solution2.js  裡面將介面位址修改為本機 ip

$ cd demo

$ ls

rest spider-release file-server.js

spider-develop util rule.json

$ node file-server.js

server is runnig at

//服務端 先安裝依賴

$ cd rest/

$ npm install

複製**

對於防止使用者模仿我們的請求再次發起請求,我們可以採用 「防重放策略」,使用者再也無法模仿我們的請求,再次去獲取資料了。

如何做安全測試?

文章目錄 前言1.web安全測試 1.基本安全測試 2.認證測試 3.會話管理測試 4.許可權管理測試 5.檔案和目錄測試 鏈結前言 不做文字的搬運工,多做靈感性記錄 這是平時學習總結的地方,用做知識庫 平時看到其他文章的相關知識,也會增加到這裡 隨著學習深入,會進行知識拆分和彙總,所以文章會隨時更...

iOS APP 如何做才安全

本來 寫了一篇 ios 如何做才安全 逆向工程 reveal ida hopper https抓包 等 發現文章有點雜,並且 ios 如何做才安全 這部分寫的越來越多,覺得 分出來更清晰一點。所以拆成兩部分。同時也是為了大家能 共同討論,畢竟不是專業搞安全的,如果文中有錯誤 歡迎指正,共同進步。io...

iOS APP 如何做才安全

本來 寫了一篇 ios 如何做才安全 逆向工程 reveal ida hopper https抓包 等 發現文章有點雜,並且 ios 如何做才安全 這部分寫的越來越多,覺得 分出來更清晰一點。所以拆成兩部分。同時也是為了大家能 共同討論,畢竟不是專業搞安全的,如果文中有錯誤 歡迎指正,共同進步。io...