2016-12-13 11 views
0

Я хочу использовать ZAP API для выполнения проверки подлинности с использованием нескольких различных веб-приложений. Эти веб-приложения имеют разные механизмы входа в систему, и я не хочу выполнять утомительный процесс входа в систему с помощью нескольких различных форм, каждый из которых необходимо настроить вручную.Аутентификация сеанса API ZAP

Более простым решением является использование файлов cookie сеанса HTTP для каждого приложения для выполнения этих проверок с проверкой подлинности, однако я не вижу механизма для этого, не создавая контекст с ассоциированным пользователем.

Я попытался добавить новую сессию через HTTP сессий, несмотря на их не быть для этого случая использования:

def add_session(self, session_name, session_tokens): 
     self.zap.httpsessions.create_empty_session(self.target_url, session_name, apikey=self.api_key) 
     for token_name, token_value in session_tokens: 
      self.zap.httpsessions.set_session_token_value(self.target_url, session_name, token_name, token_value, apikey=self.api_key) 
     self.zap.httpsessions.add_session_token(self.target_url, session_name, apikey=self.api_key) 
     self.zap.httpsessions.set_active_session(self.target_url, session_name, apikey=self.api_key) 

Однако при выполнении сканирования любые добавленные вручную куки не добавляются в последующих запросах к сервер.

Например, при выполнении паука информация сеанса игнорируется:

def spider(self): 
    scanid = self.zap.spider.scan(self.target_url, apikey=self.api_key) 
    while (int(self.zap.spider.status(scanid)) < 100): 
     print 'Spider progress %s%% ' % self.zap.spider.status(scanid) 
     time.sleep(1.0) 
    return self.zap.spider.full_results(scanid) 

Можно ли выполнить сканирование путем добавления куки для запросов через API ZAP?

Или это единственная возможность вручную добавить данные формы и контекст для каждого веб-сайта, на который я хочу войти и сканировать?

ответ

1

Да, это возможно - мы делаем это в Mozilla. Фрагмент кода, который я использую:

zap.httpsessions.add_session_token(target + ":443", "sessionid") 
zap.httpsessions.create_empty_session(target + ":443", "testsession") 
zap.httpsessions.set_session_token_value(target + ":443", "testsession", "sessionid", session_cookie) 
zap.httpsessions.set_active_session(target + ":443", "testsession") 

Это работает как и пауков активного сканирования, не требуется никакого контекста. Я использую надстройку Auth Stats (https://github.com/zaproxy/zap-extensions/wiki/HelpAddonsAuthstatsAuthStats) для проверки работоспособности аутентификации.

Cheers, Simon