This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new afd4b752c9 Remove regex support for the RemoteIp[Filter|Valve]
afd4b752c9 is described below

commit afd4b752c99a64a5ca620d765db3a709648ff287
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Oct 1 20:01:26 2025 +0100

    Remove regex support for the RemoteIp[Filter|Valve]
---
 .../apache/catalina/filters/RemoteIpFilter.java    | 102 +++-------
 java/org/apache/catalina/valves/RemoteIpValve.java | 103 +++-------
 .../catalina/filters/TestRemoteIpFilter.java       | 118 +++--------
 .../apache/catalina/valves/TestRemoteIpValve.java  | 215 +++++++--------------
 webapps/docs/changelog.xml                         |   5 +
 webapps/docs/config/filter.xml                     |  56 +++---
 6 files changed, 181 insertions(+), 418 deletions(-)

diff --git a/java/org/apache/catalina/filters/RemoteIpFilter.java 
b/java/org/apache/catalina/filters/RemoteIpFilter.java
index 1632cb7d52..17c937381a 100644
--- a/java/org/apache/catalina/filters/RemoteIpFilter.java
+++ b/java/org/apache/catalina/filters/RemoteIpFilter.java
@@ -29,7 +29,6 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Pattern;
 
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.GenericFilter;
@@ -110,11 +109,11 @@ import org.apache.tomcat.util.res.StringManager;
  * </tr>
  * <tr>
  * <td>internalProxies</td>
- * <td>Either a comma separated list of CIDR blocks or a single regular 
expression that matches the IP addresses of
- * internal proxies. If they appear in the <code>remoteIpHeader</code> value, 
they will be trusted and will not appear
- * in the <code>proxiesHeader</code> value</td>
+ * <td>A comma separated list of CIDR blocks that matches the IP addresses of 
the internal proxies. If they appear in
+ * the <code>remoteIpHeader</code> value, they will be trusted and will not 
appear in the <code>proxiesHeader</code>
+ * value</td>
  * <td>RemoteIPInternalProxy</td>
- * <td>Comma separated list of CIDR blocks or a single regular expression 
{@link Pattern}</td>
+ * <td>Comma separated list of CIDR blocks</td>
  * 
<td>10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10,127.0.0.0/8,::1/128,fe80::/10,fc00::/7</td>
  * </tr>
  * <tr>
@@ -127,11 +126,11 @@ import org.apache.tomcat.util.res.StringManager;
  * </tr>
  * <tr>
  * <td>trustedProxies</td>
- * <td>Either a comma separated list of CIDR blocks or a single regular 
expression that matches the IP addresses of
- * internal proxies. If they appear in the <code>remoteIpHeader</code> value, 
they will be trusted and will appear in
- * the <code>proxiesHeader</code> value</td>
+ * <td>A comma separated list of CIDR blocks that matches the IP addresses of 
the internal proxies. If they appear in
+ * the <code>remoteIpHeader</code> value, they will be trusted and will appear 
in the <code>proxiesHeader</code> value
+ * </td>
  * <td>RemoteIPTrustedProxy</td>
- * <td>Comma separated list of CIDR blocks or a single regular expression 
{@link Pattern}</td>
+ * <td>Comma separated list of CIDR blocks</td>
  * <td>&nbsp;</td>
  * </tr>
  * <tr>
