【红宝书笔记】跨站点请求伪造CSRF

Web安全基石:XSS与CSRF攻击原理与纵深防御策略全解析 在Web应用开发中,跨站脚本攻击(XSS)和跨站请求伪造(CSRF)是两类最常见且危害巨大的安全威胁。XSS的本质是攻击者将恶意脚本注入到网页中,利用浏览器对内容的信任执行非法操作,其核心在于网站未能对用户输入进行充分过滤与转义。CSRF则利用浏览器自动携带用户凭证的机制,诱骗已登录用户发起非本意的请求,其漏洞根源在于服务器仅验证身份而未验证请求意图。从技术价值看,理解并防御这两类攻击是构建可信Web应用的基石,能有效防止数据泄露、资金损失等安全事件。在应用场景上,无论是电商、社交还是金融平台,都需要系统性 阅读详情

CSRF全名Cross SIte Request Forgery,跨站点请求伪造。

1.简介(通过例子)

比如要删除一篇搜狐博客,登录Sohu博客后,只需要请求以下URL,就能把编号为“156714243”的博客删除

http://blog.sohu.com/manage/entry.do?m=delete&id=156714243

如果这个URL存在CSRF漏洞,我们就可以通过以下方法删除

  1. 攻击者在自己的域中构造一个页面:
    http://www.a.com/csrf.html
    
    内容为
    <img src="http://blog.sohu.com/manage/entry.do?m=delete&id=156714243" />
    
  2. 诱使目标用户(博客主)访问这个网页
  3. 打开网页只看到一张看不见的图片,同时博客已经被删除了

原因是因为在访问该网页时,图片标签<img>向搜狐服务器发送了一次GET请求,导致文章被删除。


2.CSRF进阶

2.1 浏览器的Cookie策略

2.2 P3P头的副作用

2.3 GET?POST?

在CSRF流行之初,有这样一个错误观点:

∵ 大多数CSRF攻击发起时,使用的HTML标签是<img>、<iframe>、<script>等带 “src” 属性的标签,这类标签只能发起一次 GET 请求,而不能发起 POST 请求。
∴ CSRF攻击只能有GET请求发起,只要把重要的操作改成只允许POST请求,就能防止CSRF攻击。

然而很多网站一些重要操作并未严格区分 GET 与 POST,攻击者可以使用 GET 来请求表单的提交地址。比如在PHP中,如果使用的是$_REQUEST, 而非$_POST获取变量,则会存在这个问题。

对于一个表单来说,用户往往也可以使用GET方式提交参数,比如对于这个表单:

<form action="/register" id="register" method="post" >
	<input type=text name="username" value="" />
	<input type=password name="password" value="" />
	<input type=submit name="submit" value="submit" />
</form>

用户可以构造一个GET请求来提交表单,如果服务端未对请求方法做限定,请求会通过:

http://host/register?username=test&password=passwd

如果服务器已经区分了GET 与 POST,对于攻击者来说,有若干个方法可以构造出一个POST请求。

最简单的方法,就是在一个页面中构造一个form表单,然后使用JavaScript自动提交这个表单。比如,攻击者在www.b.com/test.html中编写如下代码:

<form action="http://www.a.com/register" id="register" method="post" >
	<input type=text name="username" value="" />
	<input type=password name="password" value="" />
	<input type=submit name="submit" value="submit" />
</form>
<script>
	var f = document.getElementById("register");
	f.inputs[0].value = "test";
	f.inputs[1].value = "passwd";
	f.submit();
</script>

案例:2007年的Gmail CSRF漏洞攻击 from pdp。

2.4 Flash CSRF

除了URLRequest以外,Flash还可以使用getURL,loadVars等方式发起请求。
但是从IE8起,Flash发起的网络请求已经不再发送本地Cookie了。

2.5 CSRF Worm

案例:2008年,80sec公布的百度CSRF Worm。


3 CSRF防御

3.1 验证码

最简洁而有效的防御方法
CSRF往往是在用户不知情的情况下构造网络请求,而验证码强制用户必须通过交互才能进行最终请求。
但是出于用户体验考虑,不可能所有操作都用上验证码。

3.2 Referer Check

如:“论坛发帖”的操作,在正常情况下需要先登录到用户后台,或者访问有发帖功能的页面。在提交“发帖”的表单时,Referer的值必然是发帖表单所在的页面。如果Referer的值不是这个页面,甚至不是发帖网站的域,则极有可能是CSRF攻击。

