使用Maven程序集创建漏洞评估工件

本文将讨论如何使用Maven程序集创建可提供给第三方漏洞评估站点(例如Veracode )进行审查的工件。

错误的静态分析与漏洞评估

在这一点上,每个人都知道findbug并虔诚地使用它,对吗?

对?

Findbugs使用静态分析来查找错误。 更准确地说,它使用静态分析来查找可以通过静态分析发现的错误。 例如,我看到了一种常见的模式

public void foo(Object obj) {if (obj != null) {obj.doSomething();}// lots of obscuring codeobj.doSomethingElse()
}

我们应该第二次检查null吗? 我们需要第一次检查吗? 我们应该从“ if”子句中返回吗?

为什么我们还需要漏洞评估?

什么是漏洞评估? 它与错误有何不同?

关键概念是,易受攻击的代码表面上没有错误,但是仍然容易受到滥用以攻击该网站或其用户。

易受攻击的代码的一个示例是使用未经消毒的用户提供的值。 从事前端工作的任何人都应该了解净化这些价值的重要性。

但是,当用户提供的数据从前端传递出去时(例如,将其写入数据库时​​)会发生什么? 每个从数据库中提取数据的人都知道它可能包含未经消毒的用户提供的数据吗? 如何通过SQL注入将恶意数据放入数据库?

用于漏洞评估的静态分析与静态分析很像,可以发现漏洞,而且要经过很多检查。 而findbug可能需要5分钟才能运行Veracode,可能需要几个小时!

(动态分析使这一步骤更进一步,并针对实时系统运行了测试。您可以使用集成测试来进行此简化版。)

漏洞评估的工件

我们需要提供什么以进行漏洞评估? 简短的答案是三件事:

  • 我们的编译代码(例如,java或scala)
  • 我们的脚本代码(例如,jsp)
  • 递归依赖的每个jar文件

我们不需要提供我们的源代码或资源。 编译后的代码确实需要包括调试系统,这样它才能给出有意义的错误消息- 知道包含79个类的库中有19个缺陷并不是很有帮助!

一个好的格式是一个包含以下内容的压缩包:

  • 我们的jar和wars在顶层,没有版本号
  • 我们在“ / lib”下的依赖,带有版本号

版本号被剥离或保留用于跟踪目的。 我们的代码在多次运行中具有连续性。 我们的依赖关系可以随时更改,并且除了版本号中明确指出的内容之外,没有任何连续性。

我们的war文件应该从嵌入式jar中删除,因为它们将出现在“ lib”目录下。 “较厚”的战争文件只会增加上传的工件的大小。

我们可以使用两个Maven程序集描述符来构建它。

va-war.xml(漏洞评估皮包骨头的战争)

第一个程序集创建一个精简的.war文件。 我不想称它为一场皮包骨头的战争,因为预期的目的有所不同,但它们有很多共同点。

<assemblyxmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven/assembly-plugin/assembly/1.1.2http://maven.apache.org/xsd/assembly-1.1.2.xsd"><id>va-war</id><formats><format>war</format></formats><includeBaseDirectory>false</includeBaseDirectory><fileSets><!-- grab everything except any jars --><fileSet><directory>target/${project.artifactId}-${project.version}</directory><outputDirectory>/</outputDirectory><includes /><excludes><exclude>**/*.jar</exclude></excludes></fileSet></fileSets>
</assembly>

如果您具有敏感信息或大量大型工件,则可以排除其他文件:

<excludes><exclude>**/*.jar</exclude><exclude>**/*.jks</exclude><exclude>**/*.p12</exclude><exclude>**/*.jpg</exclude><exclude>**/db.properties</exclude></excludes>

但是,您需要注意–您需要包含脚本编写的所有内容,例如jsp文件或Velocity模板。

va-artifact.xml(漏洞评估工件)

第二个工件收集所有依赖项,并将战争简化为一个压缩包。 我们的jar和wars在tarball的顶层,所有依赖项都在“ lib”目录中。 这使得区分工件和依赖关系变得容易。

<assemblyxmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven/assembly-plugin/assembly/1.1.2http://maven.apache.org/xsd/assembly-1.1.2.xsd"><id>va-artifact</id><formats><format>tar.gz</format></formats><includeBaseDirectory>false</includeBaseDirectory><dependencySets><!-- ******************************************* --><!-- Our code should not include version numbers --><!-- ******************************************* --><dependencySet><includes><include>${project.groupId}:*:jar</include><include>${project.groupId}:*:va-war</include><!-- we could also include subprojects --><include>${project.groupId}.**:*:jar</include></includes><!-- we might have sensitive resources --><excludes><exclude>${project.groupId}:*-properties</exclude><excludes><outputFileNameMapping>${artifact.artifactId}${dashClassifier?}.${artifact.extension}</outputFileNameMapping></dependencySet><!-- *********************************************** --><!-- Our dependencies should include version numbers --><!-- *********************************************** --><dependencySet><outputDirectory>lib</outputDirectory><includes /><excludes><exclude>${project.groupId}:*</exclude><exclude>*.pom</exclude><!-- exclude standard APIs --><exclude>javax.*:*</exclude><exclude>dom4j:*</exclude><exclude>jaxen:*</exclude><exclude>jdom:*</exclude><exclude>xml-apis:*</exclude></excludes></dependencySet></dependencySets>
</assembly>

构建工件

程序集描述符只是故事的一半。 我们仍然需要调用maven程序集,我们不想在每个构建中都这样做。

这是配置文件的理想时间–只有指定了特定的配置文件,我们才会构建工件。

pom.xml用于战争模块

对于war模块,pom.xml文件的必要添加是适度的。 我们需要调用程序集描述符,但不需要显式添加依赖项。

<profiles><profile><id>vulnerability-assessment</id><build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptors><descriptor>src/main/assembly/va-war.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build></profile>
</profiles>

pom.xml用于顶级模块

顶级模块的pom.xml文件的必要附加操作更为复杂,尤其是在分发程序集是在子模块而不是根模块中创建时。 在这种情况下,我们需要显式添加对pom文件和lite war文件的依赖。 如果不指定前者,则将丢失大多数依赖项;如果不指定后者,则将丢失.war文件。

<profiles><profile><id>vulnerability-assessment</id><build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptors><descriptor>src/main/assembly/va-artifact.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build><dependencies><!-- specify parent pom --><dependency><groupId>${project.groupId}</groupId><artifactId>parent</artifactId> <!-- FIXME --><version>${project.version}</version><type>pom</type></dependency><!-- specify each war file and corresponding pom file --><dependency><groupId>${project.groupId}</groupId><artifactId>webapp-1</artifactId> <!-- FIXME --><version>${project.version}</version><type>war</type><classifier>va-war</classifier></dependency><dependency><groupId>${project.groupId}</groupId><artifactId>webapp-1</artifactId> <!-- FIXME --><version>${project.version}</version><type>pom</type></dependency><!-- second... --><dependency><groupId>${project.groupId}</groupId><artifactId>webapp-2</artifactId> <!-- FIXME --><version>${project.version}</version><type>war</type><classifier>va-war</classifier></dependency><dependency><groupId>${project.groupId}</groupId><artifactId>webapp-2</artifactId> <!-- FIXME --><version>${project.version}</version><type>pom</type></dependency><!-- and so on... --></dependencies></profile>
</profiles>

一个小陷阱!

有一个小陷阱! 在这种特定方法中。 各个Web模块可能依赖于公共库的不同版本。 没有人希望这样做,但是一旦项目达到一定规模,您就无法承受使所有模块保持同步所需的时间和精力。

当我们在公共位置进行依赖关系解析时,此信息将丢失。

我不认为这是一个问题,原因有两个。 首先,我们可以以更精细的粒度执行漏洞评估–本质上是在.war级别而不是.ear文件上进行分析。 这保证了库将匹配,但是如果我们有大量的Web模块,则将极大地增加我们的工作量。

其次,我们的主要重点是代码中的漏洞,而不是特定版本的第三方库中的漏洞。 这些库为评估工具提供了重要的提示,但我们只希望对代码进行全面分析。 如果有必要,我们总是可以对我们依赖的库进行单独的评估。

