前端硬编码API密钥极易泄露,直接查看网页源代码或Network面板Response即可获取;应避免明文存储,改用后端代理等安全方案。

前端代码里硬编码的 API密钥,只要没被混淆或动态拼接,基本等于直接送钥匙上门——浏览器点右键“查看网页源代码”就能拿到,根本不需要爆破或绕过。
直接搜索敏感关键词
这是最快见效的一步。打开浏览器开发者工具的 Network 面板,刷新页面,找到主 HTML 响应(通常是第一个 document 类型),点击进入 Response 标签页,然后 Ctrl+F 搜索以下字符串:
-
apikey、api_key、accesskey、secret、token、password -
const、var、let后紧跟等号和引号(比如const API_KEY = "sk_...) - 常见密钥前缀:
Akia(AWS)、AIza(Google)、sk_live(Stripe)、ghp_(GitHub)
注意:大小写不敏感搜索更稳妥;有些密钥被藏在注释里,别漏掉 <!-- 开头的块。
检查内联 <script> 和外部 JS 文件
HTML 源码中常嵌入初始化脚本,密钥就写在里面;而外部 JS 文件(尤其是 /static/js/、/assets/ 下的 bundle.js 或 config.js)更是重灾区。
立即学习“前端免费学习笔记(深入)”;
- 在 HTML 源码里找所有
<script>标签,重点看未带src属性的内联脚本 - 提取所有
<script src="...">的 URL,用wget -r -l1 -A.js https://target.com/批量下载,再用正则批量扫:/(apikey|secret|token)\s*[:=]\s*["'][^"']{12,}/gi - 压缩过的 JS(如
bundle.min.js)别跳过——很多密钥就明文躺在那里,只是被去掉了换行和空格
留意注释和元数据里的“废弃密钥”
开发者常把测试密钥、旧版本密钥、甚至已失效但未删除的密钥留在注释或 <meta> 标签里,攻击者照单全收。
- 搜索 HTML 中所有
<!--,逐条检查是否含test key、dev only、backup token等字样 - 检查
<head>里的<meta name="description">或自定义name属性,有人会把密钥当调试信息塞进去 - 某些构建工具会把环境变量注入为注释(如
<!-- VUE_APP_API_KEY=xxx -->),这类内容不会执行,但能被爬到
为什么正则扫描比人工快但容易漏
自动化正则能覆盖大量文件,但对变形写法束手无策。比如密钥被拆成多段拼接:const k = "sk_" + "live_" + "abc123",或用 base64 编码后 atob("c2tfbGl2ZV9hYmMxMjM=") 再解码使用。
- 基础正则适合发现“低垂果实”,但不能替代人工通读关键配置模块
- 遇到
eval()、Function()、innerHTML动态执行的场景,必须结合浏览器调试器单步执行,观察运行时变量值 - 密钥若经 Webpack DefinePlugin 注入,可能在源码里完全不可见,得看构建配置或 sourcemap(如果误部署了
.map文件)
真正危险的不是明文密钥,而是开发者以为“放前端没关系”——只要密钥能被 JavaScript 读取并用于发起请求,它就已经不属于秘密了。



















