前端小食堂 | Day18 - 身份认证の八卦阵

news/2025/3/20 19:50:28/

🔐 今日秘术:JWT/OAuth2 攻防奥义

1. JWT 安全の六合阵法
// 🚫 危险操作:未验证签名  
const decodeUnsafe = (token) => JSON.parse(atob(token.split('.')[1]));  // ✅ 安全姿势一:严格签名验证  
import jwt from 'jsonwebtoken';  
const payload = jwt.verify(token, secretKey, { algorithms: ['HS256'] });  // ✅ 安全姿势二:强制过期时间检查  
if (payload.exp < Date.now() / 1000) throw new Error('令牌已过期');  // ✅ 安全姿势三:关键声明校验  
if (payload.iss !== 'my-auth-server') throw new Error('非法签发方');  // 🔥 防御算法切换攻击  
// 服务端配置拒绝"none"算法  
jwt.verify(token, secretKey, { algorithms: ['HS256', 'RS256'] });  

🔔 攻击类型识别

  • 令牌泄露:通过XSS/网络嗅探获取JWT
  • 签名绕过:篡改Header中的alg:none
  • 密钥爆破:弱密钥被暴力破解

2. OAuth2 防御の四象结界
// 🚫 危险配置:开放重定向漏洞  
const redirectUri = req.query.redirect_uri; // 未经验证直接使用  // ✅ 安全姿势一:白名单验证  
const validUris = ['https://app.com/callback'];  
if (!validUris.includes(redirectUri)) return 403;  // ✅ 安全姿势二:PKCE 增强  
const codeVerifier = generateRandomString(64);  
const codeChallenge = sha256(codeVerifier);  
// 授权请求携带 challenge  
redirectToAuthServer({  client_id,  code_challenge: codeChallenge,  code_challenge_method: 'S256'  
});  // ✅ 安全姿势三:state参数防CSRF  
const state = crypto.randomBytes(16).toString('hex');  
storeInSession(state);  
redirectToAuthServer({ state });  // 回调时校验state  
if (req.query.state !== getFromSession()) throw new Error('非法请求');  

❄️ 冷知识:现代安全机制

