前端注册时怎么防字典攻击? UE丶成娟 提问于 2026-03-06 06:18:18 阅读 39 安全 我最近在做一个用户注册页面,后端同事说要防止字典攻击,但我作为前端有点懵。现在只是简单校验了密码长度和复杂度,比如用正则/^(?=.*[a-z])(?=.*[A-Z])(?=.*d).{8,}$/,但听说这根本挡不住字典攻击。 是不是应该在前端加个常见弱密码列表比对?比如”123456″、”password”这些?但我又担心把弱密码库写在前端会被别人看到,反而帮了攻击者。有没有安全又实用的做法? 我来解答 赞 8 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 Designer°柯佳 Lv1 防字典攻击这个事儿吧,主要靠后端,前端能做的很有限。 你那个正则校验做做样子还行,但确实挡不住字典攻击。前端放弱密码库是完全不行的,JS源码一暴露就完蛋,攻击者直接拿你密码库用。 前端能做的: 密码强度提示可以保留,这是提升用户体验的。但别指望这个防攻击。 真正的防护在后端: 后端必须有个弱密码库(常见top 10000这种),注册和改密码时拿用户输入的去比对。这个库只能后端自己藏着,不能暴露给前端。 然后后端要做的: 1. 注册接口做限流,比如同一IP每分钟只能发5次请求 2. 同一账号连续输错5次就锁15分钟 3. 验证码/行为验证加一个,防止批量注册 前端这边顶多就是配合后端把限流状态码返回来,显示给用户“操作太频繁请稍后”这种。 所以你直接跟后端同事说:弱密码库放他那边,前端不掺和这个。限流和锁定让他加上就行。前端把表单校验做好就完事儿了。 回复 点赞 2026-03-18 17:11 打工人星语 Lv1 这个问题其实挺有意思的,我前段时间也遇到过类似的困扰。咱们分几个步骤来说说解决方案。 第一步,你得明白字典攻击是啥。简单说就是攻击者用常见密码列表(比如top 1000弱密码)不断尝试注册或登录。你现在的正则只能保证密码复杂度,但挡不住"Qwerty123"这种符合规则但依然很弱的密码。 关于前端弱密码校验,我建议这样做比较安全: // 不要直接存储明文弱密码列表 // 改用hash后的值,这样即使被看到也无法直接利用 const commonPasswordHashes = [ '5f4dcc3b5aa765d61d8327deb882cf99', // password 'e10adc3949ba59abbe56e057f20f883e', // 123456 // 其他常见密码的md5值... ]; function isCommonPassword(input) { const inputHash = md5(input); return commonPasswordHashes.includes(inputHash); } // 在表单提交时检查 registerForm.addEventListener('submit', (e) => { const password = document.getElementById('password').value; if(isCommonPassword(password)) { alert('密码太常见,请换一个'); e.preventDefault(); } }); 这样有几个好处: 1. 攻击者看到的是hash值,无法直接知道原始弱密码 2. 前端可以快速过滤掉大部分常见弱密码 3. 配合你现有的复杂度校验,效果更好 但必须提醒你,前端防护永远只是辅助!真正的防护要靠后端,因为攻击者完全可以绕过前端直接调接口。建议你做这些: 1. 后端必须实现请求频率限制,比如同一个IP每分钟最多5次注册尝试 2. 后端也应该有自己的弱密码检测,可以用更大的密码库 3. 重要操作要加验证码,特别是多次失败后 另外关于密码hash,现在md5已经不够安全了,实际项目中可以用sha256之类的更安全的hash算法。不过在前端这个场景下,md5也够用了,毕竟我们只是要做个初步过滤。 最后说个真实案例,之前我们项目没做这些防护,结果有人用脚本疯狂注册了几千个账号,用的全是"123456"这种密码,把数据库都塞爆了...从那之后我们就加了这个前端过滤+后端频率限制的组合拳。 回复 点赞 2 2026-03-06 07:00 加载更多 相关推荐 2 回答 33 浏览 前端注册时怎么处理密码盐值才安全? 我最近在做用户注册功能,看到后端同事说密码要加盐哈希,但我搞不清盐值到底该谁生成、怎么传。我在前端直接生成随机盐拼到密码里再发过去,这样行不行?会不会有安全隐患? 比如我现在是这么做的: <fo... 子聪 安全 2026-03-30 10:34:16 1 回答 49 浏览 前端怎么实现K匿名来保护用户隐私? 我在做用户数据脱敏,听说 K 匿名能防重识别攻击,但不太清楚前端该怎么用。比如我有一批用户年龄和城市的数据,想确保每条记录在组合后至少有 K 条相同,这样别人没法通过交叉信息猜出是谁。 我试着写了个简... 景苑🍀 安全 2026-03-24 23:09:21 2 回答 108 浏览 前端项目里怎么用Fuzzing测试输入框的安全性? 我最近在学安全开发生命周期,看到Fuzzing能用来测输入漏洞,但不太清楚前端怎么实际用。比如一个用户注册页面的邮箱输入框,我想自动喂各种奇怪字符串看会不会出问题,该怎么做? 试过手动复制一些payl... 皇甫胜楠 安全 2026-03-17 00:48:18 1 回答 67 浏览 前端怎么防止接口请求被重放攻击? 最近在做支付相关的功能,后端要求每个请求都要防重放,但我作为前端不太清楚该怎么配合。我试过加时间戳,但好像还是能被截获重放。 现在用的是 Vue3 + Axios,下面是我目前的请求封装,是不是缺了什... 皇甫奕卓 安全 2026-02-27 22:56:20 2 回答 74 浏览 如何在威胁建模中识别前端API的注入攻击风险? 最近在做威胁建模时发现前端调用的API可能存在注入攻击风险,但不确定该怎么具体分析。比如用第三方富文本库上传图片时,后台返回的Markdown内容直接渲染到页面,虽然加了输入过滤,但测试时发现特殊字符... 沐岩酱~ 安全 2026-02-06 19:48:30 1 回答 29 浏览 前端怎么校验密码复杂度才安全? 我在做用户注册页的密码校验,想确保密码包含大小写字母、数字和特殊字符,但不确定只在前端用正则判断够不够。万一用户绕过前端直接发请求怎么办? 现在用的是 Vue 的 watch 监听密码输入,代码大概这... 上官淑瑶 安全 2026-03-26 21:40:24 1 回答 53 浏览 前端做CSRF防护时,Session绑定到底该怎么配合样式写? 我最近在给登录表单加CSRF防护,后端说要用Session绑定token,但我搞不清前端怎么配合。我试过把token塞进hidden input,但样式这块有点懵——比如下面这段CSS是不是会影响表单... ♫小敏 安全 2026-03-19 08:23:18 2 回答 102 浏览 前端密码强度校验怎么写才靠谱? 我在做登录注册页的密码策略,想让用户设置强密码,但不确定校验逻辑怎么写才安全又不烦人。试了下正则,但总觉得漏了什么。 比如下面这段代码,只检查了长度和是否包含数字,但好像没考虑大小写字母和特殊字符?而... 上官奕瑞 安全 2026-03-14 03:46:25 1 回答 48 浏览 前端怎么校验密码强度才靠谱? 我在做用户注册页,想加个密码强度提示,但不确定怎么判断才算安全。试过只看长度,但用户输12345678也能过,这显然不行。 现在想结合大小写字母、数字和特殊字符,但不知道规则怎么定。比如下面这个正则:... 统赫酱~ 安全 2026-03-10 16:18:21 2 回答 49 浏览 前端请求怎么加密才安全? 我在做登录功能,想把用户密码加密后再发给后端,但不知道该在前端怎么处理。试过用 crypto-js 的 AES 加密,但每次加密结果都不一样,后端解不出来。 这是我的 Vue 代码,是不是哪里写错了?... FSD-峻豪 安全 2026-03-06 05:16:20
你那个正则校验做做样子还行,但确实挡不住字典攻击。前端放弱密码库是完全不行的,JS源码一暴露就完蛋,攻击者直接拿你密码库用。
前端能做的:
密码强度提示可以保留,这是提升用户体验的。但别指望这个防攻击。
真正的防护在后端:
后端必须有个弱密码库(常见top 10000这种),注册和改密码时拿用户输入的去比对。这个库只能后端自己藏着,不能暴露给前端。
然后后端要做的:
1. 注册接口做限流,比如同一IP每分钟只能发5次请求
2. 同一账号连续输错5次就锁15分钟
3. 验证码/行为验证加一个,防止批量注册
前端这边顶多就是配合后端把限流状态码返回来,显示给用户“操作太频繁请稍后”这种。
所以你直接跟后端同事说:弱密码库放他那边,前端不掺和这个。限流和锁定让他加上就行。前端把表单校验做好就完事儿了。
第一步,你得明白字典攻击是啥。简单说就是攻击者用常见密码列表(比如top 1000弱密码)不断尝试注册或登录。你现在的正则只能保证密码复杂度,但挡不住"Qwerty123"这种符合规则但依然很弱的密码。
关于前端弱密码校验,我建议这样做比较安全:
这样有几个好处:
1. 攻击者看到的是hash值,无法直接知道原始弱密码
2. 前端可以快速过滤掉大部分常见弱密码
3. 配合你现有的复杂度校验,效果更好
但必须提醒你,前端防护永远只是辅助!真正的防护要靠后端,因为攻击者完全可以绕过前端直接调接口。建议你做这些:
1. 后端必须实现请求频率限制,比如同一个IP每分钟最多5次注册尝试
2. 后端也应该有自己的弱密码检测,可以用更大的密码库
3. 重要操作要加验证码,特别是多次失败后
另外关于密码hash,现在md5已经不够安全了,实际项目中可以用sha256之类的更安全的hash算法。不过在前端这个场景下,md5也够用了,毕竟我们只是要做个初步过滤。
最后说个真实案例,之前我们项目没做这些防护,结果有人用脚本疯狂注册了几千个账号,用的全是"123456"这种密码,把数据库都塞爆了...从那之后我们就加了这个前端过滤+后端频率限制的组合拳。