Hoje vamos deixar aqui um exemplo de como podemos configurar o Apache Maven para executar o plugin FindSecBugs em aplicações Java. Para exemplificar, vamos utilizar um projeto simples em SpringBoot que pode ser baixado aqui.
Depois de baixar, descompacte-o, navegue até a pasta complete e abra o pom.xml em seu editor favorito. O meu é o Atom.
Adicione o seguinte plugin:
<build> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>3.0.4</version> <configuration> <effort>Max</effort> <threshold>Medium</threshold> <!-- low é para auditores de seguranca --> <failOnError>true</failOnError> <includeFilterFile>src/main/resources/findbugs-security-include.xml</includeFilterFile> <excludeFilterFile>src/main/resources/findbugs-security-exclude.xml</excludeFilterFile> <plugins> <plugin> <groupId>com.h3xstream.findsecbugs</groupId> <artifactId>findsecbugs-plugin</artifactId> <version>LATEST</version> <!-- Auto-update to the latest stable --> </plugin> </plugins> </configuration> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> ... </plugins> ... </build>
Crie os dois arquivos abaixo:
– findbugs-security-include.xml:
<FindBugsFilter> <Match> <Bug category="SECURITY"/> </Match> </FindBugsFilter>
– findbugs-security-exclude.xml:
<FindBugsFilter> </FindBugsFilter>
Realize o build do projeto com mvn clean install e verifique o resultado.
[INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ gs-serving-web-content --- [INFO] [INFO] >>> findbugs-maven-plugin:3.0.4:check (default) > :findbugs @ gs-serving-web-content >>> [INFO] [INFO] --- findbugs-maven-plugin:3.0.4:findbugs (findbugs) @ gs-serving-web-content --- [INFO] Fork Value is true [INFO] Done FindBugs Analysis.... [INFO] [INFO] <<< findbugs-maven-plugin:3.0.4:check (default) < :findbugs @ gs-serving-web-content <<< [INFO] [INFO] --- findbugs-maven-plugin:3.0.4:check (default) @ gs-serving-web-content --- [INFO] BugInstance size is 0 [INFO] Error size is 0 [INFO] No errors/warnings found [INFO] [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ gs-serving-web-content ---
Para esta varredura e projeto não encontramos problemas de segurança, então, para intuito de testes vamos modificar a seguinte linha do pom.xml para Low e realizar um novo build:
<threshold>Low</threshold> <!-- low é para auditores de seguranca -->
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ gs-serving-web-content --- [INFO] Building jar: /home/kleber/Downloads/gs-serving-web-content-master/complete/target/gs-serving-web-content-0.1.0.jar [INFO] [INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ gs-serving-web-content --- [INFO] [INFO] >>> findbugs-maven-plugin:3.0.4:check (default) > :findbugs @ gs-serving-web-content >>> [INFO] [INFO] --- findbugs-maven-plugin:3.0.4:findbugs (findbugs) @ gs-serving-web-content --- [INFO] Fork Value is true [java] Warnings generated: 1 [INFO] Done FindBugs Analysis.... [INFO] [INFO] <<< findbugs-maven-plugin:3.0.4:check (default) < :findbugs @ gs-serving-web-content <<< [INFO] [INFO] --- findbugs-maven-plugin:3.0.4:check (default) @ gs-serving-web-content --- [INFO] BugInstance size is 1 [INFO] Error size is 0 [INFO] Total bugs: 1 [INFO] hello.GreetingController is a Spring endpoint (Controller) [hello.GreetingController] At GreetingController.java:[lines 13-14] SPRING_ENDPOINT [INFO] To see bug detail using the Findbugs GUI, use the following command "mvn findbugs:gui"
Bom, agora podemos ver o FindSecBugs encontrando um erro de segurança. Lembrando que este erro só é filtrado porque modificamos o threshold para Low, no controller hello.GreetingController categorizado como: SPRING_ENDPOINT, ok?!
Ficou alguma dúvida ou tem algum comentário? Fique à vontade nos campos abaixo!
Até a próxima.
***
Artigo publicado originalmente em: http://www.concretesolutions.com.br/2017/01/09/bugs-seguranca-maven-findsecbugs/