系統滲透漏洞の未授權訪問
背景:
我們做的頁面是巢狀在營銷系統中,所以沒有登入介面,造成了直接訪問 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="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 {
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);
}
這樣就完成了對登入的限制