CSRF
Json Hijack
SSRF
URL跳转
取一级域名
判断一级域名是否在白名单里
bypassmogujie.com
Referer: https://www.mogujiexxtrip.com/mytrip/
取出一级域名,判断一级域名在白名单列表里使用contains
判断
mogujie.com.bypass.com
bypassmogujie.com
取出一级域名,判断一级域名在白名单列表里使用startsWith
判断
mogujie.combypass
用正则表达式去匹配URL中是否存在www.mogujie.com
字符串
www.mogujie.com.bypass.com
www.mogujie.com/_4528x2020.php
10.10.10.10.xip.io
针对URL白名单,写了一份java的安全代码。逻辑很简单:
取一级域名
判断一级域名是否在白名单里。
String[] urlwhitelist = {"mogujie.com", "meilishuo.com"};
if (!UrlSecCheck(url, urlwhitelist)) {
return;
}
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
public static Boolean UrlSecCheck(String url, String[] urlwhitelist) {
try {
URL u = new URL(url);
// 只允许http和https的协议
if (!u.getProtocol().startsWith("http") && !u.getProtocol().startsWith("https")) {
return false;
}
// 获取域名,并转为小写
String host = u.getHost().toLowerCase();
// 获取一级域名
String rootDomain = InternetDomainName.from(host).topPrivateDomain().toString();
for (String whiteurl: urlwhitelist){
if (rootDomain.equals(whiteurl)) {
return true;
}
}
return false;
} catch (Exception e) {
return false;
}
}