<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>登陆 &#8211; 编程技术记录</title>
	<atom:link href="https://blog.z6z8.cn/tag/%E7%99%BB%E9%99%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.z6z8.cn</link>
	<description>世界你好!</description>
	<lastBuildDate>Mon, 08 Dec 2025 00:19:59 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>后端登陆模块常见的校验策略</title>
		<link>https://blog.z6z8.cn/2025/12/08/%e5%90%8e%e7%ab%af%e7%99%bb%e9%99%86%e6%a8%a1%e5%9d%97%e5%b8%b8%e8%a7%81%e7%9a%84%e6%a0%a1%e9%aa%8c%e7%ad%96%e7%95%a5/</link>
					<comments>https://blog.z6z8.cn/2025/12/08/%e5%90%8e%e7%ab%af%e7%99%bb%e9%99%86%e6%a8%a1%e5%9d%97%e5%b8%b8%e8%a7%81%e7%9a%84%e6%a0%a1%e9%aa%8c%e7%ad%96%e7%95%a5/#respond</comments>
		
		<dc:creator><![CDATA[holdsky]]></dc:creator>
		<pubDate>Mon, 08 Dec 2025 00:19:59 +0000</pubDate>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[登陆]]></category>
		<guid isPermaLink="false">https://blog.z6z8.cn/?p=1520</guid>

					<description><![CDATA[后端登录模块常见的校验策略（以安全为首要目标），从输入校验到风控防御，通常会分多层实现，以下是生产环境中广泛采 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>后端登录模块常见的校验策略（以安全为首要目标），从输入校验到风控防御，通常会分多层实现，以下是生产环境中广泛采用的实战校验策略汇总：</p>
<h3>1. 基础参数校验（最基本的一道防线）</h3>
<ul>
<li>用户名/手机号/邮箱：非空、格式正则、长度限制、防注入（预编译语句或ORM自动处理）</li>
<li>密码：非空、长度（通常8-32位）、不能包含用户名等</li>
<li>验证码（图片/短信/邮箱）：非空、长度固定、是否过期（通常60-300秒）</li>
<li>请求必传字段完整性（deviceId、timestamp、sign等）</li>
</ul>
<h3>2. 账号状态校验</h3>
<ul>
<li>账号是否存在</li>
<li>账号是否被禁用/冻结/注销</li>
<li>账号是否需要强制修改密码（首次登录、密码过期）</li>
<li>账号是否被加入黑名单</li>
</ul>
<h3>3. 密码相关安全校验</h3>
<ul>
<li>密码明文传输 → 必须强制HTTPS</li>
<li>密码加密传输（前端通常用RSA或SM2加密，后端私钥解密）</li>
<li>后端密码存储：bcrypt、scrypt、Argon2（加盐，绝不用MD5/SHA1明盐）</li>
<li>密码输错次数限制（单账号5-10次后锁定30分钟~永久，需要人工解封）</li>
<li>密码复杂度策略（可选：大小写+数字+特殊字符）</li>
</ul>
<h3>4. 验证码多重校验（防止暴力破解）</h3>
<ul>
<li>图片验证码：防自动化脚本</li>
<li>短信/邮箱验证码：限流（同一手机号/IP/设备1分钟1条，1小时5条，24小时10条）</li>
<li>验证码有效期 + 只能使用一次</li>
<li>验证码输错次数限制（3-5次后需要重新获取）</li>
</ul>
<h3>5. 登录风控与异常检测（核心防爆破、防薅羊毛）</h3>
<ul>
<li>同一账号短时间内多次登录失败次数超限 → 锁定</li>
<li>同一IP短时间内大量不同账号登录失败 → IP封禁</li>
<li>同一设备（deviceId/deviceFingerprint）短时大量账号尝试 → 设备封禁</li>
<li>异地登录检测（根据IP归属地，与历史登录地对比，差距&gt;1000km触发二次验证）</li>
<li>短时间内大规模登录请求 → 触发全局限流或人工介入</li>
<li>用户代理（User-Agent）异常或频繁切换</li>
<li>无头浏览器、模拟器、爬虫特征检测</li>
</ul>
<h3>6. 会话安全策略</h3>
<ul>
<li>登录成功后颁发token（推荐无状态JWT，或服务端Session+Redis）</li>
<li>JWT需设置合理过期时间（accessToken 15min ~ 2h，refreshToken 7 ~ 30天）</li>
<li>支持单点登录（同账号新登录踢掉旧设备）</li>
<li>支持多端互踢配置（Web端登录踢掉App等）</li>
<li>敏感操作二次验证（修改密码、支付等需重新输入密码或验证码）</li>
</ul>
<h3>7. 常见辅助安全措施</h3>
<ul>
<li>登录接口全局限流（令牌桶/漏桶算法，如QPS&gt;500触发降级）</li>
<li>关键日志记录安全审计日志（登录IP、设备、时间、结果等）</li>
<li>登录成功后下发设备绑定关系（可用于后续风控）</li>
<li>支持可信设备管理（记住设备30天免二次验证）</li>
<li>密码传输前端可使用RSA/SM2非对称加密，或使用SRP协议（密码永不离客户端）</li>
</ul>
<h3>8. 特殊场景校验</h3>
<ul>
<li>第三方登录（微信、QQ、Apple）：校验state防CSRF，校验code是否已被使用</li>
<li>无密码登录（短信登录）：必须绑定手机号 + 短信验证码 + 设备风控</li>
<li>扫码登录：防钓鱼站点、心跳保活、状态机严格校验</li>
</ul>
<h3>推荐的实战分层校验伪代码结构（Java/SpringBoot示例）</h3>
<pre><code class="language-java">@PostMapping(&quot;/login&quot;)
public Result login(@RequestBody LoginDTO dto) {
    // 1. 基础参数校验
    validateParams(dto);

    // 2. 验证码校验
    captchaService.check(dto.getCaptchaId(), dto.getCode());

    // 3. 风控预检（IP、设备、全球限流）
    riskControl.preCheck(dto);

    // 4. 账号状态与密码校验
    User user = userService.checkAccountAndPassword(dto);

    // 5. 登录风控后置（异地、异常检测）
    riskControl.afterLogin(user, request);

    // 6. 生成token并记录登录日志
    String token = jwtUtil.createToken(user);
    loginLogService.asyncSave(user, request, true);

    return Result.ok(token);
}</code></pre>
<p>总结：现代后端登录模块已远不止“用户名+密码正确就放行”，而是一整套“参数→验证码→风控→账号状态→密码→二次验证→会话管理→日志”的立体防御体系。缺任何一层都可能被拖库、撞库、短信轰炸、羊毛党攻破。</p>
<p>如果你的项目体量较大，强烈建议引入专业的风控系统（如阿里云滑块验证码、网易易盾、同盾、ThreatBook等）或自研设备指纹+行为分析能力。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.z6z8.cn/2025/12/08/%e5%90%8e%e7%ab%af%e7%99%bb%e9%99%86%e6%a8%a1%e5%9d%97%e5%b8%b8%e8%a7%81%e7%9a%84%e6%a0%a1%e9%aa%8c%e7%ad%96%e7%95%a5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
