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

Web 安全编程实战(3)

Web 安全编程实战(3)

问题代码 --- 重定向漏洞如果应用程序提取用户可控制的输入,并使用这个数据执行一个重定向,指示用户的浏览器访问一个不同于用户要求的 URL,那么就会造成重定向漏洞。
例子允许用户输入一个重定向路径,由服务器执行跳转。
清单 5. index.jsp 主要代码
1
2
3
4
<form action="Redirect">
   地址:<input name="target" type="text"><br>
    <input type="submit" value="提交">
</form>




清单 6. Redirect.java 主要代码
1
2
3
4
5
String param = request.getParameter("target");
if (param != null && !param.equals(""))
{
response.sendRedirect(param);
}




用户在 index.jsp 的表单中输入跳转的路径,服务器端的 Redirect.java 执行 sendRedirect 重定向。
问题分析
程序允许让用户设置重定向地址,而并没对地址内容进行验证处理,而是直接跳转,那么攻击者完全可以设计一个攻击 URL,其中包含攻击者设计的攻击内容,使用钓鱼攻击,诱使用户点击此 URL,受到攻击。
攻击此程序
设计 URL:http://www.baidu.com,这里只是以跳转作为例子,并没有构建真正有害的网站,所以使用普通地址作为演示,假设这个地址有许多有害信息。其中 http:// 头部非常重要,它可以让服务器执行绝对跳转,跳转到 www.baidu.com。如果没有 http:// 就会跳转到系统的相对路径。
图 6. 输入路径点击提交,网页就会跳转到百度界面。
有人试图这样处理跳转路径 param:param = param.replaceFirst("http://", ""); 将第一个 http:// 替换为空字符串,认为这样可以解决问题,但是攻击者往往也很聪明,他会将 URL 改为 : http://http://, 即使替换了第一个,第二天 http:// 就会生效。那么如果对 param 这么处理呢:param = param.replaceAll("http://", ""); 将所有的 http:// 都替换,那么攻击者可以将 URL 设计为 hthttp://tp://,将中间的 http:// 替换为空后,ht 和 tp:// 组合又变为 http://,攻击又一次生效 , 因此,我们需要一个更加全面的考虑。
解决方法
避免由用户决定跳转的页面,如果必须这么做,路径中只允许出现 /以及 数字或者 英文字符可以一定程度的避免这个问题。
返回列表