缺陷:服务器并非什么时候都能取到Referer。很多用户出于隐私保护的考虑,限制了Referer的发送。在某些情况下,浏览器也不会发送Referer,比如从HTTPS跳转到HTTP,出于安全的考虑,浏览器也不会发送Referer。

虽然不能依赖于Referer Check 作为防御CSRF的主要手段,但通过Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。

3.3 Anti CSRF Token

3.3.1 CSRF本质

CSRF为什么能够攻击成功?其本质原因是重要操作的所有参数都是可以被攻击者猜测到的。
攻击者只能预测出URL的所有参数与参数值,才能成功构造一个伪造的请求;反之,攻击者将无法攻击成功。

所以,可以想到一个解决方案:把参数加密,或者使用一些随机数,从而让攻击者无法猜测到参数值。这是”不可预测性原则“的一种应用。
比如,一个删除操作的URL是:

http://host/path/delete?username=abc&item=123 

把其中的username参数改成哈希值:

http://host/path/delete?username=md5(salt+abc)&item=123

这样一来,攻击者在不知道salt的情况下,无法构造URL。而对于服务器来说可以从Session或者Cookie中取得username=abc,再结合salt对整个请求进行验证,正常请求会被认为是合法的。

这一解决方案的问题:

  • 加密后的URL会变得非常难读,影响用户体验
  • 加密的参数每次都变,用户无法收藏URL
  • 普通的参数如果也被加密或者哈希,将会给数据分析工作带来很大的困扰

所以我们需要使用更加通用的方法来解决,这就是Anti CSRF Token。

回到上面的URL,我们保持参数不变,新增一个参数Token,这个Token的值是随机的,不可预测:

http://host/path/delete?username=abc&item=123&token=[random(seed)]
  • Token必须足够随机,必须使用足够安全的随机数生成算法,或者采用真随机数生成器(物理随机)。

  • Token为用户和服务器共同持有,不能被第三者知晓。在实际应用时,Token可以放在用户的Session中,或者浏览器的Cookie中。

由于Token的存在,攻击者无法构造出完整的URL来发起CSRF攻击

用户提交请求时,服务器只需要验证:表单中的Token ?= 用户Session(or Cookie)中的Token。如果不一致,或者一个为空,则可能存在CSRF攻击。

3.3.2 Token的使用原则

Anti CSRF Token使用时有若干注意事项:

  • Token足够随机
  • 此Token的目的不是为了防止重复提交。所以为了使用方便,可以允许在一个用户的有效生命周期内,在Token消耗掉前都使用同一个Token。但是如果用户已经提交了表单,则这个Token已经消耗掉,应该再次重新生成一个新的Token。
  • 如果Token保存在Cookie中,而不是服务器端的Session中,则会带来一个新的问题。如果一个用户打开几个相同的页面同时操作,当某个页面消耗掉Token后,其他页面的表单内保存的还是被消耗掉的那个Token,因此其他页面的表单再次提交时,会出现Token错误。在这种情况下,可以考虑生成多个有效的Token,以解决多页面共存的场景。

最后,使用Token时应该注意Token的保密性。Token如果出现在某个页面的URL中,则可能会通过Referer的方式泄露。比如以下页面:

http://host/path/manage?username=abc&token=[random]

这个manage页面是一个用户面板,用户需要在这个页面提交表单或者单击”删除“按钮,才能完成删除操作。
在这种场景下,如果这个页面包含了一张攻击者能指定地址的图片:
<img src="http://evil.com/notexist" />
则"http://host/path/manage?username=abc&token=[random]"会作为HTTP请求的Referer 发送到eveil.com的服务器上,从而导致Token泄露。
因此在使用Token时,应该尽量把Token放在表单中。把敏感操作由GET改为POST,以form表单(或者AJAX)的形式提交,可以避免Token泄露。

此外,还有一些其他的途径可能导致Token泄露。比如XSS漏洞或者一些跨域漏洞,都可能让攻击者窃取到Token的值。
CSRF的Token仅仅用于对抗CSRF攻击,当网站还同时存在XSS漏洞时,这个方案就会变得无效,因为XSS可以模拟客户端浏览器执行任意操作。在XSS攻击下,攻击者完全可以请求页面后,读出页面内容里的Token值,然后再构造出一个合法的请求。这个过程可以称之为XSRF,和CSRF以示区分。

