一、CSRF介绍

伪造一个站点,在站点中伪造一个向其他站点的请求,在用户访问该站点时让用户执行

假设有如下URL能删除一篇文章:

攻击者在自己的域中构造一个页面:

内容为:

使用一个img标签,其地址指向了删除博客文章的链接

在用户访问该站点的时候,用户看到了一张无法显示的图片,并且用户删除了该文章

这个删除博客文章的请求,是攻击者伪造的,所以这种攻击就被叫做“跨站点请求伪造”

二、CSRF进阶

2.1 Cookie策略

Cookie分类:

1、Session Cookie:又称为临时Cookie,在浏览器关闭之后,就消失。保存在浏览器的内存空间

2、Thrid-party Cookie:又称为本地Cookie,在服务器设置该类Cookie时,会指定一个Expire时间,代表失效时间。保存在本地

IE默认禁止在<img><iframe><script><link>等标签中发送第三方Cookie,但Firefox会,所以上一节的攻击多半发生在Firefox之上。如果IE等需要攻击成功,还需要引诱用户访问目标网页得到Session Cookie

2.2 P3P头的副作用

如果网站返回给浏览器的HTTP头中包含有P3P头,即使是IE,也将允许浏览器发送第三方Cookie,

2.3 GET?POST?

不一定只能通过<img><iframe><script>等发起get请求,也能通过POST,比如在页面中构造好一个form,然后使用javaScript自动提交这个表单。

2.4 Flash CSRF

使用Flash也能使用一些方式来发送网络请求,带上本地Cookie

2.5 CSRF Worm

在用户访一个恶意页面后,向其他好友发送一条短消息,然后这条短消息又包含一张图片,其地址又指向CSRF页面,是的这些好友再次将消息发送给他们的好友

三、CSRF的防御

3.1 验证码

CSRF攻击的过程,就是在用户不知情的情况下构造了网络请求。二验证码可以强制与用户进行交互,防止CSRF。

但是很多情况出于用户体验,不能给所有的操作都加上验证码。

3.2 Referer Check

互联网应用中,页面都具有一定的逻辑关系,通过检查这种逻辑关系来防止CSRF

缺陷在于,服务器并非什么时候都能获取到Referer

3.3 Anti CSRF Token

CSRF之所以能成功,是因为重要操作的所有参数都是可以被攻击者猜测到的。

可以将明文的参数改为hash或是其他方式,让攻击者无法直接猜测出参数。问题就是URL每次都会变,无法收藏。通过CSRF Token可解决

在URL中新增一个Token,这个Token是随机的:

在实际应用中,Token可以放在用户的Session中,或者浏览器的Cookie中。

使用Token的原则是不可预测性原则,需要保证保密性和随机性

跨站点请求伪造(CSRF)学习的更多相关文章

  1. 跨站点请求伪造(CSRF)总结和防御

    什么是CRSF 构建一个地址,比如说是删除某个博客网站博客的链接,然后诱使已经登录过该网站的用户点击恶意链接,可能会导致用户通过自己的手将曾经发布在该网站的博客在不知情的情况下删除了.这种构建恶意链接 ...

  2. mvc3.0防止跨站点请求伪造(CSRF)攻击

    众所周知,asp.net mvc程序在浏览器运行是产生标准的Html标签,包括浏览器要发送的关键数据等内容都在html内容里面.听起来不错,但是假如我们伪造类似的html内容,更改里面的关键数据,在浏 ...

  3. python---xss(Cross Site Scripting)跨站脚本攻击和csrf(xsrf)跨站点请求伪造(Cross—Site Request Forgery)攻击

    xss跨站脚本攻击:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 例如:某些论坛允许用户自由发言,而 ...

  4. 跨站点请求伪造(CSRF)

    一.前言 跨站点请求伪造(Cross-SiteRequest Forgeries, CSRF),是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动 ...

  5. Python Django框架笔记(四):数据分页和CSRF跨站点请求伪造

    (一)数据分页  可以参考  https://docs.djangoproject.com/en/2.0/topics/pagination/ 模板:如果只要显示 1.2.3.4.5.6....的话, ...

  6. [不常用] - CSRF(跨站点请求伪造)

    CSRF,Cross Site Request Forgery,即跨站点请求伪造.   这种攻击是指,在用户正常登录系统以后,攻击者诱使用户访问一些非法链接,以执行一些非法操作. 比如:如果删除用户操 ...

  7. Appscan漏洞之跨站点请求伪造(CSRF)

    公司前段时间使用了Fortify扫描项目代码,在修复完这些Fortify漏洞后,最近又启用了Appscan对项目代码进行漏洞扫描,同样也是安排了本人对这些漏洞进行修复.现在,针对修复过的Appscan ...

  8. 跨站点请求伪造 - SpringBoot配置CSRF过滤器

    1. 跨站点请求伪造   风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务.   原因:应用程序使用的认证方法不充分. ...

  9. 密码学系列之:csrf跨站点请求伪造

    目录 简介 CSRF的特点 CSRF的历史 CSRF攻击的限制 CSRF攻击的防范 STP技术 Cookie-to-header token Double Submit Cookie SameSite ...

随机推荐

  1. 关于XML

    一.XML定义 XML(eXtensible Markup Language)即可扩展标记语言,它与HTML一样,都是处于SGML,标准通用语言.Xml是Internet环境中跨平台的,依赖于内容的技 ...

  2. Bootstrap 常用属性

    一,关于按钮 btn系列 二.关于div 移动位置 col 系列 col-md 系列 col-lg系列 这些都是让多个div在当前页面等大小 三.居中系列 1.文本居中 text-center 2.图 ...

  3. hadoop基础操作

    通过hadoop上的hive完成WordCount 启动hadoop Hdfs上创建文件夹 上传文件至hdfs 启动Hive 创建原始文档表 导入文件内容到表docs并查看 用HQL进行词频统计,结果 ...

  4. 微信小程序setData()方法的详解以及对数组/json操作

    此篇文章是本人对setData方法的一些理解,是查阅文档和查找一些其他资料综述的,有所不足希望指正! 直接进入正题! 一.setData()方法: 1.参数接受一个对象,以key,value的形式表示 ...

  5. [Swift]LeetCode257. 二叉树的所有路径 | Binary Tree Paths

    Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. Example ...

  6. [Swift]LeetCode789. 逃脱阻碍者 | Escape The Ghosts

    You are playing a simplified Pacman game. You start at the point (0, 0), and your destination is (ta ...

  7. [Swift]LeetCode875. 爱吃香蕉的珂珂 | Koko Eating Bananas

    Koko loves to eat bananas.  There are N piles of bananas, the i-th pile has piles[i]bananas.  The gu ...

  8. 非对称加密技术里面,最近出现了一种奇葩的密钥生成技术,iFace人脸密钥技术

    要说到非对称加密技术啊,得先说说对称加密技术 什么是对称加密技术 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密. 也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称 ...

  9. Linux启动Redis失败/没有那个文件或目录

    没有那个文件或目录问题,可能是你选择的目录不对. 应切换到Redis目录下启动.

  10. 用CSS实现一个抽奖转盘

    效果 基本是用CSS实现的,没有用图片,加一丢丢JS.完全没有考虑兼容性. 首先画一个转盘, <!DOCTYPE html> <html lang="en"> ...