首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Web 安全编程实战(5)

Web 安全编程实战(5)

问题代码 --- 跨站点请求漏洞跨站点请求漏洞,是一个比较隐蔽的漏洞,发出请求的攻击代码,并不存在于被攻击的网站上,而是利用浏览器的跨站点请求特性(IE6 允许,而 FireFox 和 Chrome 禁止了)进行的。所谓的跨站点,就是同一种浏览器同时打开不同网站的网页 A 和 B,如果这个时候 B 向 A 网站发出某个请求,A 网站就会认为是 A 网页发出的请求,并且接受这个请求。
例子程序是通过跨站点请求漏洞,对登录的用户进行攻击。
清单 8. Attacker.jsp 主要代码
1
2
3
4
5
6
7
8
9
10
11
12
<script type="text/javascript">
setInterval(attack,3000);
function attack()
{
                  // 不断向 UserLogin.java 发出请求
$.post("http://localhost:8080/KuaZhanDian/UserLogin");
}
</script>
</head>
<body>
伪造的很有吸引力的网站
</body>




清单 9. UserLogin.java 主要代码
1
2
3
4
5
6
7
8
9
10
11
12
String parameter = request.getParameter("username");
if (parameter != null && !parameter.equals(""))
{
(1) request.getSession().setAttribute("username", parameter);
} else
{
(2) Object attribute = request.getSession().getAttribute("username");
if (attribute != null)
{
System.out.println(attribute + "被侵入咯");
}
}




还有一个 index.jsp, 是向 UserLogin.java 提出登录请求的,注意:Attacker.jsp 是另外一个网站的网页,用于吸引被攻击用户,这个网页循环的向 UserLogin 提出请求,为了方便,使用了 JQuery 进行 ajax 开发。UserLogin.java 中,进入(1)位置,代表正常的用户登录,进入(2)的位置,代表用户登录后处理用户的请求。
问题分析
绝大多数网站,都没有考虑跨站点的漏洞,因为他们的发生是有一定概率的,首先,攻击者要确认被攻击者使用的是允许跨站点请求的浏览器。其次,被攻击者要同时打开攻击者设计的网站并且登录上面的 UserLogin 才可以。如果两个条件都满足,就可以进行攻击了。
攻击此程序
吸引被攻击者打开设计的具有诱惑力的网站 Attacker.jsp,那么请求就开始不停地发出,由于服务器认为不是合法用户发出的请求,不予处理。于此同时,被攻击者登录了正常的应用程序 UserLogin,UserLogin 中记录了被攻击者登录的 session 信息,当 Attacker.jsp 再次发请求(注意,Attacker.jsp 是循环发送请求的)给 UserLogin 时,由于被攻击者已经登录,UserLogin 会认为是被攻击者发出的请求,属于正常请求,就处理了这个请求。攻击目的就达到了。
实际上攻击成功需要一定步骤,下面图片按照攻击步骤排列。
图 10. 用户登录用户登录后,不关闭页面,同时又打开攻击者设计的网页
图 11. 用户受到钓鱼攻击此时攻击者的页面不断向服务器提出请求,用户并不知道,服务器认为是 helloworld 提出的正常请求,执行该请求。
图 12. 控制台输出被攻击信息解决方法
服务器可以给客户端发送唯一的 ID,客户端发送请求时,需要连同这个 ID 一起请求,服务器可以判断这个 ID 是否正确,正确的话才可以执行请求。
返回列表