找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,极速登录

关于某4A系统的单点登录方案

数据挖坑工程师,负责执行rm -rf,QQ624525513
最近公司在选型4A系统(4A系统是啥,简单的说就是统一登录平台,登陆了之后其他系统都不需要登录了),然后发现此4A系统与FR单点存在严重的安全漏洞,希望引起大家注意,下面附上具体代码
  1. <%[url=home.php?mod=space&uid=86279]@[/url] page language="java" contentType="text/html; charset=UTF-8"
  2.                  pageEncoding="UTF-8"%>
  3. <%@ page
  4.                 import="com.fr.fs.base.entity.User,com.fr.fs.base.entity.UserInfo,com.fr.fs.control.UserControl,
  5. com.fr.fs.privilege.auth.FSAuthentication,com.fr.fs.privilege.base.FServicePrivilegeLoader,
  6. com.fr.fs.privilege.entity.DaoFSAuthentication,com.fr.privilege.session.PrivilegeInfoSessionMananger"%>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8. <%

  9.         // 获取传过来的fr_username值
  10.         String username = request.getParameter("fr_username");
  11.         System.out.println(username);
  12.         //如果用户名为空,跳转到登录页面
  13.         if(username == null){
  14.                 response.sendRedirect("/ReportServer?op=fs");
  15.                 return;
  16.         }
  17.         try {
  18.                 User U = UserControl.getInstance().getByUserName(username);
  19.                 //如果报表工程里没有对应传过来的用户名对应的用户信息,跳转到登录页面
  20.                 if (U == null) {
  21.                         //改成自己的登录界面
  22.                         response.sendRedirect("/ReportServer?op=fs");
  23.                         return;
  24.                 }

  25.                 FSAuthentication authentication = new DaoFSAuthentication(new UserInfo(U.getId(), U.getUsername(), U.getPassword()));

  26.                 long userid = authentication.getUserInfo().getId();

  27.                 PrivilegeInfoSessionMananger.login(new FServicePrivilegeLoader(username, UserControl.getInstance().getAllSRoleNames(userid), UserControl.getInstance().getUserDP(userid)), session, response);

  28.                 session.setAttribute("fr_fs_auth_key", authentication);

  29.                 UserControl.getInstance().login(userid);
  30.                 //登录后跳转到决策平台地址,可以根据需要设置是否跳转及跳转的地址
  31.                 response.sendRedirect("/ReportServer?op=fs");
  32.                 return;
  33.         } catch (Exception e) {
  34.                 e.printStackTrace();
  35.         }
  36. %>
复制代码
以上代码是某4A平台提供的代码,需要将此代码放在FR的WebReport目录下,文件名为oaauth.jsp,
PS请各位检查一下服务器中是否有此文件,如有请立刻删除
代码解释:
其实就是通过4A平台传到此页面地址带上username,然后通过username获取user对象,此时user对象中包含用户名和密码,再将user拿去校验,此过程完全不需要传密码,即通过用户名直接获取用户名密码。


So....我希望FR也认真认真认真面对这个问题,这个UserControl.getInstance()类实在有点可怕,希望FR可以改进,谢谢
QQ图片20180727100309.png
编辑于 2018-7-27 10:03  
编辑于 2018-7-27 10:10  

oaauth.jsp

1.69 KB, 下载次数: 5

发表于 2018-7-27 10:12:47
你需要确认两个问题     1  什么是单点   2 什么是安全问题

使用道具 举报

发表于 2018-7-27 10:15:52
亚当 发表于 2018-7-27 10:12
你需要确认两个问题     1  什么是单点   2 什么是安全问题

....我只是从公司安全角度去看一个系统的安全漏洞

使用道具 举报

发表于 2018-7-27 10:18:40
来自研发的回复:

8.0应该也有MD5加密,不过这个是集成代码问题,已经能获取服务器权限了。
这个我们也改不了,相当于别的产商把漏洞放我们服务器里面来,只能是不用类似的集成方案。

使用道具 举报

发表于 2018-7-27 10:20:21
传说哥 发表于 2018-7-27 10:18
来自研发的回复:

对的~~ 我也是希望大家注意一下这个问题,然后看FR可否修复一下这个包的漏洞

使用道具 举报

发表于 2018-7-27 10:47:50
哈喽  , 这不是漏洞, 这只是 一种单点的实现方案 ,

单点实现方案分很多种的,   估计大部分内部系统对接方案 都是这种    只是 加密不加密的区别 。



使用道具 举报

发表于 2018-7-27 10:49:34
亚当 发表于 2018-7-27 10:47
哈喽  , 这不是漏洞, 这只是 一种单点的实现方案 ,

单点实现方案分很多种的,   估计大部分内部系统 ...

是的...只不过FR官方明明有提供方案,却不明白4A厂家为什么要用这种方案

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

联系社区管理员|联系帆软|《帆软社区协议》|手机版|帆软社区|Copyright © 帆软软件有限公司 ( 苏ICP备18065767号-7 )

GMT+8, 2021-6-22 16:39 , Processed in 0.158651 second(s), 60 queries , Gzip On.

返回顶部 返回列表