/* * Zed Attack Proxy (ZAP) and its related class files. * * ZAP is an HTTP/HTTPS proxy for assessing web application security. * * Copyright The ZAP development team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.zaproxy.zap.control; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.parosproxy.paros.core.scanner.AbstractPlugin; import org.parosproxy.paros.extension.Extension; import org.zaproxy.zap.extension.pscan.PluginPassiveScanner; /** * Class that contains/provides all built-in (core) components (i.e. extensions and active/passive scanners). * <p> * This class means we don't have to search the core jar for components which was significantly impacting the start time (along * with search in add-ons). * <p> * <strong>Note:</strong> If you add a new 'core' component then you will need to add it to this class (in alphabetic order * please). Note that ideally we would prefer new functionality to be defined in add-ons as this means we can update them * without 'full' releases. The lists could have been maintained in a manifest file as per the add-ons, but having it as code * means that it's immediately apparent if someone moves or deletes a component from the core. * * @since 2.4.0 */ public final class CoreFunctionality { private static List<Extension> builtInExtensions; private static List<AbstractPlugin> builtInActiveScanRules; private static List<PluginPassiveScanner> builtInPassiveScanRules; private CoreFunctionality() { } /** * Returns an unmodifiable list containing all built-in (core) {@code Extension}s. * * @return an unmodifiable list containing all built-in extensions * @see Extension */ public static List<Extension> getBuiltInExtensions() { if (builtInExtensions == null) { createExtensions(); } return builtInExtensions; } private static synchronized void createExtensions() { if (builtInExtensions == null) { ArrayList<Extension> extensions = new ArrayList<>(); extensions.add(new org.parosproxy.paros.extension.edit.ExtensionEdit()); extensions.add(new org.parosproxy.paros.extension.filter.ExtensionFilter()); extensions.add(new org.parosproxy.paros.extension.history.ExtensionHistory()); extensions.add(new org.parosproxy.paros.extension.manualrequest.ExtensionManualRequestEditor()); extensions.add(new org.parosproxy.paros.extension.option.ExtensionOption()); extensions.add(new org.parosproxy.paros.extension.report.ExtensionReport()); extensions.add(new org.parosproxy.paros.extension.state.ExtensionState()); extensions.add(new org.zaproxy.zap.extension.alert.ExtensionAlert()); extensions.add(new org.zaproxy.zap.extension.anticsrf.ExtensionAntiCSRF()); extensions.add(new org.zaproxy.zap.extension.api.ExtensionAPI()); extensions.add(new org.zaproxy.zap.extension.ascan.ExtensionActiveScan()); extensions.add(new org.zaproxy.zap.extension.authentication.ExtensionAuthentication()); extensions.add(new org.zaproxy.zap.extension.authorization.ExtensionAuthorization()); extensions.add(new org.zaproxy.zap.extension.autoupdate.ExtensionAutoUpdate()); extensions.add(new org.zaproxy.zap.extension.brk.ExtensionBreak()); extensions.add(new org.zaproxy.zap.extension.callback.ExtensionCallback()); extensions.add(new org.zaproxy.zap.extension.compare.ExtensionCompare()); extensions.add(new org.zaproxy.zap.extension.dynssl.ExtensionDynSSL()); extensions.add(new org.zaproxy.zap.extension.encoder2.ExtensionEncoder2()); extensions.add(new org.zaproxy.zap.extension.ext.ExtensionExtension()); extensions.add(new org.zaproxy.zap.extension.forceduser.ExtensionForcedUser()); extensions.add(new org.zaproxy.zap.extension.globalexcludeurl.ExtensionGlobalExcludeURL()); extensions.add(new org.zaproxy.zap.extension.help.ExtensionHelp()); extensions.add(new org.zaproxy.zap.extension.httppanel.component.all.ExtensionHttpPanelComponentAll()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.hex.ExtensionHttpPanelHexView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.image.ExtensionHttpPanelImageView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.largerequest.ExtensionHttpPanelLargeRequestView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.largeresponse.ExtensionHttpPanelLargeResponseView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.paramtable.ExtensionHttpPanelRequestFormTableView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.paramtable.ExtensionHttpPanelRequestQueryCookieTableView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.posttable.ExtensionRequestPostTableView()); extensions.add(new org.zaproxy.zap.extension.httppanel.view.syntaxhighlight.ExtensionHttpPanelSyntaxHighlightTextView()); extensions.add(new org.zaproxy.zap.extension.httpsessions.ExtensionHttpSessions()); extensions.add(new org.zaproxy.zap.extension.keyboard.ExtensionKeyboard()); extensions.add(new org.zaproxy.zap.extension.log4j.ExtensionLog4j()); extensions.add(new org.zaproxy.zap.extension.params.ExtensionParams()); extensions.add(new org.zaproxy.zap.extension.pscan.ExtensionPassiveScan()); extensions.add(new org.zaproxy.zap.extension.ruleconfig.ExtensionRuleConfig()); extensions.add(new org.zaproxy.zap.extension.script.ExtensionScript()); extensions.add(new org.zaproxy.zap.extension.search.ExtensionSearch()); extensions.add(new org.zaproxy.zap.extension.sessions.ExtensionSessionManagement()); extensions.add(new org.zaproxy.zap.extension.siterefresh.ExtensionSitesRefresh()); extensions.add(new org.zaproxy.zap.extension.spider.ExtensionSpider()); extensions.add(new org.zaproxy.zap.extension.stats.ExtensionStats()); extensions.add(new org.zaproxy.zap.extension.stdmenus.ExtensionStdMenus()); extensions.add(new org.zaproxy.zap.extension.uiutils.ExtensionUiUtils()); extensions.add(new org.zaproxy.zap.extension.users.ExtensionUserManagement()); extensions.trimToSize(); builtInExtensions = Collections.unmodifiableList(extensions); } } /** * Returns an unmodifiable list containing all built-in (core) active scanners. * * @return an unmodifiable list containing all built-in active scanners * @see AbstractPlugin */ public static List<AbstractPlugin> getBuiltInActiveScanRules() { if (builtInActiveScanRules == null) { createActiveScanRules(); } return builtInActiveScanRules; } private static synchronized void createActiveScanRules() { if (builtInActiveScanRules == null) { ArrayList<AbstractPlugin> rules = new ArrayList<>(); rules.add(new org.zaproxy.zap.extension.ascan.ScriptsActiveScanner()); rules.trimToSize(); for (AbstractPlugin rule : rules) { rule.setStatus(AddOn.Status.release); } builtInActiveScanRules = Collections.unmodifiableList(rules); } } /** * Returns an unmodifiable list containing all built-in (core) passive scanners. * * @return an unmodifiable list containing all built-in passive scanners * @see PluginPassiveScanner */ public static List<PluginPassiveScanner> getBuiltInPassiveScanRules() { if (builtInPassiveScanRules == null) { createPassiveScanRules(); } return builtInPassiveScanRules; } private static synchronized void createPassiveScanRules() { if (builtInPassiveScanRules == null) { ArrayList<PluginPassiveScanner> rules = new ArrayList<>(); rules.add(new org.zaproxy.zap.extension.pscan.scanner.RegexAutoTagScanner()); rules.add(new org.zaproxy.zap.extension.pscan.scanner.ScriptsPassiveScanner()); rules.add(new org.zaproxy.zap.extension.pscan.scanner.StatsPassiveScanner()); rules.trimToSize(); for (PluginPassiveScanner rule : rules) { rule.setStatus(AddOn.Status.release); } builtInPassiveScanRules = Collections.unmodifiableList(rules); } } }