Java代码审计之xss审计
XSS攻击通常指的是通过利⽤⽹页开发时留下的漏洞,通过巧妙的⽅法注⼊恶意指令代码到⽹页,使⽤户加载并执⾏攻击者恶意制造的⽹页程序。这些恶意⽹页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚⾄是普通的HTML。
反射型xss
为了让我们⽅便理解,作者这⾥没有使⽤其他花⾥胡哨的html页⾯
@RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
java replace方法return xss;
}
payload
xss=<script>alert(1)</script>
return将这个变量返回到html,导致了XSS漏洞
可以看到最后执⾏了js代码,实现了弹窗。
存储型xss
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页⾯就会执⾏恶意代码。这就意味着只要访问了这个页⾯的访客,都有可能会执⾏这段恶意脚本,因此储存型XSS的危害会更⼤。因为存储型XSS的代码存在于⽹页的代码中,可以说是永久型的。
@RequestMapping("/stored/store")
@ResponseBody
public String store(String xss, HttpServletResponse response) {
Cookie cookie = new Cookie("xss", xss);
response.addCookie(cookie);
return "Set param into cookie";
}
@RequestMapping("/stored/show")
@ResponseBody
public String show(@CookieValue("xss") String xss) {
return xss;
}
store⽅法将输⼊的便xss,存放在cookie⾥。
show⽅法将获得的cookie返回到页⾯。
payload
xss=<script>alert(1)</script>
xss的利⽤⼿段主要是⽹络蠕⾍攻击和窃取⽤户cookie信息。xss蠕⾍通过漏洞点嵌⼊恶意的js代码,执⾏代码后,就会添加带有恶意代码的页⾯或DOM元素,从⽽进⾏传播。
⽽如果盗取cookie信息,常见的就是进⾏跨域请求的问题。
漏洞修复
@RequestMapping("/safe")
@ResponseBody
public static String safe(String xss) {
return encode(xss);
}
private static String encode(String origin) {
origin = place(origin, "&", "&");
origin = place(origin, "<", "<");
origin = place(origin, ">", ">");
origin = place(origin, "\"", """);
origin = place(origin, "'", "'");
origin = place(origin, "/", "/");
return origin;
}
或者把半⾓转化为全⾓
origin = place(origin, "&", "&");
origin = place(origin, "<", "<");
origin = place(origin, ">", ">");
origin = place(origin, "\"", "\");
origin = place(origin, "'", "'");
origin = place(origin, "/", "/");
以上就是通过字符转义的⽅法进⾏过滤,基本上杜绝了xss漏洞。但如果少写⼀个,可能就会被利⽤绕过。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。