// 🛡️ Refresh Token 自动续期  
let accessToken, refreshToken;  async function refreshTokens() {  try {  const newTokens = await axios.post('/refresh', { refreshToken });  accessToken = newTokens.access;  } catch (err) {  // 刷新失败则要求重新登录  logout();  }  
}  // 🛡️ 浏览器安全存储  
sessionStorage.setItem('token', token); // 标签页隔离  
localStorage.setItem('refreshToken', encrypt(refreshToken)); // 加密存储  // 🛡️ 设备指纹绑定  
const deviceId = generateFingerprint();  
axios.post('/login', { ..., deviceId });  

🌟 实验室安全工坊

实现安全令牌中间件

// JWT 安全校验中间件  
const jwtAuth = (req, res, next) => {  try {  const token = req.headers.authorization?.split(' ')[1];  if (!token) return res.sendStatus(401);  const payload = jwt.verify(token, publicKey, {  algorithms: ['RS256'],  issuer: 'auth-server',  clockTolerance: 30 // 允许30秒时钟偏移  });  // 检查令牌是否被加入黑名单  if (redis.get(`jwt:${payload.jti}`)) return res.sendStatus(401);  req.user = payload;  next();  } catch (err) {  res.status(401).json({ error: '令牌无效' });  }  
};  // 令牌吊销端点  
app.post('/logout', (req, res) => {  const jti = req.user.jti; // JWT唯一标识  redis.set(`jwt:${jti}`, 'revoked', 'EX', 3600); // 吊销1小时  res.sendStatus(204);  
});  

明日秘境:《前端加密の奇门遁甲——HTTPS/数据加密实战》 🧪
(留言告诉我你遇到过的认证漏洞,本安全顾问为你定制防御结界!🔒)


🛎️ 本日避坑指南

  1. JWT 十大危险操作
- 🚨 敏感数据存储于Payload  
- 🚨 使用对称加密且密钥泄露  
- 🚨 未设置合理的exp过期时间  
- 🚨 接受任意签名算法  
- 🚨 未处理令牌吊销场景  
  1. OAuth2 安全红线
- 🚨 使用隐式授权(Implicit Flow)  
- 🚨 允许任意redirect_uri  
- 🚨 未校验response_type参数  
- 🚨 客户端密钥明文存储  
- 🚨 未使用PKCE增强移动端安全  
  1. 安全头配置强化
# OAuth2 端点额外防护  
add_header X-Content-Type-Options "nosniff" always;  
add_header Cache-Control "no-store" always;  
add_header Pragma "no-cache" always;  
  1. 渗透测试工具
# JWT 攻击工具  
https://github.com/ticarpi/jwt_tool  # OAuth2 测试套件  
https://github.com/oauth2-proxy/oauth2-proxy  

🔮 安全工具速递

工具用途
jwt.ioJWT 在线调试工具
OpenSSL密钥对生成与管理
PostmanOAuth2 流程测试
Keycloak开源认证服务器
OWASP ZAP自动化安全扫描

http://www.ppmy.cn/news/1580664.html

相关文章

idea2024创建maven web项目

1、file->new->project->MavenArchetype&#xff0c;在右侧“Archetype”处选择 “org.apache.maven.archetypes:maven-archetype-webapp”&#xff0c;点击“create”创建项目。 2、配置tomcat&#xff0c;如下图所示&#xff1a; 设置上下文路径后&#xff0…

三分钟掌握视频分辨率修改 | 在 Rust 中优雅地使用 FFmpeg

前言 在视频处理领域&#xff0c;调整视频分辨率是一个绕不过去的需求。比如&#xff0c;你可能需要将一段视频适配到手机、平板或大屏电视上&#xff0c;或者为了节省存储空间和网络带宽而压缩视频尺寸。然而&#xff0c;传统的FFmpeg命令行工具虽然功能强大&#xff0c;但复…

轻量级模块化前端框架:快速构建强大的Web界面

轻量级模块化前端框架&#xff1a;快速构建强大的Web界面 在当今快节奏的Web开发环境中&#xff0c;选择一个高效且灵活的前端框架至关重要。UIkit 是一个轻量级的模块化前端框架&#xff0c;旨在帮助开发者快速构建功能强大且响应迅速的Web界面。 UIkit提供了丰富的组件和工…

Redis——事务实现以及应用场景

本文介绍Redis事务相关的原理以及知识点&#xff0c;从redis的常用命令出发&#xff0c;深入理解redis在日常工作中的实际场景使用用法。 本文目录 一、Redis事务简介二、事务相关命令三、事务应用场景 一、Redis事务简介 Redis 事务本质上是一个命令队列。用户可以使用MULTI命…

Sequential Thinking:AI时代的“项目管理革命“——重新定义人类与AI的协作范式

一、从"混沌指令"到"结构化智慧"的跨越 2025年2月&#xff0c;GitHub Copilot Labs发布的最新数据显示&#xff0c;使用Sequential Thinking工具的开发者团队&#xff0c;项目延期率下降67%&#xff0c;需求变更响应速度提升3.2倍。这场悄然发生的效率革命…

TimeGAN:开启时间序列生成新纪元,结合GAN与自回归模型的优势

今天周末&#xff0c;给大家介绍一篇时序数据生成网络TimeGAN&#xff0c;一种用于时间序列生成的新框架&#xff0c;它将无监督GAN方法的多功能性与有监督自回归模型对条件时间动态的控制相结合。通过利用有监督损失和联合训练的嵌入网络&#xff0c;TimeGAN在生成逼真的时间序…

算法刷题记录——LeetCode篇(2) [第101~200题](持续更新)

(优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注) 101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&am…

10、基于osg引擎生成热力图高度图实现3D热力图可视化、3D热力图实时更新(带过渡效果)

1、结果 2、完整C代码 #include <sstream> #include <iomanip> #include <iostream> #include <vector> #include <random> #include <cmath> #include <functional> #include <osgViewer/viewer> #include <osgDB/Read…