编写handler 来对此漏洞进行修复
注:JFinal的 Handler是 AOP + 责任链 模式的一个变种,JFinal对action及interceptor处理自身也是一个Handler名叫ActionHandler,可见其功能之强大。平时开发的时候一般不需要使用,当Action与Interceptor还不够用的时候可以考虑Handler上场。另外Handler可以替代Filter,你无需在web.xml 中再声明Filter了。举几个应用的例子吧:1:网站改版,需要在新网站上兼容老网站上的url时能用到,只需要在Handler中将老网站url转换成新的就可以了。2:防恶意抓取可以使用Handler分析请求规律并封锁ip地址。3:如果你想自创一套路由规则可以用Handler。 如果你要做网站访问日志也可以使用Handler。Handler 可以接管所有请求,所以是无所不能的,你甚至可以基于 Handler 再扩展出一套自己的web 框架 😃
直接上代码(hanlder 内容):
package com.gdszgl.common.handler;
import com.jfinal.handler.Handler;
import com.jfinal.kit.HandlerKit;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**ren
*/
public class HttpHostHandler extends Handler {
public HttpHostHandler() {
System.out.println("头部host过滤已启动--------------------------");
}
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
//检测到会话cookie中缺少HttpOnly属性的问题解决
response.setHeader( "Set-Cookie", "name=value; HttpOnly");
//点击劫持:X-Frame-Options 配置
response.addHeader("x-frame-options","SAMEORIGIN");
System.out.println("头部host 过滤开始--------------------------");
String host=request.getHeader("host");
if(host!=null&&checkHost(host)==true){
System.out.println("头部host 过滤结束--------------------------");
next.handle(target, request, response, isHandled);
}else{
HandlerKit.renderError404(request, response, isHandled);
System.out.println("头部host 过滤结束--------------------------");
return;
}
}
private boolean checkHost(String host){
if(host.contains("xx.xx.xx.xx")){//此处为自己网站的主机地址
return true;
}
return true;
}
}
MainConfig 启动类的内容。
//处理头部host 的问题
me.add(new HttpHostHandler());
博客参考
检测到目标URL存在http host头攻击漏洞(中风险) 文章
记录到这里,欧克!