ZAP APIを使用して、さまざまな Web アプリケーションに対して認証スキャンを実行したいと考えています。これらの Web アプリケーションにはそれぞれ異なるログイン メカニズムがあり、それぞれ手動で構成する必要がある多数の異なるフォームを介してログインするという面倒なプロセスを実行したくありません。
より簡単な解決策は、アプリケーションごとに HTTP セッション Cookie を使用してこれらの認証済みスキャンを実行することですが、関連付けられたユーザーとのコンテキストを作成せずにこれを実行するメカニズムがわかりません。
この使用例ではないにもかかわらず、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)
ただし、スキャンを実行する場合、手動で追加された Cookie はサーバーへの後続のリクエストには追加されません。
たとえば、スパイダーを実行する場合、セッション情報は無視されます。
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)
ZAP API 経由でリクエストに Cookie を追加してスキャンを実行することはできますか?
または、ログインしてスキャンする各 Web サイトのフォーム データとコンテキストを手動で追加する唯一のオプションですか?