最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用webpack-obfuscator進行代碼混淆及報錯解決過程

 更新時間:2024年10月10日 09:57:12   作者:你不講 wood  
隨著前端應用的復雜度增加,保護客戶端的JavaScript代碼變得更為重要,webpack-obfuscator插件通過對代碼進行混淆,如變量重命名、字符串加密等,提高代碼的保密性,防止源碼被輕易查看或修改

背景

隨著前端技術的發(fā)展,特別是單頁應用(SPA)的普及,越來越多的應用邏輯和業(yè)務代碼暴露在客戶端瀏覽器中運行。

這使得應用代碼容易被查看、復制甚至修改,從而可能引發(fā)安全問題或商業(yè)機密泄露。

可以通過瀏覽器控制臺查看頁面源碼, 如下圖:

webpack-obfuscator 介紹

webpack-obfuscator 是一個用于混淆 Webpack 打包后的 JavaScript 代碼的插件。它通過對代碼進行混淆處理,使原始代碼變得難以閱讀和理解,從而保護代碼的知識產權和業(yè)務邏輯。

這種混淆通常包括變量重命名、字符串加密、控制流扁平化等技術手段。webpack-obfuscator 可以在構建過程中對 JavaScript 代碼進行混淆,使其在部署到生產環(huán)境時更加安全。

安裝

npm install webpack-obfuscator@2.6.0 javascript-obfuscator@3.2.7 --save-dev
# 或者
yarn add webpack-obfuscator@2.6.0 javascript-obfuscator@3.2.7 --dev

注意: 上面安裝的版本對應的 webpack 4.47.0版本, 如果是 webpack 是低版本,對應的插件版本也要降低

參數(shù)解析

混淆選項 (options)

  • compact (boolean): 是否壓縮輸出的代碼,默認為 true
  • controlFlowFlattening (boolean): 是否啟用控制流扁平化,默認為 false
  • controlFlowFlatteningThreshold (number): 控制流扁平化的閾值,默認為 0.75。
  • deadCodeInjection (boolean): 是否注入死代碼,默認為 false。
  • deadCodeInjectionThreshold (number): 死代碼注入的閾值,默認為 0.4。
  • debugProtection (boolean): 是否啟用調試保護,默認為 false。
  • debugProtectionInterval (boolean): 是否啟用調試保護間隔,默認為 false。
  • domainLock (Array<string>): 鎖定指定的域名,默認為空數(shù)組。
  • identifierNamesGenerator (string): 生成標識符名稱的方式,默認為 'mangled'。
  • log (boolean): 是否記錄混淆過程,默認為 false
  • numbersToExpressions (boolean): 是否將數(shù)字轉換為表達式,默認為 false。
  • renameGlobals (boolean): 是否重命名全局變量,默認為 false。
  • rotateStringArray (boolean): 是否啟用字符串數(shù)組旋轉,默認為 false。
  • selfDefending (boolean): 是否啟用自我防御,默認為 false
  • simplify (boolean): 是否簡化輸出代碼,默認為 true。
  • sourceMap (boolean | string): 是否生成源映射,默認為 false
  • sourceMapMode (string): 源映射模式,默認為 'separate'
  • splitStrings (boolean): 是否將字符串分割成多個較小的字符串,默認為 false。
  • stringArrayEncoding (Array<string>): 字符串數(shù)組編碼方式,默認為空數(shù)組。
  • stringArrayEncodingThreshold (number): 字符串數(shù)組編碼的閾值,默認為 0.75。
  • stringArrayThreshold (number): 字符串數(shù)組閾值,默認為 0.75。
  • stringArrayWrappersCount (number): 字符串數(shù)組包裝器的數(shù)量,默認為 2。
  • stringArrayWrappersChainedCalls (number): 字符串數(shù)組包裝器鏈式調用的數(shù)量,默認為 2。
  • stringArrayWrappersParametersMaxCount (number): 字符串數(shù)組包裝器參數(shù)的最大數(shù)量,默認為 2。
  • stringArrayWrappersParametersMinCount (number): 字符串數(shù)組包裝器參數(shù)的最小數(shù)量,默認為 1。
  • stringArrayWrappersType (string): 字符串數(shù)組包裝器的類型,默認為 ‘variable’。
  • stringArrayWrappersVarNames (Array<string>): 字符串數(shù)組包裝器變量名稱,默認為空數(shù)組。
  • stringArrayIndexShift (boolean): 是否對字符串數(shù)組索引進行偏移,默認為 false。
  • shuffleStringArray (boolean): 是否打亂字符串數(shù)組,默認為 false。
  • transformObjectKeys (boolean): 是否轉換對象鍵,默認為 false。
  • transformObjectKeysBlackList (Array<string>): 不轉換的對象鍵黑名單,默認為空數(shù)組。
  • transformObjectKeysRecursive (boolean): 是否遞歸轉換對象鍵,默認為 false。
  • transformObjectKeysWhitelist (Array<string>): 轉換的對象鍵白名單,默認為空數(shù)組。
  • unicodeEscapeSequence (boolean): 是否使用 Unicode 逃逸序列,默認為 false。
  • useStrictSemicolons (boolean): 是否使用嚴格的分號,默認為 false
  • wrapCode (boolean): 是否包裹代碼,默認為 false。
  • wrapComments (boolean): 是否包裹注釋,默認為 false

