系統滲透漏洞の未授權訪問

孫澤1992發表於2018-06-27

背景:

    我們做的頁面是巢狀在營銷系統中,所以沒有登入介面,造成了直接訪問 ip:port/地址可以進入,這樣造成了安全隱患

思路;

    想到了加上過濾器,在使用者登入成功之後,才授權登入訪問頁面(當使用者登入成功後,將使用者資訊存在session中,過濾器判斷當session中有使用者資訊才可放行)

新增過程:

    1.首先在web.xml中新增過濾器配置


其中url-pattern 為限制的範圍,根據實際情況填寫即可

    2.將使用者資訊存到session中

        找到使用者登入才會跳轉的介面,將session中的資料獲取到,並傳入此係統tomcat的session中

<form action="${pageContext.request.contextPath }/login/loginIn.do" method="post">
<input type="hidden" name="loginNo" value="${param.loginNo}" />
<input type="hidden" name="loginName" value="${param.loginName}" />
<input type="hidden" name="regionCode" value="${param.regionCode}" />
<input type="hidden" name="userId" value="${param.userId}" />
<input type="hidden" name="staffId" value="${param.staffId}" />
<input type="hidden" name="forwordUrl" value="${param.forwordUrl}" />
<input type="hidden" name="param" value="${param.param}" />

</form>

 @RequestMapping("/loginIn.do")
    public String loginIn(HttpServletRequest request, HttpSession session, ModelAndView mdv)
        throws UnsupportedEncodingException {
    String forwordUrl = request.getParameter("forwordUrl") != null ? request.getParameter("forwordUrl") : "ahTelecom/login/error";
        try {
            // 工號資訊
            session.setAttribute("loginNo", request.getParameter("loginNo") != null ? request.getParameter("loginNo") : "sys");
            session.setAttribute("loginName", request.getParameter("loginName") != null ? request.getParameter("loginName") : "sys");
            session.setAttribute("regionCode", request.getParameter("regionCode") != null ? request.getParameter("regionCode") : "0");
            session.setAttribute("userId", request.getParameter("userId") != null ? request.getParameter("userId") : "9999");
            session.setAttribute("staffId", request.getParameter("staffId") != null ? request.getParameter("staffId") : "9999");
            
            // 生成token
            String token = randomGUID.toString();
            // 將token放入session
            session.setAttribute("token", token);
            return forwordUrl;
        }catch (Exception e) {
            return "ahTelecom/login/error";
        }

    }

3.在過濾器中配置

     @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        HttpSession session = request.getSession();
       // String loginNo = request.getParameter("loginNo");
        String loginNo = (String) session.getAttribute("loginNo");
        String requestURI = request.getRequestURI();
        System.out.println("requestURI="+requestURI);
        System.out.println("loginNo="+loginNo);
        if(loginNo!=null && !"".equals(loginNo)){
        chain.doFilter(request, response);
        return;
        }
        //chain.doFilter(request, response);

    }

這樣就完成了對登入的限制


相關文章