Skip to content

Commit 0e45c99

Browse files
committed
Fix URL validation
1 parent 756fd50 commit 0e45c99

File tree

5 files changed

+28
-7
lines changed

5 files changed

+28
-7
lines changed

extra/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
<commons.collections.version>4.4</commons.collections.version>
4040
<commons.compress.version>1.27.1</commons.compress.version>
4141
<commons-math3.version>3.6.1</commons-math3.version>
42+
<commons-validator.version>1.10.0</commons-validator.version>
4243
<scram.version>2.1</scram.version>
4344
<httpclient.version>4.5.14</httpclient.version>
4445
<ipaddress.version>5.5.1</ipaddress.version>
@@ -135,6 +136,11 @@
135136
<artifactId>commons-math3</artifactId>
136137
<version>${commons-math3.version}</version>
137138
</dependency>
139+
<dependency>
140+
<groupId>commons-validator</groupId>
141+
<artifactId>commons-validator</artifactId>
142+
<version>${commons-validator.version}</version>
143+
</dependency>
138144
<!-- TODO: refactor code to replace URIBuilder with something else so that this dep can be removed -->
139145
<dependency>
140146
<groupId>org.apache.httpcomponents</groupId>

pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@
114114
<groupId>org.apache.httpcomponents</groupId>
115115
<artifactId>httpclient</artifactId>
116116
</dependency>
117+
<dependency>
118+
<groupId>commons-validator</groupId>
119+
<artifactId>commons-validator</artifactId>
120+
</dependency>
117121
<dependency>
118122
<groupId>com.github.seancfoley</groupId>
119123
<artifactId>ipaddress</artifactId>

src/main/java/org/prebid/server/settings/HttpApplicationSettings.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,15 @@ public HttpApplicationSettings(HttpClient httpClient,
9494

9595
this.httpClient = Objects.requireNonNull(httpClient);
9696
this.mapper = Objects.requireNonNull(mapper);
97-
this.endpoint = HttpUtil.validateUrl(Objects.requireNonNull(endpoint));
98-
this.ampEndpoint = HttpUtil.validateUrl(Objects.requireNonNull(ampEndpoint));
99-
this.videoEndpoint = HttpUtil.validateUrl(Objects.requireNonNull(videoEndpoint));
100-
this.categoryEndpoint = HttpUtil.validateUrl(Objects.requireNonNull(categoryEndpoint));
97+
this.endpoint = HttpUtil.validateUrlSyntax(Objects.requireNonNull(endpoint));
98+
this.ampEndpoint = HttpUtil.validateUrlSyntax(Objects.requireNonNull(ampEndpoint));
99+
this.videoEndpoint = HttpUtil.validateUrlSyntax(Objects.requireNonNull(videoEndpoint));
100+
this.categoryEndpoint = HttpUtil.validateUrlSyntax(Objects.requireNonNull(categoryEndpoint));
101101
this.isRfc3986Compatible = isRfc3986Compatible;
102102
}
103103

104104
@Override
105105
public Future<Account> getAccountById(String accountId, Timeout timeout) {
106-
107106
return fetchAccountsByIds(Collections.singleton(accountId), timeout)
108107
.map(accounts -> accounts.stream()
109108
.findFirst()

src/main/java/org/prebid/server/util/HttpUtil.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.vertx.core.http.HttpServerResponse;
99
import io.vertx.ext.web.RoutingContext;
1010
import org.apache.commons.lang3.StringUtils;
11+
import org.apache.commons.validator.routines.UrlValidator;
1112
import org.prebid.server.log.ConditionalLogger;
1213
import org.prebid.server.log.Logger;
1314
import org.prebid.server.log.LoggerFactory;
@@ -78,12 +79,15 @@ public final class HttpUtil {
7879
public static final String MACROS_OPEN = "{{";
7980
public static final String MACROS_CLOSE = "}}";
8081

82+
private static final UrlValidator URL_VALIDAROR = UrlValidator.getInstance();
83+
8184
private HttpUtil() {
8285
}
8386

8487
/**
8588
* Checks the input string for using as URL.
8689
*/
90+
@Deprecated
8791
public static String validateUrl(String url) {
8892
if (containsMacrosses(url)) {
8993
return url;
@@ -96,6 +100,14 @@ public static String validateUrl(String url) {
96100
}
97101
}
98102

103+
public static String validateUrlSyntax(String url) {
104+
if (containsMacrosses(url) || URL_VALIDAROR.isValid(url)) {
105+
return url;
106+
}
107+
108+
throw new IllegalArgumentException("URL supplied is not valid: " + url);
109+
}
110+
99111
// TODO: We need our own way to work with url macrosses
100112
private static boolean containsMacrosses(String url) {
101113
return StringUtils.contains(url, MACROS_OPEN) && StringUtils.contains(url, MACROS_CLOSE);

src/test/java/org/prebid/server/settings/HttpApplicationSettingsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,14 +283,14 @@ public void getStoredDataShouldSendHttpRequestWithExpectedAppendedParams() {
283283
// given
284284
givenHttpClientReturnsResponse(200, null);
285285
httpApplicationSettings = new HttpApplicationSettings(httpClient, jacksonMapper,
286-
"http://some-domain?param1=value1", AMP_ENDPOINT, VIDEO_ENDPOINT, CATEGORY_ENDPOINT, false);
286+
"http://some-domain.com?param1=value1", AMP_ENDPOINT, VIDEO_ENDPOINT, CATEGORY_ENDPOINT, false);
287287

288288
// when
289289
httpApplicationSettings.getStoredData(null, singleton("id1"), singleton("id2"), timeout);
290290

291291
// then
292292
verify(httpClient).get(
293-
eq("http://some-domain?param1=value1&request-ids=%5B%22id1%22%5D&imp-ids=%5B%22id2%22%5D"),
293+
eq("http://some-domain.com?param1=value1&request-ids=%5B%22id1%22%5D&imp-ids=%5B%22id2%22%5D"),
294294
any(),
295295
anyLong());
296296
}

0 commit comments

Comments
 (0)