什么是CSRF

CSRF是怎么产生的

CSRF的攻击对象

CSRG的攻击手段

CSRF的防御措施

什么是CSRF

全称是(Cross Site Request Forgery)跨站请求伪造。也就是恶意网站伪装成用户向目标网站服务器发送请求,骗取服务器执行请求中的命令,直接在服务器改变数据值的一种攻击手段。

CSRF是怎么产生的

用户需要获取操作的权限,目标网站服务器会要求一次验证,通常都是一次账号密码登录。服务器验证通过之后,会在浏览器写一个会话ID,来标识用户的身份。这是一种隐式验证的方法,用户只要验证一次获取到会话ID之后,在会话ID未过期的一段时间内的请求操作是不需要再次验证的。但服务器只能判断请求是来源于这个授权过的浏览器,而不能判断请求是否是用户发起或者是用户授权的。所以当用户浏览了恶意网站之后,恶意网站就可以给服务器发起带有命令的请求,尝试改变服务器中的数据值。

CSRF的攻击对象

CSRF的攻击对象也就是我们要保护的对象。CSRF利用的是授权浏览器向目标网站服务器发送任何请求时,都会自动带上会话ID或者cookie进行身份验证。但是由于浏览器同源策略的限制,恶意网站无法看到目标网站的cookie或者回话ID,也没有办法解析返回的内容,所以恶意所能做的就是给服务器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据

CSRF的攻击手段

  1. 利用天生具有跨域能力的标签-- <script>,<a>,<img>等,发起get请求
<img src="http://www.target.com/order/pay?money=10000&to=34j34">
  1. 利用iframe和javascipt发起post请求
<iframe name="steal" style="display: none;"></iframe>
<form method="post" action="http:www.xxxx.com/trading/product/addCartProduct" name="transfer" target="steal">
        <input type="hidden" name="id" value="b21a59eaa7e604b44fe8a3bf">
        <input type="hidden" name="money" value="1000">
<input type="submit" value="提交">
      
</form>
window.onload=function(){
function steal()
{
var iframe = window.frames['steal'].document;
var form = document.getElementsByTagName('form')[0];
form.submit();
}
steal();
}

CSRF的防御措施

1. 涉及到数据更改的操作服务器严格使用post请求而不是get请求

2. 验证HTTP Referer 字段

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。恶意网站只能在他自己的网站伪造请求,所以验证referer应该是可以过滤掉一部分CSRF攻击的。但是使用Rerferer值,就相当于把安全性交给了第三方,浏览器实现referer的方式不能保证没有漏洞。据说IE6是可以修改referer的值的。另外referer会记录下用户的访问来源,有些用户会觉得是侵犯了其隐私,而且用户是可以设置使用浏览器时不再提供referer的。(所以说这种方法虽然简单但是不可靠)

3. 在请求地址中添加token

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求。服务器验证地址中加密的token,可以比较有效地避免攻击

4. HTTP头自定义属性验证

这个是token验证的变种,可以利用 XMLHttpRequest 这个类,一次性给ajax请求加上 特定的 HTTP 头属性,并把 token 值放入其中。

5 显式验证,添加验证码验证,密码验证等。

CSRF 攻击之所以能够成功,也是由于隐式验证,服务器无法判断请求真实地由用户发起和用户授权的。

总的来说,CSRF防御没有十全十美的方法,只有适合的方法。

【TODO】

web安全,是一个很重要的技能,也是一个领域的知识。我打算吧这个领域的东西写成一个系列:

web安全二:XSS 攻击

web安全三:同源策略

web安全四:跨域请求

参考

web 安全问题(一):CSRF 攻击的更多相关文章

  1. Web安全之CSRF攻击的防御措施

    Web安全之CSRF攻击的防御措施   CSRF是什么? Cross Site Request Forgery,中文是:跨站点请求伪造. CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击 ...

  2. Web安全之CSRF攻击

    CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...

  3. Web安全之CSRF攻击(转载)

    CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...

  4. python web框架Flask——csrf攻击

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  5. web安全问题-csrf

    web安全问题 csrf <script> document.write(` <form name="commentForm" target="csrf ...

  6. web 安全问题(二):XSS攻击

    上文说完了CSRF攻击,本文继续研究它的兄弟XSS攻击. 什么是XSS攻击 XSS攻击的原理 XSS攻击的方法 XSS攻击防御的手段 什么是XSS攻击 XSS攻击全名(Cross-Site-Scrip ...

  7. WEB攻击之 CSRF 攻击及防御策略

    介绍 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法. 释义: 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如 ...

  8. Web前端安全之利用Flash进行csrf攻击

    整理于<XSS跨站脚本攻击剖析与防御>—第6章 Flash在客户端提供了两个控制属性: allowScriptAccess属性和allowNetworking属性,其中AllowScrip ...

  9. 风炫安全web安全学习第二十八节课 CSRF攻击原理

    风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...

随机推荐

  1. 栈的应用实例——计算后缀表达式

    用户输入一个后缀表达式,程序计算该后缀表达式的值并输出结果: /* postfix_expression.c */ #include "stack.h" #include < ...

  2. Java获取登录用户IP地址

    /** * 获取登录用户IP地址 * * @param request * @return */ public static String getIpAddr(HttpServletRequest r ...

  3. win7 mtp

    Sensors MTP Monitor Service 允许MTP设备数据传输,如果该服务被禁用,MTP监视器将不能工作.该服务的默认运行方式是手动,如果你没有使用MTP设备,该功能就可以放心禁用.  ...

  4. EXCEPTION-El表达式

      CreateTime-- Author:Marydon 声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇到的做个汇总),特此声明! stud ...

  5. Zuul使用Ribbon配置自动重试

    spring cloud的版本不断演进,导致很多配置的配置方式不断改变,有时某个配置在一个版本里面默认是true,后边一升级默认成了false,这点让人有点不爽. 言归正传 0.所使用版本 sprin ...

  6. 触发器学习笔记(:new,:old用法)

    触发器学习笔记(:new,:old用法) 触发器是数据库发生某个操作时自动运行的一类的程序         用于保持数据的完整性或记录数据库操作信息方面         触发器不能够被直接调用,只能够 ...

  7. Linux密钥认证错误解决

    问题描述: Xshell用key认证登录,提示所选的用户密钥未在远程主机上注册 问题解决: 查看日志/var/log/secure,基本上都是用户根目录的权限问题 根据日志提示: Authentica ...

  8. 【转载】PL/SQL配置连接ORACLE

    一.需安装ORACL客户端. 配置文件路径: E:\Oracle\product\10.1.0\Client_3\NETWORK\ADMIN\tnsnames.ora 内容如下: # TNSNAMES ...

  9. 网站博客更换主机空间搬家:Discuz! X2.5老鹰主机搬家全过程

    http://www.freehao123.com/discuz-x2-5-banjia/由于我放在hawkhost老鹰主机主机的部落论坛就要到期了,而老鹰主机的续费价格却是按照原价来的,没有任何优惠 ...

  10. Chart.js 学习笔记

    1.引入Chart.js 文件 <script src="Chart.js"></script> 2.在html中创建画布 <canvas id=&q ...