in dusty/scanners/dast/zap/scanner.py [0:0]
def _setup_scan_policy(self):
self._scan_policy_name = "Default Policy"
# Use user-provided policy (if any)
if self.config.get("scan_policy_data", None) or self.config.get("scan_policy_from", None):
log.info("Using user-provided scan policy")
# Write to temp file if needed
if self.config.get("scan_policy_data", None):
policy_file_fd, policy_file = tempfile.mkstemp()
os.close(policy_file_fd)
with open(policy_file, "w") as policy:
log.debug("Scan policy data: '%s'", self.config.get("scan_policy_data"))
policy.write(self.config.get("scan_policy_data"))
else:
policy_file = self.config.get("scan_policy_from")
# Load policy into ZAP
default_policies = self._zap_api.ascan.scan_policy_names
log.info("Importing scan policy from %s", policy_file)
self._zap_api.ascan.import_scan_policy(policy_file)
current_policies = self._zap_api.ascan.scan_policy_names
log.debug("Policies after load: %s", current_policies)
# Remove temporary file
if self.config.get("scan_policy_data", None):
os.remove(policy_file)
# Set name
loaded_policy_names = list(set(current_policies) - set(default_policies))
if loaded_policy_names:
self._scan_policy_name = loaded_policy_names[0]
log.info("Scan policy set to '%s'", self._scan_policy_name)
return
# Setup 'simple' scan policy
self._scan_policies = [
item.strip() for item in self.config.get("scan_types", "all").split(",")
]
# Disable globally blacklisted rules
for item in constants.ZAP_BLACKLISTED_RULES:
self._zap_api.ascan.set_scanner_alert_threshold(
id=item,
alertthreshold="OFF",
scanpolicyname=self._scan_policy_name
)
self._zap_api.pscan.set_scanner_alert_threshold(
id=item,
alertthreshold="OFF"
)
if "all" not in self._scan_policies:
# Disable all scanners first
for item in self._zap_api.ascan.scanners(self._scan_policy_name):
self._zap_api.ascan.set_scanner_alert_threshold(
id=item["id"],
alertthreshold="OFF",
scanpolicyname=self._scan_policy_name
)
# Enable scanners from suite
for policy in self._scan_policies:
for item in constants.ZAP_SCAN_POCILICES.get(policy, []):
self._zap_api.ascan.set_scanner_alert_threshold(
id=item,
alertthreshold="DEFAULT",
scanpolicyname=self._scan_policy_name)