You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何加密或压缩zxcvbn.js以规避企业防火墙拦截并正常实现密码强度检测

这个问题我之前也遇到过类似的情况——企业防火墙的内容检测经常会误判带有敏感词库的脚本文件,尤其是zxcvbn这种靠识别常见弱密码(包括NSFW词汇)来判断强度的工具。下面给你几个不同层级的解决方案,按需选择:

解决方案1:自定义构建zxcvbn,移除NSFW词库(最彻底)

如果有精力维护自定义版本,这是从根源解决问题的办法。zxcvbn是完全开源的,你可以直接修改它的词库内容:

  • 获取zxcvbn的开源源码,找到src/frequency_lists目录下的词库文件(比如passwords.js、english_wikipedia.js等)
  • 手动移除其中的NSFW词汇,或者替换为中性同义词汇
  • 安装依赖后执行构建命令(npm run build),生成自定义版本的zxcvbn.js
  • 将构建好的文件部署到自己的服务器,替换原来的CDN链接

优点:彻底消除敏感词汇触发防火墙拦截的可能;缺点:需要维护自己的代码分支,后续zxcvbn版本更新时需要同步合并修改。

解决方案2:客户端解密执行加密后的zxcvbn.js(快速应急)

不需要修改zxcvbn源码,只需对现有文件加密,客户端解密后动态执行,绕过关键词检测:

  1. 下载官方zxcvbn.js文件,用Base64编码(或简单XOR加密)处理整个文件内容
  2. 在网页中解码加密内容,动态创建script标签执行

示例代码:

<div id="test"> </div>
<script>
// 替换为你编码后的zxcvbn.js Base64内容
const zxcvbnBase64 = "这里是zxcvbn.js文件的Base64编码字符串";
// 解码并插入脚本
const zxcvbnCode = atob(zxcvbnBase64);
const script = document.createElement('script');
script.textContent = zxcvbnCode;
document.head.appendChild(script);

window.onload = function(){
  const password = prompt("输入测试密码?");
  // 确保zxcvbn加载完成后调用
  if (typeof zxcvbn === 'function') {
    const strength = zxcvbn(password);
    document.getElementById('test').innerHTML = JSON.stringify(strength);
  } else {
    document.getElementById('test').innerHTML = "密码检测功能加载失败";
  }
};
</script>

如果Base64仍被拦截,可以试试简单XOR加密(用固定密钥对每个字符异或),客户端用同样密钥解密即可。

优点:实现简单,无需修改源码;缺点:加密方式较简单时,不排除高级防火墙识别特征的可能。

解决方案3:压缩混淆+自有服务器托管(兼顾实用与安全)

结合代码压缩混淆和自有服务器托管,进一步降低被检测概率:

  1. 下载官方zxcvbn.js文件
  2. 用Terser或UglifyJS等工具深度压缩混淆,开启变量名替换、字符串压缩等选项,打乱敏感词汇的原始形式
  3. 将混淆后的文件部署到自己的HTTPS服务器,替换CDN链接

示例Terser命令:

terser zxcvbn.js -o zxcvbn.min.js -c -m --toplevel

优点:既不修改核心逻辑,又能通过混淆改变敏感词汇的文本形态,同时自有服务器避免CDN批量拦截;缺点:需要掌握基础前端构建工具的使用。

内容的提问来源于stack exchange,提问作者BT643

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:57:47