java-sec-code的xss

java-sec-code
用于学习java漏洞代码
环境部署
直接在idea中使用git 运行即可

@RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
        return xss;
    }

当用户访问到/reflect URL地址时,程序会自动调用reflect方法,该方法定义了一个名为xss的字符串参数,当用户发送一个请求到"/reflect" URL并带有名为xss的查询参数时,该参数的值会自动填充到xss字符串参数中。例如,如果用户访问/reflect?xss=test,那么xss参数的值就会是test,由于程序并未对用户输入进行任何过滤,直接输出,导致xss漏洞
复现

/xss/reflect

在这里插入图片描述
/stored/store/stored/show
store将获取的xss属性值添加到cookie中,show将cookie中的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;
}

访问http://127.0.0.1:8080/xss/stored/store?xss=<script>alert(1)</script>
cookie会增加xss属性
在这里插入图片描述
访问http://127.0.0.1:8080/xss/stored/show即可将xss的内容展现出来

在这里插入图片描述
安全写法

@RequestMapping("/safe")
@ResponseBody
public static String safe(String xss) {
    return encode(xss);
}

private static String encode(String origin) {
    origin = StringUtils.replace(origin, "&", "&amp;");
    origin = StringUtils.replace(origin, "<", "&lt;");
    origin = StringUtils.replace(origin, ">", "&gt;");
    origin = StringUtils.replace(origin, "\"", "&quot;");
    origin = StringUtils.replace(origin, "'", "&#x27;");
    origin = StringUtils.replace(origin, "/", "&#x2F;");
    return origin;
}

这是利用HTML实体编码来防御XSS,HTML实体编码是一种将特殊字符转换为HTML实体的方法,这样用户输入就不会被浏览器解析为HTML标签或JavaScript代码,从而避免了xss漏洞的产生。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值