Jenkins Veracode插件

最后,我想指出的是,有一个用于Veracode分析的Jenkins插件: Veracode Scanner Plugin 。 它可用于定期安排扫描,因此当您最终记得在发布前几天运行扫描时,不会发现数百个缺陷。

参考: Invariant Properties博客中的JCG合作伙伴 Bear Giles 使用Maven程序集创建漏洞评估工件 。

翻译自: https://www.javacodegeeks.com/2013/10/creating-vulnerability-assessment-artifacts-using-maven-assembly.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷 P3835: 【模板】可持久化平衡树

题目传送门&#xff1a;洛谷P3835。 题意简述&#xff1a; 题面说的很清楚了。 题解&#xff1a; 考虑建立一棵每个节点都表示一个版本的树。 以初始版本 \(0\) 为根。对于第 \(i\) 个操作&#xff0c;从 \(v_i\) 向 \(i\) 连一条边&#xff0c;而边权则是 \(opt_i\) 和 \(x_i\…

自动论文生成器 python_Python生成器常见问题及解决方案

在Python中&#xff0c;生成器和函数很像&#xff0c;都是在运行的过程中才会去确定各种变量的值&#xff0c;所以在很多情况下&#xff0c;会导致各种各样的问题。def generator_test1():# 0...9 generatorx (i for i in range(10))# 5..9 generatorx_filter filter(lambda …

025 SSM简单搭建

参考了同事的文档&#xff0c;自己也写一篇文档。 同时&#xff0c;补充了一下&#xff0c;程序是如何运行的。 一&#xff1a;SSM框架 1.说明 SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成&#xff0c;常作为数…

让Vue也可以使用Redux

上周末看Vuex源码&#xff0c;突发灵感&#xff0c;为什么都是Vuex啊。 于是蛋疼一下午写了一个插件来帮助Vue可以使用Redux Gayhub Url Vue-with-Redux 这是一个用于帮助Vue使用Redux管理状态的插件。Redux是一个非常流行的状态管理工具。vue-with-redux为大家提供一个可以…

Apache Camel –从头开始开发应用程序(第2部分/第2部分)

这是本教程的第二部分&#xff0c;我们将使用Apache Camel创建发票处理应用程序。 如果您错过了它&#xff0c;一定要看一下第一部分 。 以前&#xff0c;我们已经定义了系统的功能要求&#xff0c;创建了网关&#xff0c;分离器&#xff0c;过滤器和基于内容的路由器组件。 让…

上升沿_PLC上升沿,下降沿的理解

有网友留言说&#xff1a;上升沿就是在信号从断开到接通的那一瞬间接通&#xff0c;下降沿就是在信号从接通到断开的那一瞬间接通。但是现在的问题它的实际用处是用在哪一些情况。我身边也有PLC可以做个什么实验来体验一下呢&#xff1f;虽然说LD X0 PLS M0与LDP X0 out Y0…

内存的页面置换算法

在进程运行过程中&#xff0c;若其所要访问的页面不在内存而需把它们调入内存&#xff0c;但内存中已无空闲空间时&#xff0c;为了保证该进程能正常运行&#xff0c;系统必须从内存中调出一页程序或数据到磁盘的对换区中。但应将哪个页面调出&#xff0c;需根据一定的算法来实…

A - 装箱问题

Problem Description 一个工厂生产的产品形状都是长方体&#xff0c;高度都是h&#xff0c;主要有1*1&#xff0c;2*2&#xff0c;3*3&#xff0c;4*4&#xff0c;5*5&#xff0c;6*6等6种。这些产品在邮寄时被包装在一个6*6*h的长方体包裹中。由于邮费很贵&#xff0c;工厂希望…

非阻塞式异步Java 8和Scala的Try / Success / Failure

受Heinz Kabutz最近的时事通讯以及我在最近的书中研究的Scala的期货的启发&#xff0c;我着手使用Java 8编写了一个示例&#xff0c;该示例如何将工作提交给执行服务并异步地响应其结果&#xff0c;并使用了回调。无需阻止任何线程等待执行服务的结果。 理论认为&#xff0c;调…

