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

idea创建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

idea创建maven程序

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

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

相关文章

python装饰器的顺序_python中多个装饰器的执行顺序详解

装饰器是程序开发中经常会用到的一个功能&#xff0c;也是python语言开发的基础知识&#xff0c;如果能够在程序中合理的使用装饰器&#xff0c;不仅可以提高开发效率&#xff0c;而且可以让写的代码看上去显的高大上^_^使用场景可以用到装饰器的地方有很多&#xff0c;简单的举…

使用Spring WebFlux从Corda节点流式传输数据

自上次发布以来已经有一段时间了&#xff0c;但我终于回来了&#xff01; 由于我仍在我的项目中&#xff0c;因此我将再次撰写有关使用Corda的文章。 这次&#xff0c;我们将不再关注Corda&#xff0c;而是将Spring与Corda结合使用。 更具体地说&#xff0c;Spring WebFlux。 为…

mysql 批量加索引_mysql优化:按期删数据 + 批量insert + 字符串加索引为何很傻

嗯&#xff0c;犯了一个很低级的错误&#xff0c;最近暴露出来了。html背景&#xff1a;mysql1. 内部平台&#xff0c;接口间断性无返回&#xff0c;查询日志注意到失败时&#xff0c;接口耗时达到4000(正常状态&#xff1a;100ms)git2. 增长日志打点&#xff0c;在关键步骤插入…

python王者归来 pdf_OpenStack开源云:王者归来 PDF 下载

资料目录&#xff1a;第1篇 基 础 篇第1章 OpenStack概述1.1 云计算简介1.1.1 什么是云计算1.1.2 什么是云存储1.1.3 私有云与公有云1.2 为什么使用云计算1.2.1 方案1&#xff1a;简单的服务部署1.2.2 方案2&#xff1a;分布式服务部署1.2.3 方案3&#xff1a;基于虚拟化的服务…

MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入

存储引擎&#xff1a;存储引擎是mysql特有的&#xff0c;共有7种&#xff0c;常用的有myisam、memory、innodb查看表的存储引擎&#xff1a;show create table 表名;修改表的存储引擎&#xff1a;alter table 表名 engine存储引擎名称;1.myisam存储引擎&#xff1a;可转换为压缩…

廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

高阶函数将函数作为参数传入&#xff0c;这样的函数称为高阶函数。函数式编程就是指这种高度抽象的编程范式。变量可以指向函数&#xff0c;函数的参数能接收变量&#xff0c;那么一个函数就可以接收另一个函数作为参数&#xff0c;这种函数就称之为高阶函数。如下所示&#xf…

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

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

python 网格线_Python版简单网格策略(教学)

Python版简单网格策略(教学)Python版简单网格策略(教学)Author: 小小梦, Date: 2020-01-04 11:12:15Tags:backteststart: 2019-07-01 00:00:00end: 2020-01-03 00:00:00period: 1mexchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]i…

python土味情话_土味情话表情包下载

喵星人土味情话表情包是一款很甜的表情图片&#xff0c;现在的聊天模式三句话离不开表情包&#xff0c;而且小编带来的这款表情包非常的适合情侣日常撩&#xff0c;最新的土味情话&#xff0c;需要的朋友可以前来本站下载。土味情话大全一、“对不起。”“你永远都不要和我说对…

多云互操作性!=云服务聚合

多云定义为一种方法&#xff0c;它将来自多个云供应商的多个云&#xff08;公共云或私有云&#xff09;组合在一起。 但是&#xff0c;这不是来自不同供应商的各种服务的集合&#xff0c;它需要一种强制性的胶合剂–云不可知的方法&#xff0c;并在所有提供商之间实现互操作性。…

python股票预测代码_python用线性回归预测股票价格的实现代码

线性回归在整个财务中广泛应用于众多应用程序中。在之前的教程中&#xff0c;我们使用普通最小二乘法(OLS)计算了公司的beta与相对索引的比较。现在&#xff0c;我们将使用线性回归来估计股票价格。线性回归是一种用于模拟因变量(y)和自变量(x)之间关系的方法。通过简单的线性回…

如何在Spring中将@RequestParam绑定到对象

您是否在请求映射方法中用RequestParam注释了多个参数&#xff0c;并认为它不可读&#xff1f; 当请求中需要一个或两个输入参数时&#xff0c;注释看起来非常简单&#xff0c;但是当列表变长时&#xff0c;您可能会感到不知所措。 您不能在对象内部使用RequestParam批注&…

java替换指定位置字符_JS中的替换,以及替换指定位置的字符串

批量修改name属性中的值// 渲染完成&#xff0c;开始修改ansewer的name属性$(‘.sub_timu_zong_tihao‘).each(function(i){$(this).find(‘input[name*bianhao]‘).each(function(){// 首先获取name的值&#xff0c;对console.log(‘正在修改bianhao‘)var old$(this).attr(‘…

webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...

大家好&#xff0c;在软件测试面试过程中&#xff0c;经常有面试官问到这个问题&#xff0c;那我们应该如何回答才好呢&#xff1f;少废话&#xff0c;直接看答案&#xff1a;答案&#xff1a;在页面上发现bug之后&#xff0c;要想判断这个问题属于后端还是前端&#xff0c;我就…

spring基于注释的配置_基于注释的Spring MVC Web应用程序入门

spring基于注释的配置这是使Maven启动Spring 3 MVC项目的最小方法。 首先创建spring-web-annotation/pom.xml文件&#xff0c;并包含Spring依赖项&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apach…

ad09只在一定范围内查找相似对象_dxp查找相似对象

(Edit→Find Similar Objects)ShifF 查找 相似对象 EOS(Edit→Origin→Set)设置坐标原点 ESN((Edit → Select → Net) 选中显示某个网 络 FA(......“ctrlA”全选,选择需要修改的器 件,点鼠标右键弹出如下图的菜单: 选择 “查找相似对象” 移动鼠标到需要修改的属性上,点“ok”…

首次适应算法_CVPR 2020丨?商汤TSD目标检测算法获得Open Images冠军

编者按&#xff1a;此前&#xff0c;在文章《商汤科技57篇论文入选ICCV 2019&#xff0c;13项竞赛夺冠》里&#xff0c;商汤君报道了商汤科技荣获Open Images Object Detection Challenge 2019 冠军。由Google AI主办的Open Images大赛是目前通用物体检测和实例分割两个领域中数…

玩JDK 12的Switch表达式

在博客文章“操作中的JDK语言功能预览&#xff1a;切换表达式 ”中&#xff0c;我讨论了JEP 325 [“切换表达式&#xff08; 预览 &#xff09;”&#xff09;如何作为指定的“ 预览语言功能 ”的早期应用&#xff0c;如JEP 12所述。预览语言和VM功能”]。 JEP 325 适用于JDK 1…

java 三元 代替 if_Java 中三元和 if else 哪个的效率比较高,有底层解释吗,谢谢了!...

Genokiller2018-12-28 18:16:11 08:00是否还有其他影响效率的地方两段简短的测试代码&#xff1a;Test2.java (三元运算符)public class Test2{public static void main(String args[]){int m 1, n2;String s m > n ? "a" : "b";}}Test3.java ( if...…

python 验证码_4行Python代码生成图像验证码

点击上方蓝色字体&#xff0c;关注我们最近无意看到网上有人使用Python编写几十行代码生成图像验证码&#xff0c;感觉很是繁琐&#xff0c;这里为各位朋友推荐两种方法&#xff0c;使用4行Python代码即可生成验证码。1captcha库第1步&#xff1a;安装captcha库pip install cap…