zoukankan      html  css  js  c++  java
  • 跨站点请求伪造(CSRF)学习

    一、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的原则是不可预测性原则,需要保证保密性和随机性

  • 相关阅读:
    SQL Function(方法)
    SQL Cursor(游标)
    SQL Proc(存储过程)/tran(事物)
    AAABBBBCCCC
    Visual Studio2012中搭建WCF项目
    关于抽象工厂模式
    C#面向对象的学习笔记
    休假回来 更博-MySQL以月为单位的客户综合情况表_20161008
    结合Mysql和kettle邮件发送日常报表_20161001
    MySQL-with rollup函数运用 _20160930
  • 原文地址:https://www.cnblogs.com/likaiming/p/9966210.html
Copyright © 2011-2022 走看看