CSRF Token 验证模拟器 - 理解防护流程
模拟服务端生成与校验CSRF令牌的完整过程,展示隐藏在表单与Session中的同步模式。
UD5工具箱
跨站请求伪造(CSRF)防护演示 — 生成令牌、模拟合法请求与伪造攻击
关键点:浏览器自动附带目标域的Cookie,攻击者利用这一点在用户不知情的情况下发起恶意请求。CSRF令牌在请求中增加了一个攻击者无法获取的随机值,从而阻断攻击。
尚未生成令牌,点击上方按钮生成 CSRF 令牌。
假设用户已登录 bank.example.com,下方分别模拟合法请求(携带有效CSRF令牌)和伪造请求(令牌缺失或无效)。
表单中嵌入了有效的CSRF令牌,服务器验证通过。
攻击者构造的表单,令牌缺失或被篡改。
暂无请求记录,提交请求后在此查看。
跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种Web安全漏洞,攻击者诱导用户在已认证的Web应用中执行非预期的操作。
核心原理:浏览器在向某个域名发送请求时,会自动附带该域名的Cookie(包括会话Cookie)。攻击者利用这一点,在用户访问恶意网站时,通过隐藏表单或自动提交的请求,以用户的身份向目标网站发起恶意操作(如转账、修改密码、删除数据等),而用户完全不知情。
典型场景:用户登录银行网站 → 未退出 → 访问了恶意网站 → 恶意网站自动向银行发起转账请求 → 浏览器自动附带银行Cookie → 银行误以为是用户本人操作。
CSRF令牌防护采用同步器令牌模式(Synchronizer Token Pattern):
<input type="hidden">)或HTTP头(如X-CSRF-Token)发送给客户端。为什么有效?攻击者无法读取目标域的Cookie或隐藏字段(同源策略),因此无法获取有效的CSRF令牌,构造的伪造请求将被服务器拒绝。
安全令牌应满足以下要求:
crypto.getRandomValues()),长度至少128位(16字节)。本工具使用 crypto.getRandomValues() 生成256位随机令牌,编码为Base64URL格式,确保安全性和URL兼容性。
两者是不同类型的Web安全漏洞:
| 对比维度 | CSRF | XSS |
|---|---|---|
| 攻击目标 | 利用用户已认证身份执行操作 | 在用户浏览器中执行恶意脚本 |
| 攻击方式 | 跨站伪造请求 | 注入恶意代码 |
| 依赖条件 | 用户已登录目标站点 | 网站存在输入输出漏洞 |
| 防护手段 | CSRF令牌、SameSite Cookie | 输入过滤、输出编码、CSP |
| 影响范围 | 仅限目标站点的操作 | 可窃取数据、劫持会话等 |
注意:如果存在XSS漏洞,CSRF令牌防护也可能被绕过(攻击者可通过XSS读取令牌),因此两者防护都需要做好。
SameSite是Cookie的一个属性,可以限制Cookie在跨站请求中的发送:
SameSite=Strict:完全禁止跨站发送Cookie,防护最严格。SameSite=Lax:允许导航(GET)跨站发送,禁止POST等跨站发送,是Chrome的默认值。SameSite=None:允许跨站发送(需配合Secure标志)。能完全替代吗?部分场景可以,但建议双重防护:
本工具主要演示CSRF令牌机制,实际项目中建议结合SameSite属性使用。
常见方式有几种:
X-CSRF-Token,服务器从请求头读取验证。现代前端框架(如React、Vue)通常会在初始化时从页面读取CSRF令牌,并自动添加到每个AJAX请求的头部。后端框架(如Laravel、Django、Spring Security)都提供了内置的CSRF保护机制。
推荐的多层防护策略:
SameSite=Lax或SameSite=Strict。记住:安全是分层的,不要依赖单一防护措施。
模拟服务端生成与校验CSRF令牌的完整过程,展示隐藏在表单与Session中的同步模式。
使用CTAP2模拟器或安全密钥在浏览器中体验无密码注册与认证流程。
模拟跨站请求伪造攻击以及如何通过CSRF Token进行防护的流程演示。
自定义头像、姓名、部门等信息,生成虚拟员工ID卡,适合团队活动或内部展示。
设置复杂度规则(长度、字符类型、字典排除),测试密码是否满足自定义安全策略。
从内置题库中随机组合个性化安全问题,用于账户恢复或身份验证设置。
生成完整假身份信息:人名、地址、电话、邮箱、公司等,用于表单填充测试与隐私演示。
粘贴SSH公钥,生成对应的OpenSSH randomart视觉指纹图和指纹字符串。
上传或粘贴证书签名请求(CSR)或公开证书内容,提取CN, SAN, 有效期等。
构建一个虚拟的登录窗,演示SQL注入登录绕过,并展示参数化查询如何防范。
生成包含街道、城市、邮编的合理格式虚假国际地址,用于原型测试。
生成简单数字或字母验证码图片,带干扰线和噪点,适合前端原型测试,不依赖服务端。
逐步演示OAuth 2.0授权码流程或PKCE流程,展示参数跳转和Token交换。
生成可用于谍报密码游戏的5x5单词网格,支持自定义主题词库。
结构化编辑颜色、间距、字体等设计令牌,一键导出为CSS自定义属性、SCSS变量或JSON。
说出特定指令来操控虚拟卡牌出牌或触发效果,体验语音交互娱乐。
在线随机密码生成工具,可自定义密码长度、字符类型(大小写、数字、符号),生成高强度的随机密码。
图形化配置Content-Security-Policy指令,生成安全策略头,防御XSS和代码注入。
输入若干IP地址或CIDR,生成格式化的防火墙白名单配置片段。
拖拽滑块改变CIDR后缀,直观显示划分出的子网范围、主机数和广播地址。
通过公共API获取指定域名的证书信息,展示颁发者、有效期及SAN。
定义JSON Schema结构,自动填充符合类型与格式的随机数据,支持导出大文件用于压力测试。
生成一次性恢复码,排列成卡片样式可打印保存,用于账号恢复。
粘贴Base64编码的PEM证书,解码并显示颁发者、有效期、公钥算法与指纹等信息。
上传名片图片,前端模拟解析姓名、电话、公司字段,演示视觉识别流程(模拟数据)。
尝试输入各种编码和混淆的 XSS 向量,检查是否被过滤或执行(沙盒环境)。
生成与明文等长的真随机密钥,并演示异或加密解密的一次性密码本原理。
生成随机的姓名、邮箱、地址、电话等用户信息,支持自定义字段和批量输出JSON数组,用于测试填充。
虚拟掷5次骰子,根据官方Diceware词表生成强随机且易记忆的通行短语。
通过PBKDF2算法将弱密码转为加密级密钥,可设定盐和迭代次数,用于密钥管理演示。