继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Web安全之CSRF

慕盖茨0596843
关注TA
已关注
手记 16
粉丝 1
获赞 10

更多文章欢迎关注微信公众号 前端阅读室

简介

CSRF(Cross Site Request Forgery),翻译成中文就是跨站点请求伪造。

攻击者首先在自己的域构造一个页面

http://www.a.com/csrf.html

其内容为

<img src="http://blog.com/article?m=delete&id=1" />

诱使目标用户访问这个页面,用户看到了一张无法显示的照片,但是回头再看博客id=1的文章已经被删除了。这是以该用户身份(发送了Cookie)在第三方站点里执行了一次操作,这个请求是攻击者伪造的,所以叫“跨站点请求伪造”。

浏览器的Cookie策略

浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称“临时Cookie”;另一种是“Third-party Cookie”,也称为“本地Cookie”。Third-party Cookie服务器指定了Expire时间。Session Cookie没有指定过期时间,新打开的Tab页也是有效的,但浏览器关闭后就失效了。

一个域加载另一个域的资源,由于安全原因,许多浏览器会阻止Third-party Cookie的发送,只能发送Session Cookie。删除文章的例子是在不会阻止Third-party Cookie发送的浏览器中实现的。

P3P头的副作用

浏览器拦截第三方Cookie发送,在某种程度上降低了CSRF攻击的威力。
但是P3P Header会是问题复杂起来,它是W3C制定的一项关于隐私的标准,如果网站返回给浏览器的HTTP头中包含有P3P头,将允许浏览器发送第三方Cookie。它重要用于需要跨域访问页面的场景,如父页面b嵌入了iframe,iframe的src指向的a页面网址,a页面响应头有Set-Cookie。一般情况下由于跨域,在a.com上Set-Cookie是不会成功的,但是加入P3P头后,可以跨域Set-Cookie成功,浏览器也不会再拦截第三方Cookie的发送。P3P头只需要由网站设置一次即可,之后每次请求都会遵循此策略。

只可以发送GET请求吗?

其实对于攻击者来说,也可以有许多方法构造POST请求。
最简单的方法比如在页面中构造一个form表单,使用JavaScript自动提交这个表单。

Flash CSRF

Flash CSRF也有多种方式能够发送网络请求,包括POST请求。除了使用URLRequest外,还可以使用getURL、loadVars等。在IE6、IE7中,Flash发送的网络请求均可以带上本地Cookie。

CSRF Worm

2008年9月,公布了一个百度的CSRF Worm。

http://msg.baidu.com/?...sn=用户账户&co=消息内容...

修改参数sn,可以对指定用户发送短消息。
而另一个接口能查询出某个用户的所有好友

http://frd.baidu.com/?...un=用户账户...

两者相结合,让一个百度用户查看恶意页面后,给他所有好友发送一条短消息,消息中又包含一个恶意页面,使得好友将消息发送给他们的好友,就可以形成一个CSRF Worm。

更多文章欢迎关注微信公众号 前端阅读室

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP