Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/main/java/org/owasp/esapi/waf/rules/MustMatchRule.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public Action check(HttpServletRequest req,

if ( target.contains("*") || target.contains("?") ) {

target = target.replaceAll("*", ".*");
target = target.replaceAll("\\*", ".*");
Pattern p = Pattern.compile(target);

Enumeration e = request.getParameterNames();
Expand All @@ -120,6 +120,8 @@ public Action check(HttpServletRequest req,
}
}

return new DoNothingAction();

} else {

String s = request.getParameter(target);
Expand All @@ -129,6 +131,8 @@ public Action check(HttpServletRequest req,
return new DefaultAction();
}

return new DoNothingAction();

}
}

Expand Down Expand Up @@ -160,7 +164,7 @@ public Action check(HttpServletRequest req,

if ( target.contains("*") || target.contains("?") ) {

target = target.replaceAll("*", ".*");
target = target.replaceAll("\\*", ".*");
Pattern p = Pattern.compile(target);

Enumeration e = request.getHeaderNames();
Expand Down
82 changes: 82 additions & 0 deletions src/test/java/org/owasp/esapi/waf/rules/MustMatchRuleTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package org.owasp.esapi.waf.rules;

import static org.junit.Assert.assertTrue;

import java.util.regex.Pattern;

import org.junit.Test;
import org.owasp.esapi.http.MockHttpServletRequest;
import org.owasp.esapi.waf.actions.Action;
import org.owasp.esapi.waf.actions.DefaultAction;
import org.owasp.esapi.waf.actions.DoNothingAction;
import org.owasp.esapi.waf.configuration.AppGuardianConfiguration;
import org.owasp.esapi.waf.internal.InterceptingHTTPServletRequest;

/**
* Checks wildcard names in <must-match> rules. See GitHub issue #458.
*/
public class MustMatchRuleTest {

private static final Pattern ADMIN_PATH = Pattern.compile("^/admin/.*");

private Action check(MustMatchRule rule, MockHttpServletRequest mock) throws Exception {
mock.setRequestURI("/admin/config");
InterceptingHTTPServletRequest request = new InterceptingHTTPServletRequest(mock);
return rule.check(request, null, null);
}

private MustMatchRule rule(String variable, String value) {
return new MustMatchRule("458", ADMIN_PATH, variable,
AppGuardianConfiguration.OPERATOR_CONTAINS, value);
}

@Test
public void wildcardHeaderPasses() throws Exception {
MockHttpServletRequest mock = new MockHttpServletRequest();
mock.addHeader("x-roles", "admin");
Action action = check(rule("request.headers.x-*", "admin"), mock);
assertTrue(action instanceof DoNothingAction);
}

@Test
public void wildcardHeaderFails() throws Exception {
MockHttpServletRequest mock = new MockHttpServletRequest();
mock.addHeader("x-roles", "guest");
Action action = check(rule("request.headers.x-*", "admin"), mock);
assertTrue(action instanceof DefaultAction);
}

@Test
public void wildcardParameterPasses() throws Exception {
MockHttpServletRequest mock = new MockHttpServletRequest();
mock.addParameter("role1", "admin");
mock.addParameter("role2", "admin");
Action action = check(rule("request.parameters.role*", "admin"), mock);
assertTrue(action instanceof DoNothingAction);
}

@Test
public void wildcardParameterFails() throws Exception {
MockHttpServletRequest mock = new MockHttpServletRequest();
mock.addParameter("role1", "admin");
mock.addParameter("role2", "guest");
Action action = check(rule("request.parameters.role*", "admin"), mock);
assertTrue(action instanceof DefaultAction);
}

@Test
public void plainParameterPasses() throws Exception {
MockHttpServletRequest mock = new MockHttpServletRequest();
mock.addParameter("role", "admin");
Action action = check(rule("request.parameters.role", "admin"), mock);
assertTrue(action instanceof DoNothingAction);
}

@Test
public void plainParameterFails() throws Exception {
MockHttpServletRequest mock = new MockHttpServletRequest();
mock.addParameter("role", "guest");
Action action = check(rule("request.parameters.role", "admin"), mock);
assertTrue(action instanceof DefaultAction);
}
}