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

🔐 今日秘术: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.rhkb.cn/news/36680.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA的常用设置与工具集成

简介 IDEA是捷克JetBrains公司推出的一款Java集成开发环境&#xff0c;在业内被公认为最好的Java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、Junit、CVS整合、代码审查、创新的GUI设计等方面的功能可以说是超强的。 官网&#xff1a;ht…

Golang | 每日一练 (6)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Golang | 每日一练 (6)题目参考答案什么是内存逃逸&am…

Qt窗口控件之颜色对话框QColorDialog

颜色对话框QColorDialog QColorDialog 是 Qt 内置的颜色对话框&#xff0c;它允许用户选择一个颜色&#xff0c;并通过接口获取颜色的值&#xff0c;进行进一步设置。 获取QColorDialog颜色 QColorDialog 可以使用堆创建&#xff0c;挂载对象树的方式。但它更适合使用它的静…

Windows Docker 报错: has no HTTPS proxy,换源

pull python 3.7报错&#xff1a; 尝试拉取Docker 测试库hello world也失败 尝试使用临时镜像源&#xff0c;可以成功拉取&#xff1a; sudo docker pull docker.m.daocloud.io/hello-world说明确实是网络问题&#xff0c;需要配置镜像源&#xff0c;为了方便&#xff0c;在d…

Unity Shader 学习16:全局光照 概念理解

- 全局光照 直接光 间接光&#xff0c;在没有开启GI的情况下是不计算间接光的&#xff08;如果放了光照探针 倒是可以模拟间接光 <光照探针只影响动态物体>&#xff09;&#xff1b; - 处理对象&#xff1a;静态物体(static) 、 非静态(动态)物体&#xff1b; - 计算方…

【蓝桥杯python研究生组备赛】005 数学与简单DP

题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…

吴恩达机器学习笔记复盘(六)梯度下降算法

简介 梯度下降&#xff08;Gradient Descent&#xff09;是一种常用的优化算法&#xff0c;广泛应用于机器学习、深度学习等领域&#xff0c;在这里是用于求J&#xff08;w,b&#xff09;局部最小值。 我自己觉得这样说有点过于抽象。换个直观点的说法就是&#xff0c;一个人…

【Golang那些事】go1.22和1.23 更新重点及测评

好久没有写文章了&#xff0c;攒了一年的Golang版本特性的技术点以及踩过的坑&#xff0c;那就在新年第一篇的文章中做一个总结吧&#xff1a; 一、关于迭代器 (一)迭代器去掉了共享共享内存 一个经典的面试题 说到Golang经典的面试题&#xff0c;大家可能都刷到过很多&…

【css酷炫效果】纯CSS实现照片堆叠效果

【css酷炫效果】纯CSS实现照片堆叠效果 缘创作背景html结构css样式完整代码基础版进阶版(增加鼠标悬停查看) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492022 缘 创作随缘&#xff0c;不定时更新。 创…

labview与西门子1500plc进行S7通讯(仿真效果)

环境&#xff1a; 1.博图V16 2.S7-PLCSIM Advanced V3.0 3.labview2020 4.HslCommunication的dll文件 运行效果图 通过使用HslCommunication的库文件来对西门子plc进行通讯 labview代码 代码打包 通过网盘分享的文件&#xff1a;labview进行s7通讯测试.rar 链接: https:/…

[蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间&#xff0c;即它最早可以于 T i T_{i} Ti​ 时刻…

实验1:Vue基础实验

Web前端开发技术实验报告 实验1&#xff1a;Vue基础实验 一、实验目的&#xff1a; 掌握Vue实例的创建方法理解并初步掌握Vue实例的生命周期及钩子函数的使用掌握计算属性与侦听器使用方法 二、实验要求&#xff1a; 掌握Vue的基本语法及使用。编写程序并调试&#xff0c;完…

Spring Cloud 服务监控 - Sleuth + Zipkin 全链路追踪实战

一、为何需要全链路追踪&#xff1f; 在微服务架构中&#xff0c;用户请求通常涉及多个服务的交互&#xff08;如订单→支付→库存&#xff09;。这使得性能瓶颈和故障排查变得更加复杂。传统的日志分析面临两大核心挑战&#xff1a; • 性能瓶颈模糊&#xff1a;当响应延迟增…

数据类设计_图片类设计之6_矩阵图形类设计(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论矩阵图形类设计 方法论-现在能做什么 这段属于聊天内容---有句话是这么说的&#xff1a;不要只埋头拉车&#xff0c;还要抬头看路。写代码也是…

OpenCV图像拼接(1)概述

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此图说明了在Stitcher类中实现的拼接模块流程。使用该类&#xff0c;可以配置/移除某些步骤&#xff0c;即根据特定需求调整拼接流程。流程中的所…

【开原宝藏】30天学会CSS - DAY1 第一课

下面提供一个由浅入深、按步骤拆解的示例教程&#xff0c;让你能从零开始&#xff0c;逐步理解并实现带有旋转及悬停动画的社交图标效果。为了更简单明了&#xff0c;以下示例仅创建四个图标&#xff08;Facebook、Twitter、Google、LinkedIn&#xff09;&#xff0c;并在每一步…

【pytest框架源码分析五】pytest插件的注册流程

前文介绍到pytest整体是运用插件来实现其运行流程的。这里仔细介绍下具体过程。 首先进入main方法 def main(args: list[str] | os.PathLike[str] | None None,plugins: Sequence[str | _PluggyPlugin] | None None, ) -> int | ExitCode:"""Perform an i…

谷歌or-tools开源库入门

1.命令行编译程序 这里要说明下&#xff0c;直接用qt或者VS2022打开cmake工程&#xff0c;编译没有成功。所以&#xff0c;老老实实的按照官方教程来&#xff0c;使用命令行编译。 &#xff08;1&#xff09;准备 1&#xff09;安装cmake&#xff0c;版本3.18以上&#xff0…

Python实现WYY音乐下载

一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…

拥抱健康生活,开启养生之旅

在快节奏的现代生活中&#xff0c;健康养生愈发重要&#xff0c;它不仅能让我们保持良好状态&#xff0c;更是享受美好生活的基石。​ 饮食养生是健康的关键。我们应秉持均衡原则&#xff0c;一日三餐合理搭配。多摄入新鲜蔬果&#xff0c;它们富含维生素、矿物质与膳食纤维&a…