前端代碼安全與混淆

来源:https://www.cnblogs.com/jingdongkeji/archive/2023/04/12/17308813.html
-Advertisement-
Play Games

本文從攻擊者角度和防禦者角度詳細解析前端代碼安全與混淆的相關知識,總結了大部分攻擊者共同點以及如何應對普通開發者外掛程式和Pyhton 爬蟲 ...


作者:京東零售 周明亮

一、友商網頁分析

1.1 亞馬遜

亞馬遜商詳地址:
https://www.amazon.com/OtterBox-Commuter-Case-iPhone-Packaging

  • 所有交互事件在頁面初始化時,不進行下發,等待通過 js 請求後下發 具體點擊事件js內容
  • 採用自執行方式,防止代碼格式化。【無法調用 Chrome 自帶的代碼格式化工具】
  • 採用自研式框架,非傳統 react / vue / angular。大量通過 data-xx 標簽進行數據傳遞,導致標簽結構較為複雜。

1.2 淘寶

主要配合介面進行加密,採用多欄位干擾,模板化載入。下發大量的模版數據,之後通過客戶端進行填充。

客戶端代碼為傳統的普通加密模式

1.3 拼多多

  • 傳統普通加密方式,使用 React 框架。【有明顯的 React 語法糖】
  • 關鍵的商詳數據,需要強制進行登錄操作,可以對賬號進行封禁。

二、攻擊者角度

  1. [Web逆向]數某風控JS演算法分析 常規網頁加密調式
  2. Crack App| 某 H5 App 反調試對抗 反調式 APP 內 Webview
  3. Puppeteer融入調試流程,調試體驗爽翻了! 可模擬用戶實際點擊流程,進行流程化操作,此類方式,比較難以區分
  4. Node.js 安全最佳實踐常見的 Node JS 官方發佈的被攻擊類型。
  • 參考:NodeJS 官網指導手冊
  1. 通過幾行 JS 就可以讀取電腦上的所有數據?旁路攻擊,通過記憶體響應速度獲取用戶密碼信息
  2. Qwik JS框架將JS代碼的拆分從常見的「編譯時」(比如webpack分塊)、「運行時」(比如dynamic import),變為「交互時」。只有用戶操作時,才會進行註入載入。
  3. 實踐:天貓汽車商詳頁的SSR改造實踐 天貓汽車商詳頁,改造原理本質上是基於 Qwik JS 。
  4. 聊聊前端安全之CSRF
  • 非代碼泄漏類,常規類型Web 攻擊,基於代碼破解後
  • XSS攻擊:跨站腳本攻擊(Cross-Site Scripting),攻擊目標是為了盜取存儲在客戶端的cookie或者其他網站用於識別客戶端身份的敏感信息。一旦獲取到合法用戶的信息後,攻擊者甚至可以假冒合法用戶與網站進行交互。
  • CSRF(Cross-site request forgery)跨站請求偽造:攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站發送跨站請求。利用受害者在被攻擊網站已經獲取的註冊憑證,繞過後臺的用戶驗證,達到冒充用戶對被攻擊的網站執行某項操作的目的。
  • 網路劫持攻擊,主要是通過一些代理伺服器,或者wifi等有中間件的網路請求,進行劫持,不法分子通過這種方式獲取到用戶的信息。
  • 控制台註入代碼,不法分子通過各種提示誘騙用戶在控制台做一些操作,從而獲取用戶信息。
  • 釣魚攻擊,
  • 電子郵件釣魚:群發郵件,欺騙用戶點擊惡意的鏈接或附件,獲取有價值的信息
  • 網站釣魚:在網站上偽造一個網站,通常是模仿合法的某個網站。為了欺騙用戶點擊這個網站還會採取些輔助技術,比如釣魚郵件、簡訊、電話
  • 防釣魚
  • SPF記錄,SPF是為了防範垃圾郵件而提出來的一種DNS記錄類型,它是一種TXT類型的記錄,它用於登記某個功能變數名稱擁有的用來外發郵件的所有IP地址。
  • SafeBrowsing API,谷歌的一個隨時可以通過互聯網訪問的API,允許允許瀏覽器在渲染之前檢測URL的正確性。
  • DDOS:分散式拒絕服務攻擊(Distributed Denial of Service),簡單說就是發送大量請求是使伺服器癱瘓
  • SQL註入攻擊,通過對web連接的資料庫發送惡意的SQL語句而產生的攻擊,從而產生安全隱患和對網站的威脅,可以造成逃過驗證或者私密信息泄露等危害
  • 點擊劫持,點擊劫持是指在一個Web頁面中隱藏了一個透明的iframe,用外層假頁面誘導用戶點擊,實際上是在隱藏的frame上觸發了點擊事件進行一些用戶不知情的操作。
  1. AI 介入解釋代碼,加速代碼反編譯進程
  • 比如將友商代碼放入 chatgpt 進行釋義

