文章目录
CSRF 跨站请求伪造
一、CSRF原理
跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
CSRF漏洞实质:服务器无法准确判断当前请求是否是合法用户的自定义操作
个人理解有两点是造成csrf的主要原因,一是cookie的时效性默认是一次会话,浏览器不关闭,用户登录的cookie不会过期。二是浏览器的信任机制,js是可以操作浏览器的,而且js的功能十分强大,同时浏览器是无法判断页面的js是否是用户想要执行的,无论用户访问任何页面,浏览器都认为用户信任这个页面。所以,当用户访问恶意网站时会运行恶意网站上的js,这个js会盗用用户的cookie向用户正常登录的网站发送攻击者精心构造的数据包,这样攻击者的目的就达到了。
二、CSRF分类
Get型
这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单,只需要一个HTTP请求,所以,一般会这样利用:
<img src=http://example.cn/csrf.html?username=xxx&password=xxx />
在访问含有这个img的页面后,浏览器会自动向http://example.cn/csrf.html?username=xxx&password=xxx
发出一次HTTP请求。example.cn就会收到包含受害者登录信息的一次跨域请求。所以,如果将该网址替换为存在GET型CSRF的地址,就能完成攻击了。
Post型
这种类型的CSRF危害没有GET型的大,利用起来通常使用的是一个自动提交的表单,如:
<form action="http://example.cn/csrf.php" method="POST">
<input type="hidden" name="filename" value="xxxx" />
<input type="hidden" name="str" value="xxxxxxx" />
<script> document.forms[0].submit();