@@ -670,31 +669,14 @@ public class RemoteIpFilter extends GenericFilter {
 
     protected static final String ENABLE_LOOKUPS_PARAMETER = "enableLookups";
 
-    /**
-     * @see #setHttpServerPort(int)
-     */
     private int httpServerPort = 80;
 
-    /**
-     * @see #setHttpsServerPort(int)
-     */
     private int httpsServerPort = 443;
 
-    /**
-     * Regular expression pattern for internal proxies.
-     */
-    private Pattern internalProxiesRegex = null;
-
-    /**
-     * CIDR notation for internal proxies.
-     */
-    private NetMaskSet internalProxiesCidr =
+    private NetMaskSet internalProxies =
             
NetMaskSet.parse("10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10,127.0.0.0/8,"
 +
                     "::1/128,fe80::/10,fc00::/7");
 
-    /**
-     * @see #setProtocolHeader(String)
-     */
     private String protocolHeader = "X-Forwarded-Proto";
 
     private String protocolHeaderHttpsValue = "https";
@@ -707,34 +689,17 @@ public class RemoteIpFilter extends GenericFilter {
 
     private boolean changeLocalPort = false;
 
-    /**
-     * @see #setProxiesHeader(String)
-     */
     private String proxiesHeader = "X-Forwarded-By";
 
-    /**
-     * @see #setRemoteIpHeader(String)
-     */
     private String remoteIpHeader = "X-Forwarded-For";
 
-    /**
-     * @see #setRequestAttributesEnabled(boolean)
-     */
     private boolean requestAttributesEnabled = true;
 
-    /**
-     * Regular expression notation for trusted proxies.
-     */
-    private Pattern trustedProxiesRegex = null;
-
-    /**
-     * CIDR notation for trusted proxies.
-     */
-    private NetMaskSet trustedProxiesCidr = null;
-
+    private NetMaskSet trustedProxies = null;
 
     private boolean enableLookups;
 
+
     public void doFilter(HttpServletRequest request, HttpServletResponse 
response, FilterChain chain)
             throws IOException, ServletException {
 
@@ -889,10 +854,7 @@ public class RemoteIpFilter extends GenericFilter {
      * @return {@code true} if the IP address is from an internal proxy, 
otherwise {@code false}
      */
     private boolean isInternalProxy(String remoteIp) {
-        if (internalProxiesRegex != null && 
internalProxiesRegex.matcher(remoteIp).matches()) {
-            return true;
-        }
-        return checkIsCidr(internalProxiesCidr, remoteIp);
+        return checkIsCidr(internalProxies, remoteIp);
     }
 
     /**
@@ -903,11 +865,7 @@ public class RemoteIpFilter extends GenericFilter {
      * @return {@code true} if the IP address is from a trusted proxy, 
otherwise {@code false}
      */
     private boolean isTrustedProxy(String remoteIp) {
-        if (trustedProxiesRegex != null && 
trustedProxiesRegex.matcher(remoteIp).matches()) {
-            return true;
-        }
-
-        return checkIsCidr(trustedProxiesCidr, remoteIp);
+        return checkIsCidr(trustedProxies, remoteIp);
     }
 
     private boolean checkIsCidr(NetMaskSet netMaskSet, String remoteIp) {
@@ -991,10 +949,8 @@ public class RemoteIpFilter extends GenericFilter {
      * @return The currently configured internal proxies.
      */
     public String getInternalProxies() {
-        if (internalProxiesCidr != null) {
-            return internalProxiesCidr.toString();
-        } else if (internalProxiesRegex != null) {
-            return internalProxiesRegex.toString();
+        if (internalProxies != null) {
+            return internalProxies.toString();
         } else {
             return null;
         }
@@ -1035,10 +991,8 @@ public class RemoteIpFilter extends GenericFilter {
      * @return The currently configured trusted proxies.
      */
     public String getTrustedProxies() {
-        if (trustedProxiesCidr != null) {
-            return trustedProxiesCidr.toString();
-        } else if (trustedProxiesRegex != null) {
-            return trustedProxiesRegex.toString();
+        if (trustedProxies != null) {
+            return trustedProxies.toString();
         } else {
             return null;
         }
@@ -1175,20 +1129,15 @@ public class RemoteIpFilter extends GenericFilter {
     }
 
     /**
-     * Set the internal proxies either as a comma separated list of CIDR 
blocks or a single regular expression.
+     * Set the internal proxies as a comma separated list of CIDR blocks.
      *
      * @param internalProxies The new internal proxies
      */
     public void setInternalProxies(String internalProxies) {
         if (internalProxies == null || internalProxies.isEmpty()) {
-            this.internalProxiesRegex = null;
-            this.internalProxiesCidr = null;
-        } else if (internalProxies.indexOf('/') > 0) {
-            this.internalProxiesRegex = null;
-            this.internalProxiesCidr = NetMaskSet.parse(internalProxies);
+            this.internalProxies = null;
         } else {
-            this.internalProxiesRegex = Pattern.compile(internalProxies);
-            this.internalProxiesCidr = null;
+            this.internalProxies = NetMaskSet.parse(internalProxies);
         }
     }
 
@@ -1310,20 +1259,15 @@ public class RemoteIpFilter extends GenericFilter {
     }
 
     /**
-     * Set the trusted proxies either as a comma separated list of CIDR blocks 
or a single regular expression.
+     * Set the trusted proxies as a comma separated list of CIDR blocks.
      *
      * @param trustedProxies The new trusted proxies
      */
     public void setTrustedProxies(String trustedProxies) {
         if (trustedProxies == null || trustedProxies.isEmpty()) {
-            this.trustedProxiesRegex = null;
-            this.trustedProxiesCidr = null;
-        } else if (trustedProxies.indexOf('/') > 0) {
-            this.trustedProxiesRegex = null;
-            this.trustedProxiesCidr = NetMaskSet.parse(trustedProxies);
+            this.trustedProxies = null;
         } else {
-            this.trustedProxiesCidr = null;
-            this.trustedProxiesRegex = Pattern.compile(trustedProxies);
+            this.trustedProxies = NetMaskSet.parse(trustedProxies);
         }
     }
 
diff --git a/java/org/apache/catalina/valves/RemoteIpValve.java 
b/java/org/apache/catalina/valves/RemoteIpValve.java
index f54879070d..a10b09c407 100644
--- a/java/org/apache/catalina/valves/RemoteIpValve.java
+++ b/java/org/apache/catalina/valves/RemoteIpValve.java
@@ -22,7 +22,6 @@ import java.net.UnknownHostException;
 import java.util.ArrayDeque;
 import java.util.Deque;
 import java.util.Enumeration;
-import java.util.regex.Pattern;
 
 import jakarta.servlet.ServletException;
 
@@ -91,11 +90,11 @@ import org.apache.tomcat.util.http.parser.Host;
  * </tr>
  * <tr>
  * <td>internalProxies</td>
- * <td>Either a comma separated list of CIDR blocks or a single regular 
expression that matches the IP addresses of
- * internal proxies. If they appear in the <code>remoteIpHeader</code> value, 
they will be trusted and will not appear
- * in the <code>proxiesHeader</code> value</td>
+ * <td>A comma separated list of CIDR blocks that matches the IP addresses of 
the internal proxies. If they appear in
+ * the <code>remoteIpHeader</code> value, they will be trusted and will not 
appear in the <code>proxiesHeader</code>
+ * value</td>
  * <td>RemoteIPInternalProxy</td>
- * <td>Comma separated list of CIDR blocks or a single regular expression 
{@link Pattern}</td>
+ * <td>Comma separated list of CIDR blocks</td>
  * 
<td>10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10,127.0.0.0/8,::1/128,fe80::/10,fc00::/7</td>
  * </tr>
  * <tr>
@@ -108,11 +107,11 @@ import org.apache.tomcat.util.http.parser.Host;
  * </tr>
  * <tr>
  * <td>trustedProxies</td>
- * <td>Either a comma separated list of CIDR blocks or a single regular 
expression that matches the IP addresses of
- * internal proxies. If they appear in the <code>remoteIpHeader</code> value, 
they will be trusted and will appear in
- * the <code>proxiesHeader</code> value</td>
+ * <td>A comma separated list of CIDR blocks that matches the IP addresses of 
the internal proxies. If they appear in
+ * the <code>remoteIpHeader</code> value, they will be trusted and will appear 
in the <code>proxiesHeader</code> value
+ * </td>
  * <td>RemoteIPTrustedProxy</td>
- * <td>Comma separated list of CIDR blocks or a single regular expression 
{@link Pattern}</td>
+ * <td>Comma separated list of CIDR blocks</td>
  * <td>&nbsp;</td>
  * </tr>
  * <tr>
@@ -352,66 +351,29 @@ public class RemoteIpValve extends ValveBase {
 
     private boolean changeLocalName = false;
 
-    /**
-     * @see #setHttpServerPort(int)
-     */
     private int httpServerPort = 80;
 
-    /**
-     * @see #setHttpsServerPort(int)
-     */
     private int httpsServerPort = 443;
 
     private String portHeader = null;
 
     private boolean changeLocalPort = false;
 
-    /**
-     * Regular expression pattern for internal proxies.
-     */
-    private Pattern internalProxiesRegex = null;
-
-    /**
-     * CIDR notation for internal proxies.
-     */
-    private NetMaskSet internalProxiesCidr =
+    private NetMaskSet internalProxies =
             
NetMaskSet.parse("10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10,127.0.0.0/8,"
 +
                     "::1/128,fe80::/10,fc00::/7");
 
-    /**
-     * @see #setProtocolHeader(String)
-     */
     private String protocolHeader = "X-Forwarded-Proto";
 
-    /**
-     * @see #setProtocolHeaderHttpsValue(String)
-     */
     private String protocolHeaderHttpsValue = "https";
 
-    /**
-     * @see #setProxiesHeader(String)
-     */
     private String proxiesHeader = "X-Forwarded-By";
 
-    /**
-     * @see #setRemoteIpHeader(String)
-     */
     private String remoteIpHeader = "X-Forwarded-For";
 
-    /**
-     * @see #setRequestAttributesEnabled(boolean)
-     */
     private boolean requestAttributesEnabled = true;
 
-    /**
-     * Regular expression notation for trusted proxies.
-     */
-    private Pattern trustedProxiesRegex = null;
-
-    /**
-     * CIDR notation for trusted proxies.
-     */
-    private NetMaskSet trustedProxiesCidr = null;
+    private NetMaskSet trustedProxies = null;
 
 
     /**
@@ -492,10 +454,8 @@ public class RemoteIpValve extends ValveBase {
      * @return The currently configured internal proxies.
      */
     public String getInternalProxies() {
-        if (internalProxiesCidr != null) {
-            return internalProxiesCidr.toString();
-        } else if (internalProxiesRegex != null) {
-            return internalProxiesRegex.toString();
+        if (internalProxies != null) {
+            return internalProxies.toString();
         } else {
             return null;
         }
@@ -552,10 +512,8 @@ public class RemoteIpValve extends ValveBase {
      * @return The currently configured trusted proxies.
      */
     public String getTrustedProxies() {
-        if (trustedProxiesCidr != null) {
-            return trustedProxiesCidr.toString();
-        } else if (trustedProxiesRegex != null) {
-            return trustedProxiesRegex.toString();
+        if (trustedProxies != null) {
+            return trustedProxies.toString();
         } else {
             return null;
         }
@@ -753,10 +711,7 @@ public class RemoteIpValve extends ValveBase {
      * @return {@code true} if the IP address is from an internal proxy, 
otherwise {@code false}
      */
     private boolean isInternalProxy(String remoteIp) {
-        if (internalProxiesRegex != null && 
internalProxiesRegex.matcher(remoteIp).matches()) {
-            return true;
-        }
-        return checkIsCidr(internalProxiesCidr, remoteIp);
+        return checkIsCidr(internalProxies, remoteIp);
     }
 
     /**
@@ -767,11 +722,7 @@ public class RemoteIpValve extends ValveBase {
      * @return {@code true} if the IP address is from a trusted proxy, 
otherwise {@code false}
      */
     private boolean isTrustedProxy(String remoteIp) {
-        if (trustedProxiesRegex != null && 
trustedProxiesRegex.matcher(remoteIp).matches()) {
-            return true;
-        }
-
-        return checkIsCidr(trustedProxiesCidr, remoteIp);
+        return checkIsCidr(trustedProxies, remoteIp);
     }
 
     private boolean checkIsCidr(NetMaskSet netMaskSet, String remoteIp) {
@@ -854,20 +805,15 @@ public class RemoteIpValve extends ValveBase {
     }
 
     /**
-     * Set the internal proxies either as a comma separated list of CIDR 
blocks or a single regular expression.
+     * Set the internal proxies as a comma separated list of CIDR blocks.
      *
      * @param internalProxies The new internal proxies
      */
     public void setInternalProxies(String internalProxies) {
         if (internalProxies == null || internalProxies.isEmpty()) {
-            this.internalProxiesRegex = null;
-            this.internalProxiesCidr = null;
-        } else if (internalProxies.indexOf('/') > 0) {
-            this.internalProxiesRegex = null;
-            this.internalProxiesCidr = NetMaskSet.parse(internalProxies);
+            this.internalProxies = null;
         } else {
-            this.internalProxiesRegex = Pattern.compile(internalProxies);
-            this.internalProxiesCidr = null;
+            this.internalProxies = NetMaskSet.parse(internalProxies);
         }
     }
 
@@ -960,20 +906,15 @@ public class RemoteIpValve extends ValveBase {
     }
 
     /**
-     * Set the trusted proxies either as a comma separated list of CIDR blocks 
or a single regular expression.
+     * Set the trusted proxies as a comma separated list of CIDR blocks.
      *
      * @param trustedProxies The new trusted proxies
      */
     public void setTrustedProxies(String trustedProxies) {
         if (trustedProxies == null || trustedProxies.isEmpty()) {
-            this.trustedProxiesRegex = null;
-            this.trustedProxiesCidr = null;
-        } else if (trustedProxies.indexOf('/') > 0) {
-            this.trustedProxiesRegex = null;
-            this.trustedProxiesCidr = NetMaskSet.parse(trustedProxies);
+            this.trustedProxies = null;
         } else {
-            this.trustedProxiesCidr = null;
-            this.trustedProxiesRegex = Pattern.compile(trustedProxies);
+            this.trustedProxies = NetMaskSet.parse(trustedProxies);
         }
     }
 }
diff --git a/test/org/apache/catalina/filters/TestRemoteIpFilter.java 
b/test/org/apache/catalina/filters/TestRemoteIpFilter.java
index 7aca5d4dc2..5243a3c623 100644
--- a/test/org/apache/catalina/filters/TestRemoteIpFilter.java
+++ b/test/org/apache/catalina/filters/TestRemoteIpFilter.java
@@ -28,7 +28,6 @@ import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Pattern;
 
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.ServletException;
@@ -260,7 +259,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         // PREPARE
         FilterDef filterDef = new FilterDef();
         filterDef.addInitParameter("internalProxies", 
"192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -291,7 +290,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         // PREPARE
         FilterDef filterDef = new FilterDef();
         filterDef.addInitParameter("internalProxies", 
"192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -323,8 +322,8 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         // PREPARE
         RemoteIpFilter remoteIpFilter = new RemoteIpFilter();
         FilterDef filterDef = new FilterDef();
-        filterDef.addInitParameter("internalProxies", 
"192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("internalProxies", "192.168.0.10/31");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -333,7 +332,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
 
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
-        request.setHeader("x-forwarded-for", "140.211.11.130, proxy1, proxy2");
+        request.setHeader("x-forwarded-for", "140.211.11.130, 200.0.0.1, 
200.0.0.2");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
@@ -343,7 +342,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = actualRequest.getRemoteAddr();
@@ -360,16 +359,16 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         RemoteIpFilter remoteIpFilter = new RemoteIpFilter();
         FilterDef filterDef = new FilterDef();
         filterDef.addInitParameter("internalProxies", "");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
         filterDef.setFilter(remoteIpFilter);
         MockHttpServletRequest request = new MockHttpServletRequest();
 
-        request.setRemoteAddr("proxy3");
+        request.setRemoteAddr("200.0.0.3");
         request.setRemoteHost("remote-host-original-value");
-        request.setHeader("x-forwarded-for", "140.211.11.130, proxy1, proxy2");
+        request.setHeader("x-forwarded-for", "140.211.11.130, 200.0.0.1, 
200.0.0.2");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
@@ -379,7 +378,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2,proxy3",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2,200.0.0.3",
                 actualXForwardedBy);
 
         String actualRemoteAddr = actualRequest.getRemoteAddr();
@@ -395,16 +394,16 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         // PREPARE
         RemoteIpFilter remoteIpFilter = new RemoteIpFilter();
         FilterDef filterDef = new FilterDef();
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
         filterDef.setFilter(remoteIpFilter);
         MockHttpServletRequest request = new MockHttpServletRequest();
 
-        request.setRemoteAddr("proxy3");
+        request.setRemoteAddr("200.0.0.3");
         request.setRemoteHost("remote-host-original-value");
-        request.setHeader("x-forwarded-for", "140.211.11.130, proxy1, proxy2");
+        request.setHeader("x-forwarded-for", "140.211.11.130, 200.0.0.1, 
200.0.0.2");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
@@ -414,7 +413,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2,proxy3",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2,200.0.0.3",
                 actualXForwardedBy);
 
         String actualRemoteAddr = actualRequest.getRemoteAddr();
@@ -429,8 +428,8 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
 
         // PREPARE
         FilterDef filterDef = new FilterDef();
-        filterDef.addInitParameter("internalProxies", 
"127\\.0\\.0\\.1|192\\.168\\..*|another-internal-proxy");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("internalProxies", 
"127.0.0.1,192.168.0.0/16,10.0.0.1");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -438,8 +437,8 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
         request.addHeader("x-forwarded-for", "140.211.11.130");
-        request.addHeader("x-forwarded-for", "proxy1");
-        request.addHeader("x-forwarded-for", "proxy2");
+        request.addHeader("x-forwarded-for", "200.0.0.1");
+        request.addHeader("x-forwarded-for", "200.0.0.2");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
@@ -449,7 +448,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = actualRequest.getRemoteAddr();
@@ -464,8 +463,8 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
 
         // PREPARE
         FilterDef filterDef = new FilterDef();
-        filterDef.addInitParameter("internalProxies", 
"192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("internalProxies", "192.168.0.10/31");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -473,7 +472,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
 
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
-        request.setHeader("x-forwarded-for", "140.211.11.130, proxy1, proxy2, 
192.168.0.10, 192.168.0.11");
+        request.setHeader("x-forwarded-for", "140.211.11.130, 200.0.0.1, 
200.0.0.2, 192.168.0.10, 192.168.0.11");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
@@ -483,7 +482,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = actualRequest.getRemoteAddr();
@@ -498,7 +497,7 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         // PREPARE
         FilterDef filterDef = new FilterDef();
         filterDef.addInitParameter("internalProxies", 
"192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -506,14 +505,14 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
 
         request.setRemoteAddr("not-allowed-internal-proxy");
         request.setRemoteHost("not-allowed-internal-proxy-host");
-        request.setHeader("x-forwarded-for", "140.211.11.130, proxy1, proxy2");
+        request.setHeader("x-forwarded-for", "140.211.11.130, 200.0.0.1, 
200.0.0.2");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
 
         // VERIFY
         String actualXForwardedFor = 
actualRequest.getHeader("x-forwarded-for");
-        Assert.assertEquals("x-forwarded-for must be unchanged", 
"140.211.11.130, proxy1, proxy2", actualXForwardedFor);
+        Assert.assertEquals("x-forwarded-for must be unchanged", 
"140.211.11.130, 200.0.0.1, 200.0.0.2", actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
         Assert.assertNull("x-forwarded-by must be null", actualXForwardedBy);
@@ -529,8 +528,8 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
     public void testInvokeUntrustedProxyInTheChain() throws Exception {
         // PREPARE
         FilterDef filterDef = new FilterDef();
-        filterDef.addInitParameter("internalProxies", 
"192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        filterDef.addInitParameter("trustedProxies", "proxy1|proxy2|proxy3");
+        filterDef.addInitParameter("internalProxies", "192.168.0.10/31");
+        filterDef.addInitParameter("trustedProxies", 
"200.0.0.1,200.0.0.2,200.0.0.3");
         filterDef.addInitParameter("remoteIpHeader", "x-forwarded-for");
         filterDef.addInitParameter("proxiesHeader", "x-forwarded-by");
 
@@ -538,18 +537,18 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
 
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
-        request.setHeader("x-forwarded-for", "140.211.11.130, proxy1, 
untrusted-proxy, proxy2");
+        request.setHeader("x-forwarded-for", "140.211.11.130, 200.0.0.1, 
untrusted-proxy, 200.0.0.2");
 
         // TEST
         HttpServletRequest actualRequest = testRemoteIpFilter(filterDef, 
request).getRequest();
 
         // VERIFY
         String actualXForwardedFor = 
actualRequest.getHeader("x-forwarded-for");
-        Assert.assertEquals("ip/host before untrusted-proxy must appear in 
x-forwarded-for", "140.211.11.130,proxy1",
+        Assert.assertEquals("ip/host before untrusted-proxy must appear in 
x-forwarded-for", "140.211.11.130,200.0.0.1",
                 actualXForwardedFor);
 
         String actualXForwardedBy = actualRequest.getHeader("x-forwarded-by");
-        Assert.assertEquals("ip/host after untrusted-proxy must appear in  
x-forwarded-by", "proxy2",
+        Assert.assertEquals("ip/host after untrusted-proxy must appear in  
x-forwarded-by", "200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = actualRequest.getRemoteAddr();
@@ -843,61 +842,6 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
         }
     }
 
-    @Test
-    public void testInternalProxiesRegex() throws Exception {
-        RemoteIpFilter remoteIpFilter = new RemoteIpFilter();
-        // Regex equivalent of default
-        
remoteIpFilter.setInternalProxies("10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "192\\.168\\.\\d{1,3}\\.\\d{1,3}|" + 
"169\\.254\\.\\d{1,3}\\.\\d{1,3}|" +
-                "127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|" + 
"100\\.6[4-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "100\\.[7-9]{1}\\d{1}\\.\\d{1,3}\\.\\d{1,3}|" + 
"100\\.1[0-1]{1}\\d{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "100\\.12[0-7]{1}\\.\\d{1,3}\\.\\d{1,3}|" + 
"172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" + 
"172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "0:0:0:0:0:0:0:1|::1|" + "fe[89ab]\\p{XDigit}:.*|" + 
"f[cd]\\p{XDigit}{2}+:.*");
-        Pattern internalProxiesPattern = 
Pattern.compile(remoteIpFilter.getInternalProxies());
-
-        doTestPattern(internalProxiesPattern, "8.8.8.8", false);
-        doTestPattern(internalProxiesPattern, "100.62.0.0", false);
-        doTestPattern(internalProxiesPattern, "100.63.255.255", false);
-        doTestPattern(internalProxiesPattern, "100.64.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.65.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.68.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.72.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.88.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.95.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.102.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.110.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.126.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.127.255.255", true);
-        doTestPattern(internalProxiesPattern, "100.128.0.0", false);
-        doTestPattern(internalProxiesPattern, "100.130.0.0", false);
-        // Bug 69600 - IPv6 RFC 4193 Unique Local IPv6 Unicast Addresses
-        doTestPattern(internalProxiesPattern, 
"fe79:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false);
-        doTestPattern(internalProxiesPattern, 
"fe80:0000:0000:0000:0000:0000:0000:0000", true);
-        doTestPattern(internalProxiesPattern, "fe80::", true);
-        doTestPattern(internalProxiesPattern, 
"fe80:0000:0000:0000:0000:0000:0000:0001", true);
-        doTestPattern(internalProxiesPattern, "fe80::1", true);
-        doTestPattern(internalProxiesPattern, 
"fe80:1234:5678:9abc:def0:1234:5678:9abc", true);
-        doTestPattern(internalProxiesPattern, 
"febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff", true);
-        doTestPattern(internalProxiesPattern, 
"fec0:0000:0000:0000:0000:0000:0000:0000", false);
-        doTestPattern(internalProxiesPattern, "fec0::", false);
-        // Bug 69600 - IPv6 RFC 4291 Link Local IPv6 Unicast Addresses
-        doTestPattern(internalProxiesPattern, 
"fbff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false);
-        doTestPattern(internalProxiesPattern, 
"fc00:0000:0000:0000:0000:0000:0000:0000", true);
-        doTestPattern(internalProxiesPattern, "fc00::", true);
-        doTestPattern(internalProxiesPattern, 
"fc00:0000:0000:0000:0000:0000:0000:0001", true);
-        doTestPattern(internalProxiesPattern, "fc00::1", true);
-        doTestPattern(internalProxiesPattern, 
"fc00:1234:5678:9abc:def0:1234:5678:9abc", true);
-        doTestPattern(internalProxiesPattern, 
"fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", true);
-        doTestPattern(internalProxiesPattern, 
"fe00:0000:0000:0000:0000:0000:0000:0000", false);
-        doTestPattern(internalProxiesPattern, "fe00::", false);
-    }
-
-    private void doTestPattern(Pattern pattern, String input, boolean 
expectedMatch) {
-        boolean match = pattern.matcher(input).matches();
-        Assert.assertEquals(input, Boolean.valueOf(expectedMatch), 
Boolean.valueOf(match));
-    }
-
     @Test
     public void testInvokeAllowedRemoteAddrWithNullRemoteIpHeaderCidr() throws 
Exception {
         // PREPARE
diff --git a/test/org/apache/catalina/valves/TestRemoteIpValve.java 
b/test/org/apache/catalina/valves/TestRemoteIpValve.java
index 4d35fb55cc..d89a4ec601 100644
--- a/test/org/apache/catalina/valves/TestRemoteIpValve.java
+++ b/test/org/apache/catalina/valves/TestRemoteIpValve.java
@@ -21,7 +21,6 @@ import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.regex.Pattern;
 
 import jakarta.servlet.ServletException;
 
@@ -117,8 +116,8 @@ public class TestRemoteIpValve {
     public void testInvokeAllowedRemoteAddrWithNullRemoteIpHeader() throws 
Exception {
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setInternalProxies("192.168.0.10/31");
+        remoteIpValve.setTrustedProxies("200.0.0.1, 200.0.0.2, 200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -157,8 +156,8 @@ public class TestRemoteIpValve {
 
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        
remoteIpValve.setInternalProxies("192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setInternalProxies("192.168.0.10/31");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -168,7 +167,7 @@ public class TestRemoteIpValve {
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
         request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130, proxy1, proxy2");
+                .setString("140.211.11.130, 200.0.0.1, 200.0.0.2");
 
         // TEST
         remoteIpValve.invoke(request, null);
@@ -178,7 +177,7 @@ public class TestRemoteIpValve {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = 
remoteAddrAndHostTrackerValve.getForwardedBy();
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
@@ -200,17 +199,17 @@ public class TestRemoteIpValve {
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
         remoteIpValve.setInternalProxies("");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
         remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
 
         Request request = new MockRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("proxy3");
+        request.setRemoteAddr("200.0.0.3");
         request.setRemoteHost("remote-host-original-value");
         request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130, proxy1, proxy2");
+                .setString("140.211.11.130, 200.0.0.1, 200.0.0.2");
 
         // TEST
         remoteIpValve.invoke(request, null);
@@ -220,7 +219,7 @@ public class TestRemoteIpValve {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = 
remoteAddrAndHostTrackerValve.getForwardedBy();
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2,proxy3",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2,200.0.0.3",
                 actualXForwardedBy);
 
         String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
@@ -230,7 +229,7 @@ public class TestRemoteIpValve {
         Assert.assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
 
         String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        Assert.assertEquals("postInvoke remoteAddr", "proxy3", 
actualPostInvokeRemoteAddr);
+        Assert.assertEquals("postInvoke remoteAddr", "200.0.0.3", 
actualPostInvokeRemoteAddr);
 
         String actualPostInvokeRemoteHost = request.getRemoteHost();
         Assert.assertEquals("postInvoke remoteAddr", 
"remote-host-original-value", actualPostInvokeRemoteHost);
@@ -241,17 +240,17 @@ public class TestRemoteIpValve {
 
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
         remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
 
         Request request = new MockRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("proxy3");
+        request.setRemoteAddr("200.0.0.3");
         request.setRemoteHost("remote-host-original-value");
         request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130, proxy1, proxy2");
+                .setString("140.211.11.130, 200.0.0.1, 200.0.0.2");
 
         // TEST
         remoteIpValve.invoke(request, null);
@@ -261,7 +260,7 @@ public class TestRemoteIpValve {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = 
remoteAddrAndHostTrackerValve.getForwardedBy();
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2,proxy3",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2,200.0.0.3",
                 actualXForwardedBy);
 
         String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
@@ -271,7 +270,7 @@ public class TestRemoteIpValve {
         Assert.assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
 
         String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        Assert.assertEquals("postInvoke remoteAddr", "proxy3", 
actualPostInvokeRemoteAddr);
+        Assert.assertEquals("postInvoke remoteAddr", "200.0.0.3", 
actualPostInvokeRemoteAddr);
 
         String actualPostInvokeRemoteHost = request.getRemoteHost();
         Assert.assertEquals("postInvoke remoteAddr", 
"remote-host-original-value", actualPostInvokeRemoteHost);
@@ -282,8 +281,8 @@ public class TestRemoteIpValve {
 
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        
remoteIpValve.setInternalProxies("192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setInternalProxies("192.168.0.10/31");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -293,7 +292,7 @@ public class TestRemoteIpValve {
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
         request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130, proxy1, proxy2, 192.168.0.10, 
192.168.0.11");
+                .setString("140.211.11.130, 200.0.0.1, 200.0.0.2, 
192.168.0.10, 192.168.0.11");
 
         // TEST
         remoteIpValve.invoke(request, null);
@@ -303,7 +302,7 @@ public class TestRemoteIpValve {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = 
remoteAddrAndHostTrackerValve.getForwardedBy();
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
@@ -324,8 +323,8 @@ public class TestRemoteIpValve {
 
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        
remoteIpValve.setInternalProxies("192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setInternalProxies("192.168.0.10/31");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -365,8 +364,8 @@ public class TestRemoteIpValve {
 
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        
remoteIpValve.setInternalProxies("127\\.0\\.0\\.1|192\\.168\\..*|another-internal-proxy");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setInternalProxies("127.0.0.1,192.168.0.0/16,10.0.0.1");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -376,8 +375,8 @@ public class TestRemoteIpValve {
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
         
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("proxy1");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("proxy2");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("200.0.0.1");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("200.0.0.2");
 
         // TEST
         remoteIpValve.invoke(request, null);
@@ -387,7 +386,7 @@ public class TestRemoteIpValve {
         Assert.assertNull("all proxies are trusted, x-forwarded-for must be 
null", actualXForwardedFor);
 
         String actualXForwardedBy = 
remoteAddrAndHostTrackerValve.getForwardedBy();
-        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1,proxy2",
+        Assert.assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "200.0.0.1,200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
@@ -408,8 +407,6 @@ public class TestRemoteIpValve {
 
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies(
-                
"172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3}");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProtocolHeader("x-forwarded-proto");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -954,8 +951,8 @@ public class TestRemoteIpValve {
     public void testInvokeNotAllowedRemoteAddr() throws Exception {
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        
remoteIpValve.setInternalProxies("192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setInternalProxies("192.168.0.10/31");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -965,14 +962,14 @@ public class TestRemoteIpValve {
         request.setRemoteAddr("not-allowed-internal-proxy");
         request.setRemoteHost("not-allowed-internal-proxy-host");
         request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130, proxy1, proxy2");
+                .setString("140.211.11.130, 200.0.0.1, 200.0.0.2");
 
         // TEST
         remoteIpValve.invoke(request, null);
 
         // VERIFY
         String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        Assert.assertEquals("x-forwarded-for must be unchanged", 
"140.211.11.130, proxy1, proxy2", actualXForwardedFor);
+        Assert.assertEquals("x-forwarded-for must be unchanged", 
"140.211.11.130, 200.0.0.1, 200.0.0.2", actualXForwardedFor);
 
         String actualXForwardedBy = request.getHeader("x-forwarded-by");
         Assert.assertNull("x-forwarded-by must be null", actualXForwardedBy);
@@ -994,8 +991,8 @@ public class TestRemoteIpValve {
     public void testInvokeUntrustedProxyInTheChain() throws Exception {
         // PREPARE
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        
remoteIpValve.setInternalProxies("192\\.168\\.0\\.10|192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1|proxy2|proxy3");
+        remoteIpValve.setInternalProxies("192.168.0.10/31");
+        remoteIpValve.setTrustedProxies("200.0.0.1,200.0.0.2,200.0.0.3");
         remoteIpValve.setRemoteIpHeader("x-forwarded-for");
         remoteIpValve.setProxiesHeader("x-forwarded-by");
         RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
@@ -1005,18 +1002,18 @@ public class TestRemoteIpValve {
         request.setRemoteAddr("192.168.0.10");
         request.setRemoteHost("remote-host-original-value");
         request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130, proxy1, untrusted-proxy, proxy2");
+                .setString("140.211.11.130, 200.0.0.1, untrusted-proxy, 
200.0.0.2");
 
         // TEST
         remoteIpValve.invoke(request, null);
 
         // VERIFY
         String actualXForwardedFor = 
remoteAddrAndHostTrackerValve.getForwardedFor();
-        Assert.assertEquals("ip/host before untrusted-proxy must appear in 
x-forwarded-for", "140.211.11.130,proxy1",
+        Assert.assertEquals("ip/host before untrusted-proxy must appear in 
x-forwarded-for", "140.211.11.130,200.0.0.1",
                 actualXForwardedFor);
 
         String actualXForwardedBy = 
remoteAddrAndHostTrackerValve.getForwardedBy();
-        Assert.assertEquals("ip/host after untrusted-proxy must appear in  
x-forwarded-by", "proxy2",
+        Assert.assertEquals("ip/host after untrusted-proxy must appear in  
x-forwarded-by", "200.0.0.2",
                 actualXForwardedBy);
 
         String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
@@ -1106,61 +1103,6 @@ public class TestRemoteIpValve {
                 request.getAttribute(Globals.REQUEST_FORWARDED_ATTRIBUTE));
     }
 
-    @Test
-    public void testRequestForwardedForWithPortNumber() throws Exception {
-
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-
-        Request request = new MockRequest(new org.apache.coyote.Request());
-        // client ip
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("192.168.0.10");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130:1234");
-        // protocol
-        request.setServerPort(8080);
-        request.getCoyoteRequest().scheme().setString("http");
-
-        // TEST
-        remoteIpValve.invoke(request, null);
-
-        // VERIFY
-
-        Assert.assertEquals("140.211.11.130:1234", 
remoteAddrAndHostTrackerValve.getRemoteAddr());
-    }
-
-    @Test
-    public void testRequestForwardedForWithProxyPortNumber() throws Exception {
-
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        // remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        // remoteIpValve.setProtocolHeader("x-forwarded-proto");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-
-        Request request = new MockRequest(new org.apache.coyote.Request());
-        // client ip
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("192.168.0.10");
-        // Trust c.d
-        remoteIpValve.setTrustedProxies("foo\\.bar:123");
-        request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-                .setString("140.211.11.130:1234, foo.bar:123");
-        // protocol
-        request.setServerPort(8080);
-        request.getCoyoteRequest().scheme().setString("http");
-
-        // TEST
-        remoteIpValve.invoke(request, null);
-
-        // VERIFY
-
-        Assert.assertEquals("140.211.11.130:1234", 
remoteAddrAndHostTrackerValve.getRemoteAddr());
-    }
-
     private void assertArrayEquals(String[] expected, String[] actual) {
         if (expected == null) {
             Assert.assertNull(actual);
@@ -1180,56 +1122,45 @@ public class TestRemoteIpValve {
     @Test
     public void testInternalProxies() throws Exception {
         RemoteIpValve remoteIpValve = new RemoteIpValve();
-        // Regex equivalent of default
-        
remoteIpValve.setInternalProxies("10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "192\\.168\\.\\d{1,3}\\.\\d{1,3}|" + 
"169\\.254\\.\\d{1,3}\\.\\d{1,3}|" +
-                "127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|" + 
"100\\.6[4-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "100\\.[7-9]{1}\\d{1}\\.\\d{1,3}\\.\\d{1,3}|" + 
"100\\.1[0-1]{1}\\d{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "100\\.12[0-7]{1}\\.\\d{1,3}\\.\\d{1,3}|" + 
"172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" + 
"172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3}|" +
-                "0:0:0:0:0:0:0:1|::1|" + "fe[89ab]\\p{XDigit}:.*|" + 
"f[cd]\\p{XDigit}{2}+:.*");
-        Pattern internalProxiesPattern = 
Pattern.compile(remoteIpValve.getInternalProxies());
-
-        doTestPattern(internalProxiesPattern, "8.8.8.8", false);
-        doTestPattern(internalProxiesPattern, "100.62.0.0", false);
-        doTestPattern(internalProxiesPattern, "100.63.255.255", false);
-        doTestPattern(internalProxiesPattern, "100.64.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.65.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.68.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.72.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.88.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.95.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.102.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.110.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.126.0.0", true);
-        doTestPattern(internalProxiesPattern, "100.127.255.255", true);
-        doTestPattern(internalProxiesPattern, "100.128.0.0", false);
-        doTestPattern(internalProxiesPattern, "100.130.0.0", false);
+        NetMaskSet internalProxiesCidr = 
NetMaskSet.parse(remoteIpValve.getInternalProxies());
+
+        doTestNetMaskSet(internalProxiesCidr, "192.168.0.0", true);
+
+        doTestNetMaskSet(internalProxiesCidr, "8.8.8.8", false);
+        doTestNetMaskSet(internalProxiesCidr, "100.62.0.0", false);
+        doTestNetMaskSet(internalProxiesCidr, "100.63.255.255", false);
+        doTestNetMaskSet(internalProxiesCidr, "100.64.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.65.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.68.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.72.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.88.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.95.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.102.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.110.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.126.0.0", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.127.255.255", true);
+        doTestNetMaskSet(internalProxiesCidr, "100.128.0.0", false);
+        doTestNetMaskSet(internalProxiesCidr, "100.130.0.0", false);
         // Bug 69600 - IPv6 RFC 4193 Unique Local IPv6 Unicast Addresses
-        doTestPattern(internalProxiesPattern, 
"fe79:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false);
-        doTestPattern(internalProxiesPattern, 
"fe80:0000:0000:0000:0000:0000:0000:0000", true);
-        doTestPattern(internalProxiesPattern, "fe80::", true);
-        doTestPattern(internalProxiesPattern, 
"fe80:0000:0000:0000:0000:0000:0000:0001", true);
-        doTestPattern(internalProxiesPattern, "fe80::1", true);
-        doTestPattern(internalProxiesPattern, 
"fe80:1234:5678:9abc:def0:1234:5678:9abc", true);
-        doTestPattern(internalProxiesPattern, 
"febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff", true);
-        doTestPattern(internalProxiesPattern, 
"fec0:0000:0000:0000:0000:0000:0000:0000", false);
-        doTestPattern(internalProxiesPattern, "fec0::", false);
+        doTestNetMaskSet(internalProxiesCidr, 
"fe79:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false);
+        doTestNetMaskSet(internalProxiesCidr, 
"fe80:0000:0000:0000:0000:0000:0000:0000", true);
+        doTestNetMaskSet(internalProxiesCidr, "fe80::", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fe80:0000:0000:0000:0000:0000:0000:0001", true);
+        doTestNetMaskSet(internalProxiesCidr, "fe80::1", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fe80:1234:5678:9abc:def0:1234:5678:9abc", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fec0:0000:0000:0000:0000:0000:0000:0000", false);
+        doTestNetMaskSet(internalProxiesCidr, "fec0::", false);
         // Bug 69600 - IPv6 RFC 4291 Link Local IPv6 Unicast Addresses
-        doTestPattern(internalProxiesPattern, 
"fbff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false);
-        doTestPattern(internalProxiesPattern, 
"fc00:0000:0000:0000:0000:0000:0000:0000", true);
-        doTestPattern(internalProxiesPattern, "fc00::", true);
-        doTestPattern(internalProxiesPattern, 
"fc00:0000:0000:0000:0000:0000:0000:0001", true);
-        doTestPattern(internalProxiesPattern, "fc00::1", true);
-        doTestPattern(internalProxiesPattern, 
"fc00:1234:5678:9abc:def0:1234:5678:9abc", true);
-        doTestPattern(internalProxiesPattern, 
"fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", true);
-        doTestPattern(internalProxiesPattern, 
"fe00:0000:0000:0000:0000:0000:0000:0000", false);
-        doTestPattern(internalProxiesPattern, "fe00::", false);
-    }
-
-    private void doTestPattern(Pattern pattern, String input, boolean 
expectedMatch) {
-        boolean match = pattern.matcher(input).matches();
-        Assert.assertEquals(input, Boolean.valueOf(expectedMatch), 
Boolean.valueOf(match));
+        doTestNetMaskSet(internalProxiesCidr, 
"fbff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", false);
+        doTestNetMaskSet(internalProxiesCidr, 
"fc00:0000:0000:0000:0000:0000:0000:0000", true);
+        doTestNetMaskSet(internalProxiesCidr, "fc00::", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fc00:0000:0000:0000:0000:0000:0000:0001", true);
+        doTestNetMaskSet(internalProxiesCidr, "fc00::1", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fc00:1234:5678:9abc:def0:1234:5678:9abc", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", true);
+        doTestNetMaskSet(internalProxiesCidr, 
"fe00:0000:0000:0000:0000:0000:0000:0000", false);
+        doTestNetMaskSet(internalProxiesCidr, "fe00::", false);
     }
 
     @Test
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 8e65b88d85..beeb008678 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -171,6 +171,11 @@
         to <code>bloom</code> to improve web application class loading
         performance. (markt)
       </update>
+      <update>
+        Remove regular expression support for the configuration of internal and
+        trusted proxies for the <code>RemoteIpFilter</code> and
+        <code>RemoteIpValve</code>. (markt)
+      </update>
       <!-- Entries for backport and removal before 12.0.0-M1 below this line 
-->
       <add>
         Add CIDR support for the configuration of internal and trusted proxies
diff --git a/webapps/docs/config/filter.xml b/webapps/docs/config/filter.xml
index b7f6d27798..ed2ffb91c8 100644
--- a/webapps/docs/config/filter.xml
+++ b/webapps/docs/config/filter.xml
@@ -1553,7 +1553,7 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
        </init-param>
        <init-param>
          <param-name>trustedProxies</param-name>
-         <param-value>proxy1|proxy2</param-value>
+         <param-value>200.0.0.1,200.0.0.2</param-value>
        </init-param>
      </filter>
 
@@ -1576,18 +1576,18 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
       </tr>
       <tr>
         <td> request.header<code>[</code>'x-forwarded-for'<code>]</code> </td>
-        <td> 140.211.11.130, proxy1, proxy2 </td>
+        <td> 140.211.11.130, 200.0.0.1, 200.0.0.2 </td>
         <td> null </td>
       </tr>
       <tr>
         <td> request.header<code>[</code>'x-forwarded-by'<code>]</code> </td>
         <td> null </td>
-        <td> proxy1, proxy2 </td>
+        <td> 200.0.0.1, 200.0.0.2 </td>
       </tr>
     </table>
 
     <p>
-    Note : <code>proxy1</code> and <code>proxy2</code> are both trusted 
proxies that
+    Note : <code>200.0.0.1</code> and <code>200.0.0.2</code> are both trusted 
proxies that
     come in <code>x-forwarded-for</code> header, they both are migrated in
     <code>x-forwarded-by</code> header. <code>x-forwarded-for</code> is 
<code>null</code>
     because all the proxies are trusted or internal.
@@ -1613,7 +1613,7 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
        </init-param>
        <init-param>
          <param-name>trustedProxies</param-name>
-         <param-value>proxy1|proxy2</param-value>
+         <param-value>200.0.0.1,200.0.0.2</param-value>
        </init-param>
      </filter>
 
@@ -1636,18 +1636,18 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
       </tr>
       <tr>
         <td> request.header<code>[</code>'x-forwarded-for'<code>]</code> </td>
-        <td> 140.211.11.130, proxy1, proxy2, 192.168.0.10 </td>
+        <td> 140.211.11.130, 200.0.0.1, 200.0.0.2, 192.168.0.10 </td>
         <td> null </td>
       </tr>
       <tr>
         <td> request.header<code>[</code>'x-forwarded-by'<code>]</code> </td>
         <td> null </td>
-        <td> proxy1, proxy2 </td>
+        <td> 200.0.0.1, 200.0.0.2 </td>
       </tr>
     </table>
 
     <p>
-    Note : <code>proxy1</code> and <code>proxy2</code> are both trusted 
proxies that
+    Note : <code>200.0.0.1</code> and <code>200.0.0.2</code> are both trusted 
proxies that
     come in <code>x-forwarded-for</code> header, they both are migrated in
     <code>x-forwarded-by</code> header. As <code>192.168.0.10</code> is an 
internal
     proxy, it does not appear in <code>x-forwarded-by</code>.
@@ -1676,7 +1676,7 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
        </init-param>
        <init-param>
          <param-name>trustedProxies</param-name>
-         <param-value>proxy1|proxy2</param-value>
+         <param-value>200.0.0.1,200.0.0.2</param-value>
        </init-param>
      </filter>
 
@@ -1695,27 +1695,27 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
       <tr>
         <td> request.remoteAddr </td>
         <td> 192.168.0.10 </td>
-        <td> untrusted-proxy </td>
+        <td> 200.99.99.99 </td>
       </tr>
       <tr>
         <td> request.header<code>[</code>'x-forwarded-for'<code>]</code> </td>
-        <td> 140.211.11.130, untrusted-proxy, proxy1 </td>
+        <td> 140.211.11.130, 200.99.99.99, 200.0.0.1 </td>
         <td> 140.211.11.130 </td>
       </tr>
       <tr>
         <td> request.header<code>[</code>'x-forwarded-by'<code>]</code> </td>
         <td> null </td>
-        <td> proxy1 </td>
+        <td> 200.0.0.1 </td>
       </tr>
     </table>
 
     <p>
-    Note : <code>x-forwarded-by</code> holds the trusted proxy 
<code>proxy1</code>.
+    Note : <code>x-forwarded-by</code> holds the trusted proxy 
<code>200.0.0.1</code>.
     <code>x-forwarded-by</code> holds <code>140.211.11.130</code> because
-    <code>untrusted-proxy</code> is not trusted and thus, we cannot trust that
-    <code>untrusted-proxy</code> is the actual remote ip.
-    <code>request.remoteAddr</code> is <code>untrusted-proxy</code> that is an 
IP
-    verified by <code>proxy1</code>.
+    <code>200.99.99.99</code> is not trusted and thus, we cannot trust that
+    <code>200.99.99.99</code> is the actual remote ip.
+    <code>request.remoteAddr</code> is <code>200.99.99.99</code> that is an IP
+    verified by <code>200.0.0.1</code>.
     </p>
   </subsection>
 
@@ -1739,12 +1739,11 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
       </attribute>
 
       <attribute name="internalProxies" required="false">
-        <p>Either a comma separated list of CIDR blocks or a single regular
-        expression that a proxy&apos;s IP address must match to be considered 
an
-        internal proxy. Internal proxies that appear in the
-        <strong>remoteIpHeader</strong> will be trusted and will not appear in
-        the <strong>proxiesHeader</strong> value. If not specified the default
-        value of <code>10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,
+        <p>A comma separated list of CIDR blocks that a proxy&apos;s IP address
+        must match to be considered an internal proxy. Internal proxies that
+        appear in the <strong>remoteIpHeader</strong> will be trusted and will
+        not appear in the <strong>proxiesHeader</strong> value. If not 
specified
+        the default value of <code>10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,
         169.254.0.0/16, 100.64.0.0/10, 127.0.0.0/8, ::1/128, fe80::/10, 
fc00::/7
         </code> will be used.</p>
       </attribute>
@@ -1766,12 +1765,11 @@ FINE: Request "/docs/config/manager.html" with response 
status "200"
       </attribute>
 
       <attribute name="trustedProxies" required="false">
-        <p>Either a comma separated list of CIDR blocks or a single regular
-        expression that a proxy&apos;s IP address must match to be considered a
-        trusted proxy. Trusted proxies that appear in the
-        <strong>remoteIpHeader</strong> will be trusted and will appear in the
-        <strong>proxiesHeader</strong> value. If not specified, no proxies will
-        be trusted.</p>
+        <p>A comma separated list of CIDR blocks that a proxy&apos;s IP address
+        must match to be considered a trusted proxy. Trusted proxies that 
appear
+        in the <strong>remoteIpHeader</strong> will be trusted and will appear
+        in the <strong>proxiesHeader</strong> value. If not specified, no
+        proxies will be trusted.</p>
       </attribute>
 
       <attribute name="protocolHeader" required="false">


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to