csrf攻击 java_Web常见攻击手段-CSRF攻击

article/2025/9/26 14:12:17

什么是CSRF攻击?

跨站请求伪造(Cross-Site Request Forgery, CSRF),恶意网站通过脚本向当前用户浏览器打开的其它页面的 URL 发起恶意请求,由于同一浏览器进程下 Cookie 可见性,导致用户身份被盗用,完成恶意网站脚本中指定的操作。

尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。

你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号。

CSRF攻击原理

CSRF的攻击原理如下图所示。

203d124e8724a5eccaf2e14ae9172996.png

首先用户C浏览并登录了受信任站点A;

登录信息验证通过以后,站点A会在返回给浏览器的信息中带上已登录的cookie,cookie信息会在浏览器端保存一定时间(根据服务端设置而定);

完成这一步以后,用户在没有登出(清除站点A的cookie)站点A的情况下,访问恶意站点B;

这时恶意站点 B的某个页面向站点A发起请求,而这个请求会带上浏览器端所保存的站点A的cookie;

站点A根据请求所带的cookie,判断此请求为用户C所发送的。

因此,站点A会报据用户C的权限来处理恶意站点B所发起的请求,而这个请求可能以用户C的身份发送 邮件、短信、消息,以及进行转账支付等操作,这样恶意站点B就达到了伪造用户C请求站点 A的目的。

「受害者只需要做下面两件事情,攻击者就能够完成CSRF攻击:」

登录受信任站点 A,并在本地生成cookie;

在不登出站点A(清除站点A的cookie)的情况下,访问恶意站点B。

很多情况下所谓的恶意站点,很有可能是一个存在其他漏洞(如XSS)的受信任且被很多人访问的站点,这样,普通用户可能在不知不觉中便成为了受害者。

CSRF防御

尽量使用POST,限制GET

GET接口太容易被拿来做CSRF攻击,看第一个示例就知道,只要构造一个img标签,而img标签又是不能过滤的数据。接口最好限制为POST使用,GET则无效,降低攻击风险。

当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。

浏览器Cookie策略

IE6、7、8、Safari会默认拦截第三方本地Cookie(Third-party Cookie)的发送。但是Firefox2、3、Opera、Chrome、Android等不会拦截,所以通过浏览器Cookie策略来防御CSRF攻击不靠谱,只能说是降低了风险。

PS:Cookie分为两种,Session Cookie(在浏览器关闭后,就会失效,保存到内存里),Third-party Cookie(即只有到了Exprie时间后才会失效的Cookie,这种Cookie会保存到本地)。

PS:另外如果网站返回HTTP头包含P3P Header,那么将允许浏览器发送第三方Cookie。

加验证码

验证码,强制用户必须与应用进行交互,才能完成最终请求。在通常情况下,验证码能很好遏制CSRF攻击。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。

Referer Check

Referer Check在Web最常见的应用就是“防止图片盗链”。同理,Referer Check也可以被用于检查请求是否来自合法的“源”(Referer值是否是指定页面,或者网站的域),如果都不是,那么就极可能是CSRF攻击。

但是因为服务器并不是什么时候都能取到Referer,所以也无法作为CSRF防御的主要手段。但是用Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。

Anti CSRF Token

现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。

用户访问某个表单页面。

服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。

在页面表单附带上Token参数。

用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。

这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

注意

CSRF的Token仅仅用于对抗CSRF攻击。当网站同时存在XSS漏洞时候,那这个方案也是空谈。所以XSS带来的问题,应该使用XSS的防御方案予以解决。

源于:https://my.oschina.net/lienson/blog/3051760

2c3f6e62e51abf7e6d669ae2e1e89539.png


http://chatgpt.dhexx.cn/article/CqODMNbO.shtml

相关文章

什么是CSRF攻击?

什么是 CSRF 攻击? CSRF 概念:CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利 用。 尽…

【Web 安全】CSRF 攻击详解