排除選項 (exclude)

  • exclude (Array<string> | RegExp): 排除不需要混淆的模塊或文件。

請注意,上述配置示例包含了所有可用的參數(shù),但在實際項目中,你可能只需要設置其中的一部分。

強烈建議根據(jù)項目需求調整這些選項,以達到最佳的混淆效果并保持代碼的可維護性和性能。

配置示例

接下來,在你的 webpack.config.js 文件中配置 webpack-obfuscator 插件。

以下是一個簡單的示例配置:

const path = require("path");

const TerserPlugin = require("terser-webpack-plugin");

const WebpackObfuscator = require('webpack-obfuscator');

module.exports = {
  configureWebpack: (config) => {
      config.resolve = {
        ...config.resolve,
        alias: {
          "@": resolve("src"),
        }
      },
      config.optimization = {
        ...config.minimizer,
        minimizer: [
          new TerserPlugin({
            terserOptions: {
              compress: {
                drop_console: true,
              },
            },
          }),
        ]
      }

    if (process.env.NODE_ENV === 'production') {
      config.plugins.push(
        new WebpackObfuscator({
          // 壓縮代碼
          compact: true,
          // 是否啟用控制流扁平化(降低1.5倍的運行速度)
          controlFlowFlattening: false,
          // 隨機的死代碼塊(增加了混淆代碼的大小)
          deadCodeInjection: false,
          // 此選項幾乎不可能使用開發(fā)者工具的控制臺選項卡
          debugProtection: false,
          // 如果選中,則會在“控制臺”選項卡上使用間隔強制調試模式,從而更難使用“開發(fā)人員工具”的其他功能。
          debugProtectionInterval: false,
          // 通過用空函數(shù)替換它們來禁用console.log,console.info,console.error和console.warn。這使得調試器的使用更加困難。
          disableConsoleOutput: true,
          // 標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符)
          identifierNamesGenerator: 'hexadecimal',
          log: false,
          // 是否啟用全局變量和函數(shù)名稱的混淆
          renameGlobals: false,
          // 通過固定和隨機(在代碼混淆時生成)的位置移動數(shù)組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數(shù)可以引起注意。
          rotateStringArray: true,
          // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true;
          selfDefending: true,
          // 刪除字符串文字并將它們放在一個特殊的數(shù)組中
          stringArray: true,
          rotateUnicodeArray: true,
          //  stringArrayEncoding: 'base64',
          stringArrayEncoding: ['base64'],
          stringArrayThreshold: 0.75,
          // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。
          unicodeEscapeSequence: false,
          // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。
          transformObjectKeys: true,

		  // 排除選項
      	  exclude: [/node_modules/, /\.min\.js$/]
        })
      )
    }
  },
}

代碼混淆后

運行 npm run dev 報錯 Error: The number of constructor arguments in the derived class t must be >= than the number of constructor arguments of its base class.

上述報錯說明項目的 webpack 版本對應的 webpack-obfuscatorjavascript-obfuscator 版本過低導致報錯

運行 npm run dev 報錯 TypeError: Cannot read property ‘tap’ of undefined

上述報錯說明項目的 webpack 版本對應的 webpack-obfuscatorjavascript-obfuscator 版本過高導致報錯

查看 webpack 對應 webpack-obfuscator 版本可以去 git 官網(wǎng)的 tagspackage.json 上進行詳細查看

git 官網(wǎng): https://github.com/javascript-obfuscator/webpack-obfuscator/tags

運行npm run build 打包時出現(xiàn)錯誤 TypeError: Cannot read property ‘sourceAndMap’ of undefined

npm官網(wǎng)文檔也寫到了 Warning: right now plugin does not support sourceMap and sourceMapMode options!

解決方法:

修改 configureWebpack 配置, 將configureWebpack的對象模式改成函數(shù)形式

配置如下:

