Merge pull request #138 from sdgx/url-whitelist-2

Implement URL host whitelist
This commit is contained in:
Michael Bayne
2018-09-14 14:19:23 -07:00
committed by GitHub
6 changed files with 281 additions and 12 deletions
@@ -0,0 +1,158 @@
//
// Getdown - application installer, patcher and launcher
// Copyright (C) 2004-2016 Getdown authors
// https://github.com/threerings/getdown/blob/master/LICENSE
package com.threerings.getdown.util;
import static org.junit.Assert.assertEquals;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import org.junit.Test;
/**
* Tests {@link HostWhitelist}.
*/
public class HostWhitelistTest
{
@Test
public void testVerify () throws MalformedURLException
{
checkCanVerify("foo.com", "http://foo.com", true);
checkCanVerify("foo.com", "http://foo.com/", true);
checkCanVerify("foo.com", "http://foo.com/x/y/z", true);
checkCanVerify("foo.com", "http://www.foo.com", false);
checkCanVerify("foo.com", "http://www.foo.com/", false);
checkCanVerify("foo.com", "http://www.foo.com/x/y/z", false);
checkCanVerify("foo.com", "http://a.b.foo.com", false);
checkCanVerify("foo.com", "http://a.b.foo.com/", false);
checkCanVerify("foo.com", "http://a.b.foo.com/x/y/z", false);
checkCanVerify("foo.com", "http://oo.com", false);
checkCanVerify("foo.com", "http://f.oo.com", false);
checkCanVerify("foo.com", "http://a.f.oo.com", false);
checkCanVerify("*.foo.com", "http://foo.com", false);
checkCanVerify("*.foo.com", "http://foo.com/", false);
checkCanVerify("*.foo.com", "http://foo.com/x/y/z", false);
checkCanVerify("*.foo.com", "http://www.foo.com", true);
checkCanVerify("*.foo.com", "http://www.foo.com/", true);
checkCanVerify("*.foo.com", "http://www.foo.com/x/y/z", true);
checkCanVerify("*.foo.com", "http://a.b.foo.com", true);
checkCanVerify("*.foo.com", "http://a.b.foo.com/", true);
checkCanVerify("*.foo.com", "http://a.b.foo.com/x/y/z", true);
checkCanVerify("*.foo.com", "http://oo.com", false);
checkCanVerify("*.foo.com", "http://f.oo.com", false);
checkCanVerify("*.foo.com", "http://a.f.oo.com", false);
checkCanVerify("*.com", "http://foo.com", true);
checkCanVerify("*.com", "http://foo.com/", true);
checkCanVerify("*.com", "http://foo.com/x/y/z", true);
checkCanVerify("*.com", "http://www.foo.com", true);
checkCanVerify("*.com", "http://www.foo.com/", true);
checkCanVerify("*.com", "http://www.foo.com/x/y/z", true);
checkCanVerify("*.com", "http://a.b.foo.com", true);
checkCanVerify("*.com", "http://a.b.foo.com/", true);
checkCanVerify("*.com", "http://a.b.foo.com/x/y/z", true);
checkCanVerify("*.com", "http://oo.com", true);
checkCanVerify("*.com", "http://f.oo.com", true);
checkCanVerify("*.com", "http://a.f.oo.com", true);
checkCanVerify("*.net", "http://foo.com", false);
checkCanVerify("*.net", "http://foo.com/", false);
checkCanVerify("*.net", "http://foo.com/x/y/z", false);
checkCanVerify("*.net", "http://www.foo.com", false);
checkCanVerify("*.net", "http://www.foo.com/", false);
checkCanVerify("*.net", "http://www.foo.com/x/y/z", false);
checkCanVerify("*.net", "http://a.b.foo.com", false);
checkCanVerify("*.net", "http://a.b.foo.com/", false);
checkCanVerify("*.net", "http://a.b.foo.com/x/y/z", false);
checkCanVerify("*.net", "http://oo.com", false);
checkCanVerify("*.net", "http://f.oo.com", false);
checkCanVerify("*.net", "http://a.f.oo.com", false);
checkCanVerify("www.*.com", "http://foo.com", false);
checkCanVerify("www.*.com", "http://foo.com/", false);
checkCanVerify("www.*.com", "http://foo.com/x/y/z", false);
checkCanVerify("www.*.com", "http://www.foo.com", true);
checkCanVerify("www.*.com", "http://www.foo.com/", true);
checkCanVerify("www.*.com", "http://www.foo.com/x/y/z", true);
checkCanVerify("www.*.com", "http://a.b.foo.com", false);
checkCanVerify("www.*.com", "http://a.b.foo.com/", false);
checkCanVerify("www.*.com", "http://a.b.foo.com/x/y/z", false);
checkCanVerify("www.*.com", "http://oo.com", false);
checkCanVerify("www.*.com", "http://f.oo.com", false);
checkCanVerify("www.*.com", "http://a.f.oo.com", false);
checkCanVerify("www.*.com", "http://www.a.f.oo.com", true);
checkCanVerify("foo.*", "http://foo.com", true);
checkCanVerify("foo.*", "http://foo.com/", true);
checkCanVerify("foo.*", "http://foo.com/x/y/z", true);
checkCanVerify("foo.*", "http://www.foo.com", false);
checkCanVerify("foo.*", "http://www.foo.com/", false);
checkCanVerify("foo.*", "http://www.foo.com/x/y/z", false);
checkCanVerify("foo.*", "http://a.b.foo.com", false);
checkCanVerify("foo.*", "http://a.b.foo.com/", false);
checkCanVerify("foo.*", "http://a.b.foo.com/x/y/z", false);
checkCanVerify("foo.*", "http://oo.com", false);
checkCanVerify("foo.*", "http://f.oo.com", false);
checkCanVerify("foo.*", "http://a.f.oo.com", false);
checkCanVerify("*.foo.*", "http://foo.com", false);
checkCanVerify("*.foo.*", "http://foo.com/", false);
checkCanVerify("*.foo.*", "http://foo.com/x/y/z", false);
checkCanVerify("*.foo.*", "http://www.foo.com", true);
checkCanVerify("*.foo.*", "http://www.foo.com/", true);
checkCanVerify("*.foo.*", "http://www.foo.com/x/y/z", true);
checkCanVerify("*.foo.*", "http://a.b.foo.com", true);
checkCanVerify("*.foo.*", "http://a.b.foo.com/", true);
checkCanVerify("*.foo.*", "http://a.b.foo.com/x/y/z", true);
checkCanVerify("*.foo.*", "http://oo.com", false);
checkCanVerify("*.foo.*", "http://f.oo.com", false);
checkCanVerify("*.foo.*", "http://a.f.oo.com", false);
checkCanVerify("127.0.0.1", "http://127.0.0.1", true);
checkCanVerify("127.0.0.1", "http://127.0.0.1/", true);
checkCanVerify("127.0.0.1", "http://127.0.0.1/x/y/z", true);
checkCanVerify("*.0.0.1", "http://127.0.0.1/abc", true);
checkCanVerify("127.*.0.1", "http://127.0.0.1/abc", true);
checkCanVerify("127.0.*.1", "http://127.0.0.1/abc", true);
checkCanVerify("127.0.0.*", "http://127.0.0.1/abc", true);
checkCanVerify("127.*.1", "http://127.0.0.1/abc", true);
checkCanVerify("*.0.1", "http://127.0.0.1/abc", true);
checkCanVerify("127.0.*", "http://127.0.0.1/abc", true);
checkCanVerify("*", "http://127.0.0.1/abc", true);
checkCanVerify("127.0.0.2", "http://127.0.0.1", false);
checkCanVerify("127.0.2.1", "http://127.0.0.1", false);
checkCanVerify("127.2.0.1", "http://127.0.0.1", false);
checkCanVerify("222.0.0.1", "http://127.0.0.1", false);
checkCanVerify("", "http://foo.com", true);
checkCanVerify("", "http://aaa.bbb.net/xyz", true);
checkCanVerify("", "https://127.0.0.1/abc", true);
checkCanVerify("aaa.bbb.com,xxx.yyy.com, *.jjj.net", "http://aaa.bbb.com/m", true);
checkCanVerify("aaa.bbb.com, xxx.yyy.com,*.jjj.net", "http://xxx.yyy.com/n", true);
checkCanVerify("aaa.bbb.com,xxx.yyy.com, *.jjj.net", "http://www.jjj.net/o", true);
}
private static void checkCanVerify (String whitelist, String url, boolean expectedToPass)
throws MalformedURLException
{
HostWhitelist w = new HostWhitelist(Arrays.asList(StringUtil.parseStringArray(whitelist)));
URL u = new URL(url);
boolean passed;
try {
w.verify(u);
passed = true;
} catch (MalformedURLException e) {
passed = false;
}
assertEquals("with whitelist '" + whitelist + "' and URL '" + url + "'",
expectedToPass, passed);
}
}