Локальный трафик не передается через API Java ZAP ChromeDriver - PullRequest
0 голосов
/ 10 июля 2019

Я довольно новичок в ZAP, и мне приходится использовать Java-API ZAP для выполнения тестов безопасности в веб-приложении, используя Selenium для навигации по браузеру, создавая трафик для ZAP. Я использую Eclipse IDE для корпоративных разработчиков Java версии 2019-03 (4.11.0) с 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 класса: один для создания экземпляра веб-браузера (BrowserDriverFactory.java), второй для хранения всех функций и параметров навигации (WebSiteNavigation.java) и один для создания прокси-сервера ZAP, настройки и выполнения тесты безопасности как функции @Test (ZapSecurityTest.java).

У меня возникла небольшая проблема с прокси моего локального приложения:: кажется, что мое локальное приложение не использует прокси ZAP, даже если я хромодрайвер хорошо осведомлен о прокси (я вижу нелокальный трафик в пользовательском интерфейсе ZAP). Странно то, что я даже явно добавил свой локальный URL-адрес в контекст и установил его в области видимости:

clientapi.context.includeInContext(contextName, 
 java.util.regex.Pattern.quote(WebSiteNavigation.BASE_URL));

clientapi.context.setContextInScope(contextName, "true");

После этого и навигации по моему локальному приложению я вижу связанный нелокальный трафик в пользовательском интерфейсе ZAP, но не локальный. И когда я проверяю, что возвращает clientapi.context.urls (contextName), он пуст.

Я создаю свой прокси с:

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);
}

Как ни странно, несколько дней назад, когда я впервые настроил это, оно работало как чудо ... Затем я попытался автоматизировать процесс аутентификации, и с тех пор он не работает ...

Я что-то здесь упускаю? Я хотя бы смотрю в нужном месте?

1 Ответ

2 голосов
/ 10 июля 2019

Chrome по умолчанию не передает запросы прокси, отправленные на localhost по умолчанию, поэтому в этом случае вам необходимо передать дополнительный флаг драйверу chrome.Вот как это настраивается с помощью JSON:

capabilities: {
    browserName: 'chrome',
    proxy: proxy
    chromeOptions: {
      args: ['--proxy-bypass-list=<-loopback>']
    }
  },

То же самое можно сделать с помощью Java API.

...