什么是CRSF

构建一个地址,比如说是删除某个博客网站博客的链接,然后诱使已经登录过该网站的用户点击恶意链接,可能会导致用户通过自己的手将曾经发布在该网站的博客在不知情的情况下删除了。这种构建恶意链接,假借受害者的手造成损失的攻击方式就叫CSRF-跨站点请求伪造。

浏览器Cookie策略

cookie分类

cookie根据有无设置过期时间分为两种,没有设置过期时间的为Session Cookie(会话cookie),firefoox有标注哪些cookie是会话cookie,这种cookie保存在内存空间中,在浏览器进程的生命周期中都有效,但是一关闭浏览器就被抹除。另外一种设置过期时间的叫做third-party Cookie,也称之为本地cookie,保存在本地,在过期时间内都可以使用。

CSRF实现原理

一般用户的操作都需要登录以后才能进行,csrf就是利用用户的登录cookie,让用户在自己的恶意网站中向博客网站发送了删除请求。比如让用户点击链接黑客的网站,黑客在网站中加上一个图片链接,该链接实际是向博客网站发送一个删除请求:


恶意网站<html><p>这是黑客诱导客户访问的恶意网站地址</p><img src = "http://csdn.com?delete=10"></html>

要实现这个还需要用到用户登录csdn后的cookie,之前谈同源策略的时候说过,img、iframe之类的标签不受同源策略的影响,所以当向csdn发送请求时,会将csdn相关的cookie都一并提交上去(会提交哪些cookie需要根据cookie作用域来决定),这样csdn验证cookie后误认为是用户在操作,实际上用户是在无意识下删除了自己的文章。

老版的ie,safari是禁止img、iframe标签请求时发送cookie的,但是最新的firefox以及chrome等主流浏览器都是允许的。

对于老版的ie等是允许发送会话cookie的,如果想发送本地cookie,需要在网站返回给浏览器HTTP头中含有P3P,这样下一次访问网站时将允许发送本地cookie。

同源策略是浏览器实现的,只要请求发出浏览器,同源策略和跨域就用不到了!


实践

我在自己博客找到一个get请求(博客点赞请求):

从上图可以看到点赞请求带了一堆cookie验证到后台,现在我写一个新界面,界面里面用img标签跨域访问这个请求(前提是csdn是登录状态,不然拿不到cookie验证);

启动访问本地请求:

上面的本地界面确实因为访问csdn的请求而加载了一些csdn的cookie,其中应该包含了登陆验证的字段,所以对应的这个服务应该成功了,检查下那篇博客确实多了一个点赞。


CSRF的防御

方案一 验证码

强制需要客户进行交互才能操作。跟CSRF在客户不知情的情况下完成攻击的方式相饽

方案二 Referer Check

Referer Check最常见的应用就是防止图片盗链,通过查看请求的来源判断请求是否合理,比如通过攻击者的网站嵌入访问博客的地址,那referer就是攻击者网站的地址,这样很大程度能判断出这是一个CSRF攻击,但是这个方法的缺陷是:服务器并不是每次都能取到Referer信息。

方案三 构造不可预见性URL

CSRF能够攻击成功,其本质原因是请求的URL被攻击者猜到,如果请求的URL具有不可预测性,那么攻击者也就无从下手。现在最通用的方式就是在URL中加入一个token参数。token可以存在用户的cookie中,服务器也存有该客户对应的token值。因为CSRF攻击只是利用登录cookie,并无法获取cookie的具体值(除非用户还被XSS攻击了,导致cookie泄露,那就无济于事了)。

token应该同时放在提交表单中与服务器session中,在有效时间之内,只要服务器session没有被使用(即用户没有提交表单,这个需要服务器提供一个方案判断某个session是否已经被使用过),都使用同一个token,否则需要重新生成token,并保存到表单和session中。

token也应该注意保密性,不应出现在url中,因为这样可以通过referer获取到,一个尽量放在表单中,把敏感的操作由GET改为POST,一form表单或者AJAX的形式提交,可以避免token泄露。

方案四: SameSite Cookie,防止 CSRF 攻击

防止 CSRF 攻击的办法已经有 CSRF token 校验和 Referer 请求头校验。为了从源头上解决这个问题,Google 起草了一份草案来改进 HTTP 协议,那就是为 Set-Cookie 响应头新增 SameSite 属性,它用来标明这个 cookie 是个“同站 cookie”,同站 cookie 只能作为第一方 cookie,不能作为第三方 cookie。SameSite 有两个属性值,分别是 Strict 和 Lax www.cnblogs.com/ziyunfei/p/…

