背景会社のコードは第三者に提供され、利用されます。ソースコードが完全に漏洩しないようにするには、提供されたコードを暗号化して難読化する必要があります。フロントエンドコードを完全に暗号化して難読化することはできませんが、ビルドコードは インストール npm インストール --save-dev webpack-obfuscator 構成 // webpack.config.js JavaScriptObfuscator は、webpack-obfuscator を必要とします。 モジュール.エクスポート = { エントリー: { 'abc': './test/input/index.js', 'cde': './test/input/index1.js' }, 出力: { パス: 'dist', ファイル名: '[name].js' }, プラグイン: [ 新しい JavaScriptObfuscator({ Unicode配列を回転: true // 配列には除外する必要があるファイルが含まれています}, ['abc.js']) ] }; // vue.config.js 定数パス = require('path'); var JavaScriptObfuscator = require('webpack-obfuscator'); モジュール.エクスポート = { パブリックパス: process.env.NODE_ENV === 'production' ? './' : '/', プロダクションソースマップ: false、 Webpack を構成する: { プラグイン: [ 新しい JavaScriptObfuscator({ 文字列配列を回転: true、 }, []) ] }, pwa: {}, ページ: {} } パッケージ化中にのみ暗号化と難読化を行い、ローカルで実行するときに難読化を行わない場合は、次のように構成できます。 configureWebpack: (process.env.NODE_ENV === 'production') ? { プラグイン: [ 新しい JavaScriptObfuscator({ // ... }, []) ] } : {}, 建てるnpm 実行ビルド ビルドファイルの比較1. 原文 //テスト 関数abc() { (i = 0; i < 10; i++ とします) { console.log(`${i}th, hello, hello`) } } ABC() 関数 2. webpackJsonp([2],{lVK7:function(o,l){!function(){for(var o=0;o<10;o++)console.log("The "+o+"th, hello, hello")}()}},["lVK7"]); 3. 新しい JavaScriptObfuscator({ }, []) var _0x1f6e=["个,你好,hello","lVK7","log"];!function(n,o){!function(o){for(;--o;)n.push(n.shift())}(++o)}(_0x1f6e,323);var _0x3655=function(n,o){return _0x1f6e[n-=0]};webpackJsonp([2],{lVK7:function(n,o){!function(){for(var n=0;n<10;n++)console[_0x3655("0x0")]("第"+n+_0x3655("0x1"))}()}},[_0x3655("0x2")]); 4. パフォーマンスが低い: ぼかしなしの場合よりもパフォーマンスが 新しい JavaScriptObfuscator({ // コードを圧縮 compact: true, // 制御フローの平坦化を有効にするかどうか(実行速度を 1.5 倍に減らす) コントロールフロー平坦化: true、 // アプリケーション確率; 大規模なコード ベースでは、制御フロー遷移の数が多くなるとコードのサイズが増加し、コードの速度が低下する可能性があるため、この値を下げることをお勧めします。 制御フロー平坦化しきい値: 1、 // ランダムなデッドコードブロック(難読化されたコードのサイズが増加) デッドコードインジェクション: true、 //デッドコードブロックの影響確率 deadCodeInjectionThreshold: 1, // このオプションにより、開発者ツールのコンソールタブの使用がほぼ不可能になります。debugProtection: true、 // チェックすると、コンソール タブで間隔を置いたデバッグ モードが強制され、開発者ツールの他の機能の使用が困難になります。 デバッグ保護間隔: true、 // console.log、console.info、console.error、console.warn を空の関数に置き換えて無効にします。これにより、デバッガーの使用がより困難になります。 コンソール出力を無効にする: true、 // 識別子の難読化方法 16 進数 (16 進数) マングル化 (短い識別子) 識別子名ジェネレータ: '16進数', ログ: 偽、 // グローバル変数と関数名の混同を有効にするかどうか renameGlobals: false, // 配列を固定位置とランダム位置(コードが難読化されたときに生成される)に移動します。これにより、削除された文字列の順序を元の位置と一致させることが難しくなります。元のソース コードが小さくない場合は、ヘルパー関数が注目を集める可能性があるため、このオプションをお勧めします。 文字列配列を回転: true、 // コードが難読化された後は、コードの美化は使用できなくなるため、cpmpat:true を設定する必要があります。 自己防衛: true、 // 文字列リテラルを削除し、特別な配列に格納します stringArray: true, 文字列配列エンコーディング: 'rc4', 文字列配列しきい値: 1, // 文字列を Unicode エスケープ シーケンスに変換するかどうかを有効/無効にできます。 Unicode エスケープ シーケンスにより、コード サイズが大幅に増加し、文字列を元の状態に簡単に復元できるようになります。このオプションは、小さなソース コードの場合にのみ有効にすることをお勧めします。 変換オブジェクトキー: true、 ユニコードエスケープシーケンス: false }, []), ビルドされたファイルサイズ: var _0xa0d1=["w7Bzw6oKw6E=","wrwIUcOVw4M=","w4bChi3DtcOQ","wpLDtsK5w4LDpA==","OUlQwp1z","woEqw4XCtsOe","YR3DrkDCiA==","woAjwq/Ci8KQ","dDNzw5bDgA==", // ... ("0x201","xatR")]=function(x){return x()},x[_0x34e6("0x202","vdcx")](_0x2c01f8)},4e3); 3. 最高のパフォーマンス: ぼかしなしの場合よりもパフォーマンスが 新しい JavaScriptObfuscator({ // コードを圧縮 compact: true, // 制御フローの平坦化を有効にするかどうか(実行速度を 1.5 倍に減らす) コントロールフロー平坦化: true、 // アプリケーション確率; 大規模なコード ベースでは、制御フロー遷移の数が多くなるとコードのサイズが増加し、コードの速度が低下する可能性があるため、この値を下げることをお勧めします。 制御フロー平坦化しきい値: 0.75、 // ランダムなデッドコードブロック(難読化されたコードのサイズが増加) デッドコードインジェクション: true、 //デッドコードブロックの影響確率 deadCodeInjectionThreshold: 0.4, // このオプションにより、開発者ツールのコンソールタブの使用がほぼ不可能になります。debugProtection: false、 // チェックすると、コンソール タブで間隔を置いたデバッグ モードが強制され、開発者ツールの他の機能の使用が困難になります。 デバッグ保護間隔: false、 // console.log、console.info、console.error、console.warn を空の関数に置き換えて無効にします。これにより、デバッガーの使用がより困難になります。 コンソール出力を無効にする: true、 // 識別子の難読化方法 16 進数 (16 進数) マングル化 (短い識別子) 識別子名ジェネレータ: '16進数', ログ: 偽、 // グローバル変数と関数名の混同を有効にするかどうか renameGlobals: false, // 配列を固定位置とランダム位置(コードが難読化されたときに生成される)に移動します。これにより、削除された文字列の順序を元の位置と一致させることが難しくなります。元のソース コードが小さくない場合は、ヘルパー関数が注目を集める可能性があるため、このオプションをお勧めします。 文字列配列を回転: true、 // コードが難読化された後は、コードの美化は使用できなくなるため、cpmpat:true を設定する必要があります。 自己防衛: true、 // 文字列リテラルを削除し、特別な配列に格納します stringArray: true, 文字列配列エンコーディング: 'base64', 文字列配列しきい値: 0.75、 変換オブジェクトキー: true、 // 文字列を Unicode エスケープ シーケンスに変換するかどうかを有効/無効にできます。 Unicode エスケープ シーケンスにより、コード サイズが大幅に増加し、文字列を元の状態に簡単に復元できるようになります。このオプションは、小さなソース コードの場合にのみ有効にすることをお勧めします。 ユニコードエスケープシーケンス: false }, []), ビルドされたファイルサイズ: var _0x1a25=["UmFzT1U=","RkVIc0o=","VUt2eW4=","Q29IS0g=","V1NSZ0k=","d3RNT2w=","dlV6cUw=","RlpzZWg=","QnpzSlE=","cXBqQ1k=","YXBwbHk=","bFZLNw==","Y3p1Ymo=","TFZlQXE=","Y2NKWlY=","cmV0dXJuIChmdW5jdGlvbigpIA==", // ... (b[_0x4bcb("0x2a")]("第"+c,b[_0x4bcb("0x2b")]))}})}},[_0x4bcb("0x2f")]); 4. 高いパフォーマンス: 難読化なしの場合よりもパフォーマンスがわずかに低下します 新しい JavaScriptObfuscator({ // コードを圧縮 compact: true, // 制御フローの平坦化を有効にするかどうか(実行速度を 1.5 倍に減らす) コントロールフロー平坦化: false、 // ランダムなデッドコードブロック(難読化されたコードのサイズが増加) デッドコードインジェクション: false、 // このオプションにより、開発者ツールのコンソールタブの使用がほぼ不可能になります。debugProtection: false、 // チェックすると、コンソール タブで間隔を置いたデバッグ モードが強制され、開発者ツールの他の機能の使用が困難になります。 デバッグ保護間隔: false、 // console.log、console.info、console.error、console.warn を空の関数に置き換えて無効にします。これにより、デバッガーの使用がより困難になります。 コンソール出力を無効にする: true、 // 識別子の難読化方法 16 進数 (16 進数) マングル化 (短い識別子) 識別子名ジェネレータ: '16進数', ログ: 偽、 // グローバル変数と関数名の混同を有効にするかどうか renameGlobals: false, // 配列を固定位置とランダム位置(コードが難読化されたときに生成される)に移動します。これにより、削除された文字列の順序を元の位置と一致させることが難しくなります。元のソース コードが小さくない場合は、ヘルパー関数が注目を集める可能性があるため、このオプションをお勧めします。 文字列配列を回転: true、 // コードが難読化された後は、コードの美化は使用できなくなるため、cpmpat:true を設定する必要があります。 自己防衛: true、 // 文字列リテラルを削除し、特別な配列に格納します stringArray: true, 文字列配列エンコーディング: false、 文字列配列しきい値: 0.75、 // 文字列を Unicode エスケープ シーケンスに変換するかどうかを有効/無効にできます。 Unicode エスケープ シーケンスにより、コード サイズが大幅に増加し、文字列を元の状態に簡単に復元できるようになります。このオプションは、小さなソース コードの場合にのみ有効にすることをお勧めします。 ユニコードエスケープシーケンス: false }, []), ビルドされたファイルサイズ: var _0x37a6=["exception","trace","console","个,你好,hello","lVK7","apply","return (function() ",'{}.constructor("return this")() ',"log","warn","debug","info","error"];!function(n,e){var o=function(e){for(;--e;)n.push(n.shift())}; // ... [_0xe1fd("0x3")]("第"+n+_0xe1fd("0xb"))}()}},[_0xe1fd("0xc")]); 比較表 |
ファイル名 | ファイルサイズ | 通常ビルド | パラメータなし | 非常に難読化されている | 中程度の混乱 | 難読化の低さ |
---|---|---|---|---|---|---|
テスト | 117 バイト | 177 バイト | 363 バイト | 29.2 KB (29,999 バイト) | 6.90KB (7066 バイト) | 2.36 KB (2,424 バイト) |
jQuery.js のサンプル | 111 KB (113,852 バイト) | 85.0 KB (87,064 バイト) | 115 KB (117,770 バイト) | 1.24 MB (1,304,998 バイト) | 401 KB (411,543 バイト) | 117 KB (120,243 バイト) |
主な属性
{ // 圧縮、改行なし compact: true, // 制御フローの平坦化を有効にするかどうか(実行速度を 1.5 倍に減らす) コントロールフロー平坦化: false、 // アプリケーション確率; 大規模なコード ベースでは、制御フロー遷移の数が多くなるとコードのサイズが増加し、コードの速度が低下する可能性があるため、この値を下げることをお勧めします。 制御フロー平坦化しきい値: 0.75、 // ランダムなデッドコードブロック(難読化されたコードのサイズが増加) デッドコードインジェクション: false、 //デッドコードブロックの影響確率 deadCodeInjectionThreshold: 0.4, // このオプションにより、開発者ツールのコンソールタブの使用がほぼ不可能になります。debugProtection: false、 // チェックすると、コンソール タブで間隔を置いたデバッグ モードが強制され、開発者ツールの他の機能の使用が困難になります。 デバッグ保護間隔: false、 // console.log、console.info、console.error、console.warn を空の関数に置き換えて無効にします。これにより、デバッガーの使用がより困難になります。 コンソール出力を無効にする: false、 // 難読化されたソース コードをロックダウンして、特定のドメインおよび/またはサブドメインでのみ実行されるようにします。これにより、誰かがソース コードをコピーして貼り付け、別の場所で実行することが非常に困難になります。 ドメインロック: [], // 識別子の難読化方法 16 進数 (16 進数) マングル化 (短い識別子) 識別子名ジェネレータ: '16進数', // グローバル識別子に特定のプレフィックスを追加します。同じページに読み込まれた複数のファイルを難読化する場合は、このオプションを使用します。このオプションは、これらのファイルのグローバル識別子間の競合を回避するのに役立ちます。ファイル識別子ごとに異なるプレフィックスを使用します。プレフィックス: '', 入力ファイル名: ''、 // コンソールへのログ記録を有効にします。 ログ: 偽、 // グローバル変数と関数名の混同を有効にするかどうか renameGlobals: false, // 難読化と生成された識別子を無効にする reservedNames: [], // 文字列リテラルの変換を無効にする reservedStrings: [], // 配列を固定位置とランダム位置(コードが難読化されたときに生成される)に移動します。これにより、削除された文字列の順序を元の位置と一致させることが難しくなります。元のソース コードが小さくない場合は、ヘルパー関数が注目を集める可能性があるため、このオプションをお勧めします。 文字列配列を回転: true、 // コードが難読化された後は、コードの美化は使用できなくなるため、cpmpat:true を設定する必要があります。 シード: 0, 自己防衛: 偽、 ソースマップ: false、 ソースマップベース URL: ''、 ソースマップファイル名: ''、 ソースマップモード: '分離'、 // 文字列リテラルを削除し、特別な配列に格納します stringArray: true, // stringArray 内のすべての文字列リテラルを base64 または rc4 を使用してエンコードし、実行時にデコードされる特別なコードに挿入します。 true (ブール値): stringArray は base64 エンコード値を使用します。false (ブール値): stringArray 値をエンコードしません。'base64' (文字列): stringArray は base64 エンコード値を使用します。'rc4' (文字列): stringArray は rc4 エンコード値を使用します。 base64 よりも約 30 ~ 50% 遅くなりますが、初期値を取得するのが難しくなります。非常に大きな難読化コードを防ぐために、rc4 エンコーディングで unicodeEscapeSequence オプションを無効にすることをお勧めします。 文字列配列エンコーディング: false、 // 文字列リテラルが stringArray に挿入される確率を調整します stringArrayThreshold: 0.75, // 難読化されたコードのターゲット環境を次のいずれかに設定できます: Browser; Browser No Eval; Node ターゲット: 'ブラウザ', // オブジェクトキーの難読化を有効にするかどうか transformObjectKeys: false, // 文字列を Unicode エスケープ シーケンスに変換するかどうかを有効/無効にできます。 Unicode エスケープ シーケンスにより、コード サイズが大幅に増加し、文字列を元の状態に簡単に復元できるようになります。このオプションは、小さなソース コードの場合にのみ有効にすることをお勧めします。 ユニコードエスケープシーケンス: false }
知らせ
webpack-obfuscator
をインストールするときは、 webpack-obfuscator
のバージョンがローカル プロジェクトのwebpack
バージョンと一致するように注意してください。私は[email protected]
を使用しており、プロジェクトのwebpack
バージョン4.x
です。 ( webpack
4.x版
エラーを報告し、最新バージョン[email protected]
では使用できません。また、 webpack
バージョン5.x
にアップグレードされていません)。excludes數組
、 multimatch包語法
と互換性があります。たとえば、 ['js/chunk-vendors.**.js']
、 ['excluded_bundle_name.js', '**_bundle_name.js']
、または'excluded_bundle_name.js'
などをサポートします。記事アドレス: https://www.cnblogs.com/dragonir/p/14445767.html 著者: dragonir
関連記事参照:
js コードの難読化
webpack 難読化ツール https://blog.csdn.net/qq_31126175/article/details/86526237
これで、コードの暗号化と難読化のために vue プロジェクトで webpack-obfuscator を構成する方法についての記事は終了です。vue webpack-obfuscator コードの難読化に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。
以前、プロジェクトを開発しているときに、flex レイアウトと position:absolute/...
概要オンラインサービスへのアクセス中に 500 または 502 エラーが発生した場合、緊急処理とトラ...
この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...
1. サービス方法ファイアウォールのステータスを確認します。 [root@centos6 ~]# サ...
MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...
最近、イントラネットポータルを修正していたときに、フィルターを使用する必要がある箇所に遭遇しました。...
目次標準コミットメッセージの重要性コミットするコミットリント依存関係をインストールする.commit...
FileReader は、フロントエンドのファイル処理、特に画像処理にとって重要な API です。画...
土曜日、本番サーバー上の Redis サーバーが利用できなくなり、エラー メッセージは次のようになり...
目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...
//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...
メタ宣言注釈の手順: 1. モバイル ページと 1 対 1 で対応するすべての PC ページを分類し...
1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...
この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...