Flask接口签名sign原理与实例代码浅析
257
2022-10-03
Java代码审计之XSS审计
Java代码审计之xss视频教程
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。
反射型xss
为了让我们方便理解,作者这里没有使用其他花里胡哨的html页面
@RequestMapping("/reflect")@ResponseBodypublic static String reflect(String xss) { return xss;}
payload
xss=
return将这个变量返回到html,导致了XSS漏洞可以看到最后执行了js代码,实现了弹窗。
存储型xss
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。因为存储型XSS的代码存在于网页的代码中,可以说是永久型的。
@RequestMapping("/stored/store")@ResponseBodypublic String store(String xss, HttpServletResponse response) { Cookie cookie = new Cookie("xss", xss); response.addCookie(cookie); return "Set param into cookie";}@RequestMapping("/stored/show")@ResponseBodypublic String show(@CookieValue("xss") String xss) { return xss;}
store方法将输入的便xss,存放在cookie里。show方法将获得的cookie返回到页面。payload
xss=
xss的利用手段主要是网络蠕虫攻击和窃取用户cookie信息。xss蠕虫通过漏洞点嵌入恶意的js代码,执行代码后,就会添加带有恶意代码的页面或DOM元素,从而进行传播。而如果盗取cookie信息,常见的就是进行跨域请求的问题。
漏洞修复
@RequestMapping("/safe")@ResponseBodypublic static String safe(String xss) { return encode(xss);}private static String encode(String origin) { origin = StringUtils.replace(origin, "&", "&"); origin = StringUtils.replace(origin, "<", "<"); origin = StringUtils.replace(origin, ">", ">"); origin = StringUtils.replace(origin, "\"", """); origin = StringUtils.replace(origin, "'", "'"); origin = StringUtils.replace(origin, "/", "/"); return origin;}或者把半角转化为全角 origin = StringUtils.replace(origin, "&", "&"); origin = StringUtils.replace(origin, "<", "<"); origin = StringUtils.replace(origin, ">", ">"); origin = StringUtils.replace(origin, "\"", "\"); origin = StringUtils.replace(origin, "'", "'"); origin = StringUtils.replace(origin, "/", "/");
以上就是通过字符转义的方法进行过滤,基本上杜绝了xss漏洞。但如果少写一个,可能就会被利用绕过。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~