前端小食堂 | 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.mzph.cn/web/72800.shtml

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

相关文章

将bin文件烧录到STM32

将bin文件烧录到STM32 CoFlash下载生成hex文件hex2bin使用下载bin到单片机 CoFlash下载 选择需要安装的目录 在Config中可以选择目标芯片的类型 我演示的是 stm32f103c8t6 最小系统板 Adapter&#xff1a;烧录器类型 Max Clock&#xff1a;下载速度 Por&#xff1a;接口类型&am…

【Embedded World 2025:边缘 AI、存储革新与 1X nm 工艺重塑嵌入式未来】

Embedded World 2025于3月11-13日在德国纽伦堡举办&#xff0c;作为全球嵌入式系统领域顶级盛会&#xff0c;汇聚超千家展商与3万专业观众&#xff0c;聚焦嵌入式智能、安全管理及行业解决方案。展会呈现边缘AI、低功耗MCU、5G RedCap、新型存储及车规级技术等前沿方向&#xf…

3.19刷题

P6443 [COCI 2010/2011 #1] TIMSKO - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n,m,k,maxp0;cin>>m>>n>>k;for(int i0;i<n;i){//男生参加人数if(k3*i<mn&&2*i<m) maxpi;}cout<<maxp;return 0; }P645…

Android NDK --- JNI从入门到基础的全面掌握 (上)

引言 先问 jni是什么&#xff1f; jni和ndk 的关系&#xff1f; 答&#xff1a; java调用 C、C 的代码。 两者一个是调用&#xff0c;一个是用c 、c 写 。 这两个问题问出来似乎知道又好像不知道。 正文 jni 概述 定义&#xff1a;java Native Interface 即 java本地接口 …

爬虫 crawler 入门爬取不设防网页 并实现无限增生

基础版本 爬取网页后直接将前端html代码不加处理的输出 # pip3 install requests import requests# request the target URL def crawler():response requests.get("https://www.scrapingcourse.com/ecommerce/")response.raise_for_status()print(response.text)…

C++高频(四)之c++11新特性

C++面试高频(四)之c++11新特性 1.简述C++11有什么新特性?⭐ 自动类型推导(Type Inference):引入了 auto 关键字,允许编译器根据初始化表达式的类型自动推导变量的类型。统一的初始化语法(Uniform Initialization Syntax):引入了用花括号 {} 进行初始化的统一语法,可…

HarmonyOs- UIAbility应用上下文

上下文为何物 上下文在计算机科学领域是一个广泛存在的概念。是现代操作系统核心抽象概念之一。其本质是环境信息的结构化封装。 有过开发经验的都知道&#xff0c;当我们在一个系统上进行开发的时候&#xff0c;无论是Android&#xff0c;HarmonyOs&#xff0c;Linux 等等&a…

Redis解决缓存击穿问题——两种方法

目录 引言 解决办法 互斥锁&#xff08;强一致&#xff0c;性能差&#xff09; 逻辑过期&#xff08;高可用&#xff0c;性能优&#xff09; 设计逻辑过期时间 引言 缓存击穿&#xff1a;给某一个key设置了过期时间&#xff0c;当key过期的时候&#xff0c;恰好这个时间点对…

架构思维:软件建模与架构设计的关键要点

文章目录 1. 软件建模的核心概念2. 七种常用UML图及其应用场景类图时序图组件图部署图用例图状态图活动图 3. 软件设计文档的三阶段结构4. 架构设计的关键实践1. 用例图&#xff1a;核心功能模块2. 部署图&#xff1a;架构演进阶段3. 技术挑战与解决方案4. 关键架构图示例5. 架…

numpy学习笔记14:模拟随机游走过程(一次实验)

numpy学习笔记14&#xff1a;模拟随机游走过程(一次实验) 随机游走是一个对象在离散时间步中的随机移动&#xff0c;每次移动的方向和步长由概率决定。在用户提供的代码中&#xff0c;步长数组steps的每个元素是-1或1&#xff0c;代表向左或向右移动一步。np.random.choice的作…

FPGA-DE2115开发板实现流水灯

文章目录 一、安装VScode&#xff0c;在其中下载安装Verilog-HDL/SystemVerilog插件&#xff1b;&#xff08;1&#xff09;安装VScode&#xff08;2&#xff09;安装插件&#xff08;3&#xff09;与Quartus关联 二、不分模块实现流水灯&#xff08;1&#xff09;新建工程&…

JS逆向案例-HIKVISION-视频监控的前端密码加密分析

免责声明 本文仅为技术研究与渗透测试思路分享,旨在帮助安全从业人员更好地理解相关技术原理和防御措施。任何个人或组织不得利用本文内容从事非法活动或攻击他人系统。 如果任何人因违反法律法规或不当使用本文内容而导致任何法律后果,本文作者概不负责。 请务必遵守法律…

Android 动态代理详解

Android 动态代理方法的原理与关键分析 动态代理是一种在运行时动态生成代理对象并拦截方法调用的技术。它广泛应用于 Android 开发中&#xff0c;例如 AOP&#xff08;面向切面编程&#xff09;、插件化开发、网络请求框架&#xff08;如 Retrofit&#xff09;等场景。 以下…

碰一碰发视频saas系统技术源头一站式开发文档

碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下&#xff0c;如何让视频分享更便捷、高效&#xff0c;成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势&#xff0c;为视频分享领域带来了革命性变革。…

VSCode + CMake

参考文献&#xff1a; 如何用 GCC, CMake 和 Make 编译C/C代码Windows 上的 Linux 子系统&#xff1a;WSLWSL&#xff1a;桌面 UI 远程连接 RDP 配置 VScode 文章目录 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 编写如下的 CmakeLists.t…

yolov5学习及手势识别实战

目录 一、YOLOv5核心原理 1. 单阶段检测范式 2. 关键技术特性 二、YOLOv5网络架构组成 1. Backbone&#xff1a;CSPDarknet53 2. Neck&#xff1a;PANet&#xff08;Path Aggregation Network&#xff09; 3. Head&#xff1a;检测头 三、YOLOv5网络架构细节 1. 整体架…

【视频】H.264的码率和图像质量

1、简述 分辨率、帧率、I帧设置不变的情况下,码率过低时,IP摄像机如果没有足够的带宽来传输高质量的图像,便会抹掉一些细节,导致出现马赛克,尤其是动态性强的画面(比如:运动的云台、非固定的摄像头)。 2、计算码率 1)码率的基础理论公式为: 码率 (bps) = 分辨率像…

VMware-workstation-17.6.3安装教程

1.下载VMware-workstation-17.6.3软件包 2.安装并输入许可码 3.开始使用

[Linux][经验总结]Ubuntu6.11.0 docker更换镜像源(实操可用的正确方法)

一、前言 关于Ubuntu更换docker镜像源&#xff0c;网上有很多的教程&#xff0c;但在实操中发现&#xff0c;更换的源无法生效——原因是我的docker是在系统安装时&#xff0c;选择附加安装的package的方式安装的。 现将处理过程记录如下。 二、获取镜像源 在网上随便找个几…

Element Plus开发实战指南:快速上手Vue 3企业级组件库

Element Plus全栈开发指南&#xff1a;从入门到企业级实战 一、环境搭建与工程配置1.1 项目初始化&#xff08;Windows/Mac通用&#xff09;1.2 配置文件关键代码 二、主题定制与样式管理2.1 SCSS变量覆盖方案2.2 暗黑模式切换 三、核心组件深度实践3.1 智能表格开发&#xff0…