這個只是部分代碼,如果將完整代碼,一段一段進行分析,你就可以得到完整上下文,不需要靠人去一段一段讀取代碼。

目前還有 ai 代碼調試如:
https://github.com/shobrook/adrenaline

三、防禦者角度

  1. JS 代碼混淆
  • 應對:普通開發者或者不懂編程的普通用戶。實例:大部分網頁
  • 進行代碼混淆/加密,減少語義化理解。
  • 通過代碼調試,查找特定 DOM 結點,反覆斷點調試,即可瞭解相關執行邏輯
  1. JS 虛擬機
  • 應對:專業編程開發者。實例:暫無
  • 通過 AST 轉換 代碼為二進位碼,再通過虛擬機運行二進位碼。
  • 會導致網頁執行性能變差,執行載入更多 JS 文件
  • 無法進行斷點提示,但是會把解密流程對外暴露。
  • 直接調用 JS 虛擬機,執行最小化JS片段,從而瞭解整個虛擬機的加密規則。
  1. 強制下載 APP 通過 Webview 打開
  • 應對:中高級編程開發者。實例如:拼多多等
  • H5 代碼只是對外展示數據,關鍵內容提示用戶下載 APP,增加調試難度
  • 用戶不願意下載APP,就會導致用戶流失。
  1. 介面校驗/欄位混淆
  • 應對:Python 爬蟲類,實例如:淘寶、好詞好句網等等
  • 通過介面生成混淆模版,多欄位隨機發送,配置相關JS 模版框架。
  • 介面內容傳輸 base64 / aes 加解密處理,但是會留下解密 JS 在客戶端,依舊能夠被破解。
  • Token 強制校驗,發送三次錯誤,直接不在返回數據,需要用戶強制登錄,容易導致用戶流失。
  1. 自定義框架
  • 應對:Python 爬蟲類,中高級編程開發者。實例如:亞馬遜/淘寶。【還需要繼續挖掘】
  • 爬蟲無法第一時間獲取相關按鈕的 API 請求介面,需要等待 JS 返回。
  • 客戶端存在大量無關數據,導致 dom 結點整體看起來無規律
  • JS 通過 介面請求返回,配合相關的 Token 參數,可以達到隨機性下發

四、結論

4.1 大部分攻擊者共同點

1)自身不願意登錄,或者偷取正常用戶信息後,用於攻擊

  • 如一些外掛程式,免費提供給外部用戶,用戶貪圖小利,以為可以通過外部程式加快搶利
  • 實則被記錄用戶名,給到攻擊者使用。

2)如果是公司行為,很可能會被記錄IP,有法務風險。

  • 可以分析電腦名稱,IP 地址
  • 可能會進行 IP 伺服器代理,採用虛擬 IP,虛擬定位
  • 使用雲伺服器,如:阿裡雲 / 京東雲,進行攻擊相應的網站,京東雲到京東網站。

3)多次進行嘗試修改 token ,偽裝發送請求

  • 偽造 UA
  • 開啟調試模式

4)分析 DOM 結構特征 / 使用 Console 列印全局存儲變數

5)通過 cookies 分析特定的關鍵詞,全局搜索

6)網路請求時,查看函數執行棧,逐級往下尋找核心請求函數。