中找不到iedis_CAD图纸中缺少的字体实在找不到怎么办呢?

在使用浩辰CAD软件打开图纸文件的时候经常提示缺少字体这是什么原因呢&#xff1f;怎么解决这个问题呢&#xff1f;其实打开CAD图纸时提示缺少字体是比较常见的情况&#xff0c;但是很多常见的字体也提示缺失是为什么呢&#xff1f;因为这些字体很显然是被人改过名字了&#xf…

Xamarin Essentials教程使用指南针Compass

Xamarin Essentials教程使用指南针Compass指南针是一种确定地理方向的工具。在手机应用程序中&#xff0c;指南针通过手机的磁力计确定磁北极&#xff0c;提供手机方向信息。在Xamarin中&#xff0c;开发者可以使用Xamarin.Essentials中的静态类 Compass&#xff0c;获取方向信…

Java 8中的instanceof运算符和访客模式替换

我有一个梦想&#xff0c;不再需要操作员和垂头丧气的instanceof &#xff0c;却没有访客模式的笨拙和冗长。 所以我想出了以下DSL语法&#xff1a; Object msg //...whenTypeOf(msg).is(Date.class). then(date -> println(date.getTime())).is(String.class). then(…

1023 Have Fun with Numbers

因为最多有20个字符&#xff0c;int和long long都不行&#xff0c;所以只能用字符串操作。水题~ #include<iostream> #include<algorithm> #include<string.h> #define maxn 25 using namespace std; typedef long long ll; char s1[maxn]; int s2[maxn]; in…

前端生态混乱,AMPMIP在努力做标准化工作

作者 | Brilliant Open Web团队breezet 移动时代的前端似乎越来越混乱了&#xff0c;各种技术方案层出不穷&#xff0c;令开发者们目不暇接&#xff0c;不知如何选择。然而&#xff0c;生态越是混乱&#xff0c;对标准的呼唤就越强&#xff0c;因为只有标准化才能使得整个生态…

python逆向什么意思_如何理解python逆向切片

str 0123456789(推荐教程&#xff1a;python基础教程)如上,我们有一个数值型字符串,接下来我们分别从正向和逆向两个维度截取数据。str[start:end:step]start表示起始下标end表示结束下标step表示步长下面这个图,表示了正向和逆向下标的值首先我们要说一下方向的事情&#xff…

调试工具gdb

1.1 gdb符号调试器简介 gdb是一个用来调试C和C程序的功能强大的调试器&#xff0c;它能在程序运行时观察程序的内部结构和内存的使用情况。 gdb主要提供以下几种功能&#xff1a; 监视程序中变量值的变化设置断点&#xff0c;使程序在指定的代码行上暂停执行&#xff0c;便于观…

Apache Camel –从头开始开发应用程序(第1部分/第2部分)

开始之前 前一段时间&#xff0c;我写了一篇关于Spring Integration的教程&#xff0c;以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration。 我对此非常满意&#xff0c;因此我决定向您展示如何使用Apache Camel&#xff08;Spring Integration的最大…

Bourbon: 让你的sass更简洁

Bourbon是什么 bourbon是一个轻量级的Sass mixin和函数库&#xff0c;可以帮助我们快速开发样式. 官方文档 以下用webpack3.10.0( vue)为示例简述Bourbon的使用 安装配置 npm install bourbon -S 把bourbon添加到node-sass的includePaths中// webpack.config.js module.expor…

nat的地址映射 华为_华为PAT端口地址映射配置详解(一)

众所周知&#xff0c;PAT,&#xff0c;Port Address Translation&#xff0c;即网络地址转换。PAT有以下作用&#xff1a;1.改变数据包的ip地址和端口号&#xff1b;2.能够大量节约公网IP地址。PAT的类型有以下&#xff1a;1.动态PAT&#xff0c;包括NAPT和Easy IP&#xff1b;…

删除maven仓库中的lastUpdate文件

windows下打开命令行 进入maven本地仓库目录中 dos命令中执行下方命令.即可完成批量删除 for /r %i in (*.lastUpdated) do del %i 转载于:https://www.cnblogs.com/zlsxddgj/p/9324077.html