CSRF的全称是Cross Site Request Forgery,即跨请求伪造。CSRF对于那些开源网站、多用户网站、社交网站非常值得关注。
- 跨站点的请求
- 请求是伪造的
get攻击
- 跨域发出一个get请求
- 无javascript参与
- 请求是身份认证之后
Cookies是共享的。它可以在不同的页面发送带上Cookies请求,所以不安全。IE浏览器默认不允许目标网站的Cookie在这样的跨域请求中带上,除非在HTTP响应头设置了PSP,但对于非IE的浏览器没有这样的限制。
post攻击
通过javascript动态生成的form提交post请求。
嵌入的第三方资源都是可以发出跨域的get请求。
- JSONP
- 图片
- CSS样式
- 框架内容
CSRF的分类
- HTML CSRF攻击
发起跨站请求都是属于HTML元素发出的,这一类是最普遍的CSRF攻击。
注意:HTML中能够设置src/href等链接地址的标签都可以发起一个GET请求。
<link href="" />
<img src="" />
<img lowsrc="" />
<img dynsrc="" />
<meta htt-equiv="refresh" content="0; url=" />
<iframe src="" />
<script src="" />
<bgsound src="" />
<embed src="" />
<vedio src="" />
<audio src="" />
<a herf="" />
<table background="" />
...
css样式中:
@import ""
background:url("")
...
- JSON CSRF攻击
原理跟JSONP差不多。不过是不同域名发出的跨站get请求
-
Flash CSRF攻击
-
跨域获取私密数据
-
跨域提交数据操作,一些如添加、删除、编辑等操作的请求,这里并不会获取到私密数据。
如何方法
- 判断Referer
- 使用Token判断,用户登录时根据用户名和密码等加密生成一个Token值,同时写入到浏览器的Cookie和Hidden中,然后根据每次的请求将Token和Cookie同时带入到服务端进行验证和判断。
网友评论