首页 > 其他分享 >Tomcat如何防止X-Forwarded-For

Tomcat如何防止X-Forwarded-For

时间:2023-02-15 18:37:58浏览次数:42  
标签:请求 Tomcat xxx request 防止 IP地址 Forwarded

整改建议:

1、 配置Tomcat过滤器中的remoteIPHeader选项为“X-Forwarded-For”,让Tomcat从正确的请求头中取值;

2、 添加header拦截器,在请求到达Tomcat之前,如果发现请求头中存在X-Forwarded-For,就把它删掉;

3、 设置合理的Tomcat访问权限,只允许可信任IP地址对Tomcat服务器发起请求;

4、 在nginx服务器端配置proxy_set_header,将X-Forwarded-For设置为空;

5、 在web应用中实现过滤,编写filter,使用request.getHeader(“X-Forwarded-For”),如果取到值,则进行检查,如果不是可信任IP地址,则将取到的值删除。

代码表示:在web应用中实现过滤,编写filter,使用request.getHeader(“X-Forwarded-For”),如果取到值,则进行检查,如果不是可信任IP地址,则将取到的值删除。

方案一配置Tomcat过滤器中的remoteIPHeader选项为“X-Forwarded-For”,让Tomcat从正确的请求头中取值,如何配置示例

X-Forwarded-For可以在Tomcat的server.xml文件中的RemoteIpValve标签中配置,该标签的remoteIpHeader属性可以设置为X-Forwarded-For,表示Tomcat从X-Forwarded-For头中取值:


<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" /> 
如果你正在使用Apache作为前端网关服务器,你还需要配置正确的模式,使Apache将原始客户端IP地址添加到HTTP请求头中,否则这一配置将无效

方案二:添加header拦截器,在请求到达Tomcat之前,如果发现请求头中存在X-Forwarded-For,就把它删掉,如何实现

实现自定义的Filter,并在doFilter内实现以下逻辑:


//判断请求头中是否包含X-Forwarded-For
if (request.getHeader("X-Forwarded-For") != null) {
    //获取原有的请求头
    String value = request.getHeader("X-Forwarded-For");
    //删除X-Forwarded-For
    request.removeHeader("X-Forwarded-For");
    //重新设置请求头
    request.addHeader("X-Forwarded-For", value);
}

方案三:如何设置合理的Tomcat访问权限,只允许可信任IP地址对Tomcat服务器发起请求,从哪里配置

1、首先,打开Tomcat的conf目录下的server.xml文件,在其中添加如下配置:


<Connector port="8009" address="127.0.0.1" protocol="AJP/1.3" redirectPort="8443" 
                             connectionTimeout="20000" URIEncoding="UTF-8" 
                             acceptCount="200" maxThreads="200" 
                             allowedAddresses="IP地址" /> 

2、确保IP地址已经正确写入允许的IP地址段中,可以同时添加多个IP地址,用逗号隔开:


allowedAddresses="xxx.xxx.xx.x,xxx.xxx.xx.x,xxx.xxx.x.x" 

3、最后,重启Tomcat服务,使配置的IP地址在Tomcat上生效。

方案五:防止伪装IP,否则可以直接使用。

public class Filter implements javax.servlet.Filter{


public void destroy(){
}


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException{
/* get x-forwarded-for from request header /
String xForwardedFor = request.getHeader("X-Forwarded-For");
/ check x-forwarded-for IP /
if (xForwardedFor != null) {
/ validate Trust IP /
if (isTrustedIP(xForwardedFor)){
/ trusted IP, do nothing /
} else {
/ untrusted IP, delete X-Forwarded-For value /
xForwardedFor = null;
}
}
/ do filter */
chain.doFilter(request,response);
}


public void init(FilterConfig config) throws ServletException{


}


private boolean isTrustedIP(String ip) {
// TODO: validate trusted IP address
return true;
}
}

我与ChatGPT对话之实际场景应用。

标签:请求,Tomcat,xxx,request,防止,IP地址,Forwarded
From: https://www.cnblogs.com/zhuhuibiao/p/17124161.html

相关文章

  • ubuntu 安装 tomcat
    1.准备tomcat文件/home/apache-tomcat-9.0.71.zip2.解压tomcat文件sudounzip/home/apache-tomcat-9.0.71.zip3.tomcat放到指定目录sudomv/home/apache-tomcat-9......
  • tomcat server.xml标签功能详解
    1.具体说明  tomcat/conf/server.xml<!--属性说明port:指定一个端口,这个端口负责监听关闭Tomcat的请求shutdown:向以上端口发送的关闭服务器的命令字符串--><Serverport......
  • Tomcat启动—本地文件夹
    打开tomcat文件夹    打开bin目录   在路径这里输入cmd     就可以直接跳转到当前页面下接下来我们在cmd命令中启动startup.bat  (记......
  • tomcat和maven安装与配置
      链接:https://pan.baidu.com/s/1aezz2pfCn0DCCPw8udQFXA提取码:wd4f一、网站发布1.1、为什么要用tomcat网页开发好了,该如何发布呢?我们需要一款可以发布网站的服务器......
  • 伪装的IP地址,防止攻击行为被安全日志记录以及攻击溯源的方法有哪些
    请注意,以下只是与ChatGPT的对话伪装的IP地址,防止攻击行为被安全日志记录以及攻击溯源的方法有哪些??使用IP欺骗:在攻击时,采用虚构IP地址进行伪装,以避免被记录在安全日志中......
  • eclipse mavenWeb项目真正实现热部署(修改java代码和页面文件不用重启tomcat)
       1.前言首先,本文创作灵感源于作者signheart,特此鸣谢!原文链接见文末推荐;百度都搜破了,全网讲的都是如何将maven项目部署到tomcat上,对于热部署的认知,真是令人汗颜......
  • tomcat启动服务配置和出现的部分中文乱码问题
    (一)配置服务 WindowsServer2016系统中,tomcat不友好,启动速度特别慢1、在D:\apache-tomcat-8.5.7/bin目录下cmd2、注册:在命令行中输入serviceinstalltomcat8(服务名)......
  • 92、商城业务---购物车---防止添加购物车数据重复提交
    当我们添加购物车成功时,会跳转到如下页面当我们刷新这个页面时,会不断给后台发请求,就导致不断添加该商品致使该商品数量增多。解决办法:将添加成功与页面跳转分开以前我......
  • IDEA中Tomcat在控制台乱码问题
    首先要分清是tomcat日志编码,与idea的日志显示控制台编码tomcat日志编码:cmd内“cd/dtomcat根目录”“bin\catalina.batrun”运行,"chcp65001"切换cmd为utf8,"chcp936"切......
  • 关闭 ReportCrash 进程防止CPU占用率过高 [MacBook]
    关闭ReportCrash的原因自己MacBookPro总是过载,机器很热。结果通过看进程top命令,看到ReportCrash占用了了过高的CPU,而且好像我用不上。于是乎,得关掉。然后,机器就......