跨站请求伪造CSRF

跨站请求伪造CSRF

CSRF是Cross Site Request Forgery的缩写,乍一看和XSS差很少的样子,可是其原理正好相反,XSS是利用合法用户获取其信息,而CSRF是伪形成合法用户发起请求。javascript

客户端以post方式请求数据,发起合法请求。(在第一次get请求的时候发送客户端一个证书或身份,下次再请求的时候会验证身份)php

xss危害

XSS危害——session劫持中 咱们提到了session原理,用户登陆后会把登陆信息存放在服务器,客户端有一个用户标识存在cookie中,只要用户不关闭浏览器或者退出登陆,在其 有效期内服务器就会把这个浏览器发送的请求看成当前客户,若是这时候用户被欺骗,使用浏览器打开了某些恶意网址,里面就会包含一些不是用户但愿发送的请 求,服务器也会把这些请求看成是当前客户发送的请求,这时候用户的我的信息、资金安全、若是用户权限高整个站点均可能会受到危害。html

CSRF原理

CSRF原理很简单,当用户登陆以站点时用浏览器打开一恶意网址,就有可能遭受攻击。有同窗会奇怪了这个很难实现吧,必须同时知足两个条件才行。其 实很简单,好比咱们使用QQ,看看QQ zone,忽然蹦出个包含中奖或者问卷调查连接的聊天窗口(或者是。。。),这个腾讯作了防范,可是咱们收到封邮件包含此内容,不少用户会选择去点击java

在网上找了张图片很能说明这个过程跨域

简单小例子浏览器

在某个论坛管理页面,管理员能够在list.php页面执行删除帖子操做,根据URL判断删除帖子的id,像这样的一个URL安全

http://localhost/list.php?action=delete&id=12

当恶意用户想管理员发送包含CSFR的邮件,骗取管理员访问http://test.com/csrf.php,在这个恶意网页中只要包含这样的html语句就能够利用让管理员在不知情的状况下删除帖子了服务器

<img alt="" arc="http://localhost/list.php?action=delete&id=12"/>

这个利用了img的src能够跨域请求的特色,这种状况比较少,由于通常网站不会利用get请求修改资源信息cookie

升级session

是否是网站利用post修改信息就安全了呢,还拿刚才例子,改为post修改的

<?php $action=$_POST['action']; $id=$_POST['id']; delete($action,$id); ?>

可是恶意网站这么写同样能够攻击

<!DOCTYPE html>
<html>
  <body>
    <iframe display="none">
      <form method="post" action="http://localhost/list.php">
        <input type="hidden" name="action" value="delete">
        <input type="hidden" name="id" value="12">
                <input id="csfr" type="submit"/>
      </form>
    </iframe>

        <script type="text/javascript">      document.getElementById('csfr').submit();     </script>
  </body>
</html>

如何防范

 

1. 使用post,不使用get修改信息

2. 验证码,全部表单的提交须要验证码,可是貌似用起来很麻烦,因此一些关键的操做能够

3. 在表单中预先植入一些加密信息,验证请求是此表单发送

相关文章
相关标签/搜索