目录背景随着前端技术的发展,特殊是单页应用(SPA)的遍及,越来越多的应用逻辑和业务代码袒露在客户端浏览器中运行。 这使得应用代码容易被查察、复制甚至修改,从而可能引发安全问题或商业秘密泄露。 可以通过浏览器控制台查察页面源码, 如下图: webpack-obfuscator 介绍[code]webpack-obfuscator[/code] 是一个用于肴杂 [code]Webpack[/code] 打包后的 [code]JavaScript[/code] 代码的插件。它通过对代码举行肴杂处理,使原始代码变得难以阅读和明白,从而保护代码的知识产权和业务逻辑。 这种肴杂通常包罗变量重命名、字符串加密、控制流扁平化等技术手段。[code]webpack-obfuscator[/code] 可以在构建过程中对 [code]JavaScript[/code] 代码举行肴杂,使其在摆设到生产情况时更加安全。 安装[code]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[/code]留意: 上面安装的版本对应的 webpack 4.47.0版本, 假如是 webpack 是低版本,对应的插件版本也要低落 参数剖析肴杂选项 (options)
清除选项 (exclude)
请留意,上述设置示例包含了所有可用的参数,但在实际项目中,你可能只需要设置此中的一部门。 猛烈建议根据项目需求调解这些选项,以达到最佳的肴杂效果并保持代码的可维护性和性能。 设置示例接下来,在你的 webpack.config.js 文件中设置 webpack-obfuscator 插件。 以下是一个简单的示例设置: [code]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, // 此选项险些不可能使用开发者工具的控制台选项卡 debugProtection: false, // 假如选中,则会在“控制台”选项卡上使用隔断逼迫调试模式,从而更难使用“开发人员工具”的其他功能。 debugProtectionInterval: false, // 通过用空函数更换它们来禁用console.log,console.info,console.error和console.warn。这使得调试器的使用更加困难。 disableConsoleOutput: true, // 标识符的肴杂方式 hexadecimal(十六进制) mangled(短标识符) identifierNamesGenerator: 'hexadecimal', log: false, // 是否启用全局变量和函数名称的肴杂 renameGlobals: false, // 通过固定和随机(在代码肴杂时天生)的位置移动数组。这使得将删除的字符串的顺序与其原始位置相匹配变得更加困难。假如原始源代码不小,建议使用此选项,由于辅助函数可以引起留意。 rotateStringArray: true, // 肴杂后的代码,不能使用代码美化,同时需要设置 cpmpat:true; selfDefending: true, // 删除字符串笔墨并将它们放在一个特殊的数组中 stringArray: true, rotateUnicodeArray: true, // stringArrayEncoding: 'base64', stringArrayEncoding: ['base64'], stringArrayThreshold: 0.75, // 答应启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,而且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。 unicodeEscapeSequence: false, // 答应启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,而且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。 transformObjectKeys: true, // 清除选项 exclude: [/node_modules/, /\.min\.js$/] }) ) } }, }[/code]代码肴杂后 上述报错阐明项目的 [code]webpack[/code] 版本对应的 [code]webpack-obfuscator[/code] 和 [code]javascript-obfuscator[/code] 版本过低导致报错 [code]运行 npm run dev 报错 TypeError: Cannot read property ‘tap’ of undefined[/code]上述报错阐明项目的 [code]webpack[/code] 版本对应的 [code]webpack-obfuscator[/code] 和 [code]javascript-obfuscator[/code] 版本过高导致报错 查察 [code]webpack[/code] 对应 [code]webpack-obfuscator[/code] 版本可以去 git 官网的 [code]tags[/code] 的 [code]package.json[/code] 上举行详细查察 git 官网: https://github.com/javascript-obfuscator/webpack-obfuscator/tags 解决方法: 修改 configureWebpack 设置, 将[code]configureWebpack[/code]的对象模式改成函数形式 设置如下: [code]module.exports = { configureWebpack: (config) => { if (process.env.NODE_ENV === 'production') { config.plugins.push( new WebpackObfuscator({ // 压缩代码 compact: true, // 是否启用控制流扁平化(低落1.5倍的运行速率) controlFlowFlattening: false, // 随机的死代码块(增加了肴杂代码的大小) deadCodeInjection: false, // 此选项险些不可能使用开发者工具的控制台选项卡 debugProtection: false, // 假如选中,则会在“控制台”选项卡上使用隔断逼迫调试模式,从而更难使用“开发人员工具”的其他功能。 debugProtectionInterval: false, // 通过用空函数更换它们来禁用console.log,console.info,console.error和console.warn。这使得调试器的使用更加困难。 disableConsoleOutput: true, // 标识符的肴杂方式 hexadecimal(十六进制) mangled(短标识符) identifierNamesGenerator: 'hexadecimal', log: false, // 是否启用全局变量和函数名称的肴杂 renameGlobals: false, // 通过固定和随机(在代码肴杂时天生)的位置移动数组。这使得将删除的字符串的顺序与其原始位置相匹配变得更加困难。假如原始源代码不小,建议使用此选项,由于辅助函数可以引起留意。 rotateStringArray: true, // 肴杂后的代码,不能使用代码美化,同时需要设置 cpmpat:true; selfDefending: true, // 删除字符串笔墨并将它们放在一个特殊的数组中 stringArray: true, rotateUnicodeArray: true, // stringArrayEncoding: 'base64', stringArrayEncoding: ['base64'], stringArrayThreshold: 0.75, // 答应启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,而且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。 unicodeEscapeSequence: false, // 答应启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,而且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。 transformObjectKeys: true, }) ) } }, }[/code]总结以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 来源:https://www.jb51.net/javascript/3285127i6.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-2 09:25 , Processed in 0.032034 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.