module.exports = {
  configureWebpack: (config) => {
    if (process.env.NODE_ENV === 'production') {
      config.plugins.push(
        new WebpackObfuscator({
          // 壓縮代碼
          compact: true,
          // 是否啟用控制流扁平化(降低1.5倍的運行速度)
          controlFlowFlattening: false,
          // 隨機的死代碼塊(增加了混淆代碼的大小)
          deadCodeInjection: false,
          // 此選項幾乎不可能使用開發(fā)者工具的控制臺選項卡
          debugProtection: false,
          // 如果選中,則會在“控制臺”選項卡上使用間隔強制調試模式,從而更難使用“開發(fā)人員工具”的其他功能。
          debugProtectionInterval: false,
          // 通過用空函數(shù)替換它們來禁用console.log,console.info,console.error和console.warn。這使得調試器的使用更加困難。
          disableConsoleOutput: true,
          // 標識符的混淆方式 hexadecimal(十六進制) mangled(短標識符)
          identifierNamesGenerator: 'hexadecimal',
          log: false,
          // 是否啟用全局變量和函數(shù)名稱的混淆
          renameGlobals: false,
          // 通過固定和隨機(在代碼混淆時生成)的位置移動數(shù)組。這使得將刪除的字符串的順序與其原始位置相匹配變得更加困難。如果原始源代碼不小,建議使用此選項,因為輔助函數(shù)可以引起注意。
          rotateStringArray: true,
          // 混淆后的代碼,不能使用代碼美化,同時需要配置 cpmpat:true;
          selfDefending: true,
          // 刪除字符串文字并將它們放在一個特殊的數(shù)組中
          stringArray: true,
          rotateUnicodeArray: true,
          //  stringArrayEncoding: 'base64',
          stringArrayEncoding: ['base64'],
          stringArrayThreshold: 0.75,
          // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。
          unicodeEscapeSequence: false,
          // 允許啟用/禁用字符串轉換為unicode轉義序列。Unicode轉義序列大大增加了代碼大小,并且可以輕松地將字符串恢復為原始視圖。建議僅對小型源代碼啟用此選項。
          transformObjectKeys: true,
        })
      )
    }
  },
}

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Vue的方法和屬性案例詳解

    Vue的方法和屬性案例詳解

    這篇文章主要介紹了Vue的方法和屬性案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • vue自定義橫向滾動條css導航兩行排列布局實現(xiàn)示例

    vue自定義橫向滾動條css導航兩行排列布局實現(xiàn)示例

    這篇文章主要為大家介紹了vue自定義橫向滾動條css導航兩行排列布局實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • vue自動化表單實例分析

    vue自動化表單實例分析

    本篇文章通過實例給大家分享了vue自動化表單的操作方法以及相關的代碼做了描述,有興趣的朋友可以跟著學習下。
    2018-05-05
  • vue-router 組件復用問題詳解

    vue-router 組件復用問題詳解

    本篇文章主要介紹了vue-router 組件復用問題詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 用vue2.0實現(xiàn)點擊選中active其他選項互斥的效果

    用vue2.0實現(xiàn)點擊選中active其他選項互斥的效果

    這篇文章主要介紹了用vue2.0實現(xiàn)點擊選中active其他選項互斥的效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 基于vue如何發(fā)布一個npm包的方法步驟

    基于vue如何發(fā)布一個npm包的方法步驟

    這篇文章主要介紹了基于vue如何發(fā)布一個npm包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • vue封裝自定義分頁器組件與使用方法分享

    vue封裝自定義分頁器組件與使用方法分享

    這篇文章主要給大家介紹了關于vue封裝自定義分頁器組件與使用方法的相關資料,非常的好用,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • elementUI Tree 樹形控件的官方使用文檔

    elementUI Tree 樹形控件的官方使用文檔

    這篇文章主要介紹了elementUI Tree 樹形控件的官方使用文檔,用清晰的層級結構展示信息,可展開或折疊。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • VUE中使用TypeScript裝飾器實現(xiàn)表單驗證的全過程

    VUE中使用TypeScript裝飾器實現(xiàn)表單驗證的全過程

    這篇文章主要給大家介紹了關于如何在VUE中使用TypeScript裝飾器實現(xiàn)表單驗證的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • Vue項目中首頁長時間白屏的原因以及解決過程

    Vue項目中首頁長時間白屏的原因以及解決過程

    這篇文章主要介紹了Vue項目中首頁長時間白屏的原因以及解決過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

扶风县| 泸定县| 酉阳| 布拖县| 三都| 濮阳县| 胶州市| 乌苏市| 云阳县| 濮阳县| 西乌珠穆沁旗| 新河县| 息烽县| 邹城市| 赫章县| 浠水县| 德清县| 金塔县| 西华县| 新乡县| 信丰县| 日喀则市| 崇义县| 镇巴县| 通辽市| 安阳县| 黑龙江省| 普宁市| 靖边县| 西盟| 诸暨市| 蕉岭县| 涿州市| 永安市| 鄢陵县| 博白县| 吴旗县| 锦屏县| 东丰县| 朝阳市| 永安市|