web 安全问题(一):CSRF 攻击
什么是CSRF
CSRF是怎么产生的
CSRF的攻击对象
CSRG的攻击手段
CSRF的防御措施
什么是CSRF
全称是(Cross Site Request Forgery)跨站请求伪造。也就是恶意网站伪装成用户向目标网站服务器发送请求,骗取服务器执行请求中的命令,直接在服务器改变数据值的一种攻击手段。
CSRF是怎么产生的
用户需要获取操作的权限,目标网站服务器会要求一次验证,通常都是一次账号密码登录。服务器验证通过之后,会在浏览器写一个会话ID,来标识用户的身份。这是一种隐式验证的方法,用户只要验证一次获取到会话ID之后,在会话ID未过期的一段时间内的请求操作是不需要再次验证的。但服务器只能判断请求是来源于这个授权过的浏览器,而不能判断请求是否是用户发起或者是用户授权的。所以当用户浏览了恶意网站之后,恶意网站就可以给服务器发起带有命令的请求,尝试改变服务器中的数据值。
CSRF的攻击对象
CSRF的攻击对象也就是我们要保护的对象。CSRF利用的是授权浏览器向目标网站服务器发送任何请求时,都会自动带上会话ID或者cookie进行身份验证。但是由于浏览器同源策略的限制,恶意网站无法看到目标网站的cookie或者回话ID,也没有办法解析返回的内容,所以恶意所能做的就是给服务器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据
CSRF的攻击手段
- 利用天生具有跨域能力的标签--
<script>
,<a>
,<img>
等,发起get请求
<img src="http://www.target.com/order/pay?money=10000&to=34j34">
- 利用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 攻击的更多相关文章
- Web安全之CSRF攻击的防御措施
Web安全之CSRF攻击的防御措施 CSRF是什么? Cross Site Request Forgery,中文是:跨站点请求伪造. CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击 ...
- Web安全之CSRF攻击
CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...
- Web安全之CSRF攻击(转载)
CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...
- python web框架Flask——csrf攻击
CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...
- web安全问题-csrf
web安全问题 csrf <script> document.write(` <form name="commentForm" target="csrf ...
- web 安全问题(二):XSS攻击
上文说完了CSRF攻击,本文继续研究它的兄弟XSS攻击. 什么是XSS攻击 XSS攻击的原理 XSS攻击的方法 XSS攻击防御的手段 什么是XSS攻击 XSS攻击全名(Cross-Site-Scrip ...
- WEB攻击之 CSRF 攻击及防御策略
介绍 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法. 释义: 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如 ...
- Web前端安全之利用Flash进行csrf攻击
整理于<XSS跨站脚本攻击剖析与防御>—第6章 Flash在客户端提供了两个控制属性: allowScriptAccess属性和allowNetworking属性,其中AllowScrip ...
- 风炫安全web安全学习第二十八节课 CSRF攻击原理
风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...
随机推荐
- Java从零开始学七(选择结构)
一. 程序的结构: 一般来说程序的结构包含有下面三种: 1.顺序结构 2.选择结构 3.循环结构 二.顺序结构 程序至上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾
- 从零开始学JavaScript三(变量)
一.变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符. 定义变量时要使用var操作符 如: var message; ...
- Web 前端攻防(2014版)-baidu ux前端研发部
http://fex.baidu.com/articles/page2/ Web 前端攻防(2014版) zjcqoo | 20 Jun 2014 禁止一切外链资源 外链会产生站外请求,因此可以被利用 ...
- Banner尺寸多大最好!
关于网站图片的大小问题 最近发现各大网站的图片做的都很大 随笔找了一个,下载其页面banner, 详细属性:基本全是1920*高.Get√
- Table '' is marked as crashed and should be repaired 解决方法
解决方法: 找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r ../data/mysql/user.MYI 然后myisamchk 工具会帮助 ...
- 获取List对象的泛型类(原创)
群里一个伙计的需求,最后我提出了这种解决方案,不过他觉得多写俩括号增加了调用方的难度.还是先记下来吧,有时间看看还能不能再改造. 1.直接获取时获取不到的,类型被虚拟机擦除了2.利用子类实现父类的 ...
- 转:一个多目录结构C程序的Makefile
来源: ChinaUnix博客 一个多目录结构的C程序Makefile,代码存在main init input output exit目录. CC = gcc RDIR = RelsMAIN_DIR ...
- PHP-学习大规模高并发Web系统架构及开发推荐书籍
以下书籍内容涵盖大型网站开发中几个关键点:高可用.高性能.分布式.易扩展.如果想对大规模高并发Web系统架构及开发有很系统的学习,可以阅读以下书籍,欢迎补充! 一.<Linux企业集群—用商用硬 ...
- 用Python实现BP神经网络(附代码)
用Python实现出来的机器学习算法都是什么样子呢? 前两期线性回归及逻辑回归项目已发布(见文末链接),今天来讲讲BP神经网络. BP神经网络 全部代码 https://github.com/lawl ...
- Windows右键菜单设置与应用技巧
http://blog.163.com/lee_honleon/blog/static/555251522008014258896/ 需要修改注册表,挺麻烦的.最好还是把迅雷卸了重装,不会影响什么 ...