我用Spring Boot做了一个充满错误的网络应用程序克隆
简而言之
我尝试用基于Spring Boot的方式创建了之前介绍过的充满漏洞的Web应用程序”EasyBuggy”的克隆版本(”EasyBuggy Boot”)。
你可以从这里下载,并使用以下命令启动。
java -jar ROOT.war
※起動するにはJava 7以上が必要です。
java -jar ROOT.war --port=9000
とすると9000番ポートで起動します。如果您按照以下Java选项进行设置,您将能够进行日志输出、调试和通过JMX进行监视(请注意这是适用于Java 7的选项)。此外,由于最大内存使用量已限制,因此更容易发生OutOfMemoryError等问题。
java -Xmx256m -XX:MaxPermSize=64m -XX:MaxDirectMemorySize=90m -XX:+UseSerialGC -Xloggc:logs/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:GCTimeLimit=15 -XX:GCHeapFreeLimit=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/ -XX:ErrorFile=logs/hs_err_pid%p.log -agentlib:jdwp=transport=dt_socket,server=y,address=9009,suspend=n -Dderby.stream.error.file=logs/derby.log -Dderby.infolog.append=true -Dderby.language.logStatementText=true -Dderby.locks.deadlockTrace=true -Dderby.locks.monitor=true -Dderby.storage.rowLocking=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -ea -jar ROOT.war
如果你看到以下的信息,那就代表Web应用已经成功启动了。
2017-08-11 22:05:25.233 INFO 81661 --- [ main] o.t.e.Easybuggy4sbApplication : Started Easybuggy4sbApplication in 8.404 seconds (JVM running for 10.723)
当您访问 http://localhost:8080,将会显示主页。

除了上面提到的启动方法以外
可以使用git clone命令进行克隆,然后使用mvn clean spring-boot:run命令进行清理和启动。
$ git clone https://github.com/k-tamura/easybuggy4sb
$ cd easybuggy4sb
$ mvn clean spring-boot:run
src/main/resources/application.properties
のserver.port=${port:8080}
の行をserver.port=9000
にとすると9000番ポートで起動します。此外,将ROOT.war部署到Tomcat 8.5等Java容器也会以相同的方式运行。
此应用的用途是什么?
目的是像「EasyBuggy」一样,模拟各种障碍,进行分析并加深理解。之所以创造出具有相同功能的东西,是因为我想了解以下内容(个人兴趣)。
-
- 最新のフレームワーク(Spring Boot)ベースのアプリにも脆弱性やリソースリークをつくり込むことは簡単にできるか
-
- レガシーアプリをSpring Bootに移行する上で必要な作業は何か
-
- レガシーアプリをSpring Bootに移行することで可読性は向上するか
- レガシーアプリと比較して、Spring Bootの開発生産性はどの程度の違うか
我计划在以后的另一篇文章中公开这些内容。尽管是出于个人兴趣创建的,但我认为它们也可以用于以下用途。
-
- Spring Bootベースのアプリに脆弱性をつくり込んでしまう実装例を把握する
- レガシーアプリからSpring Bootベースのアプリへ移行する際の参考にする
構成的差異
「EasyBuggy」和「EasyBuggy Boot」的主要构成差异如下。
相違点EasyBuggyEasyBuggy Bootベースとなる技術Servlet 3.0.1Spring Boot 1.5.6 (Servlet 3.0.1)プレゼンテーション層未使用 (一部 JSP 2.2 + JSTL 1.2)Thymeleaf 2.1.5 (一部 JSP 2.3 + JSTL 1.2)DBクライアント/サーバーJDBC / Derby 10.8.3.0Spring JDBC 4.3.9 / Derby 10.12.1.1 (Java 7の場合)、または10.13.1.1 (Java 8の場合)LDAPクライアント/サーバーApache DS Client API 1.0.0 / Server 1.5.5Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1メールJavaMail 1.5.1JavaMail 1.5.1 (Spring Boot Mailで導入されるJavaMail 1.5.6をオーバーライド)開発ツール無しSpring Boot Developer Tools 1.5.6JavaJava 6以上をサポートJava 7以上をサポート
很遗憾,目前尚未能够引入Spring Security来进行此验证。
建筑的方法
你可以使用以下命令来创建可执行且可部署的war文件。
$ mvn clean package
开发方法
我会提供使用STS(Spring Tool Suite)来查看、开发和调试EasyBuggy Boot源代码的方法。STS是基于Eclipse的集成开发环境,专门定制用于简化Spring应用程序的开发过程。

请尝试修改源代码,自动重新加载并确认修改已反映。