当前位置:   article > 正文

前端代码混淆加密(使用Terser、WebpackObfuscator)

前端代码混淆加密(使用Terser、WebpackObfuscator)

零、相关技术及版本号

  1. "vue": "2.6.12",
  2. "@vue/cli-service": "4.4.6",
  3. "javascript-obfuscator": "^4.1.1",
  4. "terser-webpack-plugin": "^4.2.3",
  5. "vue-template-compiler": "2.6.12",
  6. "webpack-obfuscator": "^2.6.0"

一、需求说明

为了对公司项目进行安全防护措施,前端需要进行代码混淆加密处理。
这里就有个三个需求点:

  1. 压缩
  2. 混淆
  3. 加密

以此在网上查找到相应工具有:Terser、WebpackObfuscator

Terser:压缩代码、变量和函数名混淆、删除未使用代码

WebpackObfuscator:代码混淆、字符串加密、控制流扁平化

二、工具使用

  1. npm install --save-dev terser-webpack-plugin@4
  2. npm install --save-dev javascript-obfuscator webpack-obfuscator@2.6.0

  vue.config.js

  1. const CompressionPlugin = require('compression-webpack-plugin'); // gzip压缩,无关可忽略
  2. const TerserPlugin = require('terser-webpack-plugin');
  3. const WebpackObfuscator = require('webpack-obfuscator');
  4. const name = process.env.VUE_APP_TITLE || '*****' // 网页标题
  5. module.exports = {
  6. // ......
  7. configureWebpack: config => {
  8. const plugins = [
  9. // gzip压缩,无关可忽略
  10. new CompressionPlugin({
  11. cache: false,
  12. test: /\.(js|css|html)?$/i,
  13. filename: '[path].gz[query]',
  14. algorithm: 'gzip',
  15. minRatio: 0.8
  16. })
  17. ];
  18. if (process.env.NODE_ENV === 'production') {
  19. // 使用 Terser 进行代码压缩和 source map 生成
  20. config.optimization = {
  21. minimizer: [
  22. new TerserPlugin({
  23. terserOptions: {
  24. compress: {
  25. warnings: false,
  26. drop_console: true, // 开启console.log压缩
  27. drop_debugger: true, // 移除debugger
  28. },
  29. sourceMap: true, // 启用 source map 生成
  30. },
  31. extractComments: false, // 是否将注释提取到单独的文件中
  32. }),
  33. ],
  34. };
  35. // 在 Terser 之后使用 WebpackObfuscator 进行混淆
  36. plugins.push(
  37. new WebpackObfuscator(
  38. {
  39. // 压缩代码
  40. compact: true,
  41. // 通过用空函数替换它们来禁用console.log,console.info,console.error和console.warn。这使得调试器的使用更加困难。
  42. disableConsoleOutput: true,
  43. // 通过固定和随机(在代码混淆时生成)的位置移动数组。
  44. rotateStringArray: true,
  45. // 标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符)
  46. identifierNamesGenerator: 'hexadecimal',
  47. },
  48. []
  49. )
  50. );
  51. }
  52. return {
  53. name: name,
  54. devtool: 'source-map', // 确保 devtool 设置为 'source-map' 或类似选项
  55. plugins: plugins
  56. };
  57. },
  58. }

三、注意事项

1、WebpackObfuscator需要和javascript-obfuscator一起安装(在此项目的版本下)

      VueCli4 对应 webpack-obfuscator@2.6.0

npm install --save-dev javascript-obfuscator webpack-obfuscator@2.6.0

2、WebpackObfuscator进行混淆加密,需要Terser进行提前处理

① 使用 Terser 进行代码压缩和 source map 生成,

② 在 Terser 之后使用 WebpackObfuscator 进行混淆。

单独使用WebpackObfuscator的话,打包时就会一直报错(sourceAndMap):

3、配置configWebpack和开发环境设置

① 以函数形式配置configWebpack

     (注意Terser和WebpackObfuscator引入的方式不同,后者是放到plugins中)
② 设置在生产环境中才去使用混淆加密工具(开发环境会产生各种报错)

因版本问题导致花了很多时间研究并处理报错,版本对应很重要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/929003
推荐阅读
相关标签
  

闽ICP备14008679号