热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20170813CSRF跨站请求伪造

CSRFCSRF是CrossSiteRequestForgery的缩写,翻译过来就是跨站请求伪造。跨站:顾名思义,就是从一个网站到另一个网站。请求:即HTTP请求。伪造:在这里可以

CSRF

CSRF是Cross Site Request Forgery的缩写,翻译过来就是跨站请求伪造。

  1. 跨站:顾名思义,就是从一个网站到另一个网站。
  2. 请求:即HTTP请求。
  3. 伪造:在这里可以理解为仿造、伪装。
  • 综合起来的意思就是:从一个网站A中发起一个到网站B的请求,而这个请求是经过了伪装的,伪装操作达到的目的就是让请求看起来像是从网站B中发起的,也就是说,让B网站所在的服务器端误以为该请求是从自己网站发起的,而不是从A网站发起的。
  • CSRF 攻击是黑客借助受害者的 COOKIE 骗取服务器的信任,但是黑客并不能拿到 COOKIE,也看不到 COOKIE 的内容。另外,对于服务器返回的结果,由于浏览器同源策略的限制,黑客也无法进行解析。因此,黑客无法从返回的结果中得到任何东西,他所能做的就是给服务器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据。所以,我们要保护的对象是那些可以直接产生数据改变的服务,而对于读取数据的服务,则不需要进行 CSRF 的保护。

原理

《20170813-CSRF 跨站请求伪造》

图片来源: CSRF攻击原理以及nodejs的实现和防御

 从上图可以看出,要伪装成从A网站发起请求,必须依次完成两个步骤:

  1.登录受信任网站A,并在本地生成COOKIE。

  2.在不登出A的情况下,访问危险网站B。
  

  • 之所以要伪装成从A网站发起,是因为COOKIE是不能跨域发送的。结合上面这个例子来说就是:如果从A网站直接发送请求到B网站服务器的话,是无法将A网站中产生的COOKIE一起发给B服务器的。
  • 为什么要发送COOKIE呢?这是因为服务器在用户登录后会将用户的一些信息放到COOKIE中返回给客户端,然后客户端在请求一些需要认证的资源的时候会把COOKIE一起发给服务器,服务器通过读取COOKIE中的信息来进行用户认证,认证通过后才会做出正确的响应。
  • B网站访问A网站服务器的一些需要认证的资源的时候,如果没有COOKIE信息,服务器是拒绝访问的,那么B网站就无法进行恶意操作。而伪造成AB网站的请求,就可以将A网站的COOKIE一起发到A服务器,这个时候就服务器就认为该请求是合法的,就会给出正确的响应,这个时候,B网站就达到目的了。

危害

攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

如何防止CSRF攻击

CSRF攻击之所以能够成功,是因为黑客可以完全伪造用户请求,该请求中所有的用户验证信息都是存在于COOKIE中,因此黑客可以在不知道这些验证信息的情况下直接利用用户的COOKIE来通过安全验证。要抵御CSRF,关键在于在请求中放入黑客无法伪造的信息。

对于关键操作使用post方法:

现在的浏览器出于安全考虑,默认都做了一定的限制,form标签发送到其他网站的请求会被拦截

使用验证码:

强制用户必须与应用进行交互,才能完成最终的请求。例如:用户的每次提交表单行为都需要填写一个验证码

在请求地址中添加token并验证 Anti CSRF Token

  1. 服务端在收到路由请求时,生成一个随机数,在渲染请求页面时把随机数埋入页面(一般埋入 form 表单内,
  2. 服务端设置setCOOKIE,把该随机数作为COOKIE或者session种入用户浏览器
  3. 当用户发送 GET 或者 POST 请求时带上_csrf_token参数(对于 Form 表单直接提交即可,因为会自动把当前表单内所有的 input 提交给后台,包括_csrf_token)
  4. 后台在接受到请求后解析请求的COOKIE获取_csrf_token的值,然后和用户请求提交的_csrf_token做个比较,如果相等表示请求是合法的。

注意:

  1. Token 最好保存在 Session 中。假如 Token 保存在 COOKIE 中,用户浏览器开了很多页面(同一页面打开了多次)。在一些页面 Token 被使用消耗掉后新的Token 会被重新种入,但那些老的 Tab 页面对应的 HTML 里还是老 Token。这会让用户觉得为啥几分钟前打开的页面不能正常提交
  2. 尽量少用 GET。假如攻击者在我们的网站上传了一张图片,用户在加载图片的时候实际上是向攻击者的服务器发送了请求,这个请求会带有referer表示当前图片所在的页面的 url。 而如果使用 GET 方式接口的话这个 URL 就形如:
    https://xxxx.com/gift?giftId=…

,那相当于攻击者就获取了_csrf_token,短时间内可以使用这个 token 来操作其他 GET 接口。

  1. 由于用户的COOKIE很容易由于网站的XSS漏洞而被盗取,所以这个方案必须要在没有XSS的情况下才安全。

检测Referer:

Referer,根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该HTTP请求的来源地址。服务器通过检查Referer的值,如果判断
出Referer并非本站页面,而是一个外部站点的页面,那么我们就可以判断出这个请求是非法的

这个方法是实现防止图片盗链的原理

  • 优点:这种方法的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。
  • 缺点:Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。对于某些低版本浏览器,目前已经有一些方法可以篡改 Referer 值

在HTTP头中自定义属性

这种方法也是使用token并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。

参考:

对CSRF(跨站请求伪造)的理解

浅谈CSRF攻击方式

XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。\

CSRF攻击原理以及nodejs的实现和防御

CSRF 攻击的应对之道


推荐阅读
  • HTMLformwithoutCSRFprotectionHTML表单没有CSRF保护CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是CrossSiteRequestFor ... [详细]
  • CSRF校验策略及装饰器和auth认证模块
    目录csrf跨站请求伪造csrf校验策略csrf相关装饰器auth认证模块auth认证相关模块及操作扩展auth_user表csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在 ... [详细]
  • 前端跨域访问后端数据的方法
    参考链接:https:mp.weixin.qq.coms4G_27oRLSMMYBFvtYZgqcg一、什么是跨域当两个域名的协议、子域名、主域名、端口号中有任意一个不 ... [详细]
  • HDIV简介一个简单又强大的安全框架
    为什么80%的码农都做不了架构师?惯例官方纯英文档:https:hdivsecurity.comtechnical-documentationdo ... [详细]
  • 拿到目标后简单看了下,是一个类似员工管理的东西,用户可以创建group,其他用户可以搜索这个grou ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
  • 第一种<script>$(".eq").on(&qu ... [详细]
  • 2月4日每日安全热点节日期间某企远程办公遭XRed攻击 ... [详细]
  • XSS 漏洞绕过
    Web安全攻防学习笔记 ... [详细]
  • 很多同学对热备,冷备,云备了解不深,我科普一下IT行业各种备份术语。以后别闹笑话了。假设你是一位女性,你有一位男朋友&#x ... [详细]
  • 利用HTTP Host header头攻击技术详解
    利用HTTPHostheader头攻击技术详解一般通用web程序是如果想知道网站域名不是一件简单的事情,如果用一个固定的URI来作为域名会有各种麻烦。开发人员一般是 ... [详细]
author-avatar
手浪用户穹谷之鹰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有