解决办法:在shiro的配置文件中 引入
解决办法:在shiro的配置文件中 引入
2.1再加全局拦截器:
import com.thinkgem.jeesite.common.mapper.JsonMapper;
import com.thinkgem.jeesite.common.utils.StringUtils;
import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
public class CsrfDefInterceptorUtil implements Filter {
public void destroy() {
// TODO Auto-generated method stub
System.out.println("过滤器1销毁方法");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request2 = (HttpServletRequest) request;
String referer = request2.getHeader("Referer");
String serverName = request.getServerName();
//1.判断是否存在外链请求本站
System.out.println("请求的域名是"+referer);
Boolean isTongGuo=true;
if (null != referer && referer.indexOf(serverName) < 0) {
isTongGuo=false;
}
String ctx_path = request2.getContextPath();
String request_url = request2.getRequestURI();
String action = request_url.substring(ctx_path.length());
System.out.println("拦截到的路径action:"+action);
//2.判断是否有xss攻击
Map parameterMap = request.getParameterMap();
if(parameterMap!=null&¶meterMap.size()>0){
String params= JsonMapper.toJsonString(parameterMap); //获取全部请求内容
System.out.println("拦截前params==========="+params);
String paramsNew=StringUtils.cleanXSS(params);
System.out.println("拦截后params==========="+paramsNew);
//若参数发生变化则说明有不合法字符 则阻止本次提交
if(!paramsNew.equals(params)){
isTongGuo=false;
}
}
//3.为cookie加上 Secure 和 HttpOnly属性
HttpServletResponse response2 = (HttpServletResponse)response;
Cookie[] cookies = request2.getCookies();
if(cookies!=null&&cookies.length>0){
for(Cookie cookie : cookies) {
cookie.setHttpOnly(true);
cookie.setSecure(true);
}
}
String sessionid = request2.getSession().getId();
response2.setHeader("Set-Cookie", "JSESSIONID="+sessionid+";Secure=true;HttpOnly");
if(isTongGuo){
chain.doFilter(request, response);
}else{
System.out.println("Referer过滤器 => 服务器:{} => 当前域名:{}"+ serverName+"; 而referer是:"+referer);
response.setContentType("text/html; charset=utf-8");
response.getWriter().write("拦截到不合法请求,请勿此操作!");
}
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("过滤器1初始化方法");
}
}
在web.xml中声明此拦截器
3. 高危漏洞xss攻击 :filterCookie xxxx.xx.CsrfDefInterceptorUtil filterCookie @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; //校验是否有xs攻击 String tokenJson= JsonMapper.toJsonString(token); Boolean aBoolean = com.thinkgem.jeesite.common.utils.StringUtils.matchXss(tokenJson); if(aBoolean==false){ throw new AuthenticationException("msg:疑似XSS攻击."); } }
解决办法:mvc全局拦截器处理非法字符 代码见上面的拦截器
4. 高危漏洞sql注入 :
解决办法:全局sql拦截处理非法sql字符,代码涉及公司代码安全,不再贴出,每个公司的分页拦截器也不一样,只要在分页拦截器中拦截就行
5.伪造请求头Referer验证请求头Referer是否包含服务名,代码见上面的拦截器
6.高危漏洞 AppScan 识别了不是通过 SSL 发送的登录请求。
解决办法:ssl证书+https+1,2,3,4,5解决方案
总结:这些处理方案对我们的系统真实有效,大神勿喷,仅供参考



