内存泄漏、重定向循环、死锁、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
- 未满足的链接错误
快速入门
- 前往最新版本发布页面并下载
easybuggy.jar - 运行命令:
$ java -jar easybuggy.jar - 访问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 编写。
