发布于 2026-01-06 9 阅读
0

内存泄漏、重定向循环、死锁、XSS、CSRF、XEE……通过使用漏洞百出的 Web 应用程序来理解 bug

内存泄漏、重定向循环、死锁、XSS、CSRF、XEE……通过使用漏洞百出的 Web 应用程序来理解 bug

如果你开始开发一个Web应用程序,你很可能会遇到很多问题。例如,内存泄漏、重定向循环、死锁、连接泄漏等等。万一出现意外故障,你可能需要了解bug,并提前学习/练习如何排查问题。此外,你可能还需要学习如何防范漏洞,例如XSS、SQL注入、CSRF、XEE等等。

所以我创建了一个漏洞百出的Web应用程序,它可以故意重现很多问题:

  • 麻烦

    • 内存泄漏(Java堆空间)
    • 内存泄漏(永久代空间/元空间)
    • 内存泄漏(C 语言廉价空间)
    • 死锁(Java)
    • 死锁(SQL)
    • 无休止的等待过程
    • 无限循环
    • 重定向循环
    • 前环
    • JVM崩溃
    • 网络套接字泄漏
    • 数据库连接泄漏
    • 文件描述符泄漏
    • 螺纹泄漏
    • 文字烘焙
    • 整数溢出
    • 舍入误差
    • 截断错误
    • 尾随数字丢失
  • 漏洞

    • XSS(跨站脚本攻击)
    • SQL注入
    • LDAP注入
    • 代码注入
    • 操作系统命令注入(OGNL表达式注入)
    • 邮件头注入
    • 空字节注入
    • 扩展程序无限制文件上传
    • 文件大小不受限制的上传
    • 打开重定向
    • 蛮力攻击
    • 会话固定攻击
    • 详细的登录错误信息
    • 危险文件包含
    • 目录遍历
    • 意外文件泄露
    • CSRF(跨站请求伪造)
    • XEE(XML实体扩展)
    • XXE(XML外部实体)
    • 点击劫持
  • 性能下降

    • 正则表达式解析速度慢
    • 由于 +(加号)运算符导致字符串创建延迟
    • 由于不必要的对象创建而导致的延迟
  • Java错误

    • 断言错误
    • 初始化错误
    • 工厂配置错误
    • 通用签名格式错误
    • NoClassDefFoundError
    • 内存溢出错误(Java 堆空间不足)
    • 内存溢出错误(请求的数组大小超过虚拟机限制)
    • 内存溢出错误(无法创建新的本地线程)
    • 内存溢出错误(GC 开销限制已超出)
    • 内存溢出错误(永久代空间)
    • 内存溢出错误(直接缓冲区内存)
    • StackOverflowError
    • TransformerFactoryConfigurationError
    • 未满足的链接错误

快速入门

  1. 前往最新版本发布页面并下载easybuggy.jar
  2. 运行命令:$ java -jar easybuggy.jar
  3. 访问http://localhost:8080

演示

此演示展示了:
启动 -> 无限循环 -> LDAP 注入 -> UnsatisfiedLinkError -> BufferOverflowException -> 死锁 -> 内存泄漏 -> JVM 崩溃(关闭)

演示

警告

此应用程序可能会导致严重的内存泄漏或CPU使用率过高,从而使您的计算机不稳定。因此,我建议您在虚拟机上运行它。

其他版本

EasyBuggy 使用 Java Servlet 3.0 及更早版本技术实现。您也可以使用其他您喜欢的版本:

  • EasyBuggy Boot:基于 Spring Boot 的 EasyBuggy 克隆版本
  • EasyBuggy Bootlin:基于 Spring Boot 构建的 EasyBuggy 克隆版本,使用 Kotlin 编写。
  • EasyBuggy Django:基于 Django 2 构建的 EasyBuggy 克隆版本,使用 Python 3 编写。
文章来源:https://dev.to/ktamura/memory-leak-redirect-loop-deadlock-xss-csrf-xee--understanding-bugs-by-using-too-buggy-web-application-2gmn