转载于:https://juejin.im/post/5cea535ce51d45778f076c9c

跨站点请求伪造(CSRF)总结和防御相关推荐

  1. 我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

    我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括 ...

  2. 跨站点请求伪造_十大常见web漏洞——跨站点请求伪造(CSRF)

    CSRF介绍 什么是CSRF呢?我们直接看例子. https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829 ...

  3. 一文带你学习跨站点请求伪造(CSRF)

    一文带你学习跨站点请求伪造(CSRF) 1.何为CSRF 2.浏览器的Cookie策略 3.P3P头的副作用 4.CSRF攻击流程 5.CSRF的分类 GET型 POST-表单型 POST-JSON型 ...

  4. Http跨站点请求伪造解决方案

    1.跨站点请求伪造 首先,什么是跨站点请求伪造? 跨站点请求伪造-CSRF(Cross Site Request Forgery):是一种网络攻击方式. 说的白话一点就是,别的站点伪造你的请求,最可怕 ...

  5. security框架工作笔记002---CSRF跨站点请求伪造(Cross—Site Request Forgery)_理解和防御

    JAVA技术交流QQ群:170933152  CSRF概念:CSRF跨站点请求伪造(Cross-Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:   ...

  6. csrf防御 php,跨站请求伪造CSRF的防御实例(PHP版本)

    跨站请求伪造CSRF的防御:One-Time Tokens(不同的表单包含一个不同的伪随机值) 在实现One-Time Tokens时,需要注意一点:就是"并行会话的兼容".如果用 ...

  7. 详解CSRF跨站点请求伪造

    CSRF攻击: CSRF跨站点请求伪造(Cross-Site Request Forgery):大概可以理解为攻击者盗用了你的身份,以你的名义在恶意网站发送恶意请求,对服务器来说这个请求是完全合法的, ...

  8. 安全测试之 CSRF 跨站点请求伪造

    原文由发表于TesterHome社区,点击原文链接可与作者直接交流. ▌CSRF 攻击 CSRF 跨站点请求伪造 (Cross-Site Request Forgery):大概可以理解为攻击者盗用了你 ...

  9. 常见的Web攻击方式:SQL注入、XSS跨站脚本攻击、CSRF跨站点请求伪造

    常见的Web攻击有SQL注入.XSS跨站脚本攻击.跨站点请求伪造共三类,下面分别简单介绍. 1 SQL注入 1.1 原理 SQL注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字 ...

最新文章

  1. unity的自带特性
  2. 对 SAP UI5 应用使用 uiveri5 执行测试的 ERR_CONNECTION_REFUSED 错误
  3. uni开发中可以用table标签么_「uni-app 组件」t-table 表格
  4. flash和js通讯的伪沙箱安全错误
  5. 深入解析浅复制和深复制
  6. Graph Embedding及其在知乎的实践(附pdf下载链接)
  7. 服务器网卡的Teaming技术
  8. 罗技G304等鼠标GHUB驱动配置
  9. mysql调查问卷数据库设计_客服-问卷调查-问题答案表 - 数据库设计 - 数据库表结构 - 果创云...
  10. mongodb-b站黑马程序员
  11. 【已解决】The server cannot or will not process the request due to something that is perceived to be ...
  12. Hadoop 容错之1.X的单点故障 到 2.X的HA和HDFS Federation
  13. 代码格式化工具:pretter
  14. 17 年微软老兵,非典型跨领域 AI 科研之路
  15. 实现连续签到案例的可能(使用)
  16. 古风尚婚纱摄影--决定
  17. 用Python分析《权力的游戏》
  18. 后台版本趣味测试威信小程序源码下载支持自定义问题等等
  19. Python进阶之路 简单的棋盘游戏
  20. 一个网络请求的历险之旅

热门文章

  1. notepad 如何运行php,notepad怎么运行c
  2. Python+Appium+POM实现APP端自动化测试
  3. 1、spring的IOC
  4. android 字符串相似度对比,Android中的OpenCV图像比较和相似度
  5. linux设置双屏拼接_双屏办公,用起来到底有多爽
  6. 机器视觉:mvs相机调试
  7. 中国香皂行业产量份额预测与消费需求商机研究报告2022年
  8. 全球及中国水深测量声呐行业应用前景及未来投资决策建议报告2022-2027年
  9. 全球及中国电缆保护套管行业十四五规划及投资前瞻专题分析报告2021年版
  10. 匠心功能农业-农业大健康·弘本农业:对话农民丰收节交易会