4.2 應對普通開發者外掛程式

  • 主要採用 puppeteer 就可以完全模擬用戶操作流程,可以進行等待某個節點出現,之後再進行操作,不再需要傳統的代碼調試操作。直接操作 DOM 結點點擊響應
  • 基於此類需求,需要經常變更 DOM 結點位置。增加業務方成本,每次都需要發版。如果是隨機生成結點特征,需要開發自研框架,成本較高

4.3 應對Pyhton爬蟲

1)前端代碼採用傳統加密方式

2)入口在 APP 內的 業務

  • 本身調試需要需要額外鏈接機器,提高調試複雜度。
  • 配合 APP 自身監控,特定API 可以做到更加安全
  • 也只有此類業務,可以採用 JS 虛擬機方式

3)對關鍵詞進行混淆處理,減少特征搜索

  • 可採用下麵方式,只是舉例,可以有更多方式。比如數組組合,對象組合等等
  • const GLOBAL_SOCKET_NAME = 'c6on6ne6ct'.concat('S6o').concat('c6ke6t').replace(/6/g, '')
  • 常規代碼混淆中,對完整字元串,不會進行處理,導致會直接暴露關鍵字。

任何客戶端加密混淆都會被破解,只要用心都能解決,我們能做的就是拖延被破解的時間,而不是什麼都不做,那樣只會被破解更快!

其實很多我們自己公司對外的頁面,都有很多外露風險,包括不規範的日誌輸出,直接對外暴露加密的防刷 token。 比如:

大家都可以自查下~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Redis 構造了多種底層數據結構供使用,不同的數據類型有可能使用到多種底層數據結構存儲,因此,需要理解為何 Redis 會有這樣的設計,理解每個底層數據結構的概念之後,就能知曉在極端性能上如何做取捨。 ...
  • 蘋果在iOS16.1系統對第三方開放了靈動島的API,並允許開發者基於靈動島開發相應軟體,越來越多的APP開始基於靈動島的交互進行設計和開發,本文將簡單介紹靈動島開發的流程和將其與業務場景相結合的思考。 ...
  • 首先說明簡易版是只有一個 倒計時 和一個 進度條,頁面載入後自動開始計時,下次計時需要手動刷新頁面。 後續會更新實現完整的倒計時功能的文章 前期準備 前端框架 你需要準備一些前端框架:Bootstrap4 和 jQuery 安裝方法請自行查閱官方文檔或教程 Bootstrap4:https://v4 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言: 梳理了一下項目中的PWA的相關用法,下麵我會正對vue2和vue3的用法進行一些教程示例,引入離線緩存機制,即使你斷網,也能訪問頁面。一旦用戶訪問了我們的網頁,我們就像牛皮糖一樣粘連著他,他永遠都可以訪問,即使斷網也能訪問。有一天 ...
  • 作者:京東零售 周明亮 寫在前面 這裡我們初步提到了一些基礎概念和應用: 分析器 抽象語法樹 AST AST 在 JS 中的用途 AST 的應用實踐 有了初步的認識,還有常規的代碼改造應用實踐,現在我們來詳細說說使用 AST, 如何進行代碼改造? Babel AST 四件套的使用方法 其實在解析 A ...
  • 當瀏覽器載入網頁時,通常會遵循一個預設的流程,先載入 HTML、CSS 和 JavaScript,然後再載入圖片、音頻、視頻等資源。這個預設的流程可能會導致網頁載入速度變慢,用戶體驗不佳。因此,可以使用一些技術來優化網頁載入的速度,其中之一就是按需載入。 按需載入是指根據用戶實際需要,動態地載入資源 ...
  • 1.準備工作:HbuiderX + 微信開發者工具下載安裝+小程式賬號申請開通(這裡就不例舉了,可以看同賬號uniapp小程式開發準備) 2.創建項目 新版本的HbuilderX點擊新建項目——選擇uni-app——選擇預設模板——輸入項目名稱——選擇Vue版本(此隨筆是前後端分離開發,不使用Uni ...
  • css基礎:塊元素、內聯元素、內聯塊元素 CSS中,html中的標簽元素大體被分為三種不同的類型:塊狀元素、內聯元素(又叫行內元素)和內聯塊狀元素。 1.常用的塊狀元素有: <div>、<p>、<h1>-<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquot ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...