重定向漏洞
重定向漏洞
运行
漏洞代码
public String vul(String url) { return "redirect:" + url; }
运行
安全代码 - 白名单模式
public static boolean is_white(String url) { List
url_list = new ArrayList
(); url_list.add("baidu.com"); url_list.add("www.baidu.com"); url_list.add("oa.baidu.com"); URI uri = null; try { uri = new URI(url); } catch (URISyntaxException e) { System.out.print(e); } String host = uri.getHost().toLowerCase(); System.out.println(host); return url_list.contains(host); }
编码建议
【必须】避免不可信域名的302跳转 如果对外部传入域名进行302跳转,必须设置可信域名列表并对传入域名进行校验。 为避免校验被绕过,应避免直接对URL进行字符串匹配。应通过通过URL解析函数进行解析,获取host或者domain后和白名单进行比较。