专栏链接
一、数据的校验
二、认证与授权
认证与授权:纵向越权
漏洞描述:
纵向越权指某个用户从低权限通过利用某种应用漏洞或手段,提升为拥有高级别的访问权限,如从普通角色升级为管理员角色。
检测方法:
检查 web.xml 中是否配置权限控制的全局过滤器以及其权限管理规则。
检查是否使用某些第三方框架进行权限控制。
不合规的代码示例:
java
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String uri = req.getRequestURI();
//卖家
Object SESSION_COMPANY =req.getSession().getAttribute(Consts.SESSION_COMPANY);
//买家
Object SESSION_BUYER = req.getSession().getAttribute(Consts.SESSION_BUYER);
//试点分公司
Object SESSION_BRANCH =req.getSession().getAttribute(Consts.SESSION_BRANCH);
log.info(req.getRemoteAddr() + "\tvisite\t" + uri);
if (isNeedCheck(uri)) {
if (SESSION_COMPANY == null && SESSION_BUYER ==
null && SESSION_BRANCH==null) {
res.sendRedirect(req.getContextPath() +"/login.jsp");// 用户未登
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
}
不合规说明:
认证过滤器中只是判断用户有没有登录,并没有区分每种用户具有哪些 URL 的访问权限。
合规的代码示例:
java
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
// url 权限存放在缓存中 UrlPrivInfo
HttpServletRequest req = (HttpServletRequest) arg0;
HttpServletResponse res = (HttpServletResponse) arg1;
String pathInfo = req.getPathInfo() == null ? "" : req.getPathInfo();
String url = req.getServletPath() + pathInfo;
Map map = new HashMap();
if (PrivCacheManager.get(Constant.URLPRIVKEY) != null) {
map = (Map) PrivCacheManager.get(Constant.URLPRIVKEY);
}
合规说明:
该 url权限控制过滤器,根据登录用户的不同,加载该用户所拥有的所有 URL,当用户访问某个 URL 的时候,过滤器会判断该用户是否拥有访问权限,防止纵向越权。