将Acunetix与CircleCI集成
如果要在DevSecOps中包含Acunetix ,则需要将其与CI / CD系统集成。Acunetix具有针对最受欢迎的CI / CD系统Jenkins的现成集成。但是,您可以使用Acunetix REST API将扫描仪与任何CI / CD系统集成。在本文中,我们将向您展示如何将Acunetix与CircleCI CI / CD平台集成。
在此分步示例中,我们将使用在Node.JS上运行的简单Web应用程序。我们将将此应用程序与GitHub和CircleCI集成。
步骤1.准备您的Acunetix目标信息 登录到您的Acunetix安装。 为您的Web应用程序创建目标。在此示例中,可通过以下URL使用我们的Web应用程序:http : //testwebapp.acunetixexample.com : 8080。 输入您的Web应用程序的URL 输入您的Web应用程序的描述 点击保存按钮 您将被带到“目标设置”页面,现在可以从URL检索目标ID。 转到您的个人资料页面,然后单击“复制”按钮以检索您的API密钥。 第2步。准备您的GitHub存储库 登录到您的GitHub帐户-在此示例中,帐户名称为acunetix-test,帐户电子邮件地址为webmaster@acunetixexample.com。 在“存储库”页面上,单击“新建”按钮。 创建新的存储库: 输入存储库名称-在此示例中,存储库名称将为testwebapp 输入存储库的描述 启用添加自述文件复选框以初始化存储库 单击创建存储库按钮 步骤3.准备您的本地环境 在此示例中,本地环境将是Ubuntu 20.04.1桌面安装程序,但是对于大多数Linux或MacOS安装程序,它应该是相同的。用适合您环境的步骤替换特定于平台的步骤就足够了。以下所有步骤将在您的本地环境计算机上执行。
安装先决条件 更新和升级您的环境: sudo apt update && sudo apt upgrade -y 安装git与您的GitHub存储库进行交互: sudo apt install git -y 安装Node.JS和npm: sudo apt install npm -y 编写本地源代码 查看您的GitHub存储库: cd ~ git clone https://github.com/acunetix-test/testwebapp.git (substitute "acunetix-test" with your GitHub account name) 在本地代码存储库中初始化npm: cd ~/testwebapp npm init -y 使用基本文件夹中的app.js文件创建基本的Web应用程序: nano ~/testwebapp/app.js 将以下行添加到您的app.js文件中: const http = require('http'); http.createServer(function (req, res) { res.write(''); res.write('Welcome to the Test Web Application!'+'
'); res.write('===================================='+'
'); res.write(''); res.end(); }).listen(80, '0.0.0.0'); 将CircleCI工作流配置文件添加到您的源代码中 创建配置文件: mkdir ~/testwebapp/.circleci nano ~/testwebapp/.circleci/config.yml 将以下行添加到您的config.yml文件中: version: 2.1
jobs: pull-and-build: docker: – image: arvindr226/alpine-ssh steps: – checkout – run: ssh -oStrictHostKeyChecking=no -v $USERNAME@$HOSTNAME "./deploy.sh"
workflows: version: 2 build-project: jobs: – pull-and-build: filters: branches: only: – main 将更改提交到GitHub存储库 转到正确的目录: cd ~/testwebapp 设置您的GitHub凭据和远程存储库(用您的GitHub帐户电子邮件地址代替): git config user.email "webmaster@acunetixexample.com" 提交代码更改: cd ~/testwebapp git add . git commit -m "first code commit" git push 步骤4.准备部署环境 在此示例中,部署环境将是在云平台上运行的Ubuntu 18.04 LTS服务器。因此,您的部署环境的主机名将与目标的主机名相同(在此示例中:testwebapp.acunetixexample.com)。
为CircleCI创建用户以连接到部署环境 以root用户登录到您的部署环境。 创建一个不使用密码登录的用户: useradd -m -d /home/circleuser -s /bin/bash circleuser 为circleuser用户创建一个不带密码的SSH密钥: ssh-keygen -m PEM -t rsa -f ~/.ssh/circleuser 将新创建的公钥添加到/home/circleuser/.ssh/authorized_keys: mkdir -p /home/circleuser/.ssh printf "\n" >> /home/circleuser/.ssh/authorized_keys cat ~/.ssh/circleuser.pub >> /home/circleuser/.ssh/authorized_keys chown -R circleuser:circleuser /home/circleuser 显示私钥的内容: cat ~/.ssh/circleuser 复制私钥的内容–您将使用它来允许CircleCI登录到您的部署环境。 创建一组SSH密钥供用户在GitHub中进行身份验证 以circleuser用户身份登录到您的部署环境。 创建不带密码的新SSH密钥: ssh-keygen -t rsa 在控制台中显示公钥,并将其复制以供以后使用: cat ~/.ssh/id_rsa.pub 登录到GitHub帐户并导航到应用程序的存储库。 单击设置选项卡。 在边栏中选择部署密钥。 单击添加部署键按钮。 添加新密钥: 将“标题”字段设置为LogFromDeployEnvironment(或任何其他易于记忆的名称) 将您先前复制的公共密钥的内容粘贴到“密钥”字段中 点击添加键按钮 为SSH和HTTP配置防火墙访问 允许通过防火墙的SSH和HTTP通信:
登录到您的部署环境并运行以下命令: sudo ufw allow OpenSSH sudo ufw allow 80 sudo ufw enable 设置项目 以circleuser用户身份登录到您的部署环境。 克隆项目源代码(根据需要替换为格式:git@github.com:your_user_name / your_application_name.git): git clone git@github.com:acunetix-test/testwebapp.git 暂时移至testwebapp文件夹并安装依赖项: cd testwebapp npm install cd ~ 暂时将您的特权提升为root用户并安装pm2,以允许将Node应用程序作为后台进程运行: su npm install -g pm2 Exit 使用pm2启动您的Node应用程序以注册该过程: pm2 start ~/testwebapp/app.js 创建一个deploy.sh文件: nano ~/deploy.sh 将以下行添加到您的deploy.sh文件中: #!/bin/bash
cd ~/testwebapp
git pull origin main
npm install export PATH=~/.npm-global/bin:$PATH source ~/.profile
pm2 restart ~/testwebapp/app.js 步骤5.将CircleCI配置为与GitHub集成 设置CircleCI项目 登录您的CircleCI帐户。 转到项目列表,然后单击要使用的项目的“设置项目”按钮-在此示例中,您的项目名为testwebapp。 单击“使用现有配置”按钮(您已经在存储库中创建了config.yml文件)。 单击开始构建按钮(这将使用您存储库中的config.yml)。这将立即触发第一个构建并将您发送到管道页面。此初始构建将失败,因为您需要执行一些其他步骤。 配置SSH密钥以使CircleCI连接到部署环境 在应用程序的管道页面上,单击“项目设置”按钮。 单击“ SSH密钥”菜单项。 单击添加SSH密钥按钮。 输入您的部署环境的主机名(在此示例中:testwebapp.acunetixexample.com)。 输入从部署环境复制的私钥。 单击添加SSH密钥按钮。 配置环境变量 在应用程序的管道页面上,单击“项目设置”按钮。 单击环境变量菜单项。 单击添加环境变量按钮。 为您先前在部署环境中创建的circleuser用户添加环境变量: 将名称字段设置为USERNAME 将值字段设置为circleuser 单击添加环境变量按钮 为您的部署环境的IP地址或主机名添加一个环境变量。在此示例中,主机名是testwebapp.acunetixexample.com: 将名称字段设置为HOSTNAME 将值字段设置为testwebapp.acunetixexample.com 单击添加环境变量按钮 步骤6.测试管道工作流程 检查一切是否正常的主要测试是简单地对源代码进行更改,提交更改,并将更改推送到GitHub。这将显示在您的CircleCI管道页面中:
步骤7.与Acunetix集成 最后,您需要在部署环境中编辑deploy.sh文件,以添加说明以在每次构建后触发对Web应用程序目标的Acunetix扫描。
以circleuser用户身份登录到您的部署环境。 编辑deploy.sh文件: nano ~/deploy.sh 在您的deploy.sh文件中添加一条卷曲线以触发扫描;最终文件应如下所示: #!/bin/bash
cd ~/testwebapp
git pull origin main
export PATH=~/.npm-global/bin:$PATH source ~/.profile
pm2 restart ~/testwebapp/app.js
curl -k -i --request POST --url "https://online.acunetix.com/api/v1/scans" --header "X-Auth: [API KEY]" --header "content-type: application/json" --data '{"profile_id":"11111111-1111-1111-1111-111111111111","schedule":{"disable":false,"start_date":null,"time_sensitive":false},"user_authorized_to_scan":"yes","target_id":"[Target ID]"}' 替换3个突出显示的字段: 要设置正确的X-Auth值,请将[API KEY]文本替换为您在第一部分中检索到的API密钥。 该建议值PROFILE_ID是11111111-1111-1111-1111-111111111111 -这个默认值是一个全扫描。如果希望指定其他扫描配置文件,则可以设置以下值之一: 对于Acunetix的在线版本: 全面扫描:11111111-1111-1111-1111-111111111111 高风险漏洞:11111111-1111-1111-1111-111111111112 SQL注入漏洞:11111111-1111-1111-1111-111111111113 弱密码:11111111-1111-1111-1111-111111111115 跨站点脚本漏洞:11111111-1111-1111-1111-111111111116 仅抓取:11111111-1111-1111-1111-111111111117 恶意软件扫描:11111111-1111-1111-1111-111111111120 完整的网络和网络扫描:11111111-1111-1111-1111-21111111111111 网络扫描:11111111-1111-1111-1111-211111111112 网络扫描(安全检查):11111111-1111-1111-1111-211111111113 网络扫描快速:11111111-1111-1111-1111-211111111114 对于本地版本的Acunetix: 全面扫描:11111111-1111-1111-1111-111111111111 高风险:11111111-1111-1111-1111-111111111112 SQL注入漏洞:11111111-1111-1111-1111-111111111113 弱密码:11111111-1111-1111-1111-111111111115 跨站点脚本漏洞:11111111-1111-1111-1111-111111111116 仅抓取:11111111-1111-1111-1111-111111111117 高/中风险:11111111-1111-1111-1111-111111111119 恶意软件扫描:11111111-1111-1111-1111-111111111120 您也可以使用可能已创建的任何自定义扫描配置文件的扫描配置文件ID。您可以使用Acunetix REST API以编程方式检索自定义扫描配置文件的扫描配置文件ID,也可以导航到自定义扫描配置文件并检查URL: 要设置正确的target_id值,请将[Target ID]文本替换为您在第一部分中检索到的目标ID。 现在,将来所有的提交都会触发对Acunetix的扫描请求:
————————————————
版权声明:本文为CSDN博主「kevin20182019」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kevin20182019/article/details/117119435
将Acunetix与CircleCI集成的更多相关文章
- Acunetix与WAF集成:Acunetix和F5 BigIP ASM
该的Acunetix API让您有机会来实现任务自动化,从而提高效率-尤其是当你可以用加速您的工作流程的其他组件的功能整合.在此示例中,我们将在上一篇文章的基础上,向您展示如何在Bash脚本中使用Ac ...
- docusaurus 生成的website 通过circleci部署gh-pages
docusaurus 是facebook 开源的一款文档脚手架工具,可以快速的进行文档生成,基于markdown 同时已经内置了gh-pages 发布的命令,对于ci 工具,我们只需要简单的配置就可以 ...
- 使用 circleci 自动部署 vuepress 到 github
概述 今天我想把博客什么的搬到 github 的 vuepress 上面.但是每次提交 md 文件需要手动打包然后再提交到 github 的 gh-pages,非常麻烦.所以我去研究了一下用 circ ...
- CircleCI 与持续集成
CircleCI 入门 最近在完成老师的作业:使用 CircleCI 进行持续集成,现将过程书写下来,与大家一起学习进步. A. What is CircleCI? 1. 什么是持续集成 持续集成(C ...
- 使用 CircleCI 2.0 进行持续集成/持续部署
使用 CircleCI 2.0 进行持续集成/持续部署 - 简书https://www.jianshu.com/p/36af6af74dfc Signup - CircleCIhttps://circ ...
- WAF集成:Acunetix和FortiWeb
Acunetix API使您有机会自动化任务以提高效率,尤其是在您可以加速与工作流其他组件的集成功能时.在此示例中,我们将在上一篇文章的基础上,向您展示如何在Bash脚本中使用Acunetix API ...
- fir.im weekly - 「 持续集成 」实践教程合集
我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...
- 基于 CODING 的 Spring Boot 持续集成项目
本文作者:CODING 用户 - 廖石荣 持续集成的概念 持续集成(Continuous integration,简称 CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少 ...
- 使用 CODING 进行 Hexo 项目的持续集成
本文作者:CODING 用户 - 廖石荣 关于持续集成的概念 持续集成指的是,频繁地(一天多次)将代码集成到主干. 持续集成的过程 如图所示: CI 过程:代码编写 -> 源代码库(GitHub ...
随机推荐
- 大对象数据LOB的应用
概述 由于无结构的数据往往都是大型的,存储量特别大,而LOB(large object)类型主要用来支持无结构的大型数据. 用户可以利用LOB数据类型来存储大型的无结构数据,特别是文本,图形,视频和音 ...
- 如何保证mq不丢消息
1.消息的发送流程 一条消息从生产到被消费,将会经历3个阶段 生产阶段,Producer 新建消息,然后通过网络将消息投递给MQ Broker 存储阶段,消息将会存储在Broker端磁盘中 消费阶段, ...
- AIFramework基本概念整理
AIFramework基本概念整理 本文介绍: 对天元 MegEngine 框架中的 Tensor, Operator, GradManager 等基本概念有一定的了解: 对深度学习中的前向传播.反向 ...
- 如何保证Qt状态机的最佳性能
如何保证Qt状态机的最佳性能 How to ensure the best Qt state machine performance 如果您使用Qt进行应用程序开发,并且使用状态机,那么很可能您正在使 ...
- jmeter工作目录介绍、jmeter元件及组件介绍
一.jmeter工作目录介绍: bin:放置各项配置文件(如日志设置.JVM设置).启动文件.启动Jar包.示例脚本等: docs:放置JMeter API的离线帮助文档: extras:JMeter ...
- 你,确定了解Java的String字符串?
本文将描述JDK6中String.intern()是如何实现的,以及在JDK7和JDK8中对字符串池化技术做了哪些改变. String池化介绍 String池化就是把一些值相同,但是标识符不同的字符串 ...
- 6.10考试总结(NOIP模拟6)
前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...
- 不管卷不卷,面试还是得问问你G1原理!
所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(Garbage First)回收器的出现颠覆了之前版本CMS.Parallel等垃圾回收器的分代收集方式,从2004年Sun发布第一篇关于G ...
- C#构造函数中:this()的作用
通俗来说,可以说是构造函数的继承 (1) :this()用来继承无参时的构造函数,例如下面代码 static void Main(string[] args) { AA aA = new AA(&qu ...
- 为什么PMOS比NMOS的沟道导通电阻大,速度慢,价格高-透彻详解
原文地址点击这里: 在前一节,我们对PMOS与NMOS两种增强型场效应管的开关电路作了详细的介绍, 并且还提到过一种广为流传的说法:相对于NMOS管,PMOS管的沟道导通电阻更大.速度更慢.成本更高等 ...