XSS带来的问题,应该使用XSS的防御方案予以解决,否则CSRF的Token防御就是空中楼阁。安全防御的体系是相辅相成、缺一不可的。

《白帽子讲Web安全》深度解读:从SQL注入到安全开发,构建Web安全知识体系 Web安全是保障网络应用机密性、完整性与可用性的核心领域,其本质在于管理信任与控制,解决信息不对称问题。从技术原理层面看,常见漏洞如SQL注入和XSS攻击,均源于用户输入未被妥善处理,导致数据与代码边界模糊。理解并实施参数化查询、输出编码等防御机制,能从根本上提升应用安全性。这些安全技术对于构建可信的在线服务至关重要,广泛应用于电商、金融、社交等各类互联网业务场景。本文以经典安全著作《白帽子讲Web安全》为脉络,系统梳理了从客户端脚本安全到服务器端应用安全的攻防细节,并深入探讨了如何将安全思维融入开发流程与 阅读详情

相关推荐

前端面试核心:JavaScript八股文与工程化实践

JavaScript作为前端开发的核心语言,其类型系统与原型链机制是构建复杂应用的基石。通过typeof和instanceof操作符可以深入理解动态类型语言的运行原理,而原型链则展现了JavaScript独特的继承实现方式。这些基础概念直接影响前端框架选型(Vue/React/Angular)和工程化实践,特别是在模块化开发、构建工具链配置等场景中。现代前端开发更注重性能优化与安全防护,如通过Webpack代码分割提升加载性能,使用CSP策略防御XSS攻击。掌握这些'前端八股文'不仅能应对技术面试,更能系统

weixin_30753873的博客 372

保护您的 ASP.NET 应用程序

在上一期中,我讨论了构建 Web 应用程序安全性的重要性,并介绍了包括 SQL 注入和参数篡改在内的一些攻击类型,以及如何防范这些类型的攻击 (msdn.microsoft.com/magazine/hh580736)。 在本文中,我将深入探讨以下两种更常见的攻击,以帮助完善我们的应用程序保护体系:跨站点脚本 (XSS) 和跨站点请求伪造 (CSRF)。 您可能很想知道: 只使用生产安全扫

Lassewang的成长历程 1460

Web安全攻防实战:从渗透测试入门到内网横向移动

Web安全是网络安全领域的核心,其本质在于理解应用层攻击与防御的原理。从基础的SQL注入、XSS跨站脚本等漏洞原理出发,攻击者通过构造恶意输入,利用应用程序逻辑缺陷,最终可能实现数据窃取或系统控制。掌握这些技术不仅有助于发现系统弱点,更是构建有效防御体系的基础。在实战中,渗透测试工程师遵循标准流程,利用Kali Linux、Metasploit等工具链,从信息收集、漏洞利用逐步深入到权限提升和内网横向移动。其中,内网渗透是评估企业纵深防御能力的关键环节,涉及代理隧道、哈希传递等高级技术。本书《Web安全攻防

weixin_33749131的博客 360

「第四章」跨站点请求伪造(CSRF)

「第四章」跨站点请求伪造(CSRF) 批注 [……] 表示他人、自己、网络批注 参考资料来源于 * 书中批注 * 优快云 * GitHub * Google * 维基百科 * YouTube * MDN Web Docs ...

hacckjacking 592

前端面试高频八股文:Vite脚手架、HTTP缓存与XSS实战解析

前端工程化与网络安全是每一位前端开发者绕不开的核心技能。从脚手架搭建的底层原理,到HTTP缓存机制的完整决策链路,再到XSS攻击的分类与防御策略,这些知识不仅决定了面试的成败,更直接影响生产环境的性能与安全性。Vite作为新一代构建工具,以其快速冷启动和按需编译特性改变了传统开发体验;HTTP缓存通过强缓存与协商缓存的有效配合,显著提升页面加载效率;而XSS防护则要求开发者深入理解反射型、存储型和DOM型的攻击路径,并掌握输入过滤、输出转义及CSP等防御手段。本文结合真实项目经验与面试实战,系统梳理这些高频

weixin_33889665的博客 427