文章目录 一、CSRF 简介二、CSRF 原理三、CSRF 的危害四、CSRF 的攻击类型1. GET型2. POST型 五、CSRF 的防御1. 验证 HTTP Referer 字段2. 在请求地址中添加 token 并验证3. 在 HTTP 头中自定义属性并验证 六、WAF 防御 CSRF参考链接 一、CSRF 简介 CSRF(Cross Si…

如何强制卸载软件,强制卸载的工具。

日常使用电脑过程中经常会遇到一些流氓捆绑软件,今天我们教大家如何轻松的强制卸载流氓软件。非常小巧而且强大的一款强制卸载工具,干净清爽。 工具/原料 Geek Uninstaller 方法/步骤 首先我们下载工具,百度输入geek点击搜索,如下…

HTML文件命名_没有删不掉的文件:强制终止、一键解锁,样样精通

微信搜一搜 麦克NO1 日常在使用电脑的时候,经常会遇到这样一个问题:想要删除某文件夹里的文件是,系统弹出:该文件无法删除、被系统占用等。那么,一旦遇到该问题该如何应对呢?以后不再担心,接下来…

使用管理员权限强制删除文件夹

1、鼠标右键要删除的文件,选择属性,如图所示:2、在界面中,切换到安全选项,点击编辑按钮,如图所示: 3、在窗口中,点击添加,接着在界面中输入对象名称来选择里面输入Admin…

强制删除鲁大师所有文件

方法一:“操作无法完成 文件已在windows文件资源管理器中打开”评论最多的解决办法 当出现拒绝访问的情况,可用方法二 方法二:Windows 10下删除鲁大师卸载后的残留文件夹 1.按住WinR,出现运行对话框,输入regedit&am…

win10 强制删除文件夹

在win10下编译代码时,发现无法通过delete删除build文件夹,提示需要用户权限,参考该教程,可以利用命令行进行删除。 在资源管理器中打开power shell 显示的powershell如下: 删除指定的文件夹或文件

Android 单元测试 一

最近在看软件TDD方面的知识,联想到android也有单元测试,所以就打算实践下,至于为啥要做单元测试,单元测试有那些好处,看官请移步 度娘和google。现在就记录下单元测试第一弹。我用的AS,AS在我们新建一个pro…

Docker版Jenkins持续集成环境部署

前提: 1、已配置java环境 2、已配置maven环境 3、已安装tomcat 一、Jenkins安装 1. jenkins部署 1.1 命令行启动方式 java -jar jenkins.war --httpPort80811.2 Tomcat 部署方式 将下载的jenkins.war包放到apache-tomcat-9.0.30/webapps目录下如果启动不想带ht…

java做简单的unitTest

一、单元测试准备 引入junit和mockito包 单元测试主要注解: SpringBoot RunWith 测试运行器 Before 在测试方法之前运行 Test 测试方法 After 测试方法之后运行 InjectMocks 待测试类 Mock 测试中需要使用到的类(模拟类) Spy 测试中需要使用到的类(真实类) 单元测…

网络编程懒人入门(一):快速理解网络通信协议(上篇)

1、写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统,很多时候连基本的网络编程理论(如网络协议等)都不了解,就贸然定方案、写代码,显得非常盲目且充满技术风险。 即时通讯网论坛里精心整理了《[通俗…

python入门之网络编程Scoket

1、网络编程基础: Sockets(套接字)可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器。Socket主要是使用IP地址,协议&#xf…

CS编程入门篇

CS编程入门 第一部分:JavaScript、NodeJs CSS HTML1.1 前端1.2 网络 第二部分:Python第三部分:Java3.1 面对过程POP(性能)、面对对象OOP(类、对象 封装、继承、多态)、面向切面AOP 第四部分&a…

Python快速编程入门课后习题答案

文章目录 前言第一章一、填空题二、判断题三、选择题四、简答题 第二章一、填空题二、判断题三、选择题四、简答题 第三章一、填空题二、判断题三、选择题四、简答题 第四章一、单选题二、判断题三、填空题四、程序分析题 第五章一、选择题二、判断题三、填空题四、简答题五、程…

编程入门

这篇文章是特地为对编程有兴趣的同学特意准备的,非战斗人员请速速撤离。 0.选择一门编程语言 选择语言的话不需要纠结太多(但是不推荐易语言之流:),因为编程语言都是大同小异。并且在你精通一门语言之后再去学另一种编程语言时,你会发现卧槽要死要死,这么简单。 如果你…

Windows网络编程入门:简单的客户端和服务器通信程序调试

昨日入手Windows网络编程经络这本书,第一章给了Echo客户端和服务器的简单通信实例程序。从小白到入门目测都是比较苦逼,居然想不到怎么来测试结果。什么同时运行啊、分别编译运行啊乱七八糟的想法就开始冒。最后还是解决了。 1.运行“服务器.exe”文件 …

编程算法同步入门

课程内容 开篇词 | 为什么我们要学习编程? 为什么需要学习编程? 如今,学习编程的人分为两类,一类是程序员,另一类是期望成为程序员的人。 编程这个事儿,在大多数人眼中还是一种特定领域的、专门的技能,认为学的人都是需要以此谋生的。 其实,作为一个“码龄”超过2…

编程入门硬件部分

01 概述 02 计算机硬件 冯 诺依曼体系结构 每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲。时钟速度越快,在给 定的时间段内执行的指令就越多。速度的计量单位是 赫兹 ( 1Hz 相当于每秒 1 个脉 冲 。 随着 CPU 速度不断提高,目前…

C# Socket网络编程入门(服务器与客户端通信,客户端与客户端通信)

WebSocket全双工通讯链接,用于前台和后台自由发送信息 一.效果展示: 效果描述: 1.服务器充当管理员,给所有人发送信息,除服务器以外其他人都能接受到。 2.其他用户发送信息除自己以外其他用户和管理员全能接受到。 …

TCP/IP网络编程 学习笔记_1 --网络编程入门

前言:这个系列网络编程教程实例代码是在Xcode上运行的,MacOSX,是一个基于UNIX核心的系统,所以基于Linux的网络编程代码一般可以直接在Xcode上运行,如果要移植到Windows其实就只需要稍微改下,本章下面有讲Wi…