You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

246 lines
11 KiB

<?php
if (!defined('WORDFENCE_VERSION')) { exit; }
$waf = wfWAF::getInstance();
$d = new wfDashboard(); unset($d->countriesNetwork);
$firewall = new wfFirewall();
$config = $waf->getStorageEngine();
$wafURL = wfPage::pageURL(wfPage::PAGE_FIREWALL);
$wafConfigURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend');
$wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#removeAutoPrepend');
/** @var array $wafData */
$backPage = new wfPage(wfPage::PAGE_FIREWALL);
if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) {
$backPage = new wfPage($_GET['source']);
}
?>
<script type="application/javascript">
(function($) {
WFAD.wafData = <?php echo json_encode($wafData); ?>;
WFAD.restoreWAFData = JSON.parse(JSON.stringify(WFAD.wafData)); //Copied into wafData when canceling changes
$(function() {
document.title = "<?php esc_attr_e('Firewall Options', 'wordfence'); ?>" + " \u2039 " + WFAD.basePageName;
WFAD.wafConfigPageRender();
//Hash-based option block linking
if (window.location.hash) {
var hashes = WFAD.parseHashes();
var hash = hashes[hashes.length - 1];
var block = $('.wf-block[data-persistence-key="' + hash + '"]');
if (block.length) {
if (!block.hasClass('wf-active')) {
block.find('.wf-block-content').slideDown({
always: function() {
block.addClass('wf-active');
$('html, body').animate({
scrollTop: block.offset().top - 100
}, 1000);
}
});
WFAD.ajax('wordfence_saveDisclosureState', {name: block.data('persistenceKey'), state: true}, function() {});
}
else {
$('html, body').animate({
scrollTop: block.offset().top - 100
}, 1000);
}
history.replaceState('', document.title, window.location.pathname + window.location.search);
}
}
var updatePendingCircles = function() {
$('#circle-waf-coverage, #circle-waf-rules, #circle-waf-blacklist, #circle-waf-brute').wfCircularProgress({pendingOverlay: Object.keys(WFAD.pendingChanges).length > 0});
};
var coalescingUpdateTimer = false;
$('.wf-option, .wf-rule-toggle').on('change', function() {
clearTimeout(coalescingUpdateTimer);
coalescingUpdateTimer = setTimeout(updatePendingCircles, 100);
});
});
$(window).on('wfOptionsReset', function() {
WFAD.wafData = JSON.parse(JSON.stringify(WFAD.restoreWAFData));
WFAD.wafConfigPageRender();
});
})(jQuery);
</script>
<div class="wf-options-controls">
<div class="wf-row">
<div class="wf-col-xs-12">
<?php
echo wfView::create('options/block-controls', array(
'backLink' => $backPage->url(),
'backLabelHTML' => sprintf(__('<span class="wf-hidden-xs">Back to </span>%s', 'wordfence'), $backPage->label()),
'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_FIREWALL,
'restoreDefaultsMessage' => __('Are you sure you want to restore the default Firewall settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom whitelisted URLs, those changes will not be overwritten.', 'wordfence'),
))->render();
?>
</div>
</div>
</div>
<div class="wf-options-controls-spacer"></div>
<?php
if (wfOnboardingController::shouldShowAttempt3()) {
echo wfView::create('onboarding/disabled-overlay')->render();
echo wfView::create('onboarding/banner')->render();
}
else if (wfConfig::get('touppPromptNeeded')) {
echo wfView::create('gdpr/disabled-overlay')->render();
echo wfView::create('gdpr/banner')->render();
}
?>
<div class="wrap wordfence">
<div class="wf-container-fluid">
<?php
if (function_exists('network_admin_url') && is_multisite()) {
$firewallURL = network_admin_url('admin.php?page=WordfenceWAF#top#waf');
$blockingURL = network_admin_url('admin.php?page=WordfenceWAF#top#blocking');
}
else {
$firewallURL = admin_url('admin.php?page=WordfenceWAF#top#waf');
$blockingURL = admin_url('admin.php?page=WordfenceWAF#top#blocking');
}
?>
<div class="wf-row">
<div class="wf-col-xs-12">
<div class="wp-header-end"></div>
<?php if (isset($storageExceptionMessage)): ?>
<div class="notice notice-error"><p><?php echo $storageExceptionMessage; ?></p></div>
<?php endif; ?>
</div>
</div>
<div class="wf-row">
<div class="<?php echo wfStyle::contentClasses(); ?>">
<div id="waf-options" class="wf-fixed-tab-content">
<?php
echo wfView::create('common/section-title', array(
'title' => __('Firewall Options', 'wordfence'),
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF),
'helpLabelHTML' => __('Learn more<span class="wf-hidden-xs"> about the Firewall</span>', 'wordfence'),
'showIcon' => true,
))->render();
?>
<div class="wf-row">
<div class="wf-col-xs-12">
<div class="wf-block wf-active">
<div class="wf-block-content">
<ul class="wf-block-list wf-block-list-horizontal wf-block-list-nowrap wf-waf-coverage">
<li>
<?php
if (function_exists('network_admin_url') && is_multisite()) { $optionsURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options'); }
else { $optionsURL = admin_url('admin.php?page=WordfenceWAF&subpage=waf_options'); }
echo wfView::create('common/status-detail', array(
'id' => 'waf-coverage',
'percentage' => $firewall->wafStatus(),
'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */),
'title' => __('Web Application Firewall', 'wordfence'),
'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('Currently in Learning Mode', 'wordfence') : __('Stops Complex Attacks', 'wordfence')),
'link' => $optionsURL,
'linkLabel' => null,
'statusTitle' => __('Web Application Firewall Status', 'wordfence'),
'statusList' => $firewall->wafStatusList(),
'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''),
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_OVERALL),
))->render();
?>
</li>
<li>
<?php
echo wfView::create('common/status-detail', array(
'id' => 'waf-rules',
'percentage' => $firewall->ruleStatus(),
'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */),
'title' => __('Firewall Rules: ', 'wordfence') . ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Premium', 'wordfence') : __('Community', 'wordfence')),
'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('Currently in Learning Mode', 'wordfence') : ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Rules updated in real-time', 'wordfence') : __('Rule updates delayed by 30 days', 'wordfence'))),
'link' => 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/',
'linkLabel' => null,
'linkNewWindow' => true,
'statusTitle' => __('Firewall Rules Status', 'wordfence'),
'statusList' => $firewall->wafStatusList('rules'),
'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''),
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_RULES),
))->render();
?>
</li>
<li>
<?php
echo wfView::create('common/status-detail', array(
'id' => 'waf-blacklist',
'percentage' => $firewall->blacklistStatus(),
'title' => __('Real-Time IP Blacklist: ', 'wordfence') . ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')),
'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'),
'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-advanced') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'),
'linkLabel' => null,
'linkNewWindow' => !($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED),
'statusTitle' => __('Blacklist Status', 'wordfence'),
'statusList' => $firewall->wafStatusList('blacklist'),
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_BLACKLIST),
))->render();
?>
</li>
<li>
<?php
echo wfView::create('common/status-detail', array(
'id' => 'waf-brute',
'percentage' => $firewall->bruteForceStatus(),
'title' => __('Brute Force Protection', 'wordfence') . ($firewall->bruteForceStatus() == 0 ? __(': Disabled', 'wordfence') : ''),
'subtitle' => __('Stops Password Guessing Attacks', 'wordfence'),
'link' => network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-bruteforce'),
'linkLabel' => null,
'statusTitle' => __('Brute Force Protection Status', 'wordfence'),
'statusList' => $firewall->bruteForceStatusList(),
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_BRUTE_FORCE),
))->render();
?>
</li>
</ul>
</div>
</div>
</div>
</div>
<?php
echo wfView::create('waf/options-group-basic-firewall', array(
'firewall' => $firewall,
'waf' => $waf,
'stateKey' => 'waf-options-basic',
'collapseable' => false,
))->render();
?>
<?php
echo wfView::create('waf/options-group-advanced-firewall', array(
'firewall' => $firewall,
'waf' => $waf,
'stateKey' => 'waf-options-advanced',
))->render();
?>
<?php
echo wfView::create('waf/options-group-brute-force', array(
'firewall' => $firewall,
'waf' => $waf,
'stateKey' => 'waf-options-bruteforce',
))->render();
?>
<?php
echo wfView::create('waf/options-group-rate-limiting', array(
'firewall' => $firewall,
'waf' => $waf,
'stateKey' => 'waf-options-ratelimiting',
))->render();
?>
<?php
echo wfView::create('waf/options-group-whitelisted', array(
'firewall' => $firewall,
'waf' => $waf,
'stateKey' => 'waf-options-whitelisted',
))->render();
?>
</div> <!-- end waf options block -->
</div> <!-- end content block -->
</div> <!-- end row -->
</div> <!-- end container -->
</div>