长期换衣行人重识别(Long-Term Clothes-Changing Person Reid)数据集汇总

长期换衣行人重识别任务中目前常用的数据集总览目前换衣数据集的主要问题数据集换衣/总体情况集统计DeepChange(2021)LaST(2021)COCAS(2020)VC-Clothes(2020)LTCC(2020)PRCC(2019)Celebrities-reID(2019) 总览 在长期换衣行人重识别的任务当中,数据集的获取(尤其是对于学术环境下)是一个难点,主要的困难有以下几点: 采集大规模的数据集比较困难。 采集不同的衣服的数据集比较困难。 采集不同衣服不同角度的数据集比较困难。 目前也有

KingsMan666的博客 8384

前端安全问题——CSRF跨站点请求伪造

CSRF跨站点请求伪造(Cross—Site Request Forgery) 我们可以这样理解: 用户登录,网站A核查身份是否正确,正确就下发cookie,cookie会保存在用户的浏览器中,这就完车了一次身份认证的过程,接下来呢,用户又访问了一个网站B,网站B在给用户返回页面的时候,会携带一个引诱性的点击,这个点击往往是一个链接,这个链接一般就是网站A的API接口。当用户点击了这个链接后,这个...

godming的博客 439

VS Code配置MinGW64编译非线性优化库NLopt

VS Code用MinGW64编译C++代码安装MSYS2软件并配置非线性优化库NLopt和测试引用库代码的完整具体步骤。:若使用非UCRT版本(如传统MinGW64),替换所有路径中的。库文件会自动安装到MSYS2的。

weixin_30777913的博客 903

一个比较好用的CSRF跨站请求伪造工具类

前言描述:最近项目里,安全测试组发现通过SQL注入可以轻松登录后台管理系统,于是就加了个CSRF跨站请求伪造功能,防止被恶意登录。 以下是代码部分: package com.faw.***.common.xss; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; ...

孔方子的博客 770

避坑指南:AUTOSAR FlashDriver操作DFlash模拟EEPROM时,你最容易忽略的5个细节

本文深入探讨了AUTOSAR FlashDriver在DFlash模拟EEPROM操作中最容易被忽视的五大细节问题,包括地址合法性检查、操作时序控制、并发访问冲突、电源稳定性管理和寿命管理。通过实际项目案例和工程化解决方案,帮助开发者避免常见陷阱,提升汽车电子控制单元(ECU)的可靠性和稳定性。

weixin_42741930的博客 247

OKCC呼叫中心部署实战指南:从零搭建高效外呼系统

本文提供OKCC呼叫中心系统的完整部署实战指南,从服务器选型、操作系统准备到详细安装步骤和性能优化,帮助企业从零搭建高效外呼系统。重点介绍FreeSWITCH核心组件的安装配置技巧,以及常见问题排查方法,助力企业提升客户服务效率。

weixin_29275257的博客 164

java 跨站点伪造请求_AppScan漏洞扫描之-跨站点请求伪造

解决方案:增加一个过滤器,当请求头Referer中包含扫描里的http://bogus.referer.hcl.com时,禁止访问/******************************************************************************** @(#)CSRFilter.java 2020/4/7** Copyright 2020 emrubik...

weixin_33458169的博客 792

matlab之作图设置游标的精度

matlab画出的figure游标的精度往往是固定的,这就对我们的调试和查看数据造成了不便。 那么怎么修改游标的精度呢? 首先,获取游标dcm_obj = datacursormode(gcf);然后对游标的精度进行设置:set(dcm_obj,'UpdateFcn',@NewCallback)这个NewCallback是什么东西呢?这是一个可以返回游标精度的函数,具体内容如下:function

落日之城 8959

红宝书第四十九讲:XSS/CSRF攻击防御策略解析

红宝书第四十九讲:XSS CSRF攻击防御策略解析

kovlistudio的博客 873

【ROS2】手眼标定:moveit2_handeye_calib使用详解

moveit2_handeye_calib MoveIt2 官方的 手眼标定功能包,包含标定插件、图形化界面和示例程序。提供基于 ArUco/ChArUco 标定板的采集与求解功能。标定板下载aruco在线生成器。

郭老二 248

【华为OD技术面】 - 考到的Lettcode手撕算法代码真题目录

【华为OD技术面 - 考到的Lettcode手撕算法代码真题目录

