如何使用与 Jenkins 集成的 Python API 脚本为 zap(Owasp) 创建 HTML 报告
How to create HTML report for zap(Owasp) using Python API script which integrates with Jenkins
我用 Python API 触发了 zap,如下所示:-
脚本来源:-
https://github.com/zaproxy/zaproxy/wiki/ApiPython
我想要一个通过命令行生成的 HTML 报告。
我正在尝试将其与 Jenkins 集成。
我在 Jenkins 中发现了几个 Owasp 插件,但似乎没有按预期工作。
任何想法,link,教程将真正帮助我。
此时URL/API(http://ZAP-IP:PORT/UI/core/other/htmlreport/)用户可以获得报告。
我还没有找到任何 zap 支持插件,所以我编写了 selenium webdriver java 脚本来完成我的任务。代码是:-
@Test
public void Report() {
System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"\src\lib\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://localhost:8080/UI/core/other/htmlreport");
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.findElement(By.id("apikey")).sendKeys("ChangeMe");
driver.findElement(By.id("button")).click();
SimpleDateFormat dateFormatForFoldername = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
Date currentDate = new Date();
String folderDateFormat = dateFormatForFoldername.format(currentDate);
try {
URL oracle = new URL(driver.getCurrentUrl());
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
BufferedWriter writer = new BufferedWriter(new FileWriter("Reports"+File.separator+"OwaspReport-"+folderDateFormat+".html"));
String inputLine;
while ((inputLine = in.readLine()) != null){
try{
writer.write(inputLine);
}
catch(IOException e){
e.printStackTrace();
return;
}
}
in.close();
writer.close();
driver.quit();
}
catch(Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
注意:- 根据您的 zap 端口更改 URL 中的端口并替换 apiKey
希望对您有所帮助:)
我发现 python API 只会连接到本地 zaproxy 服务器,所以 jenkins slave 和 zaproxy 服务器应该 运行 在同一台机器(pod)中。
我使用 jenkins 管道和 publishHTML 插件将报告集成到 jenkins 结果中。
通过python脚本在jenkins slave机器中生成一个报告文件
fHTML=open('/zap/report/zapreport.html', 'w')
fHTML.write(zap.core.htmlreport())
fHTML.close()
将报告发布到 jenkins 结果
sh "cp /zap/report/* ./report"
publishHTML (target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'report',
reportFiles: 'zapreport.html',
reportName: "Zaproxy Report"
])
我用 Python API 触发了 zap,如下所示:-
脚本来源:-
https://github.com/zaproxy/zaproxy/wiki/ApiPython
我想要一个通过命令行生成的 HTML 报告。
我正在尝试将其与 Jenkins 集成。 我在 Jenkins 中发现了几个 Owasp 插件,但似乎没有按预期工作。
任何想法,link,教程将真正帮助我。
此时URL/API(http://ZAP-IP:PORT/UI/core/other/htmlreport/)用户可以获得报告。
我还没有找到任何 zap 支持插件,所以我编写了 selenium webdriver java 脚本来完成我的任务。代码是:-
@Test
public void Report() {
System.setProperty("webdriver.chrome.driver",System.getProperty("user.dir")+"\src\lib\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://localhost:8080/UI/core/other/htmlreport");
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.findElement(By.id("apikey")).sendKeys("ChangeMe");
driver.findElement(By.id("button")).click();
SimpleDateFormat dateFormatForFoldername = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
Date currentDate = new Date();
String folderDateFormat = dateFormatForFoldername.format(currentDate);
try {
URL oracle = new URL(driver.getCurrentUrl());
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
BufferedWriter writer = new BufferedWriter(new FileWriter("Reports"+File.separator+"OwaspReport-"+folderDateFormat+".html"));
String inputLine;
while ((inputLine = in.readLine()) != null){
try{
writer.write(inputLine);
}
catch(IOException e){
e.printStackTrace();
return;
}
}
in.close();
writer.close();
driver.quit();
}
catch(Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
注意:- 根据您的 zap 端口更改 URL 中的端口并替换 apiKey
希望对您有所帮助:)
我发现 python API 只会连接到本地 zaproxy 服务器,所以 jenkins slave 和 zaproxy 服务器应该 运行 在同一台机器(pod)中。
我使用 jenkins 管道和 publishHTML 插件将报告集成到 jenkins 结果中。
通过python脚本在jenkins slave机器中生成一个报告文件
fHTML=open('/zap/report/zapreport.html', 'w') fHTML.write(zap.core.htmlreport()) fHTML.close()
将报告发布到 jenkins 结果
sh "cp /zap/report/* ./report" publishHTML (target: [ allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: 'report', reportFiles: 'zapreport.html', reportName: "Zaproxy Report" ])