ChromeDriver 未通过 Java ZAP API 代理本地流量
Local traffic not proxied via Java ZAP API by ChromeDriver
我对 ZAP 很陌生,我必须使用 ZAP java API 对 Web 应用程序执行安全测试,使用 Selenium 在浏览器上导航,为 ZAP 创建流量。我正在使用 Eclipse IDE for Enterprise Java Developers version 2019-03 (4.11.0) with Java jdk-1.8.0_212 和 Maven 3.5.3和 3 个导入库:harlib 版本 1.1.1 (edu.umass.cs.benchlab harlib)、zap api 版本 1.7.0 (org.owasp zaproxy-api) 和代理版本 2.4.2快照 (net.continuumsecurity zap-java-api)
我遵循了这个教程:https://dzone.com/articles/automate-zap-security-tests-with-selenium-webdrive-1,它很有效。回顾一下,它使用了 3 个 类:一个用于实例化 Web 浏览器 (BrowserDriverFactory.java),一个用于实际存储所有导航功能和参数 (WebSiteNavigation.java),一个用于创建ZAP 代理,配置它并执行安全测试作为 @Test 函数 (ZapSecurityTest.java)。
我在代理我的本地应用程序时遇到一点问题::我的本地应用程序似乎没有使用 ZAP 代理,即使我的 chromedriver 很清楚代理(我看到ZAP 中的非本地流量 UI). 奇怪的是我什至明确地将我的本地 URL 添加到上下文并将其设置为在范围内:
clientapi.context.includeInContext(contextName,
java.util.regex.Pattern.quote(WebSiteNavigation.BASE_URL));
clientapi.context.setContextInScope(contextName, "true");
这样做并在我的本地应用程序上导航后,我在 ZAP UI 中看到了相关的非本地流量,但没有看到本地流量。当我检查 clientapi.context.urls(contextName) returns 时,它是空的。
我使用以下方法创建我的代理:
private static Proxy createZapProxyConfiguration() {
Proxy proxy = new Proxy();
proxy.setHttpProxy(ZAP_PROXYHOST + ":" + ZAP_PROXYPORT);
proxy.setSslProxy(ZAP_PROXYHOST + ":" + ZAP_PROXYPORT);
return proxy;
}
调用者:
@Before
public void setUp() {
// Configure ZAP Scanner
zapScanner = new ZAProxyScanner(ZAP_PROXYHOST, ZAP_PROXYPORT,
ZAP_APIKEY);
clientapi = new ClientApi(ZAP_PROXYHOST, ZAP_PROXYPORT);
// Start new session
zapScanner.clear();
log.info("Started a new session: Scanner");
// Create ZAP API client
zapSpider = (Spider) zapScanner;
// Create driver object
driver = BrowserDriverFactory.createChromeDriver
(createZapProxyConfiguration(), BROWSER_DRIVER_PATH);
siteNavigation = new WebSiteNavigation(driver);
}
这也叫:
public static WebDriver createChromeDriver(Proxy proxy, String path) {
// Set proxy in the chrome browser
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("proxy", proxy);
// Set system property for chrome driver with the path
System.setProperty("webdriver.chrome.driver", path);
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
ChromeOptions options = new ChromeOptions();
options.merge(capabilities);
return new ChromeDriver(options);
}
奇怪的是,几天前,当我第一次设置它时,它运行得非常好……然后我尝试自动执行身份验证过程,但从那以后,它就不起作用了……
我是不是遗漏了什么?我至少找对地方了?
Chrome 默认情况下不会代理默认发送到 localhost 的请求,因此如果是这种情况,您需要向 chrome 驱动程序传递一个额外的标志。这是使用 JSON:
配置的方式
capabilities: {
browserName: 'chrome',
proxy: proxy
chromeOptions: {
args: ['--proxy-bypass-list=<-loopback>']
}
},
同样可以使用 Java API.
我对 ZAP 很陌生,我必须使用 ZAP java API 对 Web 应用程序执行安全测试,使用 Selenium 在浏览器上导航,为 ZAP 创建流量。我正在使用 Eclipse IDE for Enterprise Java Developers version 2019-03 (4.11.0) with Java jdk-1.8.0_212 和 Maven 3.5.3和 3 个导入库:harlib 版本 1.1.1 (edu.umass.cs.benchlab harlib)、zap api 版本 1.7.0 (org.owasp zaproxy-api) 和代理版本 2.4.2快照 (net.continuumsecurity zap-java-api)
我遵循了这个教程:https://dzone.com/articles/automate-zap-security-tests-with-selenium-webdrive-1,它很有效。回顾一下,它使用了 3 个 类:一个用于实例化 Web 浏览器 (BrowserDriverFactory.java),一个用于实际存储所有导航功能和参数 (WebSiteNavigation.java),一个用于创建ZAP 代理,配置它并执行安全测试作为 @Test 函数 (ZapSecurityTest.java)。
我在代理我的本地应用程序时遇到一点问题::我的本地应用程序似乎没有使用 ZAP 代理,即使我的 chromedriver 很清楚代理(我看到ZAP 中的非本地流量 UI). 奇怪的是我什至明确地将我的本地 URL 添加到上下文并将其设置为在范围内:
clientapi.context.includeInContext(contextName,
java.util.regex.Pattern.quote(WebSiteNavigation.BASE_URL));
clientapi.context.setContextInScope(contextName, "true");
这样做并在我的本地应用程序上导航后,我在 ZAP UI 中看到了相关的非本地流量,但没有看到本地流量。当我检查 clientapi.context.urls(contextName) returns 时,它是空的。
我使用以下方法创建我的代理:
private static Proxy createZapProxyConfiguration() {
Proxy proxy = new Proxy();
proxy.setHttpProxy(ZAP_PROXYHOST + ":" + ZAP_PROXYPORT);
proxy.setSslProxy(ZAP_PROXYHOST + ":" + ZAP_PROXYPORT);
return proxy;
}
调用者:
@Before
public void setUp() {
// Configure ZAP Scanner
zapScanner = new ZAProxyScanner(ZAP_PROXYHOST, ZAP_PROXYPORT,
ZAP_APIKEY);
clientapi = new ClientApi(ZAP_PROXYHOST, ZAP_PROXYPORT);
// Start new session
zapScanner.clear();
log.info("Started a new session: Scanner");
// Create ZAP API client
zapSpider = (Spider) zapScanner;
// Create driver object
driver = BrowserDriverFactory.createChromeDriver
(createZapProxyConfiguration(), BROWSER_DRIVER_PATH);
siteNavigation = new WebSiteNavigation(driver);
}
这也叫:
public static WebDriver createChromeDriver(Proxy proxy, String path) {
// Set proxy in the chrome browser
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("proxy", proxy);
// Set system property for chrome driver with the path
System.setProperty("webdriver.chrome.driver", path);
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
ChromeOptions options = new ChromeOptions();
options.merge(capabilities);
return new ChromeDriver(options);
}
奇怪的是,几天前,当我第一次设置它时,它运行得非常好……然后我尝试自动执行身份验证过程,但从那以后,它就不起作用了……
我是不是遗漏了什么?我至少找对地方了?
Chrome 默认情况下不会代理默认发送到 localhost 的请求,因此如果是这种情况,您需要向 chrome 驱动程序传递一个额外的标志。这是使用 JSON:
配置的方式capabilities: {
browserName: 'chrome',
proxy: proxy
chromeOptions: {
args: ['--proxy-bypass-list=<-loopback>']
}
},
同样可以使用 Java API.