算法大师! 7825

阿里面试记录

自我介绍 对前端了解知识,怎么解除前端 js,红宝书,包括什么内容 闭包,为什么会有闭包 样式污染 发布订阅者模式(具体过程):a发送消息给b.c.d 设计模式(列举) 排序算法中最快的是:快排;快排的时间复杂度nlogn,怎么算出来的? 动态规划 前端偶像,做出的前端探索 最有成就感的事,风场粒子,最难的一点在于哪一步 数据库,事务,视图 为什么会有闭包:在js里,函数是一等公民,函数可以..

qq_37820215的博客 236

GD32F4xx 移植agile_modbus软件包与电能表通信

GD32F4XX 移植agile modbus软件包实现与DTSU电能表通信调试记录

madao1234的博客 1306

JS红宝书读书笔记 — 21.Ajax与Comet

21.Ajax与Comet 21.1.XMLHttpRequest对象 创建 var xhr = new XMLHttpRequest(); // IE7+, Firefox等等 21.1.1.XHR的用法 open():启动一个请求以备发送 // 接受三个参数:请求类型,请求URL(相对于执行代码的当前页面或绝对路径),是否异步发送请求 xhr.open("get", "example.php", false); send():发送请求 abort():取消异步请求 收到响应

qq_40503374的博客 246

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【JavaScript安全防护红宝书】:资深架构师亲授10年防护经验

解决JavaScript前端安全难题,系统讲解防护核心策略。涵盖XSS、CSRF等常见攻击的原理与防御,结合真实场景剖析CSP、输入验证、DOM防护等关键技术。十年架构经验总结,实用高效,值得收藏。

VarFlow的博客 695

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

send函数 获得已发送数据长度_新手前端的面经总结(已拿网易offer)

面试面试有电话面试、视频面试、现场面试。电话面试更多地会考察你的知识点、谈谈你过去做过的项目,很少会问你复杂的算法题,即使问了也是让你讲讲思路。视频面试和现场面试就会让你写比较细致的代码了,到时候要仔细考虑边界情况和特别用例。不过我很少见到要求你一定要把代码跑起来的面试官。面试会有自我介绍环节,稍微准备一下就好。我的自我介绍通常就半分钟。面试的时候一定要放松,语速尽可能平缓。遇到不会的知识点请大方...

weixin_39558754的博客 281

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

前端学习路线,从零基础到精通,收藏这篇就够了!

网络安全前端开发,是一条充满挑战但也充满机遇的道路。只要你掌握了正确的学习方法,坚持不懈地学习和实践,相信你一定能够成为一名...合格的渗透测试工程师!希望这篇文章和路线图能为你的学习之旅提供一些帮助。如果你觉得有用,欢迎分享给更多...想入坑的人!

Libra1313的博客 1388

前端学习路线,从零基础到精通,收藏这篇就够了!_前端的学习路径

网络安全前端开发,是一条充满挑战但也充满机遇的道路。只要你掌握了正确的学习方法,坚持不懈地学习和实践,相信你一定能够成为一名…合格的渗透测试工程师!希望这篇文章和路线图能为你的学习之旅提供一些帮助。如果你觉得有用,欢迎分享给更多…想入坑的人!

喜欢Python编程的程序员柚柚呀 2015

CSRF跨站点请求伪造

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF,CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求 例如: 你登陆了一个网站http://blog.sohu.com 然后你又访问了恶意的网站www.abc.com,他构造了一个恶意的请求去

qq_26054303的博客 878

【CSRF01】跨站请求伪造——漏洞基础原理及攻防

1. 理解CSRF的攻击原理; 2. 重点掌握CSRF的三种攻击方式; 3. 了解CSRF的危害; 4. 重点掌握CSRF的防御手段。

Fighting_hawk的博客 5279

安全测试之跨站请求伪造(CSRF)攻击

一、CSRF攻击的概念CSRF(Cross Site Request Forgery, 跨站请求伪造)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作,对用户的安全及网站的安全具有很大的危害性。一、CSRF攻击的原理如下图所示,CSRF攻击的原理比较容易理解,其中Web A是存在CSRF漏洞的网站,Web B是

小太阳~ 7358
上一篇: P3P头的副作用
下一篇: DOM Based XSS
5mack
博客等级 码龄10年 218粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值