Version Description
- Improvement: The scan will alert for plugins that have not been updated in 2+ years or have been removed from the wordpress.org directory. It will also indicate if there is a known vulnerability.
- Improvement: Added a self-check to the scan to detect if it has stalled.
- Improvement: If WordPress auto-updates while a scan is running, the scan will self-abort and reschedule itself to try again later.
- Improvement: IP-based filtering in Live Traffic can now use wildcards.
- Improvement: Updated the bundled GeoIP database.
- Improvement: Added an anti-crawler feature to the lockout page to avoid crawlers erroneously following the unlock link.
- Improvement: The live traffic "Group By" options now dynamically show the results in a more useful format depending on the option selected.
- Improvement: Improved the unknown core files check to include all extra files in core locations regardless of whether or not the "Scan images, binary, and other files as if they were executable" option is on.
- Improvement: Better wording for the whitelisting IP range error message.
- Fix: Addressed a performance issue on databases with tens of thousands of tables when trying to load the diagnostics page.
- Fix: All dashboard and activity report email times are now displayed in the time zone configured for the WordPress installation.
Download this release
Release Info
Developer | wfryan |
Plugin | Wordfence Security – Firewall & Malware Scan |
Version | 6.3.11 |
Comparing to | |
See all releases |
Code changes from version 6.3.10 to 6.3.11
- css/main.css +1 -1
- js/admin.js +8 -0
- js/admin.liveTraffic.js +33 -4
- lib/GeoIP.dat +0 -0
- lib/GeoIPv6.dat +0 -0
- lib/dashboard/widget_networkattacks.php +3 -45
- lib/email_newIssues.php +17 -5
- lib/menu_activity.php +31 -2
- lib/menu_dashboard.php +2 -2
- lib/menu_options.php +1 -1
- lib/menu_scan.php +117 -2
- lib/menu_scan_scan.php +4 -0
- lib/menu_tools_diagnostic.php +10 -2
- lib/wfActivityReport.php +2 -2
- lib/wfIssues.php +28 -0
- lib/wfLog.php +22 -5
- lib/wfScan.php +17 -0
- lib/wfScanEngine.php +248 -35
- lib/wfUnlockMsg.php +11 -2
- lib/wfUpdateCheck.php +191 -26
- lib/wfUtils.php +79 -13
- lib/wordfenceClass.php +89 -5
- lib/wordfenceConstants.php +1 -0
- lib/wordfenceHash.php +29 -22
- lib/wordfenceScanner.php +0 -2
- readme.txt +14 -1
- vendor/wordfence/wf-waf/src/lib/waf.php +12 -0
- vendor/wordfence/wf-waf/src/views/503-lockout.php +12 -3
- vendor/wordfence/wf-waf/src/views/503.php +17 -8
- views/reports/activity-report-email-inline.php +4 -4
- views/reports/activity-report-email.php +2 -2
- wordfence.php +2 -2
css/main.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wf-clearfix:before,.wf-clearfix:after{content:" ";display:table}.wf-clearfix:after{clear:both}@-ms-viewport{width:device-width}.wf-visible-xs{display:none !important}.wf-visible-sm{display:none !important}.wf-visible-md{display:none !important}.wf-visible-lg{display:none !important}.wf-visible-xs-block,.wf-visible-xs-inline,.wf-visible-xs-inline-block,.wf-visible-sm-block,.wf-visible-sm-inline,.wf-visible-sm-inline-block,.wf-visible-md-block,.wf-visible-md-inline,.wf-visible-md-inline-block,.wf-visible-lg-block,.wf-visible-lg-inline,.wf-visible-lg-inline-block{display:none !important}@media (max-width: 767px){.wf-visible-xs{display:block !important}table.wf-visible-xs{display:table !important}tr.wf-visible-xs{display:table-row !important}th.wf-visible-xs,td.wf-visible-xs{display:table-cell !important}}@media (max-width: 767px){.wf-visible-xs-block{display:block !important}}@media (max-width: 767px){.wf-visible-xs-inline{display:inline !important}}@media (max-width: 767px){.wf-visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm{display:block !important}table.wf-visible-sm{display:table !important}tr.wf-visible-sm{display:table-row !important}th.wf-visible-sm,td.wf-visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md{display:block !important}table.wf-visible-md{display:table !important}tr.wf-visible-md{display:table-row !important}th.wf-visible-md,td.wf-visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.wf-visible-lg{display:block !important}table.wf-visible-lg{display:table !important}tr.wf-visible-lg{display:table-row !important}th.wf-visible-lg,td.wf-visible-lg{display:table-cell !important}}@media (min-width: 1200px){.wf-visible-lg-block{display:block !important}}@media (min-width: 1200px){.wf-visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.wf-visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.wf-hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.wf-hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-hidden-md{display:none !important}}@media (min-width: 1200px){.wf-hidden-lg{display:none !important}}.wf-visible-print{display:none !important}@media print{.wf-visible-print{display:block !important}table.wf-visible-print{display:table !important}tr.wf-visible-print{display:table-row !important}th.wf-visible-print,td.wf-visible-print{display:table-cell !important}}.wf-visible-print-block{display:none !important}@media print{.wf-visible-print-block{display:block !important}}.wf-visible-print-inline{display:none !important}@media print{.wf-visible-print-inline{display:inline !important}}.wf-visible-print-inline-block{display:none !important}@media print{.wf-visible-print-inline-block{display:inline-block !important}}@media print{.wf-hidden-print{display:none !important}}.wf-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container:before,.wf-container:after{content:" ";display:table}.wf-container:after{clear:both}@media (min-width: 768px){.wf-container{width:750px}}@media (min-width: 992px){.wf-container{width:970px}}@media (min-width: 1200px){.wf-container{width:1170px}}.wf-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container-fluid:before,.wf-container-fluid:after{content:" ";display:table}.wf-container-fluid:after{clear:both}.wf-row{margin-left:-15px;margin-right:-15px}.wf-row:before,.wf-row:after{content:" ";display:table}.wf-row:after{clear:both}.wf-col-xs-1,.wf-col-sm-1,.wf-col-md-1,.wf-col-lg-1,.wf-col-xs-2,.wf-col-sm-2,.wf-col-md-2,.wf-col-lg-2,.wf-col-xs-3,.wf-col-sm-3,.wf-col-md-3,.wf-col-lg-3,.wf-col-xs-4,.wf-col-sm-4,.wf-col-md-4,.wf-col-lg-4,.wf-col-xs-5,.wf-col-sm-5,.wf-col-md-5,.wf-col-lg-5,.wf-col-xs-6,.wf-col-sm-6,.wf-col-md-6,.wf-col-lg-6,.wf-col-xs-7,.wf-col-sm-7,.wf-col-md-7,.wf-col-lg-7,.wf-col-xs-8,.wf-col-sm-8,.wf-col-md-8,.wf-col-lg-8,.wf-col-xs-9,.wf-col-sm-9,.wf-col-md-9,.wf-col-lg-9,.wf-col-xs-10,.wf-col-sm-10,.wf-col-md-10,.wf-col-lg-10,.wf-col-xs-11,.wf-col-sm-11,.wf-col-md-11,.wf-col-lg-11,.wf-col-xs-12,.wf-col-sm-12,.wf-col-md-12,.wf-col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;box-sizing:border-box}.wf-col-xs-1,.wf-col-xs-2,.wf-col-xs-3,.wf-col-xs-4,.wf-col-xs-5,.wf-col-xs-6,.wf-col-xs-7,.wf-col-xs-8,.wf-col-xs-9,.wf-col-xs-10,.wf-col-xs-11,.wf-col-xs-12{float:left}.wf-col-xs-1{width:8.33333%}.wf-col-xs-2{width:16.66667%}.wf-col-xs-3{width:25%}.wf-col-xs-4{width:33.33333%}.wf-col-xs-5{width:41.66667%}.wf-col-xs-6{width:50%}.wf-col-xs-7{width:58.33333%}.wf-col-xs-8{width:66.66667%}.wf-col-xs-9{width:75%}.wf-col-xs-10{width:83.33333%}.wf-col-xs-11{width:91.66667%}.wf-col-xs-12{width:100%}.wf-col-xs-pull-0{right:auto}.wf-col-xs-pull-1{right:8.33333%}.wf-col-xs-pull-2{right:16.66667%}.wf-col-xs-pull-3{right:25%}.wf-col-xs-pull-4{right:33.33333%}.wf-col-xs-pull-5{right:41.66667%}.wf-col-xs-pull-6{right:50%}.wf-col-xs-pull-7{right:58.33333%}.wf-col-xs-pull-8{right:66.66667%}.wf-col-xs-pull-9{right:75%}.wf-col-xs-pull-10{right:83.33333%}.wf-col-xs-pull-11{right:91.66667%}.wf-col-xs-pull-12{right:100%}.wf-col-xs-push-0{left:auto}.wf-col-xs-push-1{left:8.33333%}.wf-col-xs-push-2{left:16.66667%}.wf-col-xs-push-3{left:25%}.wf-col-xs-push-4{left:33.33333%}.wf-col-xs-push-5{left:41.66667%}.wf-col-xs-push-6{left:50%}.wf-col-xs-push-7{left:58.33333%}.wf-col-xs-push-8{left:66.66667%}.wf-col-xs-push-9{left:75%}.wf-col-xs-push-10{left:83.33333%}.wf-col-xs-push-11{left:91.66667%}.wf-col-xs-push-12{left:100%}.wf-col-xs-offset-0{margin-left:0%}.wf-col-xs-offset-1{margin-left:8.33333%}.wf-col-xs-offset-2{margin-left:16.66667%}.wf-col-xs-offset-3{margin-left:25%}.wf-col-xs-offset-4{margin-left:33.33333%}.wf-col-xs-offset-5{margin-left:41.66667%}.wf-col-xs-offset-6{margin-left:50%}.wf-col-xs-offset-7{margin-left:58.33333%}.wf-col-xs-offset-8{margin-left:66.66667%}.wf-col-xs-offset-9{margin-left:75%}.wf-col-xs-offset-10{margin-left:83.33333%}.wf-col-xs-offset-11{margin-left:91.66667%}.wf-col-xs-offset-12{margin-left:100%}.wf-col-xs-half-padding-left{padding-left:8px}.wf-col-xs-half-padding-right{padding-right:7px}@media (min-width: 768px){.wf-col-sm-1,.wf-col-sm-2,.wf-col-sm-3,.wf-col-sm-4,.wf-col-sm-5,.wf-col-sm-6,.wf-col-sm-7,.wf-col-sm-8,.wf-col-sm-9,.wf-col-sm-10,.wf-col-sm-11,.wf-col-sm-12{float:left}.wf-col-sm-1{width:8.33333%}.wf-col-sm-2{width:16.66667%}.wf-col-sm-3{width:25%}.wf-col-sm-4{width:33.33333%}.wf-col-sm-5{width:41.66667%}.wf-col-sm-6{width:50%}.wf-col-sm-7{width:58.33333%}.wf-col-sm-8{width:66.66667%}.wf-col-sm-9{width:75%}.wf-col-sm-10{width:83.33333%}.wf-col-sm-11{width:91.66667%}.wf-col-sm-12{width:100%}.wf-col-sm-pull-0{right:auto}.wf-col-sm-pull-1{right:8.33333%}.wf-col-sm-pull-2{right:16.66667%}.wf-col-sm-pull-3{right:25%}.wf-col-sm-pull-4{right:33.33333%}.wf-col-sm-pull-5{right:41.66667%}.wf-col-sm-pull-6{right:50%}.wf-col-sm-pull-7{right:58.33333%}.wf-col-sm-pull-8{right:66.66667%}.wf-col-sm-pull-9{right:75%}.wf-col-sm-pull-10{right:83.33333%}.wf-col-sm-pull-11{right:91.66667%}.wf-col-sm-pull-12{right:100%}.wf-col-sm-push-0{left:auto}.wf-col-sm-push-1{left:8.33333%}.wf-col-sm-push-2{left:16.66667%}.wf-col-sm-push-3{left:25%}.wf-col-sm-push-4{left:33.33333%}.wf-col-sm-push-5{left:41.66667%}.wf-col-sm-push-6{left:50%}.wf-col-sm-push-7{left:58.33333%}.wf-col-sm-push-8{left:66.66667%}.wf-col-sm-push-9{left:75%}.wf-col-sm-push-10{left:83.33333%}.wf-col-sm-push-11{left:91.66667%}.wf-col-sm-push-12{left:100%}.wf-col-sm-offset-0{margin-left:0%}.wf-col-sm-offset-1{margin-left:8.33333%}.wf-col-sm-offset-2{margin-left:16.66667%}.wf-col-sm-offset-3{margin-left:25%}.wf-col-sm-offset-4{margin-left:33.33333%}.wf-col-sm-offset-5{margin-left:41.66667%}.wf-col-sm-offset-6{margin-left:50%}.wf-col-sm-offset-7{margin-left:58.33333%}.wf-col-sm-offset-8{margin-left:66.66667%}.wf-col-sm-offset-9{margin-left:75%}.wf-col-sm-offset-10{margin-left:83.33333%}.wf-col-sm-offset-11{margin-left:91.66667%}.wf-col-sm-offset-12{margin-left:100%}.wf-col-sm-half-padding-left{padding-left:8px}.wf-col-sm-half-padding-right{padding-right:7px}}@media (min-width: 992px){.wf-col-md-1,.wf-col-md-2,.wf-col-md-3,.wf-col-md-4,.wf-col-md-5,.wf-col-md-6,.wf-col-md-7,.wf-col-md-8,.wf-col-md-9,.wf-col-md-10,.wf-col-md-11,.wf-col-md-12{float:left}.wf-col-md-1{width:8.33333%}.wf-col-md-2{width:16.66667%}.wf-col-md-3{width:25%}.wf-col-md-4{width:33.33333%}.wf-col-md-5{width:41.66667%}.wf-col-md-6{width:50%}.wf-col-md-7{width:58.33333%}.wf-col-md-8{width:66.66667%}.wf-col-md-9{width:75%}.wf-col-md-10{width:83.33333%}.wf-col-md-11{width:91.66667%}.wf-col-md-12{width:100%}.wf-col-md-pull-0{right:auto}.wf-col-md-pull-1{right:8.33333%}.wf-col-md-pull-2{right:16.66667%}.wf-col-md-pull-3{right:25%}.wf-col-md-pull-4{right:33.33333%}.wf-col-md-pull-5{right:41.66667%}.wf-col-md-pull-6{right:50%}.wf-col-md-pull-7{right:58.33333%}.wf-col-md-pull-8{right:66.66667%}.wf-col-md-pull-9{right:75%}.wf-col-md-pull-10{right:83.33333%}.wf-col-md-pull-11{right:91.66667%}.wf-col-md-pull-12{right:100%}.wf-col-md-push-0{left:auto}.wf-col-md-push-1{left:8.33333%}.wf-col-md-push-2{left:16.66667%}.wf-col-md-push-3{left:25%}.wf-col-md-push-4{left:33.33333%}.wf-col-md-push-5{left:41.66667%}.wf-col-md-push-6{left:50%}.wf-col-md-push-7{left:58.33333%}.wf-col-md-push-8{left:66.66667%}.wf-col-md-push-9{left:75%}.wf-col-md-push-10{left:83.33333%}.wf-col-md-push-11{left:91.66667%}.wf-col-md-push-12{left:100%}.wf-col-md-offset-0{margin-left:0%}.wf-col-md-offset-1{margin-left:8.33333%}.wf-col-md-offset-2{margin-left:16.66667%}.wf-col-md-offset-3{margin-left:25%}.wf-col-md-offset-4{margin-left:33.33333%}.wf-col-md-offset-5{margin-left:41.66667%}.wf-col-md-offset-6{margin-left:50%}.wf-col-md-offset-7{margin-left:58.33333%}.wf-col-md-offset-8{margin-left:66.66667%}.wf-col-md-offset-9{margin-left:75%}.wf-col-md-offset-10{margin-left:83.33333%}.wf-col-md-offset-11{margin-left:91.66667%}.wf-col-md-offset-12{margin-left:100%}.wf-col-md-half-padding-left{padding-left:8px}.wf-col-md-half-padding-right{padding-right:7px}}@media (min-width: 1200px){.wf-col-lg-1,.wf-col-lg-2,.wf-col-lg-3,.wf-col-lg-4,.wf-col-lg-5,.wf-col-lg-6,.wf-col-lg-7,.wf-col-lg-8,.wf-col-lg-9,.wf-col-lg-10,.wf-col-lg-11,.wf-col-lg-12{float:left}.wf-col-lg-1{width:8.33333%}.wf-col-lg-2{width:16.66667%}.wf-col-lg-3{width:25%}.wf-col-lg-4{width:33.33333%}.wf-col-lg-5{width:41.66667%}.wf-col-lg-6{width:50%}.wf-col-lg-7{width:58.33333%}.wf-col-lg-8{width:66.66667%}.wf-col-lg-9{width:75%}.wf-col-lg-10{width:83.33333%}.wf-col-lg-11{width:91.66667%}.wf-col-lg-12{width:100%}.wf-col-lg-pull-0{right:auto}.wf-col-lg-pull-1{right:8.33333%}.wf-col-lg-pull-2{right:16.66667%}.wf-col-lg-pull-3{right:25%}.wf-col-lg-pull-4{right:33.33333%}.wf-col-lg-pull-5{right:41.66667%}.wf-col-lg-pull-6{right:50%}.wf-col-lg-pull-7{right:58.33333%}.wf-col-lg-pull-8{right:66.66667%}.wf-col-lg-pull-9{right:75%}.wf-col-lg-pull-10{right:83.33333%}.wf-col-lg-pull-11{right:91.66667%}.wf-col-lg-pull-12{right:100%}.wf-col-lg-push-0{left:auto}.wf-col-lg-push-1{left:8.33333%}.wf-col-lg-push-2{left:16.66667%}.wf-col-lg-push-3{left:25%}.wf-col-lg-push-4{left:33.33333%}.wf-col-lg-push-5{left:41.66667%}.wf-col-lg-push-6{left:50%}.wf-col-lg-push-7{left:58.33333%}.wf-col-lg-push-8{left:66.66667%}.wf-col-lg-push-9{left:75%}.wf-col-lg-push-10{left:83.33333%}.wf-col-lg-push-11{left:91.66667%}.wf-col-lg-push-12{left:100%}.wf-col-lg-offset-0{margin-left:0%}.wf-col-lg-offset-1{margin-left:8.33333%}.wf-col-lg-offset-2{margin-left:16.66667%}.wf-col-lg-offset-3{margin-left:25%}.wf-col-lg-offset-4{margin-left:33.33333%}.wf-col-lg-offset-5{margin-left:41.66667%}.wf-col-lg-offset-6{margin-left:50%}.wf-col-lg-offset-7{margin-left:58.33333%}.wf-col-lg-offset-8{margin-left:66.66667%}.wf-col-lg-offset-9{margin-left:75%}.wf-col-lg-offset-10{margin-left:83.33333%}.wf-col-lg-offset-11{margin-left:91.66667%}.wf-col-lg-offset-12{margin-left:100%}.wf-col-lg-half-padding-left{padding-left:8px}.wf-col-lg-half-padding-right{padding-right:7px}}.wrap.wordfence{direction:ltr}@media (min-width: 768px){.wrap.wordfence{max-width:750px}}@media (min-width: 992px){.wrap.wordfence{max-width:970px}}@media (min-width: 1200px){.wrap.wordfence{max-width:1170px}}.wrap.wordfence>.wf-container-fluid{padding-left:0px;padding-right:0px}.wrap.wordfence .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wrap.wordfence h3{font-size:1.15em}a{color:#00709e}.wordfenceWrap{margin:20px 0 0 20px}.wordfence-icon32{width:32px;height:32px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:7px 5px 0 0;float:left}#wfHeading:after{content:'.';visibility:hidden;display:block;clear:both;height:0px}div.wordfence-lock-icon{background-image:url(../images/wordfence-logo-32x32.png)}a.wfhelp{background-image:url(../images/help.png);width:12px;height:12px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:0 3px 0 3px;text-decoration:none;display:inline-block;vertical-align:middle}.wordfence .resulticon{display:block;float:left;width:16px;height:16px;background-position:0 0;background-repeat:no-repeat;border-width:0;padding:0;margin:0 3px 0 0;background-image:url(../images/icons/bullet_yellow.png)}.wordfenceBoldTD{font-weight:bold}.wfAjax24{display:none;width:24px;height:24px;background-image:url(../images/icons/ajax24.gif);margin:0;padding:0}div.wfLoadingWhite32{width:32px;height:32px;background-image:url(../images/icons/ajaxWhite32x32.gif);margin:0;padding:0}.wfTabsContainer{background-color:#FFF;overflow:hidden;border:1px solid #CCC;padding:15px;min-height:200px;-webkit-font-smoothing:antialiased}#wfTabs::after{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}#wfTabs a{float:left;z-index:10;height:18px;margin:0 5px -1px 0;padding:5px 8px;border:1px solid #CCC;text-decoration:none;background-color:#EFEFEF;color:#21759B;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}#wfTabs a.selected{border-bottom:1px solid #FFF;background-color:#FFF;color:#777}.wordfenceTopTab{display:none;margin-top:15px}.wordfenceTopTab.active{display:block}.wordfenceHelpLink{margin-top:15px}.wfAjaxLight128{background-image:url(../images/icons/ajax3.gif)}.wfStrong{font-weight:bold}.wordfenceModeElem{width:1px;height:1px;opacity:0}.wfWarn{color:#F00}img.wfFlag{vertical-align:middle;margin:-3px 4px 0 0}.wfHitTime{font-style:italic}.wfAvatar img{vertical-align:middle}.wf-hex-sequence{color:#587ECB}.wfLoadMoreButton.disabled,.wfLoadMoreButton[disabled]{pointer-events:none;opacity:0.65}table.wfConfigForm th{font-weight:normal;text-align:left;padding:2px 3px 1px 0;vertical-align:middle}table.wfConfigForm td{vertical-align:middle}table.wfConfigForm td.align-top{vertical-align:top}table th.wfConfigEnable{font-weight:bold;min-width:25%}.wfSavedMsg{display:none;color:#A00}table th.wfSubheading{font-weight:bold;padding-top:10px}h3.wfConfigHeading{font-size:22px;color:#777;font-family:Georgia,Times New Roman,Times,serif;font-style:italic;font-weight:normal}.wfTipText{color:#777;font-family:Georgia,Times New Roman,Times,serif;font-style:italic}.wfBlackCursor{color:#FFF}.wf-spinner{display:inline-block;width:4px}.wferror{color:#F00}#wordfenceWorking{padding:2px 8px 2px 24px;z-index:100000;position:fixed;right:2px;bottom:2px;border:1px solid #000;background-color:#F00;color:#FFF;font-size:12px;font-weight:bold;font-family:Arial;text-align:center;background-image:url("../images/icons/ajaxRed16.gif");background-position:2px 2px;background-repeat:no-repeat}#paidWrap{position:relative}.paidInnerMsg{width:500px;margin:150px auto 0 auto;color:#000;font-size:18px;font-family:Georgia,Times New Roman,Times,serif;line-height:1.8em;text-align:center;-webkit-font-smoothing:antialiased}.wfMarker{height:1px;width:1px}.wfPaidOnlyNotice{width:500px;background-color:#FFFFE0;border:1px solid #000;padding:10px;margin:20px}.wfOnOffSwitch{position:relative !important;width:69px !important;-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}.wfOnOffSwitch-checkbox{display:none !important}.wfOnOffSwitch-label{display:block !important;overflow:hidden !important;cursor:pointer !important;border:2px solid #999999 !important;border-radius:19px !important;margin:0}.wfOnOffSwitch-inner{width:200% !important;margin-left:-100% !important;-webkit-transition:margin 0.3s ease-in !important;-o-transition:margin 0.3s ease-in !important;transition:margin 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important}.wfOnOffSwitch-inner:before,.wfOnOffSwitch-inner:after{float:left !important;width:50% !important;height:19px !important;padding:0 !important;line-height:19px !important;font-size:14px !important;color:white !important;font-family:Trebuchet, Arial, sans-serif !important;font-weight:bold !important;-webkit-box-sizing:border-box !important;-moz-box-sizing:border-box !important;box-sizing:border-box !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;-webkit-box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important;box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important}.wfOnOffSwitch-inner:before{content:"ON" !important;padding-left:10px !important;background-color:#30D965 !important;color:#FFFFFF !important;-moz-border-radius:19px 0 0 19px !important;-webkit-border-radius:19px;border-radius:19px 0 0 19px !important}.wfOnOffSwitch-inner:after{content:"OFF" !important;padding-right:10px !important;background-color:#EEEEEE !important;color:#999999 !important;text-align:right !important;-moz-border-radius:0 19px 19px 0 !important;-webkit-border-radius:0;border-radius:0 19px 19px 0 !important}.wfOnOffSwitch-switch{width:19px !important;margin:0 !important;background:#FFFFFF !important;border:2px solid #999999 !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;position:absolute !important;top:0 !important;bottom:0 !important;right:46px !important;-webkit-transition:all 0.3s ease-in !important;-o-transition:all 0.3s ease-in !important;transition:all 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjEiLz48c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=') !important;background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0,0,0,0.1)),color-stop(80%, rgba(0,0,0,0))) !important;background-image:-moz-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:-webkit-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:linear-gradient(to center bottom, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;box-shadow:0 1px 1px white inset !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-inner{margin-left:0 !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-switch{right:0 !important}#wordfenceConfigWarning,#wordfenceAdminEmailWarning{clear:left;margin-top:5px}.wf-striped-table{width:100%;max-width:100%;border-collapse:collapse}.wf-striped-table th,.wf-striped-table td{padding:6px 4px;border:1px solid #ccc}.wf-striped-table thead th,.wf-striped-table thead td,.wf-striped-table tfoot th,.wf-striped-table tfoot td,.wf-striped-table tbody.thead th,.wf-striped-table tbody.thead td{background-color:#222;color:#fff;font-weight:bold;border-color:#474747;text-align:left}.wf-striped-table tbody tr.even td,.wf-striped-table tbody tr:nth-child(2n) td{background-color:#eee}.wf-striped-table tbody tr td,.wf-striped-table tbody tr.odd td{background-color:#fff}.wf-striped-table tbody tr:hover>td{background-color:#fffbd8}.wf-striped-table tbody.empty-row tr td{border-width:0;padding:8px 0;background-color:transparent}.wf-striped-table td.error{color:#d0514c;font-weight:bold}.wf-striped-table td.error:before{content:"\2718"}.wf-striped-table td.success{color:#008c10;font-weight:bold;max-width:20%}.wf-striped-table td.success:before{content:"\2713"}.wf-striped-table td.success:before,.wf-striped-table td.error:before{font-size:16px;display:inline-block;margin:0px 8px 0px 0px}.wf-striped-table td.inactive{font-weight:bold;color:#666666}.wordfence-waiting{line-height:32px}.wordfence-waiting img{vertical-align:middle}pre.wf-pre{margin:8px 0 20px;padding:12px;background:#ffffff;border:1px solid #999999;overflow:auto}.wf-center{text-align:center}#wfConfigForm{max-width:1035px}.wf-hidden{display:none !important}.wf-card{position:relative;margin:0 auto .625rem;padding:1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-card .wf-card-inner{min-height:76px;width:100%;padding:8px;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;position:relative}.wf-card .wf-card-inner .wf-card-content{max-width:75%}.wf-card .wf-card-inner .wf-card-content .wf-card-title{font-size:1.125rem;width:100%}.wf-card .wf-card-inner .wf-card-content .wf-card-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.875rem;color:#4f748e}.wf-card .wf-card-inner .wf-card-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-card .wf-card-inner .wf-card-action .wf-card-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox.checked{background-position:right center}.wf-card .wf-card-extra{display:none;padding:0.5rem;margin-top:1rem;border-top:1px solid #f3f6f8}@media (min-width: 768px){.wf-card .wf-card-extra{padding:1rem}}.wf-card.active .wf-card-extra{display:block}.wf-card.wf-card-left .wf-card-content{margin-left:48px}.wf-card.wf-card-left .wf-card-action{right:auto;left:0px}.wf-card.disabled .wf-card-content .wf-card-title{color:#aaaaaa}.wf-card.disabled .wf-card-content .wf-card-subtitle{color:#8ea6be}.wf-add-top{margin-top:20px !important}.wf-add-top-small{margin-top:10px !important}.wf-add-bottom{margin-bottom:20px !important}.wf-add-bottom-small{margin-bottom:10px !important}.wf-center{text-align:center}.wf-right{text-align:right}.wf-scroll-x::-webkit-scrollbar,.wf-scroll-y::-webkit-scrollbar{-webkit-appearance:none;width:7px;height:7px}.wf-scroll-x::-webkit-scrollbar-thumb,.wf-scroll-y::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(0,0,0,0.194);-webkit-box-shadow:0 0 1px rgba(255,255,255,0.5)}.wf-split-word{word-wrap:break-word;word-break:break-all}@media (max-width: 767px){.wf-split-word-xs{word-wrap:break-word;word-break:break-all;white-space:normal !important}}.select2-container{min-width:240px}@media (min-width: 768px){.select2-container{min-width:280px}}@media (min-width: 992px){.select2-container{min-width:320px}}.wf-page-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;margin-top:0.5rem}.wf-page-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-page-title>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px;padding-right:0.25rem}.wf-page-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wf-page-title h2{padding:0 !important}.wf-page-title .wfOnOffSwitch{-webkit-flex-basis:69px;flex-basis:69px;-webkit-flex-shrink:0;flex-shrink:0;margin-left:0.5rem}#howGetIPs-preview{color:#8c8c8c}#howGetIPs-preview strong{color:#666}.wf-scrollTop{background:#424242;bottom:30px;right:15px;position:fixed;z-index:999;display:none}.wf-scrollTop a{background:#959595;display:block;padding:4px 5px;line-height:32px;width:32px;color:#ffffff;text-align:center}#wf-notices{margin-top:15px}#wf-notices .wf-admin-notice{margin-left:0px;margin-right:0px}.wf-success-text,.wf-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wf-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wf-notice-text{color:#6d798c}.wf-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wf-success-text{color:#11967a}.wf-premium-callout{border:1px solid #00709e;background-color:#ffffff;padding:16px;margin:20px 0 0}.wf-premium-callout h3{margin:0 0 8px;color:#11967a}.wf-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wf-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wf-premium-callout .center{text-align:center;margin:0}.wf-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}#wfLiveTrafficOverlayAnchor::after{position:absolute;z-index:3002;top:0;right:0;width:0;height:0;background:rgba(241,241,241,0.6);content:'';opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused #wfLiveTrafficOverlayAnchor::after{width:100%;height:100%;opacity:1;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wordfenceLiveActivityDisabled{background:#fff;border-left:4px solid #ffb900;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin-bottom:12px;padding:1px 13px}#wfLiveTrafficDisabledMessage{display:none;position:fixed;z-index:3003;left:0;width:100%;top:50%;transform:translateY(-50%);text-align:center;color:#666666;opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}#wfLiveTrafficDisabledMessage h2{background-color:#FFF;overflow:hidden;border:1px solid #CCC;max-width:350px;margin:0 auto;padding:15px;font-size:2.0em}#wfLiveTrafficDisabledMessage h2 small{font-size:0.5em;font-weight:normal;margin-top:20px}.wordfenceLiveActivityPaused #wfLiveTrafficDisabledMessage{display:block;opacity:1;-webkit-transition:opacity 0.5s;transition:opacity 0.5s}.wf-live-activity{position:relative;margin:20px 0 10px 0;padding:0.75rem;box-sizing:border-box;background:#FFFCEF;box-shadow:0 0 0 1px rgba(153,155,135,0.5),0 1px 2px #e8f3e0}.wf-live-activity .wf-live-activity-inner{width:100%;box-sizing:border-box;position:relative}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:flex-start}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-title{color:#888888;font-size:0.85rem;font-weight:bold;padding-right:0.5rem}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-message{font-size:0.80rem;color:#000000}.wf-live-activity .wf-live-activity-inner .wf-live-activity-state{position:absolute;top:0px;right:0px;bottom:0px;left:0px;background:rgba(255,252,239,0.9);display:none;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:center;z-index:3001;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused .wf-live-activity .wf-live-activity-inner .wf-live-activity-state{display:-ms-flexbox;display:flex;opacity:1;-webkit-transition:opacity 0.5s;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}.wordfence .wordfenceScanButton{margin:20px 0 20px 0}.wordfence .wordfenceScanButton input.button-wf-grey{background:#EFEFEF url(../images/button-grad-grey.png) repeat-x scroll left top;border-color:#EFEFEF}.wordfence .wordfenceScanButton table td{vertical-align:top}.wordfence .wordfenceScanButton .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709E;height:44px;line-height:44px;padding:0px 20px}table.wfSummaryParent{font-family:sans-serif;font-size:14px;color:#000;z-index:9}table.wfSummaryParent td{vertical-align:top;padding:0;margin:0}table.wfSummaryParent table.wfSummaryChild th{font-weight:bold;text-align:right;font-family:Georgia,Times New Roman,Times,serif;color:#000;padding:5px 10px 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSummaryChild td{font-weight:normal;text-align:left;padding:5px 0 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSC1 td{width:300px;padding:0 25px 10px 0}table.wfSummaryParent table.wfSC2 th{width:80px}table.wfSummaryParent table.wfSC2 td{width:100px}table.wfSummaryParent table.wfSC3 th{width:80px}table.wfSummaryParent table.wfSC3 td{width:250px}table.wfSummaryParent th.wfHead{font-size:22px;font-family:Georgia,Times New Roman,Times,serif;font-style:italic;color:#555;font-weight:bold;text-align:left;padding:20px 0 20px 0;-webkit-font-smoothing:antialiased}.wf-issues-table{table-layout:fixed;width:100%}div.wfIssue{width:100%}div.wfIssue table.wfIssue td{padding:2px;margin:0;border-width:0;text-align:left;width:100%}div.wfIssue table.wfIssue th{padding:2px;margin:0;font-weight:bold;text-align:left;color:#777;white-space:nowrap}div.wfIssue table.wfIssueLinks td{border-width:0;text-align:left;padding-right:10px}div.wfIssue h2{margin:0 0 5px 0;padding:0;font-size:0.9rem}@media (min-width: 768px){div.wfIssue h2{font-size:1.05rem}}.wfIssueOptions{border-top:1px solid #CCC;padding:10px}.wfIssueOptions h3{font-size:0.8rem;margin:0}@media (min-width: 768px){.wfIssueOptions h3{display:inline-block}}.wfIssueOptions ul{margin-bottom:0;padding-left:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfIssueOptions ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}.wfIssueOptions ul>li>a{position:relative;display:block;padding:8px 12px/2}.wfIssueOptions ul>li>a:hover,.wfIssueOptions ul>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wfIssueOptions a{margin-left:10px}.wfIssueOptions strong{float:left;display:block;width:60px}.wfIssueOptions p{margin:6px 0px 0px}.wfProbSev1,.wfProbSev2,.wfAjaxLight128,.wfResolved{width:128px;height:128px;border:0;margin:0 auto;background-repeat:no-repeat;background-position:0 0;text-decoration:none;display:block}.wfProbSev1{background-image:url(../images/icons/error128.png)}.wfProbSev2{background-image:url(../images/icons/warning128.png)}.wfResolved{background-image:url(../images/icons/tick128.png)}.wfIssuesContainer{width:100%;display:none}.wfIssuesContainer p{max-width:550px}.wfALogTime{color:#999}.wfALogMailLink,.wfALogViewLink{display:block;position:absolute;padding:0 0 0 18px;margin:0;right:10px;top:0;background-repeat:no-repeat;font-weight:normal}.wfALogMailLink{background-image:url(../images/icons/email_go.png)}.wfALogViewLink{background-image:url(../images/icons/magnifier.png)}#wfActivity{position:relative}.consoleHead{position:relative;padding:0 0 0 3px;font-weight:bold;width:100%}.consoleHeadText{margin-bottom:4px;font-size:18px;font-family:Georgia,Times New Roman,Times,serif;color:#555;font-weight:bold;-webkit-font-smoothing:antialiased}.consoleFooter{position:relative}.consoleOuter{width:100%}.consoleInner{height:116px;overflow:auto;z-index:1}.bevelDiv1{border:1px solid #EFEFEF}.bevelDiv2{border:1px solid #AAA}.bevelDiv3{background-color:#ffffed;padding:5px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}.wfSecure{color:#0A0;font-weight:bold}.wfSummaryLine{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfSummaryLine{-webkit-flex-direction:row;flex-direction:row}}.wfSummaryLine .wfSummaryDate{padding-left:3px}.wfSummaryLine .wfSummaryMsg{padding-left:3px;-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfSummaryLoading{width:16px;height:11px;background-image:url("../images/icons/ajaxScan.gif")}.wfSummaryBad,.wfSummaryErr{color:#930000}.wfSummaryOK{color:#11967a}.wfSummaryIgnored{color:#a87302}.wfClear{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}.wfSummaryFinal{-webkit-font-smoothing:antialiased;font-weight:bold;color:#555}.wfStartScanButton{text-align:center}.wordfenceScanHelp{border:1px solid #CCC;padding:4px}.wf-scan-no-issues{font-size:1.25rem;color:#11967a}.wf-scan-severity{position:relative;width:10px}@media (min-width: 768px){.wf-scan-severity{width:144px}}.wf-scan-severity-1,.wf-scan-severity-2{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.wf-scan-severity-1{background-color:#c10000}.wf-scan-severity-2{background-color:#ffd10a}.scan-schedule{border-collapse:collapse;border-spacing:0}.scan-schedule tr:first-of-type th{padding-top:0}.scan-schedule td{padding:0}.scan-schedule th{padding:1.5rem 0.5rem 0.75rem 0;font-size:1rem;text-align:left}@media (min-width: 768px){.scan-schedule th{padding:0 0.5rem 0 0;font-size:0.8125rem;text-align:center}}.next-scan{font-size:1em;display:block;position:relative;width:7em;height:7em;background-color:#fff;border-radius:0.6em;box-shadow:0 1px 0 rgba(189,189,189,0.6);overflow:hidden}.next-scan *{display:block;width:100%;font-size:1em;font-weight:bold;font-style:normal;text-align:center}.next-scan strong{position:absolute;top:0;padding:0.4em 0;color:#fff;background-color:#00709E;box-shadow:0 2px 0 #00709E}.next-scan em{position:absolute;bottom:0.3em;color:#00709E}.next-scan span{width:100%;font-size:2.8em;padding-top:1.15em;color:#2f2f2f}.schedule-times-wrapper{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;margin-top:1rem}@media (min-width: 768px){.schedule-times-wrapper{margin-top:0.25rem}}.schedule-times-wrapper:first-of-type{margin-top:0}@media (min-width: 768px){.schedule-times-wrapper:first-of-type{margin-top:1rem}}.schedule-times-wrapper>*{-webkit-flex-grow:1;flex-grow:1;min-width:0}.schedule-times-wrapper>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:initial;padding-right:0.25rem}.schedule-times{margin-bottom:0;margin-top:0;padding-left:0;list-style:none;clear:both}.schedule-times>li{float:left;position:relative;display:block;margin:0px 0px 2px 0px}.schedule-times>li.disabled>a{color:#777}.schedule-times>li.disabled>a:hover,.schedule-times>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.schedule-times>li>a{text-decoration:none;border:1px solid #e2e2e2;border-radius:4px;position:relative;display:block;padding:8px 12px}.schedule-times>li>a:hover,.schedule-times>li>a:focus{text-decoration:none;background-color:#e2e2e2}.schedule-times>li+li{margin-left:2px}.schedule-times>li.active>a,.schedule-times>li.active>a:hover,.schedule-times>li.active>a:focus{color:#fff;background-color:#00709e;border-color:#00709e}.schedule-times>li.text-only{position:relative;display:block;padding:8px 12px}.schedule-times>li>a>img{max-width:none}#wf-lt-listings .wfActEvent{padding-left:15px;border-left:5px solid #cccccc}#wf-lt-listings .wfActEvent.wfHuman{border-left:5px solid #16bc9b}#wf-lt-listings .wfActEvent.wfActionBlocked{border-left:5px solid #d03935}#wf-lt-listings .wfActEvent.wfNotice{border-left:5px solid #c10000}#wf-lt-listings .wfActEvent.wfWarning,#wf-lt-listings .wfActEvent.wf404{border-left:5px solid #ffd10a}#wf-lt-listings .wfActEvent:hover{background-color:#fff9e9 !important}.wfActEvent.wf-live-traffic-filter{padding-left:0;padding-right:0;display:-webkit-flex;display:flex;-webkit-align-items:baseline;align-items:baseline;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfActEvent.wf-live-traffic-filter{-webkit-flex-direction:row;flex-direction:row}}.wfActEvent.wf-live-traffic-filter h2{margin:0;padding-bottom:0.5rem}@media (min-width: 768px){.wfActEvent.wf-live-traffic-filter h2{padding-bottom:0;padding-right:0.5rem}}#wf-lt-advanced-filters{padding-left:0;padding-right:0;overflow:hidden}.wf-live-traffic-filter-detail{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wf-live-traffic-filter-detail{-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail *{-webkit-flex-grow:1;flex-grow:1}}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-remove{margin-left:0.5rem;font-size:1.5rem;color:#333}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0.25rem 0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:0.75rem !important}@media (min-width: 768px){.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:1rem !important}}.wf-filtered-traffic{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-filtered-traffic>*{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;padding:10px 20px;border-bottom:1px solid #CCC;width:100%;box-sizing:border-box}.wf-filtered-traffic>*>*:first-child{-webkit-flex-grow:1;flex-grow:1}.wf-filtered-traffic .wf-filtered-traffic-hits{font-size:1.75rem;color:#999999;margin-top:10px}#wf-live-traffic{position:relative;overflow:visible}#wf-live-traffic-legend{white-space:nowrap;background-color:#fff;border:1px solid #cccccc;padding:12px}#wf-live-traffic-legend.sticky{position:fixed;top:10px;right:auto;left:10px;z-index:2000}@media (min-width: 768px){#wf-live-traffic-legend.sticky{top:42px;left:182px}}#wf-live-traffic-legend-placeholder{display:none;padding:12px}#wf-live-traffic-legend-placeholder.sticky{display:block}#wf-live-traffic-legend ul{margin:0;padding:0}#wf-live-traffic-legend ul:before,#wf-live-traffic-legend ul:after{content:" ";display:table}#wf-live-traffic-legend ul:after{clear:both}#wf-live-traffic-legend ul li{margin:0;padding:0;position:relative;float:left;font-size:11.5px}@media (min-width: 768px){#wf-live-traffic-legend ul li{font-size:13px}}#wf-live-traffic-legend ul li+li{margin-left:8px}#wf-live-traffic-legend ul li:before{content:'';display:block;float:left;margin:3px 6px 0 0;width:12px;height:12px;background-color:#CCCCCC}#wf-live-traffic-legend ul li.wfHuman:before{background-color:#16bc9b}#wf-live-traffic-legend ul li.wfNotice:before{background-color:#ffd10a}#wf-live-traffic-legend ul li.wfBlocked:before{background-color:#d03935}.wfTimeAgo{font-family:Georgia,Times New Roman,Times,serif;color:#999;font-weight:bold;font-style:italic}.wfActEvent{border-bottom:1px solid #CCC;padding:10px 20px;overflow:auto}.wf-pad-small{margin:8px 0}#wf-lt-listings{margin:0 0 0}#wf-lt-listings a{cursor:pointer;text-decoration:underline}#wf-lt-listings a.button,#wf-lt-listings a.wf-btn{text-decoration:none}.wfActionBlocked{background-color:#fff6f6}[class*="span"]{float:left;min-height:1px;margin-left:30px}.highlighted{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-moz-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-webkit-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-moz-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@-webkit-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}.highlighted{-webkit-animation-name:highlighted;animation-name:highlighted}.highlighted.wfActionBlocked{-webkit-animation-name:highlightedBlocked;animation-name:highlightedBlocked}#wf-lt-preset-filters{min-width:250px}#wf-lt-advanced-filters>table{width:100%}#wf-lt-advanced-filters>table>tr>td{vertical-align:top}.wf-lt-url{white-space:nowrap}table.block-ranges-table{border-collapse:collapse;margin:10px 0 0}table.block-ranges-table tr td{border:1px solid #CCC;border-width:1px 0;padding:10px 0 12px 0}#input-wafStatus,#input-wafStatus option,.select2-container--default{font-size:0.9rem}@media (min-width: 768px){#input-wafStatus,#input-wafStatus option,.select2-container--default{font-size:1.0rem}}@media (min-width: 992px){#input-wafStatus,#input-wafStatus option,.select2-container--default{font-size:1.125rem}}.wafStatus-enabled,.wafStatus-learning-mode,.wafStatus-disabled,.wafStatus-enabled.select2-container--default .select2-selection--single .select2-selection__rendered,.wafStatus-learning-mode.select2-container--default .select2-selection--single .select2-selection__rendered,.wafStatus-disabled.select2-container--default .select2-selection--single .select2-selection__rendered{color:#ffffff}#waf-config-form .waf-config-label{font-size:1.3em}#waf-config-form .select2-container--default .select2-selection--single{padding:4px;text-shadow:0 0 3px #000000;font-weight:bold;border-radius:3px}#waf-config-form .select2-container .select2-selection--single{height:auto}.wafStatus-enabled.select2-container--default .select2-selection--single{background-color:#11967a;border-color:#073a2f}.wafStatus-learning-mode.select2-container--default .select2-selection--single{background-color:#ffd10a;border-color:#a38400}.wafStatus-disabled.select2-container--default .select2-selection--single,.wafStatus-disabled.select2-container--default.select2-container--disabled .select2-selection--single,.wafStatus-learning-mode.select2-container--default.select2-container--disabled .select2-selection--single,.wafStatus-enabled.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#c10000;border-color:#5b0000}#waf-config-form .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;top:0}.wafStatus-enabled.select2-container--default .select2-selection--single .select2-selection__arrow b,.wafStatus-learning-mode.select2-container--default .select2-selection--single .select2-selection__arrow b,.wafStatus-disabled.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#ffffff transparent transparent}.wafStatus-enabled.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b,.wafStatus-learning-mode.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b,.wafStatus-disabled.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #ffffff}.wafStatus-description{display:none;max-width:500px;font-style:italic;font-size:14px;line-height:1.3}.whitelist-table-container{overflow-x:auto}table.whitelist-table .whitelist-edit{display:none}table.whitelist-table .edit-mode .whitelist-display{display:none}table.whitelist-table .edit-mode .whitelist-edit{display:block}table.whitelist-table .edit-mode span.whitelist-edit,table.whitelist-table .edit-mode input.whitelist-edit{display:inline}.wf-bulk-action{margin:12px 0}tr.wf-table-filters input{max-width:120px}#wordfenceRightRail img{max-width:100%}#wordfenceRightRail ul{list-style-type:none;margin:0;margin-top:15px}#wordfenceRightRail .center{text-align:center}#wordfenceRightRail .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wordfenceRightRail img{width:100%}.wordfenceRightRailLiveTraffic,.wordfenceRightRailOptions,.wordfenceRightRailDiagnostics{margin-left:1055px}.wordfenceRightRailBlockedIPs,.wordfenceRightRailWAF,.wordfenceRightRailCountryBlocking,.wordfenceRightRailScanSchedule{margin-left:950px}.wordfenceRightRail ul{list-style-type:none;margin:0}.wordfenceRightRail .center{text-align:center}.wordfenceRightRail .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wordfenceWrap.wordfence-community{min-height:760px}#wfTwoFactorQRCodeTable{width:175px;height:175px;margin:0 auto}@media (min-width: 500px){#wfTwoFactorQRCodeTable{width:256px;height:256px}}#wfTwoFactorRecoveryCodes{list-style-type:none}#wfTwoFactorRecoveryCodes li{font-family:monospace;text-align:center}#wfTwoFactorDownload .dashicons{line-height:26px}.wf-twofactor-delete{font-size:1.5rem}.wf-twofactor-delete a{text-decoration:none;color:#333}.wf-table.wf-table-twofactor>tbody>tr>td{vertical-align:middle}.wf-form-twofactor{max-width:400px}.wf-form-twofactor .wf-radio label{padding-left:0}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}label.wf-plain{font-weight:normal}label.wf-control-label.wf-disabled{pointer-events:none}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.wf-form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.wf-form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.wf-form-control::-moz-placeholder{color:#999;opacity:1}.wf-form-control:-ms-input-placeholder{color:#999}.wf-form-control::-webkit-input-placeholder{color:#999}.wf-form-control::-ms-expand{border:0;background-color:transparent}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{background-color:#e2e2e2;opacity:1}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{cursor:not-allowed;pointer-events:none}textarea.wf-form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].wf-form-control,input[type="time"].wf-form-control,input[type="datetime-local"].wf-form-control,input[type="month"].wf-form-control{line-height:34px}input[type="date"].wf-input-sm,.wf-input-group-sm input[type="date"],input[type="time"].wf-input-sm,.wf-input-group-sm input[type="time"],input[type="datetime-local"].wf-input-sm,.wf-input-group-sm input[type="datetime-local"],input[type="month"].wf-input-sm,.wf-input-group-sm input[type="month"]{line-height:30px}input[type="date"].wf-input-lg,.wf-input-group-lg input[type="date"],input[type="time"].wf-input-lg,.wf-input-group-lg input[type="time"],input[type="datetime-local"].wf-input-lg,.wf-input-group-lg input[type="datetime-local"],input[type="month"].wf-input-lg,.wf-input-group-lg input[type="month"]{line-height:46px}}.wf-form-group{margin-bottom:8px}.wf-form-group.wf-sub-group label{color:#666666;font-weight:normal;padding-left:20px}.wf-form-group.wf-focus{border-left:4px solid #11967a;padding-bottom:8px;background-color:#e5e5e5}.wf-form-group.wf-focus label{margin-left:-4px}.wf-radio,.wf-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.wf-radio label,.wf-checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.wf-radio input[type="radio"],.wf-radio-inline input[type="radio"],.wf-checkbox input[type="checkbox"],.wf-checkbox-inline input[type="checkbox"]{margin-top:4px \9}.wf-radio-offset{padding-left:29px}@media (min-width: 768px){.wf-radio-offset{padding-left:20px}}.wf-radio+.wf-radio,.wf-checkbox+.wf-checkbox{margin-top:-5px}.wf-radio-inline,.wf-checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.wf-radio-inline+.wf-radio-inline,.wf-checkbox-inline+.wf-checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"][readonly],input[type="radio"].wf-disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"][readonly],input[type="checkbox"].wf-disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;pointer-events:none}.wf-radio-inline.wf-disabled,fieldset[disabled] .wf-radio-inline,.wf-checkbox-inline.wf-disabled,fieldset[disabled] .wf-checkbox-inline{cursor:not-allowed}.wf-radio.wf-disabled label,fieldset[disabled] .wf-radio label,.wf-checkbox.wf-disabled label,fieldset[disabled] .wf-checkbox label{cursor:not-allowed;pointer-events:none}.wf-form-control-static{padding-top:7px;padding-bottom:7px;margin:0;line-height:1}.wf-form-control-static.wf-input-lg,.wf-form-control-static.wf-input-sm{padding-left:0;padding-right:0}.wf-input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.wf-input-sm{height:30px;line-height:30px}textarea.wf-input-sm,select[multiple].wf-input-sm{height:auto}.wf-form-group-sm .wf-form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wf-form-group-sm select.wf-form-control{height:30px;line-height:30px}.wf-form-group-sm textarea.wf-form-control,.wf-form-group-sm select[multiple].wf-form-control{height:auto}.wf-form-group-sm .wf-form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.wf-input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.wf-input-lg{height:46px;line-height:46px}textarea.wf-input-lg,select[multiple].wf-input-lg{height:auto}.wf-form-group-lg .wf-form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wf-form-group-lg select.wf-form-control{height:46px;line-height:46px}.wf-form-group-lg textarea.wf-form-control,.wf-form-group-lg select[multiple].wf-form-control{height:auto}.wf-form-group-lg .wf-form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.wf-has-feedback{position:relative}.wf-has-feedback .wf-form-control{padding-right:42.5px}.wf-form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.wf-input-lg+.wf-form-control-feedback,.wf-input-group-lg+.wf-form-control-feedback,.wf-form-group-lg .wf-form-control+.wf-form-control-feedback{width:46px;height:46px;line-height:46px}.wf-input-sm+.wf-form-control-feedback,.wf-input-group-sm+.wf-form-control-feedback,.wf-form-group-sm .wf-form-control+.wf-form-control-feedback{width:30px;height:30px;line-height:30px}.wf-has-success .wf-help-block,.wf-has-success .wf-control-label,.wf-has-success .wf-radio,.wf-has-success .wf-checkbox,.wf-has-success .wf-radio-inline,.wf-has-success .wf-checkbox-inline,.wf-has-success.wf-radio label,.wf-has-success.wf-checkbox label,.wf-has-success.wf-radio-inline label,.wf-has-success.wf-checkbox-inline label{color:#3c763d}.wf-has-success .wf-form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-success .wf-form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.wf-has-success .wf-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.wf-has-success .wf-form-control-feedback{color:#3c763d}.wf-has-warning .wf-help-block,.wf-has-warning .wf-control-label,.wf-has-warning .wf-radio,.wf-has-warning .wf-checkbox,.wf-has-warning .wf-radio-inline,.wf-has-warning .wf-checkbox-inline,.wf-has-warning.wf-radio label,.wf-has-warning.wf-checkbox label,.wf-has-warning.wf-radio-inline label,.wf-has-warning.wf-checkbox-inline label{color:#8a6d3b}.wf-has-warning .wf-form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-warning .wf-form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.wf-has-warning .wf-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.wf-has-warning .wf-form-control-feedback{color:#8a6d3b}.wf-has-error .wf-help-block,.wf-has-error .wf-control-label,.wf-has-error .wf-radio,.wf-has-error .wf-checkbox,.wf-has-error .wf-radio-inline,.wf-has-error .wf-checkbox-inline,.wf-has-error.wf-radio label,.wf-has-error.wf-checkbox label,.wf-has-error.wf-radio-inline label,.wf-has-error.wf-checkbox-inline label{color:#a94442}.wf-has-error .wf-form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-error .wf-form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.wf-has-error .wf-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.wf-has-error .wf-form-control-feedback{color:#a94442}.wf-has-feedback label ~ .wf-form-control-feedback{top:25px}.wf-has-feedback label.wf-sr-only ~ .wf-form-control-feedback{top:0}.wf-help-block{display:block;margin-top:5px;color:#737373}@media (min-width: 768px){.wf-form-inline .wf-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-form-control{display:inline-block;width:auto;vertical-align:middle}.wf-form-inline .wf-form-control-static{display:inline-block}.wf-form-inline .wf-input-group{display:inline-table;vertical-align:middle}.wf-form-inline .wf-input-group .wf-input-group-addon,.wf-form-inline .wf-input-group .wf-input-group-btn,.wf-form-inline .wf-input-group .wf-form-control{width:auto}.wf-form-inline .wf-input-group>.wf-form-control{width:100%}.wf-form-inline .wf-control-label{margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio,.wf-form-inline .wf-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio label,.wf-form-inline .wf-checkbox label{padding-left:0}.wf-form-inline .wf-radio input[type="radio"],.wf-form-inline .wf-checkbox input[type="checkbox"]{position:relative;margin-left:0}.wf-form-inline .wf-has-feedback .wf-form-control-feedback{top:0}}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox,.wf-form-horizontal .wf-radio-inline,.wf-form-horizontal .wf-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox{min-height:27px}.wf-form-horizontal .wf-form-group{margin-left:-15px;margin-right:-15px}.wf-form-horizontal .wf-form-group:before,.wf-form-horizontal .wf-form-group:after{content:" ";display:table}.wf-form-horizontal .wf-form-group:after{clear:both}@media (min-width: 768px){.wf-form-horizontal .wf-control-label{text-align:right;margin-bottom:0;padding-top:7px}}.wf-form-horizontal .wf-has-feedback .wf-form-control-feedback{right:15px}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-lg .wf-control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-sm .wf-control-label{padding-top:6px;font-size:12px}}.wf-dashboard-item{position:relative;margin:0 auto 1rem;padding:0 1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-dashboard-item .wf-dashboard-item-inner{min-height:44px;padding:1rem 0;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content{max-width:75%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-title{font-size:0.75rem;width:100%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text{width:auto}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-success{color:#11967a}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning a{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox.checked{background-position:right center}.wf-dashboard-item .wf-dashboard-item-extra{display:none;margin:0 -1rem;padding:0 1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list{margin:0 -1rem;padding:0;list-style:none}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification{border-left:4px solid #f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even){background-color:#ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification{border-left:4px solid #ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li{display:block;min-height:44px;padding:0 1rem;margin:0;border-top:1px solid #eeeeee;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal{box-sizing:border-box;margin-top:-1px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:1px solid #eeeeee}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:center}@media (min-width: 1200px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:left}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-enabled .fa{color:#11967a}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-disabled .fa{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-premium{color:#9f9fa0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss{padding-left:2rem;font-size:1.25rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss a{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-count{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wf-dashboard-item.active .wf-dashboard-item-extra{display:block}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-content{margin-left:48px}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-action{right:auto;left:0px}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-title{color:#aaaaaa}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-subtitle{color:#8ea6be}.wf-notifications-empty{font-size:0.9rem;color:#9f9fa0}.wf-dashboard-graph-wrapper{width:100%}.wf-dashboard-badge{display:inline-block;min-width:10px;padding:3px 7px;margin-left:0.5rem;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#fcb214;border-radius:10px}.wf-dashboard-badge:empty{display:none}.wf-btn .wf-dashboard-badge{position:relative;top:-1px}.wf-btn-xs .wf-dashboard-badge,.wf-btn-group-xs>.wf-btn .wf-dashboard-badge{top:0;padding:1px 5px}.wf-list-group-item.active>.wf-dashboard-badge,.wf-nav-pills>.active>a>.wf-dashboard-badge{color:#00709e;background-color:#fff}.wf-list-group-item>.wf-dashboard-badge{float:right}.wf-list-group-item>.wf-dashboard-badge+.wf-dashboard-badge{margin-right:5px}.wf-nav-pills>li>a>.wf-dashboard-badge{margin-left:3px}.wf-dashboard-toggle-btns{text-align:center}.wf-dashboard-toggle-btns .wf-pagination{margin:1rem 1rem 0.5rem 1rem}.wf-dashboard-show-more{position:relative;font-size:14px;color:#959595;text-align:center;line-height:1rem;background:#ffffff;width:60%;margin:20px auto 0 auto}.wf-dashboard-show-more:before{display:inline-block;content:"";position:absolute;height:1px;background:#dddddd;top:50%;width:100%;left:0;right:0}.wf-dashboard-show-more a{display:inline-block;position:relative;padding:0 10px;background-color:#ffffff}.wf-ips,.wf-recent-logins,.wf-countries{max-height:30rem;overflow-y:hidden;margin-bottom:20px}.wf-ips .wf-table,.wf-recent-logins .wf-table,.wf-countries .wf-table{margin-bottom:0}.wf-dashboard-last-updated{font-style:italic;font-size:0.6rem;text-align:center;padding-bottom:1rem;margin:0}table.wf-table{background-color:transparent;border-collapse:collapse;border-spacing:0}table.wf-table td,table.wf-table th{padding:0}.wf-table caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.wf-table th{text-align:left}.wf-table{width:100%;max-width:100%;margin-bottom:20px}.wf-table>thead>tr>th,.wf-table>thead>tr>td,.wf-table>tbody>tr>th,.wf-table>tbody>tr>td,.wf-table>tfoot>tr>th,.wf-table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.wf-table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.wf-table>caption+thead>tr:first-child>th,.wf-table>caption+thead>tr:first-child>td,.wf-table>colgroup+thead>tr:first-child>th,.wf-table>colgroup+thead>tr:first-child>td,.wf-table>thead:first-child>tr:first-child>th,.wf-table>thead:first-child>tr:first-child>td{border-top:0}.wf-table>tbody+tbody{border-top:2px solid #ddd}.wf-table .wf-table{background-color:#fff}.wf-table-condensed>thead>tr>th,.wf-table-condensed>thead>tr>td,.wf-table-condensed>tbody>tr>th,.wf-table-condensed>tbody>tr>td,.wf-table-condensed>tfoot>tr>th,.wf-table-condensed>tfoot>tr>td{padding:5px}.wf-table-bordered{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td,.wf-table-bordered>tbody>tr>th,.wf-table-bordered>tbody>tr>td,.wf-table-bordered>tfoot>tr>th,.wf-table-bordered>tfoot>tr>td{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td{border-bottom-width:2px}.wf-table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.wf-table-hover>tbody>tr:hover{background-color:#f5f5f5}table.wf-table col[class*="col-"]{position:static;float:none;display:table-column}table.wf-table td[class*="col-"],table.wf-table th[class*="col-"]{position:static;float:none;display:table-cell}.wf-table>thead>tr>td.active,.wf-table>thead>tr>th.active,.wf-table>thead>tr.active>td,.wf-table>thead>tr.active>th,.wf-table>tbody>tr>td.active,.wf-table>tbody>tr>th.active,.wf-table>tbody>tr.active>td,.wf-table>tbody>tr.active>th,.wf-table>tfoot>tr>td.active,.wf-table>tfoot>tr>th.active,.wf-table>tfoot>tr.active>td,.wf-table>tfoot>tr.active>th{background-color:#f5f5f5}.wf-table-hover>tbody>tr>td.active:hover,.wf-table-hover>tbody>tr>th.active:hover,.wf-table-hover>tbody>tr.active:hover>td,.wf-table-hover>tbody>tr:hover>.active,.wf-table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.wf-table>thead>tr>td.success,.wf-table>thead>tr>th.success,.wf-table>thead>tr.success>td,.wf-table>thead>tr.success>th,.wf-table>tbody>tr>td.success,.wf-table>tbody>tr>th.success,.wf-table>tbody>tr.success>td,.wf-table>tbody>tr.success>th,.wf-table>tfoot>tr>td.success,.wf-table>tfoot>tr>th.success,.wf-table>tfoot>tr.success>td,.wf-table>tfoot>tr.success>th{background-color:#dff0d8}.wf-table-hover>tbody>tr>td.success:hover,.wf-table-hover>tbody>tr>th.success:hover,.wf-table-hover>tbody>tr.success:hover>td,.wf-table-hover>tbody>tr:hover>.success,.wf-table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.wf-table>thead>tr>td.info,.wf-table>thead>tr>th.info,.wf-table>thead>tr.info>td,.wf-table>thead>tr.info>th,.wf-table>tbody>tr>td.info,.wf-table>tbody>tr>th.info,.wf-table>tbody>tr.info>td,.wf-table>tbody>tr.info>th,.wf-table>tfoot>tr>td.info,.wf-table>tfoot>tr>th.info,.wf-table>tfoot>tr.info>td,.wf-table>tfoot>tr.info>th{background-color:#d9edf7}.wf-table-hover>tbody>tr>td.info:hover,.wf-table-hover>tbody>tr>th.info:hover,.wf-table-hover>tbody>tr.info:hover>td,.wf-table-hover>tbody>tr:hover>.info,.wf-table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.wf-table>thead>tr>td.warning,.wf-table>thead>tr>th.warning,.wf-table>thead>tr.warning>td,.wf-table>thead>tr.warning>th,.wf-table>tbody>tr>td.warning,.wf-table>tbody>tr>th.warning,.wf-table>tbody>tr.warning>td,.wf-table>tbody>tr.warning>th,.wf-table>tfoot>tr>td.warning,.wf-table>tfoot>tr>th.warning,.wf-table>tfoot>tr.warning>td,.wf-table>tfoot>tr.warning>th{background-color:#fcf8e3}.wf-table-hover>tbody>tr>td.warning:hover,.wf-table-hover>tbody>tr>th.warning:hover,.wf-table-hover>tbody>tr.warning:hover>td,.wf-table-hover>tbody>tr:hover>.warning,.wf-table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.wf-table>thead>tr>td.danger,.wf-table>thead>tr>th.danger,.wf-table>thead>tr.danger>td,.wf-table>thead>tr.danger>th,.wf-table>tbody>tr>td.danger,.wf-table>tbody>tr>th.danger,.wf-table>tbody>tr.danger>td,.wf-table>tbody>tr.danger>th,.wf-table>tfoot>tr>td.danger,.wf-table>tfoot>tr>th.danger,.wf-table>tfoot>tr.danger>td,.wf-table>tfoot>tr.danger>th{background-color:#f2dede}.wf-table-hover>tbody>tr>td.danger:hover,.wf-table-hover>tbody>tr>th.danger:hover,.wf-table-hover>tbody>tr.danger:hover>td,.wf-table-hover>tbody>tr:hover>.danger,.wf-table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.wf-table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.wf-table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.wf-table-responsive>.wf-table{margin-bottom:0}.wf-table-responsive>.wf-table>thead>tr>th,.wf-table-responsive>.wf-table>thead>tr>td,.wf-table-responsive>.wf-table>tbody>tr>th,.wf-table-responsive>.wf-table>tbody>tr>td,.wf-table-responsive>.wf-table>tfoot>tr>th,.wf-table-responsive>.wf-table>tfoot>tr>td{white-space:nowrap}.wf-table-responsive>.wf-table-bordered{border:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:first-child{border-left:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:last-child{border-right:0}.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>td,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>td{border-bottom:0}}.wf-nav{margin-bottom:0;padding-left:0;list-style:none}.wf-nav:before,.wf-nav:after{content:" ";display:table}.wf-nav:after{clear:both}.wf-nav>li{position:relative;display:block}.wf-nav>li>a{position:relative;display:block;padding:8px 12px}.wf-nav>li>a:hover,.wf-nav>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wf-nav>li.wf-disabled>a{color:#777}.wf-nav>li.wf-disabled>a:hover,.wf-nav>li.wf-disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wf-nav .wf-open>a,.wf-nav .wf-open>a:hover,.wf-nav .wf-open>a:focus{background-color:#e2e2e2;border-color:#00709e}.wf-nav>li>a>img{max-width:none}.wf-nav-tabs{border-bottom:1px solid #ddd}.wf-nav-tabs>li{float:left;margin-bottom:-1px}.wf-nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.wf-nav-tabs>li>a:hover{border-color:#e2e2e2 #e2e2e2 #ddd}.wf-nav-tabs>li.wf-active>a,.wf-nav-tabs>li.wf-active>a:hover,.wf-nav-tabs>li.wf-active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.wf-nav-pills>li{float:left}.wf-nav-pills>li>a{border-radius:4px}.wf-nav-pills>li+li{margin-left:2px}.wf-nav-pills>li.wf-active>a,.wf-nav-pills>li.wf-active>a:hover,.wf-nav-pills>li.wf-active>a:focus{color:#fff;background-color:#00709e}.wf-nav-stacked>li{float:none}.wf-nav-stacked>li+li{margin-top:2px;margin-left:0}.wf-nav-justified,.wf-nav-tabs.wf-nav-justified{width:100%}.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{float:none}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{text-align:center;margin-bottom:5px}.wf-nav-justified>.wf-dropdown .wf-dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{display:table-cell;width:1%}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-bottom:0}}.wf-nav-tabs-justified,.wf-nav-tabs.wf-nav-justified{border-bottom:0}.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-right:0;border-radius:4px}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border-bottom-color:#fff}}.wf-tab-content>.wf-tab-pane{display:none}.wf-tab-content>.wf-active{display:block}.wf-nav-tabs .wf-dropdown-menu{margin-top:-1px;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.wf-navbar-brand{float:left;padding:12px 8px;font-size:18px;line-height:20px;margin:10px 0 0 0}.wf-navbar-brand:hover,.wf-navbar-brand:focus{text-decoration:none}.wf-navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .wf-navbar-brand,.navbar>.container-fluid .wf-navbar-brand{margin-left:-8px}}.wf-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.wf-dropup,.wf-dropdown{position:relative}.wf-dropdown-toggle:focus{outline:0}.wf-dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.wf-dropdown-menu .wf-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.wf-dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;text-decoration:none;white-space:nowrap}.wf-dropdown-menu>li>a:hover,.wf-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.wf-dropdown-menu>.wf-active>a,.wf-dropdown-menu>.wf-active>a:hover,.wf-dropdown-menu>.wf-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#00709e}.wf-dropdown-menu>.wf-disabled>a,.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{color:#777}.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.wf-open>.wf-dropdown-menu{display:block}.wf-open>a{outline:0}.wf-dropdown-menu-right{left:auto;right:0}.wf-dropdown-menu-left{left:0;right:auto}.wf-dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.wf-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.wf-pull-right>.wf-dropdown-menu{right:0;left:auto}.wf-dropup .wf-caret,.wf-navbar-fixed-bottom .wf-dropdown .wf-caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.wf-dropup .wf-dropdown-menu,.wf-navbar-fixed-bottom .wf-dropdown .wf-dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.wf-navbar-right .wf-dropdown-menu{right:0;left:auto}.wf-navbar-right .wf-dropdown-menu-left{left:0;right:auto}}.wf-mobile-dropdown{border:1px solid #ccc;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;margin:10px 10px 0 0;background:#f1f1f1;color:#000;font-weight:600;text-decoration:none}.wf-blocked-countries{margin-bottom:0;margin-top:0;padding-left:0;list-style:none;margin-left:-6px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-blocked-countries>li{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;margin:0px 0px 2px 6px;text-align:center;border:1px solid #e2e2e2;border-radius:4px;padding:8px 12px;background-color:#ffffff;-webkit-flex-basis:38%;flex-basis:38%}@media (min-width: 768px){.wf-blocked-countries>li{-webkit-flex-basis:20%;flex-basis:20%}}@media (min-width: 992px){.wf-blocked-countries>li{-webkit-flex-basis:15%;flex-basis:15%}}@media (min-width: 1200px){.wf-blocked-countries>li{-webkit-flex-basis:10%;flex-basis:10%}}.wf-blocked-countries>li:hover,.wf-blocked-countries>li:focus{text-decoration:none;background-color:#e2e2e2}.wf-blocked-countries>li.disabled>a{color:#777}.wf-blocked-countries>li.disabled>a:hover,.wf-blocked-countries>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wf-blocked-countries>li>a{text-decoration:none;position:relative;display:block}.wf-blocked-countries>li.active,.wf-blocked-countries>li.active:hover,.wf-blocked-countries>li.active:focus{background-color:#00709e;border-color:#00709e}.wf-blocked-countries>li.active>a,.wf-blocked-countries>li.active:hover>a,.wf-blocked-countries>li.active:focus>a{color:#fff}.wf-blocked-countries>li.text-only{position:relative;display:block;padding:8px 12px}.wf-blocked-countries>li>a>img{max-width:none}.wf-blocked-countries-section{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-title{font-size:1.1rem;padding-right:0.5rem}.wf-blocked-countries-section-spacer{-webkit-flex-basis:30px;flex-basis:30px;height:1px;background:#aaa}.wf-blocked-countries-section-options{margin-bottom:0;margin-top:0;padding-left:0.5rem;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-options li{padding:0;margin:0;color:#777}.wf-blocked-countries-section-options li a{padding:2px 4px;text-decoration:none;color:#777}.wf-blocked-countries-section-options li a.active-section{background-color:#777;color:#e2e2e2}table.wf-dataTable{width:auto;max-width:800px;clear:both;border-collapse:collapse;border-spacing:0}table.wf-dataTable>thead th,table.wf-dataTable>tfoot th{font-weight:bold}table.wf-dataTable>thead th,table.wf-dataTable>thead td{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding:8px 4px 5px 9px;text-transform:uppercase}table.wf-dataTable>thead th:active,table.wf-dataTable>thead td:active{outline:none}table.wf-dataTable>tfoot th,table.wf-dataTable>tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc{cursor:pointer;*cursor:hand}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc,table.wf-dataTable>thead .sorting_asc_disabled,table.wf-dataTable>thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.wf-dataTable>thead .sorting{background-image:url(../images/sort_both.png)}table.wf-dataTable>thead .sorting_asc{background-image:url(../images/sort_asc.png)}table.wf-dataTable>thead .sorting_desc{background-image:url(../images/sort_desc.png)}table.wf-dataTable>thead .sorting_asc_disabled{background-image:url(../images/sort_asc_disabled.png)}table.wf-dataTable>thead .sorting_desc_disabled{background-image:url(../images/sort_desc_disabled.png)}table.wf-dataTable>tbody>tr{background-color:#ffffff}table.wf-dataTable>tbody>tr.selected{background-color:#B0BED9}table.wf-dataTable>tbody>tr>th,table.wf-dataTable>tbody>tr>td{padding:5px 8px}table.wf-dataTable.row-border>tbody>tr>th,table.wf-dataTable.row-border>tbody>tr>td,table.wf-dataTable.display>tbody>tr>th,table.wf-dataTable.display>tbody>tr>td{border:1px solid #cccccc}table.wf-dataTable.row-border>tbody>tr:first-child>th,table.wf-dataTable.row-border>tbody>tr:first-child>td,table.wf-dataTable.display>tbody>tr:first-child>th,table.wf-dataTable.display>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.cell-border>tbody>tr>th,table.wf-dataTable.cell-border>tbody>tr>td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr>th:first-child,table.wf-dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr:first-child>th,table.wf-dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.stripe>tbody>tr.odd,table.wf-dataTable.display>tbody>tr.odd{background-color:#f9f9f9}table.wf-dataTable.stripe>tbody>tr.odd.selected,table.wf-dataTable.display>tbody>tr.odd.selected{background-color:#acbad4}table.wf-dataTable.hover>tbody>tr:hover,table.wf-dataTable.display>tbody>tr:hover{background-color:#f6f6f6}table.wf-dataTable.hover>tbody>tr:hover.selected,table.wf-dataTable.display>tbody>tr:hover.selected{background-color:#aab7d1}table.wf-dataTable.order-column>tbody>tr>.sorting_1,table.wf-dataTable.order-column>tbody>tr>.sorting_2,table.wf-dataTable.order-column>tbody>tr>.sorting_3,table.wf-dataTable.display tbody>tr>.sorting_1,table.wf-dataTable.display>tbody>tr>.sorting_2,table.wf-dataTable.display>tbody>tr>.sorting_3{background-color:#fafafa}table.wf-dataTable.order-column>tbody>tr.selected>.sorting_1,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_2,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_3,table.wf-dataTable.display>tbody>tr.selected>.sorting_1,table.wf-dataTable.display>tbody>tr.selected>.sorting_2,table.wf-dataTable.display>tbody>tr.selected>.sorting_3{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.odd>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{background-color:#f1f1f1}table.wf-dataTable.display>tbody>tr.odd>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{background-color:#f3f3f3}table.wf-dataTable.display>tbody>tr.odd>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{background-color:whitesmoke}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.wf-dataTable.display>tbody>tr.even>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_1{background-color:#fafafa}table.wf-dataTable.display>tbody>tr.even>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_2{background-color:#fcfcfc}table.wf-dataTable.display>tbody>tr.even>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_3{background-color:#fefefe}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.wf-dataTable.display>tbody>tr:hover>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_1{background-color:#eaeaea}table.wf-dataTable.display>tbody>tr:hover>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_2{background-color:#ececec}table.wf-dataTable.display>tbody>tr:hover>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_3{background-color:#efefef}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_1{background-color:#a2aec7}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.wf-dataTable.no-footer{border-bottom:1px solid #111}table.wf-dataTable.nowrap th,table.wf-dataTable.nowrap td{white-space:nowrap}table.wf-dataTable.compact thead th,table.wf-dataTable.compact thead td{padding:4px 17px 4px 4px}table.wf-dataTable.compact tfoot th,table.wf-dataTable.compact tfoot td{padding:4px}table.wf-dataTable.compact>tbody>tr>th,table.wf-dataTable.compact>tbody>tr>td{padding:4px}table.wf-dataTable th.dt-left,table.wf-dataTable td.dt-left{text-align:left}table.wf-dataTable th.dt-center,table.wf-dataTable td.dt-center,table.wf-dataTable td.dataTables_empty{text-align:center}table.wf-dataTable th.dt-right,table.wf-dataTable td.dt-right{text-align:right}table.wf-dataTable th.dt-justify,table.wf-dataTable td.dt-justify{text-align:justify}table.wf-dataTable th.dt-nowrap,table.wf-dataTable td.dt-nowrap{white-space:nowrap}table.wf-dataTable thead th.dt-head-left,table.wf-dataTable thead td.dt-head-left,table.wf-dataTable tfoot th.dt-head-left,table.wf-dataTable tfoot td.dt-head-left{text-align:left}table.wf-dataTable thead th.dt-head-center,table.wf-dataTable thead td.dt-head-center,table.wf-dataTable tfoot th.dt-head-center,table.wf-dataTable tfoot td.dt-head-center{text-align:center}table.wf-dataTable thead th.dt-head-right,table.wf-dataTable thead td.dt-head-right,table.wf-dataTable tfoot th.dt-head-right,table.wf-dataTable tfoot td.dt-head-right{text-align:right}table.wf-dataTable thead th.dt-head-justify,table.wf-dataTable thead td.dt-head-justify,table.wf-dataTable tfoot th.dt-head-justify,table.wf-dataTable tfoot td.dt-head-justify{text-align:justify}table.wf-dataTable thead th.dt-head-nowrap,table.wf-dataTable thead td.dt-head-nowrap,table.wf-dataTable tfoot th.dt-head-nowrap,table.wf-dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.wf-dataTable>tbody>tr>th.dt-body-left,table.wf-dataTable>tbody>tr>td.dt-body-left{text-align:left}table.wf-dataTable>tbody>tr>th.dt-body-center,table.wf-dataTable>tbody>tr>td.dt-body-center{text-align:center}table.wf-dataTable>tbody>tr>th.dt-body-right,table.wf-dataTable>tbody>tr>td.dt-body-right{text-align:right}table.wf-dataTable>tbody>tr>th.dt-body-justify,table.wf-dataTable>tbody>tr>td.dt-body-justify{text-align:justify}table.wf-dataTable>tbody>tr>th.dt-body-nowrap,table.wf-dataTable>tbody>tr>td.dt-body-nowrap{white-space:nowrap}table.wf-dataTable table.dataTable,table.wf-dataTable th,table.wf-dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.wf-dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.wf-dataTables_wrapper .dataTables_length{float:left}.wf-dataTables_wrapper .dataTables_filter{float:right;text-align:right}.wf-dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.wf-dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.wf-dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.wf-dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #ffffff 0%,#dcdcdc 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%,#111111 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.wf-dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.wf-dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter,.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_processing,.wf-dataTables_wrapper .dataTables_paginate{color:#333}.wf-dataTables_wrapper .dataTables_scroll{clear:both}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.wf-dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.wf-dataTables_wrapper.no-footer div.dataTables_scrollHead table,.wf-dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.wf-dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_filter{margin-top:0.5em}}
|
1 |
+
.wf-clearfix:before,.wf-clearfix:after{content:" ";display:table}.wf-clearfix:after{clear:both}@-ms-viewport{width:device-width}.wf-visible-xs{display:none !important}.wf-visible-sm{display:none !important}.wf-visible-md{display:none !important}.wf-visible-lg{display:none !important}.wf-visible-xs-block,.wf-visible-xs-inline,.wf-visible-xs-inline-block,.wf-visible-sm-block,.wf-visible-sm-inline,.wf-visible-sm-inline-block,.wf-visible-md-block,.wf-visible-md-inline,.wf-visible-md-inline-block,.wf-visible-lg-block,.wf-visible-lg-inline,.wf-visible-lg-inline-block{display:none !important}@media (max-width: 767px){.wf-visible-xs{display:block !important}table.wf-visible-xs{display:table !important}tr.wf-visible-xs{display:table-row !important}th.wf-visible-xs,td.wf-visible-xs{display:table-cell !important}}@media (max-width: 767px){.wf-visible-xs-block{display:block !important}}@media (max-width: 767px){.wf-visible-xs-inline{display:inline !important}}@media (max-width: 767px){.wf-visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm{display:block !important}table.wf-visible-sm{display:table !important}tr.wf-visible-sm{display:table-row !important}th.wf-visible-sm,td.wf-visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.wf-visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md{display:block !important}table.wf-visible-md{display:table !important}tr.wf-visible-md{display:table-row !important}th.wf-visible-md,td.wf-visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.wf-visible-lg{display:block !important}table.wf-visible-lg{display:table !important}tr.wf-visible-lg{display:table-row !important}th.wf-visible-lg,td.wf-visible-lg{display:table-cell !important}}@media (min-width: 1200px){.wf-visible-lg-block{display:block !important}}@media (min-width: 1200px){.wf-visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.wf-visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.wf-hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.wf-hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.wf-hidden-md{display:none !important}}@media (min-width: 1200px){.wf-hidden-lg{display:none !important}}.wf-visible-print{display:none !important}@media print{.wf-visible-print{display:block !important}table.wf-visible-print{display:table !important}tr.wf-visible-print{display:table-row !important}th.wf-visible-print,td.wf-visible-print{display:table-cell !important}}.wf-visible-print-block{display:none !important}@media print{.wf-visible-print-block{display:block !important}}.wf-visible-print-inline{display:none !important}@media print{.wf-visible-print-inline{display:inline !important}}.wf-visible-print-inline-block{display:none !important}@media print{.wf-visible-print-inline-block{display:inline-block !important}}@media print{.wf-hidden-print{display:none !important}}.wf-container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container:before,.wf-container:after{content:" ";display:table}.wf-container:after{clear:both}@media (min-width: 768px){.wf-container{width:750px}}@media (min-width: 992px){.wf-container{width:970px}}@media (min-width: 1200px){.wf-container{width:1170px}}.wf-container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.wf-container-fluid:before,.wf-container-fluid:after{content:" ";display:table}.wf-container-fluid:after{clear:both}.wf-row{margin-left:-15px;margin-right:-15px}.wf-row:before,.wf-row:after{content:" ";display:table}.wf-row:after{clear:both}.wf-col-xs-1,.wf-col-sm-1,.wf-col-md-1,.wf-col-lg-1,.wf-col-xs-2,.wf-col-sm-2,.wf-col-md-2,.wf-col-lg-2,.wf-col-xs-3,.wf-col-sm-3,.wf-col-md-3,.wf-col-lg-3,.wf-col-xs-4,.wf-col-sm-4,.wf-col-md-4,.wf-col-lg-4,.wf-col-xs-5,.wf-col-sm-5,.wf-col-md-5,.wf-col-lg-5,.wf-col-xs-6,.wf-col-sm-6,.wf-col-md-6,.wf-col-lg-6,.wf-col-xs-7,.wf-col-sm-7,.wf-col-md-7,.wf-col-lg-7,.wf-col-xs-8,.wf-col-sm-8,.wf-col-md-8,.wf-col-lg-8,.wf-col-xs-9,.wf-col-sm-9,.wf-col-md-9,.wf-col-lg-9,.wf-col-xs-10,.wf-col-sm-10,.wf-col-md-10,.wf-col-lg-10,.wf-col-xs-11,.wf-col-sm-11,.wf-col-md-11,.wf-col-lg-11,.wf-col-xs-12,.wf-col-sm-12,.wf-col-md-12,.wf-col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px;box-sizing:border-box}.wf-col-xs-1,.wf-col-xs-2,.wf-col-xs-3,.wf-col-xs-4,.wf-col-xs-5,.wf-col-xs-6,.wf-col-xs-7,.wf-col-xs-8,.wf-col-xs-9,.wf-col-xs-10,.wf-col-xs-11,.wf-col-xs-12{float:left}.wf-col-xs-1{width:8.33333%}.wf-col-xs-2{width:16.66667%}.wf-col-xs-3{width:25%}.wf-col-xs-4{width:33.33333%}.wf-col-xs-5{width:41.66667%}.wf-col-xs-6{width:50%}.wf-col-xs-7{width:58.33333%}.wf-col-xs-8{width:66.66667%}.wf-col-xs-9{width:75%}.wf-col-xs-10{width:83.33333%}.wf-col-xs-11{width:91.66667%}.wf-col-xs-12{width:100%}.wf-col-xs-pull-0{right:auto}.wf-col-xs-pull-1{right:8.33333%}.wf-col-xs-pull-2{right:16.66667%}.wf-col-xs-pull-3{right:25%}.wf-col-xs-pull-4{right:33.33333%}.wf-col-xs-pull-5{right:41.66667%}.wf-col-xs-pull-6{right:50%}.wf-col-xs-pull-7{right:58.33333%}.wf-col-xs-pull-8{right:66.66667%}.wf-col-xs-pull-9{right:75%}.wf-col-xs-pull-10{right:83.33333%}.wf-col-xs-pull-11{right:91.66667%}.wf-col-xs-pull-12{right:100%}.wf-col-xs-push-0{left:auto}.wf-col-xs-push-1{left:8.33333%}.wf-col-xs-push-2{left:16.66667%}.wf-col-xs-push-3{left:25%}.wf-col-xs-push-4{left:33.33333%}.wf-col-xs-push-5{left:41.66667%}.wf-col-xs-push-6{left:50%}.wf-col-xs-push-7{left:58.33333%}.wf-col-xs-push-8{left:66.66667%}.wf-col-xs-push-9{left:75%}.wf-col-xs-push-10{left:83.33333%}.wf-col-xs-push-11{left:91.66667%}.wf-col-xs-push-12{left:100%}.wf-col-xs-offset-0{margin-left:0%}.wf-col-xs-offset-1{margin-left:8.33333%}.wf-col-xs-offset-2{margin-left:16.66667%}.wf-col-xs-offset-3{margin-left:25%}.wf-col-xs-offset-4{margin-left:33.33333%}.wf-col-xs-offset-5{margin-left:41.66667%}.wf-col-xs-offset-6{margin-left:50%}.wf-col-xs-offset-7{margin-left:58.33333%}.wf-col-xs-offset-8{margin-left:66.66667%}.wf-col-xs-offset-9{margin-left:75%}.wf-col-xs-offset-10{margin-left:83.33333%}.wf-col-xs-offset-11{margin-left:91.66667%}.wf-col-xs-offset-12{margin-left:100%}.wf-col-xs-half-padding-left{padding-left:8px}.wf-col-xs-half-padding-right{padding-right:7px}@media (min-width: 768px){.wf-col-sm-1,.wf-col-sm-2,.wf-col-sm-3,.wf-col-sm-4,.wf-col-sm-5,.wf-col-sm-6,.wf-col-sm-7,.wf-col-sm-8,.wf-col-sm-9,.wf-col-sm-10,.wf-col-sm-11,.wf-col-sm-12{float:left}.wf-col-sm-1{width:8.33333%}.wf-col-sm-2{width:16.66667%}.wf-col-sm-3{width:25%}.wf-col-sm-4{width:33.33333%}.wf-col-sm-5{width:41.66667%}.wf-col-sm-6{width:50%}.wf-col-sm-7{width:58.33333%}.wf-col-sm-8{width:66.66667%}.wf-col-sm-9{width:75%}.wf-col-sm-10{width:83.33333%}.wf-col-sm-11{width:91.66667%}.wf-col-sm-12{width:100%}.wf-col-sm-pull-0{right:auto}.wf-col-sm-pull-1{right:8.33333%}.wf-col-sm-pull-2{right:16.66667%}.wf-col-sm-pull-3{right:25%}.wf-col-sm-pull-4{right:33.33333%}.wf-col-sm-pull-5{right:41.66667%}.wf-col-sm-pull-6{right:50%}.wf-col-sm-pull-7{right:58.33333%}.wf-col-sm-pull-8{right:66.66667%}.wf-col-sm-pull-9{right:75%}.wf-col-sm-pull-10{right:83.33333%}.wf-col-sm-pull-11{right:91.66667%}.wf-col-sm-pull-12{right:100%}.wf-col-sm-push-0{left:auto}.wf-col-sm-push-1{left:8.33333%}.wf-col-sm-push-2{left:16.66667%}.wf-col-sm-push-3{left:25%}.wf-col-sm-push-4{left:33.33333%}.wf-col-sm-push-5{left:41.66667%}.wf-col-sm-push-6{left:50%}.wf-col-sm-push-7{left:58.33333%}.wf-col-sm-push-8{left:66.66667%}.wf-col-sm-push-9{left:75%}.wf-col-sm-push-10{left:83.33333%}.wf-col-sm-push-11{left:91.66667%}.wf-col-sm-push-12{left:100%}.wf-col-sm-offset-0{margin-left:0%}.wf-col-sm-offset-1{margin-left:8.33333%}.wf-col-sm-offset-2{margin-left:16.66667%}.wf-col-sm-offset-3{margin-left:25%}.wf-col-sm-offset-4{margin-left:33.33333%}.wf-col-sm-offset-5{margin-left:41.66667%}.wf-col-sm-offset-6{margin-left:50%}.wf-col-sm-offset-7{margin-left:58.33333%}.wf-col-sm-offset-8{margin-left:66.66667%}.wf-col-sm-offset-9{margin-left:75%}.wf-col-sm-offset-10{margin-left:83.33333%}.wf-col-sm-offset-11{margin-left:91.66667%}.wf-col-sm-offset-12{margin-left:100%}.wf-col-sm-half-padding-left{padding-left:8px}.wf-col-sm-half-padding-right{padding-right:7px}}@media (min-width: 992px){.wf-col-md-1,.wf-col-md-2,.wf-col-md-3,.wf-col-md-4,.wf-col-md-5,.wf-col-md-6,.wf-col-md-7,.wf-col-md-8,.wf-col-md-9,.wf-col-md-10,.wf-col-md-11,.wf-col-md-12{float:left}.wf-col-md-1{width:8.33333%}.wf-col-md-2{width:16.66667%}.wf-col-md-3{width:25%}.wf-col-md-4{width:33.33333%}.wf-col-md-5{width:41.66667%}.wf-col-md-6{width:50%}.wf-col-md-7{width:58.33333%}.wf-col-md-8{width:66.66667%}.wf-col-md-9{width:75%}.wf-col-md-10{width:83.33333%}.wf-col-md-11{width:91.66667%}.wf-col-md-12{width:100%}.wf-col-md-pull-0{right:auto}.wf-col-md-pull-1{right:8.33333%}.wf-col-md-pull-2{right:16.66667%}.wf-col-md-pull-3{right:25%}.wf-col-md-pull-4{right:33.33333%}.wf-col-md-pull-5{right:41.66667%}.wf-col-md-pull-6{right:50%}.wf-col-md-pull-7{right:58.33333%}.wf-col-md-pull-8{right:66.66667%}.wf-col-md-pull-9{right:75%}.wf-col-md-pull-10{right:83.33333%}.wf-col-md-pull-11{right:91.66667%}.wf-col-md-pull-12{right:100%}.wf-col-md-push-0{left:auto}.wf-col-md-push-1{left:8.33333%}.wf-col-md-push-2{left:16.66667%}.wf-col-md-push-3{left:25%}.wf-col-md-push-4{left:33.33333%}.wf-col-md-push-5{left:41.66667%}.wf-col-md-push-6{left:50%}.wf-col-md-push-7{left:58.33333%}.wf-col-md-push-8{left:66.66667%}.wf-col-md-push-9{left:75%}.wf-col-md-push-10{left:83.33333%}.wf-col-md-push-11{left:91.66667%}.wf-col-md-push-12{left:100%}.wf-col-md-offset-0{margin-left:0%}.wf-col-md-offset-1{margin-left:8.33333%}.wf-col-md-offset-2{margin-left:16.66667%}.wf-col-md-offset-3{margin-left:25%}.wf-col-md-offset-4{margin-left:33.33333%}.wf-col-md-offset-5{margin-left:41.66667%}.wf-col-md-offset-6{margin-left:50%}.wf-col-md-offset-7{margin-left:58.33333%}.wf-col-md-offset-8{margin-left:66.66667%}.wf-col-md-offset-9{margin-left:75%}.wf-col-md-offset-10{margin-left:83.33333%}.wf-col-md-offset-11{margin-left:91.66667%}.wf-col-md-offset-12{margin-left:100%}.wf-col-md-half-padding-left{padding-left:8px}.wf-col-md-half-padding-right{padding-right:7px}}@media (min-width: 1200px){.wf-col-lg-1,.wf-col-lg-2,.wf-col-lg-3,.wf-col-lg-4,.wf-col-lg-5,.wf-col-lg-6,.wf-col-lg-7,.wf-col-lg-8,.wf-col-lg-9,.wf-col-lg-10,.wf-col-lg-11,.wf-col-lg-12{float:left}.wf-col-lg-1{width:8.33333%}.wf-col-lg-2{width:16.66667%}.wf-col-lg-3{width:25%}.wf-col-lg-4{width:33.33333%}.wf-col-lg-5{width:41.66667%}.wf-col-lg-6{width:50%}.wf-col-lg-7{width:58.33333%}.wf-col-lg-8{width:66.66667%}.wf-col-lg-9{width:75%}.wf-col-lg-10{width:83.33333%}.wf-col-lg-11{width:91.66667%}.wf-col-lg-12{width:100%}.wf-col-lg-pull-0{right:auto}.wf-col-lg-pull-1{right:8.33333%}.wf-col-lg-pull-2{right:16.66667%}.wf-col-lg-pull-3{right:25%}.wf-col-lg-pull-4{right:33.33333%}.wf-col-lg-pull-5{right:41.66667%}.wf-col-lg-pull-6{right:50%}.wf-col-lg-pull-7{right:58.33333%}.wf-col-lg-pull-8{right:66.66667%}.wf-col-lg-pull-9{right:75%}.wf-col-lg-pull-10{right:83.33333%}.wf-col-lg-pull-11{right:91.66667%}.wf-col-lg-pull-12{right:100%}.wf-col-lg-push-0{left:auto}.wf-col-lg-push-1{left:8.33333%}.wf-col-lg-push-2{left:16.66667%}.wf-col-lg-push-3{left:25%}.wf-col-lg-push-4{left:33.33333%}.wf-col-lg-push-5{left:41.66667%}.wf-col-lg-push-6{left:50%}.wf-col-lg-push-7{left:58.33333%}.wf-col-lg-push-8{left:66.66667%}.wf-col-lg-push-9{left:75%}.wf-col-lg-push-10{left:83.33333%}.wf-col-lg-push-11{left:91.66667%}.wf-col-lg-push-12{left:100%}.wf-col-lg-offset-0{margin-left:0%}.wf-col-lg-offset-1{margin-left:8.33333%}.wf-col-lg-offset-2{margin-left:16.66667%}.wf-col-lg-offset-3{margin-left:25%}.wf-col-lg-offset-4{margin-left:33.33333%}.wf-col-lg-offset-5{margin-left:41.66667%}.wf-col-lg-offset-6{margin-left:50%}.wf-col-lg-offset-7{margin-left:58.33333%}.wf-col-lg-offset-8{margin-left:66.66667%}.wf-col-lg-offset-9{margin-left:75%}.wf-col-lg-offset-10{margin-left:83.33333%}.wf-col-lg-offset-11{margin-left:91.66667%}.wf-col-lg-offset-12{margin-left:100%}.wf-col-lg-half-padding-left{padding-left:8px}.wf-col-lg-half-padding-right{padding-right:7px}}.wrap.wordfence{direction:ltr}@media (min-width: 768px){.wrap.wordfence{max-width:750px}}@media (min-width: 992px){.wrap.wordfence{max-width:970px}}@media (min-width: 1200px){.wrap.wordfence{max-width:1170px}}.wrap.wordfence>.wf-container-fluid{padding-left:0px;padding-right:0px}.wrap.wordfence .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wrap.wordfence h3{font-size:1.15em}a{color:#00709e}.wordfenceWrap{margin:20px 0 0 20px}.wordfence-icon32{width:32px;height:32px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:7px 5px 0 0;float:left}#wfHeading:after{content:'.';visibility:hidden;display:block;clear:both;height:0px}div.wordfence-lock-icon{background-image:url(../images/wordfence-logo-32x32.png)}a.wfhelp{background-image:url(../images/help.png);width:12px;height:12px;background-position:0 0;background-repeat:no-repeat;padding:0;margin:0 3px 0 3px;text-decoration:none;display:inline-block;vertical-align:middle}.wordfence .resulticon{display:block;float:left;width:16px;height:16px;background-position:0 0;background-repeat:no-repeat;border-width:0;padding:0;margin:0 3px 0 0;background-image:url(../images/icons/bullet_yellow.png)}.wordfenceBoldTD{font-weight:bold}.wfAjax24{display:none;width:24px;height:24px;background-image:url(../images/icons/ajax24.gif);margin:0;padding:0}div.wfLoadingWhite32{width:32px;height:32px;background-image:url(../images/icons/ajaxWhite32x32.gif);margin:0;padding:0}.wfTabsContainer{background-color:#FFF;overflow:hidden;border:1px solid #CCC;padding:15px;min-height:200px;-webkit-font-smoothing:antialiased}#wfTabs::after{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}#wfTabs a{float:left;z-index:10;height:18px;margin:0 5px -1px 0;padding:5px 8px;border:1px solid #CCC;text-decoration:none;background-color:#EFEFEF;color:#21759B;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}#wfTabs a.selected{border-bottom:1px solid #FFF;background-color:#FFF;color:#777}.wordfenceTopTab{display:none;margin-top:15px}.wordfenceTopTab.active{display:block}.wordfenceHelpLink{margin-top:15px}.wfAjaxLight128{background-image:url(../images/icons/ajax3.gif)}.wfStrong{font-weight:bold}.wordfenceModeElem{width:1px;height:1px;opacity:0}.wfWarn{color:#F00}img.wfFlag{vertical-align:middle;margin:-3px 4px 0 0}.wfHitTime{font-style:italic}.wfAvatar img{vertical-align:middle}.wf-hex-sequence{color:#587ECB}.wfLoadMoreButton.disabled,.wfLoadMoreButton[disabled]{pointer-events:none;opacity:0.65}table.wfConfigForm th{font-weight:normal;text-align:left;padding:2px 3px 1px 0;vertical-align:middle}table.wfConfigForm td{vertical-align:middle}table.wfConfigForm td.align-top{vertical-align:top}table th.wfConfigEnable{font-weight:bold;min-width:25%}.wfSavedMsg{display:none;color:#A00}table th.wfSubheading{font-weight:bold;padding-top:10px}h3.wfConfigHeading{font-size:22px;color:#777;font-family:Georgia,Times New Roman,Times,serif;font-style:italic;font-weight:normal}.wfTipText{color:#777;font-family:Georgia,Times New Roman,Times,serif;font-style:italic}.wfBlackCursor{color:#FFF}.wf-spinner{display:inline-block;width:4px}.wferror{color:#F00}#wordfenceWorking{padding:2px 8px 2px 24px;z-index:100000;position:fixed;right:2px;bottom:2px;border:1px solid #000;background-color:#F00;color:#FFF;font-size:12px;font-weight:bold;font-family:Arial;text-align:center;background-image:url("../images/icons/ajaxRed16.gif");background-position:2px 2px;background-repeat:no-repeat}#paidWrap{position:relative}.paidInnerMsg{width:500px;margin:150px auto 0 auto;color:#000;font-size:18px;font-family:Georgia,Times New Roman,Times,serif;line-height:1.8em;text-align:center;-webkit-font-smoothing:antialiased}.wfMarker{height:1px;width:1px}.wfPaidOnlyNotice{width:500px;background-color:#FFFFE0;border:1px solid #000;padding:10px;margin:20px}.wfOnOffSwitch{position:relative !important;width:69px !important;-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}.wfOnOffSwitch-checkbox{display:none !important}.wfOnOffSwitch-label{display:block !important;overflow:hidden !important;cursor:pointer !important;border:2px solid #999999 !important;border-radius:19px !important;margin:0}.wfOnOffSwitch-inner{width:200% !important;margin-left:-100% !important;-webkit-transition:margin 0.3s ease-in !important;-o-transition:margin 0.3s ease-in !important;transition:margin 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important}.wfOnOffSwitch-inner:before,.wfOnOffSwitch-inner:after{float:left !important;width:50% !important;height:19px !important;padding:0 !important;line-height:19px !important;font-size:14px !important;color:white !important;font-family:Trebuchet, Arial, sans-serif !important;font-weight:bold !important;-webkit-box-sizing:border-box !important;-moz-box-sizing:border-box !important;box-sizing:border-box !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;-webkit-box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important;box-shadow:0 9.5px 0 rgba(0,0,0,0.08) inset !important}.wfOnOffSwitch-inner:before{content:"ON" !important;padding-left:10px !important;background-color:#30D965 !important;color:#FFFFFF !important;-moz-border-radius:19px 0 0 19px !important;-webkit-border-radius:19px;border-radius:19px 0 0 19px !important}.wfOnOffSwitch-inner:after{content:"OFF" !important;padding-right:10px !important;background-color:#EEEEEE !important;color:#999999 !important;text-align:right !important;-moz-border-radius:0 19px 19px 0 !important;-webkit-border-radius:0;border-radius:0 19px 19px 0 !important}.wfOnOffSwitch-switch{width:19px !important;margin:0 !important;background:#FFFFFF !important;border:2px solid #999999 !important;-moz-border-radius:19px !important;-webkit-border-radius:19px;border-radius:19px !important;position:absolute !important;top:0 !important;bottom:0 !important;right:46px !important;-webkit-transition:all 0.3s ease-in !important;-o-transition:all 0.3s ease-in !important;transition:all 0.3s ease-in !important;-webkit-transition-delay:0s !important;transition-delay:0s !important;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjEiLz48c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=') !important;background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0,0,0,0.1)),color-stop(80%, rgba(0,0,0,0))) !important;background-image:-moz-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:-webkit-linear-gradient(center top, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;background-image:linear-gradient(to center bottom, rgba(0,0,0,0.1) 0%,rgba(0,0,0,0) 80%) !important;box-shadow:0 1px 1px white inset !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-inner{margin-left:0 !important}.wfOnOffSwitch-checkbox:checked+.wfOnOffSwitch-label .wfOnOffSwitch-switch{right:0 !important}#wordfenceConfigWarning,#wordfenceAdminEmailWarning{clear:left;margin-top:5px}.wf-striped-table{width:100%;max-width:100%;border-collapse:collapse}.wf-striped-table th,.wf-striped-table td{padding:6px 4px;border:1px solid #ccc}.wf-striped-table thead th,.wf-striped-table thead td,.wf-striped-table tfoot th,.wf-striped-table tfoot td,.wf-striped-table tbody.thead th,.wf-striped-table tbody.thead td{background-color:#222;color:#fff;font-weight:bold;border-color:#474747;text-align:left}.wf-striped-table tbody tr.even td,.wf-striped-table tbody tr:nth-child(2n) td{background-color:#eee}.wf-striped-table tbody tr td,.wf-striped-table tbody tr.odd td{background-color:#fff}.wf-striped-table tbody tr:hover>td{background-color:#fffbd8}.wf-striped-table tbody.empty-row tr td{border-width:0;padding:8px 0;background-color:transparent}.wf-striped-table td.error{color:#d0514c;font-weight:bold}.wf-striped-table td.error:before{content:"\2718"}.wf-striped-table td.success{color:#008c10;font-weight:bold;max-width:20%}.wf-striped-table td.success:before{content:"\2713"}.wf-striped-table td.success:before,.wf-striped-table td.error:before{font-size:16px;display:inline-block;margin:0px 8px 0px 0px}.wf-striped-table td.inactive{font-weight:bold;color:#666666}.wordfence-waiting{line-height:32px}.wordfence-waiting img{vertical-align:middle}pre.wf-pre{margin:8px 0 20px;padding:12px;background:#ffffff;border:1px solid #999999;overflow:auto}.wf-center{text-align:center}#wfConfigForm{max-width:1035px}.wf-hidden{display:none !important}.wf-card{position:relative;margin:0 auto .625rem;padding:1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-card .wf-card-inner{min-height:76px;width:100%;padding:8px;box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;position:relative}.wf-card .wf-card-inner .wf-card-content{max-width:75%}.wf-card .wf-card-inner .wf-card-content .wf-card-title{font-size:1.125rem;width:100%}.wf-card .wf-card-inner .wf-card-content .wf-card-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.875rem;color:#4f748e}.wf-card .wf-card-inner .wf-card-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-card .wf-card-inner .wf-card-action .wf-card-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-card .wf-card-inner .wf-card-action .wf-card-action-checkbox.checked{background-position:right center}.wf-card .wf-card-extra{display:none;padding:0.5rem;margin-top:1rem;border-top:1px solid #f3f6f8}@media (min-width: 768px){.wf-card .wf-card-extra{padding:1rem}}.wf-card.active .wf-card-extra{display:block}.wf-card.wf-card-left .wf-card-content{margin-left:48px}.wf-card.wf-card-left .wf-card-action{right:auto;left:0px}.wf-card.disabled .wf-card-content .wf-card-title{color:#aaaaaa}.wf-card.disabled .wf-card-content .wf-card-subtitle{color:#8ea6be}.wf-add-top{margin-top:20px !important}.wf-add-top-small{margin-top:10px !important}.wf-add-bottom{margin-bottom:20px !important}.wf-add-bottom-small{margin-bottom:10px !important}.wf-center{text-align:center}.wf-right{text-align:right}.wf-scroll-x::-webkit-scrollbar,.wf-scroll-y::-webkit-scrollbar{-webkit-appearance:none;width:7px;height:7px}.wf-scroll-x::-webkit-scrollbar-thumb,.wf-scroll-y::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(0,0,0,0.194);-webkit-box-shadow:0 0 1px rgba(255,255,255,0.5)}.wf-split-word{word-wrap:break-word;word-break:break-all}@media (max-width: 767px){.wf-split-word-xs{word-wrap:break-word;word-break:break-all;white-space:normal !important}}.select2-container{min-width:240px}@media (min-width: 768px){.select2-container{min-width:280px}}@media (min-width: 992px){.select2-container{min-width:320px}}.wf-page-title{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;margin-top:0.5rem}.wf-page-title>*{-webkit-flex-grow:0;flex-grow:0;min-width:0}.wf-page-title>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:32px;-webkit-flex-basis:32px;flex-basis:32px;padding-right:0.25rem}.wf-page-title .wordfence-icon32{margin:0;margin-right:0.5rem}.wf-page-title h2{padding:0 !important}.wf-page-title .wfOnOffSwitch{-webkit-flex-basis:69px;flex-basis:69px;-webkit-flex-shrink:0;flex-shrink:0;margin-left:0.5rem}#howGetIPs-preview{color:#8c8c8c}#howGetIPs-preview strong{color:#666}.wf-scrollTop{background:#424242;bottom:30px;right:15px;position:fixed;z-index:999;display:none}.wf-scrollTop a{background:#959595;display:block;padding:4px 5px;line-height:32px;width:32px;color:#ffffff;text-align:center}#wf-notices{margin-top:15px}#wf-notices .wf-admin-notice{margin-left:0px;margin-right:0px}.wf-success-text,.wf-notice-text{display:inline-block;vertical-align:middle;line-height:1.3;font-size:16px;font-weight:bold;font-style:italic}.wf-notice{margin:12px 0;padding:8px;background-color:#ffffe0;border:1px solid #ffd975;border-width:1px 1px 1px 10px}.wf-notice-text{color:#6d798c}.wf-success{margin:12px 0;padding:8px;background-color:#ffffff;border:1px solid #16bc9b;border-width:1px 1px 1px 10px}.wf-success-text{color:#11967a}.wf-premium-callout{border:1px solid #00709e;background-color:#ffffff;padding:16px;margin:20px 0 0}.wf-premium-callout h3{margin:0 0 8px;color:#11967a}.wf-premium-callout ul{margin:8px 0;padding:0 0 0 15px}.wf-premium-callout ul li{list-style-type:disc;margin:0;padding:0}.wf-premium-callout .center{text-align:center;margin:0}.wf-premium-callout .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}#wfLiveTrafficOverlayAnchor::after{position:absolute;z-index:3002;top:0;right:0;width:0;height:0;background:rgba(241,241,241,0.6);content:'';opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused #wfLiveTrafficOverlayAnchor::after{width:100%;height:100%;opacity:1;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wordfenceLiveActivityDisabled{background:#fff;border-left:4px solid #ffb900;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin-bottom:12px;padding:1px 13px}#wfLiveTrafficDisabledMessage{display:none;position:fixed;z-index:3003;left:0;width:100%;top:50%;transform:translateY(-50%);text-align:center;color:#666666;opacity:0;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}#wfLiveTrafficDisabledMessage h2{background-color:#FFF;overflow:hidden;border:1px solid #CCC;max-width:350px;margin:0 auto;padding:15px;font-size:2.0em}#wfLiveTrafficDisabledMessage h2 small{font-size:0.5em;font-weight:normal;margin-top:20px}.wordfenceLiveActivityPaused #wfLiveTrafficDisabledMessage{display:block;opacity:1;-webkit-transition:opacity 0.5s;transition:opacity 0.5s}.wf-live-activity{position:relative;margin:20px 0 10px 0;padding:0.75rem;box-sizing:border-box;background:#FFFCEF;box-shadow:0 0 0 1px rgba(153,155,135,0.5),0 1px 2px #e8f3e0}.wf-live-activity .wf-live-activity-inner{width:100%;box-sizing:border-box;position:relative}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:flex-start}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-title{color:#888888;font-size:0.85rem;font-weight:bold;padding-right:0.5rem}.wf-live-activity .wf-live-activity-inner .wf-live-activity-content .wf-live-activity-message{font-size:0.80rem;color:#000000}.wf-live-activity .wf-live-activity-inner .wf-live-activity-state{position:absolute;top:0px;right:0px;bottom:0px;left:0px;background:rgba(255,252,239,0.9);display:none;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:center;z-index:3001;-webkit-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;-o-transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s;transition:opacity 0.5s,width 0.1s 0.5s,height 0.1s 0.5s}.wordfenceLiveActivityPaused .wf-live-activity .wf-live-activity-inner .wf-live-activity-state{display:-ms-flexbox;display:flex;opacity:1;-webkit-transition:opacity 0.5s;-webkit-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}#wf-scan-failed{max-width:640px;margin:0 auto}.wordfence .wordfenceScanButton{margin:20px 0 20px 0}.wordfence .wordfenceScanButton input.button-wf-grey{background:#EFEFEF url(../images/button-grad-grey.png) repeat-x scroll left top;border-color:#EFEFEF}.wordfence .wordfenceScanButton table td{vertical-align:top}.wordfence .wordfenceScanButton .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709E;height:44px;line-height:44px;padding:0px 20px}table.wfSummaryParent{font-family:sans-serif;font-size:14px;color:#000;z-index:9}table.wfSummaryParent td{vertical-align:top;padding:0;margin:0}table.wfSummaryParent table.wfSummaryChild th{font-weight:bold;text-align:right;font-family:Georgia,Times New Roman,Times,serif;color:#000;padding:5px 10px 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSummaryChild td{font-weight:normal;text-align:left;padding:5px 0 5px 0;border-top:1px solid #CCC}table.wfSummaryParent table.wfSC1 td{width:300px;padding:0 25px 10px 0}table.wfSummaryParent table.wfSC2 th{width:80px}table.wfSummaryParent table.wfSC2 td{width:100px}table.wfSummaryParent table.wfSC3 th{width:80px}table.wfSummaryParent table.wfSC3 td{width:250px}table.wfSummaryParent th.wfHead{font-size:22px;font-family:Georgia,Times New Roman,Times,serif;font-style:italic;color:#555;font-weight:bold;text-align:left;padding:20px 0 20px 0;-webkit-font-smoothing:antialiased}.wf-issues-table{table-layout:fixed;width:100%}div.wfIssue{width:100%}div.wfIssue table.wfIssue td{padding:2px;margin:0;border-width:0;text-align:left;width:100%}div.wfIssue table.wfIssue th{padding:2px;margin:0;font-weight:bold;text-align:left;color:#777;white-space:nowrap}div.wfIssue table.wfIssueLinks td{border-width:0;text-align:left;padding-right:10px}div.wfIssue h2{margin:0 0 5px 0;padding:0;font-size:0.9rem}@media (min-width: 768px){div.wfIssue h2{font-size:1.05rem}}.wfIssueOptions{border-top:1px solid #CCC;padding:10px}.wfIssueOptions h3{font-size:0.8rem;margin:0}@media (min-width: 768px){.wfIssueOptions h3{display:inline-block}}.wfIssueOptions ul{margin-bottom:0;padding-left:0;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfIssueOptions ul{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}}.wfIssueOptions ul>li>a{position:relative;display:block;padding:8px 12px/2}.wfIssueOptions ul>li>a:hover,.wfIssueOptions ul>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wfIssueOptions a{margin-left:10px}.wfIssueOptions strong{float:left;display:block;width:60px}.wfIssueOptions p{margin:6px 0px 0px}.wfProbSev1,.wfProbSev2,.wfAjaxLight128,.wfResolved{width:128px;height:128px;border:0;margin:0 auto;background-repeat:no-repeat;background-position:0 0;text-decoration:none;display:block}.wfProbSev1{background-image:url(../images/icons/error128.png)}.wfProbSev2{background-image:url(../images/icons/warning128.png)}.wfResolved{background-image:url(../images/icons/tick128.png)}.wfIssuesContainer{width:100%;display:none}.wfIssuesContainer p{max-width:550px}.wfALogTime{color:#999}.wfALogMailLink,.wfALogViewLink{display:block;position:absolute;padding:0 0 0 18px;margin:0;right:10px;top:0;background-repeat:no-repeat;font-weight:normal}.wfALogMailLink{background-image:url(../images/icons/email_go.png)}.wfALogViewLink{background-image:url(../images/icons/magnifier.png)}#wfActivity{position:relative}.consoleHead{position:relative;padding:0 0 0 3px;font-weight:bold;width:100%}.consoleHeadText{margin-bottom:4px;font-size:18px;font-family:Georgia,Times New Roman,Times,serif;color:#555;font-weight:bold;-webkit-font-smoothing:antialiased}.consoleFooter{position:relative}.consoleOuter{width:100%}.consoleInner{height:116px;overflow:auto;z-index:1}.bevelDiv1{border:1px solid #EFEFEF}.bevelDiv2{border:1px solid #AAA}.bevelDiv3{background-color:#ffffed;padding:5px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}.wfSecure{color:#0A0;font-weight:bold}.wfSummaryLine{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfSummaryLine{-webkit-flex-direction:row;flex-direction:row}}.wfSummaryLine .wfSummaryDate{padding-left:3px}.wfSummaryLine .wfSummaryMsg{padding-left:3px;-webkit-flex-grow:1;flex-grow:1;min-width:0}.wfSummaryLoading{width:16px;height:11px;background-image:url("../images/icons/ajaxScan.gif")}.wfSummaryBad,.wfSummaryErr{color:#930000}.wfSummaryOK{color:#11967a}.wfSummaryIgnored{color:#a87302}.wfClear{content:".";display:block;height:0;width:0;line-height:0;clear:both;visibility:hidden}.wfSummaryFinal{-webkit-font-smoothing:antialiased;font-weight:bold;color:#555}.wfStartScanButton{text-align:center}.wordfenceScanHelp{border:1px solid #CCC;padding:4px}.wf-scan-no-issues{font-size:1.25rem;color:#11967a}.wf-scan-severity{position:relative;width:10px}@media (min-width: 768px){.wf-scan-severity{width:144px}}.wf-scan-severity-1,.wf-scan-severity-2{position:absolute;top:0px;right:0px;bottom:0px;left:0px}.wf-scan-severity-1{background-color:#c10000}.wf-scan-severity-2{background-color:#ffd10a}.scan-schedule{border-collapse:collapse;border-spacing:0}.scan-schedule tr:first-of-type th{padding-top:0}.scan-schedule td{padding:0}.scan-schedule th{padding:1.5rem 0.5rem 0.75rem 0;font-size:1rem;text-align:left}@media (min-width: 768px){.scan-schedule th{padding:0 0.5rem 0 0;font-size:0.8125rem;text-align:center}}.next-scan{font-size:1em;display:block;position:relative;width:7em;height:7em;background-color:#fff;border-radius:0.6em;box-shadow:0 1px 0 rgba(189,189,189,0.6);overflow:hidden}.next-scan *{display:block;width:100%;font-size:1em;font-weight:bold;font-style:normal;text-align:center}.next-scan strong{position:absolute;top:0;padding:0.4em 0;color:#fff;background-color:#00709E;box-shadow:0 2px 0 #00709E}.next-scan em{position:absolute;bottom:0.3em;color:#00709E}.next-scan span{width:100%;font-size:2.8em;padding-top:1.15em;color:#2f2f2f}.schedule-times-wrapper{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;margin-top:1rem}@media (min-width: 768px){.schedule-times-wrapper{margin-top:0.25rem}}.schedule-times-wrapper:first-of-type{margin-top:0}@media (min-width: 768px){.schedule-times-wrapper:first-of-type{margin-top:1rem}}.schedule-times-wrapper>*{-webkit-flex-grow:1;flex-grow:1;min-width:0}.schedule-times-wrapper>*:first-child{-webkit-flex-grow:0;flex-grow:0;min-width:initial;padding-right:0.25rem}.schedule-times{margin-bottom:0;margin-top:0;padding-left:0;list-style:none;clear:both}.schedule-times>li{float:left;position:relative;display:block;margin:0px 0px 2px 0px}.schedule-times>li.disabled>a{color:#777}.schedule-times>li.disabled>a:hover,.schedule-times>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.schedule-times>li>a{text-decoration:none;border:1px solid #e2e2e2;border-radius:4px;position:relative;display:block;padding:8px 12px}.schedule-times>li>a:hover,.schedule-times>li>a:focus{text-decoration:none;background-color:#e2e2e2}.schedule-times>li+li{margin-left:2px}.schedule-times>li.active>a,.schedule-times>li.active>a:hover,.schedule-times>li.active>a:focus{color:#fff;background-color:#00709e;border-color:#00709e}.schedule-times>li.text-only{position:relative;display:block;padding:8px 12px}.schedule-times>li>a>img{max-width:none}#wf-lt-listings .wfActEvent{padding-left:15px;border-left:5px solid #cccccc}#wf-lt-listings .wfActEvent.wfHuman{border-left:5px solid #16bc9b}#wf-lt-listings .wfActEvent.wfActionBlocked{border-left:5px solid #d03935}#wf-lt-listings .wfActEvent.wfNotice{border-left:5px solid #c10000}#wf-lt-listings .wfActEvent.wfWarning,#wf-lt-listings .wfActEvent.wf404{border-left:5px solid #ffd10a}#wf-lt-listings .wfActEvent:hover{background-color:#fff9e9 !important}.wfActEvent.wf-live-traffic-filter{padding-left:0;padding-right:0;display:-webkit-flex;display:flex;-webkit-align-items:baseline;align-items:baseline;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wfActEvent.wf-live-traffic-filter{-webkit-flex-direction:row;flex-direction:row}}.wfActEvent.wf-live-traffic-filter h2{margin:0;padding-bottom:0.5rem}@media (min-width: 768px){.wfActEvent.wf-live-traffic-filter h2{padding-bottom:0;padding-right:0.5rem}}#wf-lt-advanced-filters{padding-left:0;padding-right:0;overflow:hidden}.wf-live-traffic-filter-detail{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.wf-live-traffic-filter-detail{-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail *{-webkit-flex-grow:1;flex-grow:1}}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-remove{margin-left:0.5rem;font-size:1.5rem;color:#333}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0.25rem 0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:0.75rem !important}@media (min-width: 768px){.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters{-webkit-flex-direction:row;flex-direction:row;-webkit-align-items:center;align-items:center}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters div{padding:0}.wf-live-traffic-filter-detail .wf-live-traffic-filter-item .wf-live-traffic-filter-item-parameters select{font-size:1rem !important}}.wf-filtered-traffic{display:-webkit-flex;display:flex;-webkit-align-items:flex-start;align-items:flex-start;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:column;flex-direction:column}.wf-filtered-traffic>*{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-flex-direction:row;flex-direction:row;padding:10px 20px;border-bottom:1px solid #CCC;width:100%;box-sizing:border-box}.wf-filtered-traffic>*>*:first-child{-webkit-flex-grow:1;flex-grow:1}.wf-filtered-traffic .wf-filtered-traffic-hits{font-size:1.75rem;color:#999999;margin-top:10px}#wf-live-traffic{position:relative;overflow:visible}#wf-live-traffic-legend{white-space:nowrap;background-color:#fff;border:1px solid #cccccc;padding:12px}#wf-live-traffic-legend.sticky{position:fixed;top:10px;right:auto;left:10px;z-index:2000}@media (min-width: 768px){#wf-live-traffic-legend.sticky{top:42px;left:182px}}#wf-live-traffic-legend-placeholder{display:none;padding:12px}#wf-live-traffic-legend-placeholder.sticky{display:block}#wf-live-traffic-legend ul{margin:0;padding:0}#wf-live-traffic-legend ul:before,#wf-live-traffic-legend ul:after{content:" ";display:table}#wf-live-traffic-legend ul:after{clear:both}#wf-live-traffic-legend ul li{margin:0;padding:0;position:relative;float:left;font-size:11.5px}@media (min-width: 768px){#wf-live-traffic-legend ul li{font-size:13px}}#wf-live-traffic-legend ul li+li{margin-left:8px}#wf-live-traffic-legend ul li:before{content:'';display:block;float:left;margin:3px 6px 0 0;width:12px;height:12px;background-color:#CCCCCC}#wf-live-traffic-legend ul li.wfHuman:before{background-color:#16bc9b}#wf-live-traffic-legend ul li.wfNotice:before{background-color:#ffd10a}#wf-live-traffic-legend ul li.wfBlocked:before{background-color:#d03935}.wfTimeAgo{font-family:Georgia,Times New Roman,Times,serif;color:#999;font-weight:bold;font-style:italic}.wfActEvent{border-bottom:1px solid #CCC;padding:10px 20px;overflow:auto}.wf-pad-small{margin:8px 0}#wf-lt-listings{margin:0 0 0}#wf-lt-listings a{cursor:pointer;text-decoration:underline}#wf-lt-listings a.button,#wf-lt-listings a.wf-btn{text-decoration:none}.wfActionBlocked{background-color:#fff6f6}[class*="span"]{float:left;min-height:1px;margin-left:30px}.highlighted{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-moz-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-webkit-keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@keyframes highlighted{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#ffffff}}@-moz-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@-webkit-keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}@keyframes highlightedBlocked{0%{opacity:0;background-color:#ffeaa0}100%{opacity:1;background-color:#fff6f6}}.highlighted{-webkit-animation-name:highlighted;animation-name:highlighted}.highlighted.wfActionBlocked{-webkit-animation-name:highlightedBlocked;animation-name:highlightedBlocked}#wf-lt-preset-filters{min-width:250px}#wf-lt-advanced-filters>table{width:100%}#wf-lt-advanced-filters>table>tr>td{vertical-align:top}.wf-lt-url{white-space:nowrap}table.block-ranges-table{border-collapse:collapse;margin:10px 0 0}table.block-ranges-table tr td{border:1px solid #CCC;border-width:1px 0;padding:10px 0 12px 0}#input-wafStatus,#input-wafStatus option,.select2-container--default{font-size:0.9rem}@media (min-width: 768px){#input-wafStatus,#input-wafStatus option,.select2-container--default{font-size:1.0rem}}@media (min-width: 992px){#input-wafStatus,#input-wafStatus option,.select2-container--default{font-size:1.125rem}}.wafStatus-enabled,.wafStatus-learning-mode,.wafStatus-disabled,.wafStatus-enabled.select2-container--default .select2-selection--single .select2-selection__rendered,.wafStatus-learning-mode.select2-container--default .select2-selection--single .select2-selection__rendered,.wafStatus-disabled.select2-container--default .select2-selection--single .select2-selection__rendered{color:#ffffff}#waf-config-form .waf-config-label{font-size:1.3em}#waf-config-form .select2-container--default .select2-selection--single{padding:4px;text-shadow:0 0 3px #000000;font-weight:bold;border-radius:3px}#waf-config-form .select2-container .select2-selection--single{height:auto}.wafStatus-enabled.select2-container--default .select2-selection--single{background-color:#11967a;border-color:#073a2f}.wafStatus-learning-mode.select2-container--default .select2-selection--single{background-color:#ffd10a;border-color:#a38400}.wafStatus-disabled.select2-container--default .select2-selection--single,.wafStatus-disabled.select2-container--default.select2-container--disabled .select2-selection--single,.wafStatus-learning-mode.select2-container--default.select2-container--disabled .select2-selection--single,.wafStatus-enabled.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#c10000;border-color:#5b0000}#waf-config-form .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%;top:0}.wafStatus-enabled.select2-container--default .select2-selection--single .select2-selection__arrow b,.wafStatus-learning-mode.select2-container--default .select2-selection--single .select2-selection__arrow b,.wafStatus-disabled.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#ffffff transparent transparent}.wafStatus-enabled.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b,.wafStatus-learning-mode.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b,.wafStatus-disabled.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #ffffff}.wafStatus-description{display:none;max-width:500px;font-style:italic;font-size:14px;line-height:1.3}.whitelist-table-container{overflow-x:auto}table.whitelist-table .whitelist-edit{display:none}table.whitelist-table .edit-mode .whitelist-display{display:none}table.whitelist-table .edit-mode .whitelist-edit{display:block}table.whitelist-table .edit-mode span.whitelist-edit,table.whitelist-table .edit-mode input.whitelist-edit{display:inline}.wf-bulk-action{margin:12px 0}tr.wf-table-filters input{max-width:120px}#wordfenceRightRail img{max-width:100%}#wordfenceRightRail ul{list-style-type:none;margin:0;margin-top:15px}#wordfenceRightRail .center{text-align:center}#wordfenceRightRail .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wordfenceRightRail img{width:100%}.wordfenceRightRailLiveTraffic,.wordfenceRightRailOptions,.wordfenceRightRailDiagnostics{margin-left:1055px}.wordfenceRightRailBlockedIPs,.wordfenceRightRailWAF,.wordfenceRightRailCountryBlocking,.wordfenceRightRailScanSchedule{margin-left:950px}.wordfenceRightRail ul{list-style-type:none;margin:0}.wordfenceRightRail .center{text-align:center}.wordfenceRightRail .button-primary{text-align:center;text-transform:uppercase;font-weight:bold;background-color:#00709e}.wordfenceWrap.wordfence-community{min-height:760px}#wfTwoFactorQRCodeTable{width:175px;height:175px;margin:0 auto}@media (min-width: 500px){#wfTwoFactorQRCodeTable{width:256px;height:256px}}#wfTwoFactorRecoveryCodes{list-style-type:none}#wfTwoFactorRecoveryCodes li{font-family:monospace;text-align:center}#wfTwoFactorDownload .dashicons{line-height:26px}.wf-twofactor-delete{font-size:1.5rem}.wf-twofactor-delete a{text-decoration:none;color:#333}.wf-table.wf-table-twofactor>tbody>tr>td{vertical-align:middle}.wf-form-twofactor{max-width:400px}.wf-form-twofactor .wf-radio label{padding-left:0}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}label.wf-plain{font-weight:normal}label.wf-control-label.wf-disabled{pointer-events:none}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.wf-form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.wf-form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.wf-form-control::-moz-placeholder{color:#999;opacity:1}.wf-form-control:-ms-input-placeholder{color:#999}.wf-form-control::-webkit-input-placeholder{color:#999}.wf-form-control::-ms-expand{border:0;background-color:transparent}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{background-color:#e2e2e2;opacity:1}.wf-form-control[disabled],.wf-form-control[readonly],fieldset[disabled] .wf-form-control{cursor:not-allowed;pointer-events:none}textarea.wf-form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].wf-form-control,input[type="time"].wf-form-control,input[type="datetime-local"].wf-form-control,input[type="month"].wf-form-control{line-height:34px}input[type="date"].wf-input-sm,.wf-input-group-sm input[type="date"],input[type="time"].wf-input-sm,.wf-input-group-sm input[type="time"],input[type="datetime-local"].wf-input-sm,.wf-input-group-sm input[type="datetime-local"],input[type="month"].wf-input-sm,.wf-input-group-sm input[type="month"]{line-height:30px}input[type="date"].wf-input-lg,.wf-input-group-lg input[type="date"],input[type="time"].wf-input-lg,.wf-input-group-lg input[type="time"],input[type="datetime-local"].wf-input-lg,.wf-input-group-lg input[type="datetime-local"],input[type="month"].wf-input-lg,.wf-input-group-lg input[type="month"]{line-height:46px}}.wf-form-group{margin-bottom:8px}.wf-form-group.wf-sub-group label{color:#666666;font-weight:normal;padding-left:20px}.wf-form-group.wf-focus{border-left:4px solid #11967a;padding-bottom:8px;background-color:#e5e5e5}.wf-form-group.wf-focus label{margin-left:-4px}.wf-radio,.wf-checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.wf-radio label,.wf-checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.wf-radio input[type="radio"],.wf-radio-inline input[type="radio"],.wf-checkbox input[type="checkbox"],.wf-checkbox-inline input[type="checkbox"]{margin-top:4px \9}.wf-radio-offset{padding-left:29px}@media (min-width: 768px){.wf-radio-offset{padding-left:20px}}.wf-radio+.wf-radio,.wf-checkbox+.wf-checkbox{margin-top:-5px}.wf-radio-inline,.wf-checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.wf-radio-inline+.wf-radio-inline,.wf-checkbox-inline+.wf-checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"][readonly],input[type="radio"].wf-disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"][readonly],input[type="checkbox"].wf-disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed;pointer-events:none}.wf-radio-inline.wf-disabled,fieldset[disabled] .wf-radio-inline,.wf-checkbox-inline.wf-disabled,fieldset[disabled] .wf-checkbox-inline{cursor:not-allowed}.wf-radio.wf-disabled label,fieldset[disabled] .wf-radio label,.wf-checkbox.wf-disabled label,fieldset[disabled] .wf-checkbox label{cursor:not-allowed;pointer-events:none}.wf-form-control-static{padding-top:7px;padding-bottom:7px;margin:0;line-height:1}.wf-form-control-static.wf-input-lg,.wf-form-control-static.wf-input-sm{padding-left:0;padding-right:0}.wf-input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.wf-input-sm{height:30px;line-height:30px}textarea.wf-input-sm,select[multiple].wf-input-sm{height:auto}.wf-form-group-sm .wf-form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.wf-form-group-sm select.wf-form-control{height:30px;line-height:30px}.wf-form-group-sm textarea.wf-form-control,.wf-form-group-sm select[multiple].wf-form-control{height:auto}.wf-form-group-sm .wf-form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.wf-input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.wf-input-lg{height:46px;line-height:46px}textarea.wf-input-lg,select[multiple].wf-input-lg{height:auto}.wf-form-group-lg .wf-form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.wf-form-group-lg select.wf-form-control{height:46px;line-height:46px}.wf-form-group-lg textarea.wf-form-control,.wf-form-group-lg select[multiple].wf-form-control{height:auto}.wf-form-group-lg .wf-form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.wf-has-feedback{position:relative}.wf-has-feedback .wf-form-control{padding-right:42.5px}.wf-form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.wf-input-lg+.wf-form-control-feedback,.wf-input-group-lg+.wf-form-control-feedback,.wf-form-group-lg .wf-form-control+.wf-form-control-feedback{width:46px;height:46px;line-height:46px}.wf-input-sm+.wf-form-control-feedback,.wf-input-group-sm+.wf-form-control-feedback,.wf-form-group-sm .wf-form-control+.wf-form-control-feedback{width:30px;height:30px;line-height:30px}.wf-has-success .wf-help-block,.wf-has-success .wf-control-label,.wf-has-success .wf-radio,.wf-has-success .wf-checkbox,.wf-has-success .wf-radio-inline,.wf-has-success .wf-checkbox-inline,.wf-has-success.wf-radio label,.wf-has-success.wf-checkbox label,.wf-has-success.wf-radio-inline label,.wf-has-success.wf-checkbox-inline label{color:#3c763d}.wf-has-success .wf-form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-success .wf-form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.wf-has-success .wf-input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.wf-has-success .wf-form-control-feedback{color:#3c763d}.wf-has-warning .wf-help-block,.wf-has-warning .wf-control-label,.wf-has-warning .wf-radio,.wf-has-warning .wf-checkbox,.wf-has-warning .wf-radio-inline,.wf-has-warning .wf-checkbox-inline,.wf-has-warning.wf-radio label,.wf-has-warning.wf-checkbox label,.wf-has-warning.wf-radio-inline label,.wf-has-warning.wf-checkbox-inline label{color:#8a6d3b}.wf-has-warning .wf-form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-warning .wf-form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.wf-has-warning .wf-input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.wf-has-warning .wf-form-control-feedback{color:#8a6d3b}.wf-has-error .wf-help-block,.wf-has-error .wf-control-label,.wf-has-error .wf-radio,.wf-has-error .wf-checkbox,.wf-has-error .wf-radio-inline,.wf-has-error .wf-checkbox-inline,.wf-has-error.wf-radio label,.wf-has-error.wf-checkbox label,.wf-has-error.wf-radio-inline label,.wf-has-error.wf-checkbox-inline label{color:#a94442}.wf-has-error .wf-form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.wf-has-error .wf-form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.wf-has-error .wf-input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.wf-has-error .wf-form-control-feedback{color:#a94442}.wf-has-feedback label ~ .wf-form-control-feedback{top:25px}.wf-has-feedback label.wf-sr-only ~ .wf-form-control-feedback{top:0}.wf-help-block{display:block;margin-top:5px;color:#737373}@media (min-width: 768px){.wf-form-inline .wf-form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-form-control{display:inline-block;width:auto;vertical-align:middle}.wf-form-inline .wf-form-control-static{display:inline-block}.wf-form-inline .wf-input-group{display:inline-table;vertical-align:middle}.wf-form-inline .wf-input-group .wf-input-group-addon,.wf-form-inline .wf-input-group .wf-input-group-btn,.wf-form-inline .wf-input-group .wf-form-control{width:auto}.wf-form-inline .wf-input-group>.wf-form-control{width:100%}.wf-form-inline .wf-control-label{margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio,.wf-form-inline .wf-checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.wf-form-inline .wf-radio label,.wf-form-inline .wf-checkbox label{padding-left:0}.wf-form-inline .wf-radio input[type="radio"],.wf-form-inline .wf-checkbox input[type="checkbox"]{position:relative;margin-left:0}.wf-form-inline .wf-has-feedback .wf-form-control-feedback{top:0}}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox,.wf-form-horizontal .wf-radio-inline,.wf-form-horizontal .wf-checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.wf-form-horizontal .wf-radio,.wf-form-horizontal .wf-checkbox{min-height:27px}.wf-form-horizontal .wf-form-group{margin-left:-15px;margin-right:-15px}.wf-form-horizontal .wf-form-group:before,.wf-form-horizontal .wf-form-group:after{content:" ";display:table}.wf-form-horizontal .wf-form-group:after{clear:both}@media (min-width: 768px){.wf-form-horizontal .wf-control-label{text-align:right;margin-bottom:0;padding-top:7px}}.wf-form-horizontal .wf-has-feedback .wf-form-control-feedback{right:15px}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-lg .wf-control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.wf-form-horizontal .wf-form-group-sm .wf-control-label{padding-top:6px;font-size:12px}}.wf-dashboard-item{position:relative;margin:0 auto 1rem;padding:0 1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #e9eff3}.wf-dashboard-item .wf-dashboard-item-inner{min-height:44px;padding:1rem 0;width:100%;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;position:relative}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content{max-width:75%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-title{font-size:0.75rem;width:100%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-subtitle{margin-top:.125rem;margin-bottom:.125rem;font-size:.575rem;color:#4f748e}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action{position:absolute;top:0;right:0;height:100%;background:none;border:0;outline:0;width:48px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;vertical-align:middle;transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.2s ease-in}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text{width:auto}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-success{color:#11967a}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action.wf-dashboard-item-action-text.wf-dashboard-item-action-text-warning a{color:#930000}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-chevron{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJjaGV2cm9uLW9iamVjdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIKCSB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggaWQ9ImNoZXZyb24iIGQ9Ik0yMCA5bC04IDgtOC04IDEuNDE0LTEuNDE0TDEyIDE0LjE3Mmw2LjU4Ni02LjU4NiIvPgo8L3N2Zz4K");background-repeat:no-repeat;background-position:center center;width:24px;height:24px;fill:#87a6bc}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox{background-image:url(../images/checkbox.png);background-repeat:no-repeat;background-position:left center;width:29px;height:29px}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-action .wf-dashboard-item-action-checkbox.checked{background-position:right center}.wf-dashboard-item .wf-dashboard-item-extra{display:none;margin:0 -1rem;padding:0 1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list{margin:0 -1rem;padding:0;list-style:none}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd){background-color:#f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification{border-left:4px solid #f9f9f9}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(odd).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even){background-color:#ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification{border-left:4px solid #ffffff}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-warning{border-left:4px solid #fcb214}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-striped>li:nth-of-type(even).wf-notification.wf-notification-critical{border-left:4px solid #930000}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li{display:block;min-height:44px;padding:0 1rem;margin:0;border-top:1px solid #eeeeee;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal{box-sizing:border-box;margin-top:-1px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-align-content:flex-start;align-content:flex-start;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:1px solid #eeeeee}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:50%;flex-basis:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li{-webkit-flex-basis:25%;flex-basis:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>*:first-child{border-left:0}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:50%}}@media (min-width: 992px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li{max-width:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:center}@media (min-width: 1200px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state{text-align:left}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-enabled .fa{color:#11967a}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-disabled .fa{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state-premium{color:#9f9fa0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss{padding-left:2rem;font-size:1.25rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss a{color:#525355}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count{box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;flex-direction:column}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-count{font-size:3rem;line-height:3rem;color:#9f9fa0;padding:1rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 1rem 1rem}.wf-dashboard-item.active .wf-dashboard-item-extra{display:block}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-content{margin-left:48px}.wf-dashboard-item.wf-dashboard-item-left .wf-dashboard-item-action{right:auto;left:0px}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-title{color:#aaaaaa}.wf-dashboard-item.disabled .wf-dashboard-item-content .wf-dashboard-item-subtitle{color:#8ea6be}.wf-notifications-empty{font-size:0.9rem;color:#9f9fa0}.wf-dashboard-graph-wrapper{width:100%}.wf-dashboard-badge{display:inline-block;min-width:10px;padding:3px 7px;margin-left:0.5rem;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#fcb214;border-radius:10px}.wf-dashboard-badge:empty{display:none}.wf-btn .wf-dashboard-badge{position:relative;top:-1px}.wf-btn-xs .wf-dashboard-badge,.wf-btn-group-xs>.wf-btn .wf-dashboard-badge{top:0;padding:1px 5px}.wf-list-group-item.active>.wf-dashboard-badge,.wf-nav-pills>.active>a>.wf-dashboard-badge{color:#00709e;background-color:#fff}.wf-list-group-item>.wf-dashboard-badge{float:right}.wf-list-group-item>.wf-dashboard-badge+.wf-dashboard-badge{margin-right:5px}.wf-nav-pills>li>a>.wf-dashboard-badge{margin-left:3px}.wf-dashboard-toggle-btns{text-align:center}.wf-dashboard-toggle-btns .wf-pagination{margin:1rem 1rem 0.5rem 1rem}.wf-dashboard-show-more{position:relative;font-size:14px;color:#959595;text-align:center;line-height:1rem;background:#ffffff;width:60%;margin:20px auto 0 auto}.wf-dashboard-show-more:before{display:inline-block;content:"";position:absolute;height:1px;background:#dddddd;top:50%;width:100%;left:0;right:0}.wf-dashboard-show-more a{display:inline-block;position:relative;padding:0 10px;background-color:#ffffff}.wf-ips,.wf-recent-logins,.wf-countries{max-height:30rem;overflow-y:hidden;margin-bottom:20px}.wf-ips .wf-table,.wf-recent-logins .wf-table,.wf-countries .wf-table{margin-bottom:0}.wf-dashboard-last-updated{font-style:italic;font-size:0.6rem;text-align:center;padding-bottom:1rem;margin:0}table.wf-table{background-color:transparent;border-collapse:collapse;border-spacing:0}table.wf-table td,table.wf-table th{padding:0}.wf-table caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.wf-table th{text-align:left}.wf-table{width:100%;max-width:100%;margin-bottom:20px}.wf-table>thead>tr>th,.wf-table>thead>tr>td,.wf-table>tbody>tr>th,.wf-table>tbody>tr>td,.wf-table>tfoot>tr>th,.wf-table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.wf-table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.wf-table>caption+thead>tr:first-child>th,.wf-table>caption+thead>tr:first-child>td,.wf-table>colgroup+thead>tr:first-child>th,.wf-table>colgroup+thead>tr:first-child>td,.wf-table>thead:first-child>tr:first-child>th,.wf-table>thead:first-child>tr:first-child>td{border-top:0}.wf-table>tbody+tbody{border-top:2px solid #ddd}.wf-table .wf-table{background-color:#fff}.wf-table-condensed>thead>tr>th,.wf-table-condensed>thead>tr>td,.wf-table-condensed>tbody>tr>th,.wf-table-condensed>tbody>tr>td,.wf-table-condensed>tfoot>tr>th,.wf-table-condensed>tfoot>tr>td{padding:5px}.wf-table-bordered{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td,.wf-table-bordered>tbody>tr>th,.wf-table-bordered>tbody>tr>td,.wf-table-bordered>tfoot>tr>th,.wf-table-bordered>tfoot>tr>td{border:1px solid #ddd}.wf-table-bordered>thead>tr>th,.wf-table-bordered>thead>tr>td{border-bottom-width:2px}.wf-table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.wf-table-hover>tbody>tr:hover{background-color:#f5f5f5}table.wf-table col[class*="col-"]{position:static;float:none;display:table-column}table.wf-table td[class*="col-"],table.wf-table th[class*="col-"]{position:static;float:none;display:table-cell}.wf-table>thead>tr>td.active,.wf-table>thead>tr>th.active,.wf-table>thead>tr.active>td,.wf-table>thead>tr.active>th,.wf-table>tbody>tr>td.active,.wf-table>tbody>tr>th.active,.wf-table>tbody>tr.active>td,.wf-table>tbody>tr.active>th,.wf-table>tfoot>tr>td.active,.wf-table>tfoot>tr>th.active,.wf-table>tfoot>tr.active>td,.wf-table>tfoot>tr.active>th{background-color:#f5f5f5}.wf-table-hover>tbody>tr>td.active:hover,.wf-table-hover>tbody>tr>th.active:hover,.wf-table-hover>tbody>tr.active:hover>td,.wf-table-hover>tbody>tr:hover>.active,.wf-table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.wf-table>thead>tr>td.success,.wf-table>thead>tr>th.success,.wf-table>thead>tr.success>td,.wf-table>thead>tr.success>th,.wf-table>tbody>tr>td.success,.wf-table>tbody>tr>th.success,.wf-table>tbody>tr.success>td,.wf-table>tbody>tr.success>th,.wf-table>tfoot>tr>td.success,.wf-table>tfoot>tr>th.success,.wf-table>tfoot>tr.success>td,.wf-table>tfoot>tr.success>th{background-color:#dff0d8}.wf-table-hover>tbody>tr>td.success:hover,.wf-table-hover>tbody>tr>th.success:hover,.wf-table-hover>tbody>tr.success:hover>td,.wf-table-hover>tbody>tr:hover>.success,.wf-table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.wf-table>thead>tr>td.info,.wf-table>thead>tr>th.info,.wf-table>thead>tr.info>td,.wf-table>thead>tr.info>th,.wf-table>tbody>tr>td.info,.wf-table>tbody>tr>th.info,.wf-table>tbody>tr.info>td,.wf-table>tbody>tr.info>th,.wf-table>tfoot>tr>td.info,.wf-table>tfoot>tr>th.info,.wf-table>tfoot>tr.info>td,.wf-table>tfoot>tr.info>th{background-color:#d9edf7}.wf-table-hover>tbody>tr>td.info:hover,.wf-table-hover>tbody>tr>th.info:hover,.wf-table-hover>tbody>tr.info:hover>td,.wf-table-hover>tbody>tr:hover>.info,.wf-table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.wf-table>thead>tr>td.warning,.wf-table>thead>tr>th.warning,.wf-table>thead>tr.warning>td,.wf-table>thead>tr.warning>th,.wf-table>tbody>tr>td.warning,.wf-table>tbody>tr>th.warning,.wf-table>tbody>tr.warning>td,.wf-table>tbody>tr.warning>th,.wf-table>tfoot>tr>td.warning,.wf-table>tfoot>tr>th.warning,.wf-table>tfoot>tr.warning>td,.wf-table>tfoot>tr.warning>th{background-color:#fcf8e3}.wf-table-hover>tbody>tr>td.warning:hover,.wf-table-hover>tbody>tr>th.warning:hover,.wf-table-hover>tbody>tr.warning:hover>td,.wf-table-hover>tbody>tr:hover>.warning,.wf-table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.wf-table>thead>tr>td.danger,.wf-table>thead>tr>th.danger,.wf-table>thead>tr.danger>td,.wf-table>thead>tr.danger>th,.wf-table>tbody>tr>td.danger,.wf-table>tbody>tr>th.danger,.wf-table>tbody>tr.danger>td,.wf-table>tbody>tr.danger>th,.wf-table>tfoot>tr>td.danger,.wf-table>tfoot>tr>th.danger,.wf-table>tfoot>tr.danger>td,.wf-table>tfoot>tr.danger>th{background-color:#f2dede}.wf-table-hover>tbody>tr>td.danger:hover,.wf-table-hover>tbody>tr>th.danger:hover,.wf-table-hover>tbody>tr.danger:hover>td,.wf-table-hover>tbody>tr:hover>.danger,.wf-table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.wf-table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.wf-table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.wf-table-responsive>.wf-table{margin-bottom:0}.wf-table-responsive>.wf-table>thead>tr>th,.wf-table-responsive>.wf-table>thead>tr>td,.wf-table-responsive>.wf-table>tbody>tr>th,.wf-table-responsive>.wf-table>tbody>tr>td,.wf-table-responsive>.wf-table>tfoot>tr>th,.wf-table-responsive>.wf-table>tfoot>tr>td{white-space:nowrap}.wf-table-responsive>.wf-table-bordered{border:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:first-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:first-child{border-left:0}.wf-table-responsive>.wf-table-bordered>thead>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>thead>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tbody>tr>td:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>th:last-child,.wf-table-responsive>.wf-table-bordered>tfoot>tr>td:last-child{border-right:0}.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tbody>tr:last-child>td,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>th,.wf-table-responsive>.wf-table-bordered>tfoot>tr:last-child>td{border-bottom:0}}.wf-nav{margin-bottom:0;padding-left:0;list-style:none}.wf-nav:before,.wf-nav:after{content:" ";display:table}.wf-nav:after{clear:both}.wf-nav>li{position:relative;display:block}.wf-nav>li>a{position:relative;display:block;padding:8px 12px}.wf-nav>li>a:hover,.wf-nav>li>a:focus{text-decoration:none;background-color:#e2e2e2}.wf-nav>li.wf-disabled>a{color:#777}.wf-nav>li.wf-disabled>a:hover,.wf-nav>li.wf-disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wf-nav .wf-open>a,.wf-nav .wf-open>a:hover,.wf-nav .wf-open>a:focus{background-color:#e2e2e2;border-color:#00709e}.wf-nav>li>a>img{max-width:none}.wf-nav-tabs{border-bottom:1px solid #ddd}.wf-nav-tabs>li{float:left;margin-bottom:-1px}.wf-nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.wf-nav-tabs>li>a:hover{border-color:#e2e2e2 #e2e2e2 #ddd}.wf-nav-tabs>li.wf-active>a,.wf-nav-tabs>li.wf-active>a:hover,.wf-nav-tabs>li.wf-active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.wf-nav-pills>li{float:left}.wf-nav-pills>li>a{border-radius:4px}.wf-nav-pills>li+li{margin-left:2px}.wf-nav-pills>li.wf-active>a,.wf-nav-pills>li.wf-active>a:hover,.wf-nav-pills>li.wf-active>a:focus{color:#fff;background-color:#00709e}.wf-nav-stacked>li{float:none}.wf-nav-stacked>li+li{margin-top:2px;margin-left:0}.wf-nav-justified,.wf-nav-tabs.wf-nav-justified{width:100%}.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{float:none}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{text-align:center;margin-bottom:5px}.wf-nav-justified>.wf-dropdown .wf-dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.wf-nav-justified>li,.wf-nav-tabs.wf-nav-justified>li{display:table-cell;width:1%}.wf-nav-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-bottom:0}}.wf-nav-tabs-justified,.wf-nav-tabs.wf-nav-justified{border-bottom:0}.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{margin-right:0;border-radius:4px}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.wf-nav-tabs-justified>li>a,.wf-nav-tabs.wf-nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.wf-nav-tabs-justified>.wf-active>a,.wf-nav-tabs.wf-nav-justified>.wf-active>a,.wf-nav-tabs-justified>.wf-active>a:hover,.wf-nav-tabs.wf-nav-justified>.wf-active>a:hover,.wf-nav-tabs-justified>.wf-active>a:focus,.wf-nav-tabs.wf-nav-justified>.wf-active>a:focus{border-bottom-color:#fff}}.wf-tab-content>.wf-tab-pane{display:none}.wf-tab-content>.wf-active{display:block}.wf-nav-tabs .wf-dropdown-menu{margin-top:-1px;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0}.wf-navbar-brand{float:left;padding:12px 8px;font-size:18px;line-height:20px;margin:10px 0 0 0}.wf-navbar-brand:hover,.wf-navbar-brand:focus{text-decoration:none}.wf-navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .wf-navbar-brand,.navbar>.container-fluid .wf-navbar-brand{margin-left:-8px}}.wf-caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.wf-dropup,.wf-dropdown{position:relative}.wf-dropdown-toggle:focus{outline:0}.wf-dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.wf-dropdown-menu .wf-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.wf-dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;text-decoration:none;white-space:nowrap}.wf-dropdown-menu>li>a:hover,.wf-dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.wf-dropdown-menu>.wf-active>a,.wf-dropdown-menu>.wf-active>a:hover,.wf-dropdown-menu>.wf-active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#00709e}.wf-dropdown-menu>.wf-disabled>a,.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{color:#777}.wf-dropdown-menu>.wf-disabled>a:hover,.wf-dropdown-menu>.wf-disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.wf-open>.wf-dropdown-menu{display:block}.wf-open>a{outline:0}.wf-dropdown-menu-right{left:auto;right:0}.wf-dropdown-menu-left{left:0;right:auto}.wf-dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.wf-dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.wf-pull-right>.wf-dropdown-menu{right:0;left:auto}.wf-dropup .wf-caret,.wf-navbar-fixed-bottom .wf-dropdown .wf-caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.wf-dropup .wf-dropdown-menu,.wf-navbar-fixed-bottom .wf-dropdown .wf-dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.wf-navbar-right .wf-dropdown-menu{right:0;left:auto}.wf-navbar-right .wf-dropdown-menu-left{left:0;right:auto}}.wf-mobile-dropdown{border:1px solid #ccc;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;margin:10px 10px 0 0;background:#f1f1f1;color:#000;font-weight:600;text-decoration:none}.wf-blocked-countries{margin-bottom:0;margin-top:0;padding-left:0;list-style:none;margin-left:-6px;display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wf-blocked-countries>li{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;margin:0px 0px 2px 6px;text-align:center;border:1px solid #e2e2e2;border-radius:4px;padding:8px 12px;background-color:#ffffff;-webkit-flex-basis:38%;flex-basis:38%}@media (min-width: 768px){.wf-blocked-countries>li{-webkit-flex-basis:20%;flex-basis:20%}}@media (min-width: 992px){.wf-blocked-countries>li{-webkit-flex-basis:15%;flex-basis:15%}}@media (min-width: 1200px){.wf-blocked-countries>li{-webkit-flex-basis:10%;flex-basis:10%}}.wf-blocked-countries>li:hover,.wf-blocked-countries>li:focus{text-decoration:none;background-color:#e2e2e2}.wf-blocked-countries>li.disabled>a{color:#777}.wf-blocked-countries>li.disabled>a:hover,.wf-blocked-countries>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.wf-blocked-countries>li>a{text-decoration:none;position:relative;display:block}.wf-blocked-countries>li.active,.wf-blocked-countries>li.active:hover,.wf-blocked-countries>li.active:focus{background-color:#00709e;border-color:#00709e}.wf-blocked-countries>li.active>a,.wf-blocked-countries>li.active:hover>a,.wf-blocked-countries>li.active:focus>a{color:#fff}.wf-blocked-countries>li.text-only{position:relative;display:block;padding:8px 12px}.wf-blocked-countries>li>a>img{max-width:none}.wf-blocked-countries-section{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-title{font-size:1.1rem;padding-right:0.5rem}.wf-blocked-countries-section-spacer{-webkit-flex-basis:30px;flex-basis:30px;height:1px;background:#aaa}.wf-blocked-countries-section-options{margin-bottom:0;margin-top:0;padding-left:0.5rem;list-style:none;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.wf-blocked-countries-section-options li{padding:0;margin:0;color:#777}.wf-blocked-countries-section-options li a{padding:2px 4px;text-decoration:none;color:#777}.wf-blocked-countries-section-options li a.active-section{background-color:#777;color:#e2e2e2}table.wf-dataTable{width:auto;max-width:800px;clear:both;border-collapse:collapse;border-spacing:0}table.wf-dataTable>thead th,table.wf-dataTable>tfoot th{font-weight:bold}table.wf-dataTable>thead th,table.wf-dataTable>thead td{cursor:pointer;text-align:left;font-size:11px;border:1px solid #ccc;padding:8px 4px 5px 9px;text-transform:uppercase}table.wf-dataTable>thead th:active,table.wf-dataTable>thead td:active{outline:none}table.wf-dataTable>tfoot th,table.wf-dataTable>tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc{cursor:pointer;*cursor:hand}table.wf-dataTable>thead .sorting,table.wf-dataTable>thead .sorting_asc,table.wf-dataTable>thead .sorting_desc,table.wf-dataTable>thead .sorting_asc_disabled,table.wf-dataTable>thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.wf-dataTable>thead .sorting{background-image:url(../images/sort_both.png)}table.wf-dataTable>thead .sorting_asc{background-image:url(../images/sort_asc.png)}table.wf-dataTable>thead .sorting_desc{background-image:url(../images/sort_desc.png)}table.wf-dataTable>thead .sorting_asc_disabled{background-image:url(../images/sort_asc_disabled.png)}table.wf-dataTable>thead .sorting_desc_disabled{background-image:url(../images/sort_desc_disabled.png)}table.wf-dataTable>tbody>tr{background-color:#ffffff}table.wf-dataTable>tbody>tr.selected{background-color:#B0BED9}table.wf-dataTable>tbody>tr>th,table.wf-dataTable>tbody>tr>td{padding:5px 8px}table.wf-dataTable.row-border>tbody>tr>th,table.wf-dataTable.row-border>tbody>tr>td,table.wf-dataTable.display>tbody>tr>th,table.wf-dataTable.display>tbody>tr>td{border:1px solid #cccccc}table.wf-dataTable.row-border>tbody>tr:first-child>th,table.wf-dataTable.row-border>tbody>tr:first-child>td,table.wf-dataTable.display>tbody>tr:first-child>th,table.wf-dataTable.display>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.cell-border>tbody>tr>th,table.wf-dataTable.cell-border>tbody>tr>td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr>th:first-child,table.wf-dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid #ddd}table.wf-dataTable.cell-border>tbody>tr:first-child>th,table.wf-dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.wf-dataTable.stripe>tbody>tr.odd,table.wf-dataTable.display>tbody>tr.odd{background-color:#f9f9f9}table.wf-dataTable.stripe>tbody>tr.odd.selected,table.wf-dataTable.display>tbody>tr.odd.selected{background-color:#acbad4}table.wf-dataTable.hover>tbody>tr:hover,table.wf-dataTable.display>tbody>tr:hover{background-color:#f6f6f6}table.wf-dataTable.hover>tbody>tr:hover.selected,table.wf-dataTable.display>tbody>tr:hover.selected{background-color:#aab7d1}table.wf-dataTable.order-column>tbody>tr>.sorting_1,table.wf-dataTable.order-column>tbody>tr>.sorting_2,table.wf-dataTable.order-column>tbody>tr>.sorting_3,table.wf-dataTable.display tbody>tr>.sorting_1,table.wf-dataTable.display>tbody>tr>.sorting_2,table.wf-dataTable.display>tbody>tr>.sorting_3{background-color:#fafafa}table.wf-dataTable.order-column>tbody>tr.selected>.sorting_1,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_2,table.wf-dataTable.order-column>tbody>tr.selected>.sorting_3,table.wf-dataTable.display>tbody>tr.selected>.sorting_1,table.wf-dataTable.display>tbody>tr.selected>.sorting_2,table.wf-dataTable.display>tbody>tr.selected>.sorting_3{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.odd>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{background-color:#f1f1f1}table.wf-dataTable.display>tbody>tr.odd>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{background-color:#f3f3f3}table.wf-dataTable.display>tbody>tr.odd>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{background-color:whitesmoke}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.wf-dataTable.display>tbody>tr.odd.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.wf-dataTable.display>tbody>tr.even>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_1{background-color:#fafafa}table.wf-dataTable.display>tbody>tr.even>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_2{background-color:#fcfcfc}table.wf-dataTable.display>tbody>tr.even>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even>.sorting_3{background-color:#fefefe}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_1,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_2,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.wf-dataTable.display>tbody>tr.even.selected>.sorting_3,table.wf-dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.wf-dataTable.display>tbody>tr:hover>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_1{background-color:#eaeaea}table.wf-dataTable.display>tbody>tr:hover>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_2{background-color:#ececec}table.wf-dataTable.display>tbody>tr:hover>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover>.sorting_3{background-color:#efefef}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_1,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_1{background-color:#a2aec7}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_2,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.wf-dataTable.display>tbody>tr:hover.selected>.sorting_3,table.wf-dataTable.order-column.hover>tbody>tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.wf-dataTable.no-footer{border-bottom:1px solid #111}table.wf-dataTable.nowrap th,table.wf-dataTable.nowrap td{white-space:nowrap}table.wf-dataTable.compact thead th,table.wf-dataTable.compact thead td{padding:4px 17px 4px 4px}table.wf-dataTable.compact tfoot th,table.wf-dataTable.compact tfoot td{padding:4px}table.wf-dataTable.compact>tbody>tr>th,table.wf-dataTable.compact>tbody>tr>td{padding:4px}table.wf-dataTable th.dt-left,table.wf-dataTable td.dt-left{text-align:left}table.wf-dataTable th.dt-center,table.wf-dataTable td.dt-center,table.wf-dataTable td.dataTables_empty{text-align:center}table.wf-dataTable th.dt-right,table.wf-dataTable td.dt-right{text-align:right}table.wf-dataTable th.dt-justify,table.wf-dataTable td.dt-justify{text-align:justify}table.wf-dataTable th.dt-nowrap,table.wf-dataTable td.dt-nowrap{white-space:nowrap}table.wf-dataTable thead th.dt-head-left,table.wf-dataTable thead td.dt-head-left,table.wf-dataTable tfoot th.dt-head-left,table.wf-dataTable tfoot td.dt-head-left{text-align:left}table.wf-dataTable thead th.dt-head-center,table.wf-dataTable thead td.dt-head-center,table.wf-dataTable tfoot th.dt-head-center,table.wf-dataTable tfoot td.dt-head-center{text-align:center}table.wf-dataTable thead th.dt-head-right,table.wf-dataTable thead td.dt-head-right,table.wf-dataTable tfoot th.dt-head-right,table.wf-dataTable tfoot td.dt-head-right{text-align:right}table.wf-dataTable thead th.dt-head-justify,table.wf-dataTable thead td.dt-head-justify,table.wf-dataTable tfoot th.dt-head-justify,table.wf-dataTable tfoot td.dt-head-justify{text-align:justify}table.wf-dataTable thead th.dt-head-nowrap,table.wf-dataTable thead td.dt-head-nowrap,table.wf-dataTable tfoot th.dt-head-nowrap,table.wf-dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.wf-dataTable>tbody>tr>th.dt-body-left,table.wf-dataTable>tbody>tr>td.dt-body-left{text-align:left}table.wf-dataTable>tbody>tr>th.dt-body-center,table.wf-dataTable>tbody>tr>td.dt-body-center{text-align:center}table.wf-dataTable>tbody>tr>th.dt-body-right,table.wf-dataTable>tbody>tr>td.dt-body-right{text-align:right}table.wf-dataTable>tbody>tr>th.dt-body-justify,table.wf-dataTable>tbody>tr>td.dt-body-justify{text-align:justify}table.wf-dataTable>tbody>tr>th.dt-body-nowrap,table.wf-dataTable>tbody>tr>td.dt-body-nowrap{white-space:nowrap}table.wf-dataTable table.dataTable,table.wf-dataTable th,table.wf-dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.wf-dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.wf-dataTables_wrapper .dataTables_length{float:left}.wf-dataTables_wrapper .dataTables_filter{float:right;text-align:right}.wf-dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.wf-dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.wf-dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.wf-dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #ffffff 0%,#dcdcdc 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.wf-dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%,#111111 100%)}.wf-dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.wf-dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.wf-dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter,.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_processing,.wf-dataTables_wrapper .dataTables_paginate{color:#333}.wf-dataTables_wrapper .dataTables_scroll{clear:both}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.wf-dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.wf-dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.wf-dataTables_wrapper.no-footer div.dataTables_scrollHead table,.wf-dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.wf-dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.wf-dataTables_wrapper .dataTables_info,.wf-dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.wf-dataTables_wrapper .dataTables_length,.wf-dataTables_wrapper .dataTables_filter{float:none;text-align:center}.wf-dataTables_wrapper .dataTables_filter{margin-top:0.5em}}.wf-alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.wf-alert h4{margin-top:0;color:inherit}.wf-alert .wf-alert-link{font-weight:bold}.wf-alert>p,.wf-alert>ul{margin-bottom:0}.wf-alert>p+p{margin-top:5px}.wf-alert-dismissable,.wf-alert-dismissible{padding-right:35px}.wf-alert-dismissable .close,.wf-alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.wf-alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wf-alert-success hr{border-top-color:#c9e2b3}.wf-alert-success .alert-link{color:#2b542c}.wf-alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.wf-alert-info hr{border-top-color:#a6e1ec}.wf-alert-info .alert-link{color:#245269}.wf-alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.wf-alert-warning hr{border-top-color:#f7e1b5}.wf-alert-warning .alert-link{color:#66512c}.wf-alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.wf-alert-danger hr{border-top-color:#e4b9c0}.wf-alert-danger .alert-link{color:#843534}
|
js/admin.js
CHANGED
@@ -551,6 +551,14 @@
|
|
551 |
if (res.signatureUpdateTime) {
|
552 |
this.updateSignaturesTimestamp(res.signatureUpdateTime);
|
553 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
554 |
}
|
555 |
this.activityLogUpdatePending = false;
|
556 |
},
|
551 |
if (res.signatureUpdateTime) {
|
552 |
this.updateSignaturesTimestamp(res.signatureUpdateTime);
|
553 |
}
|
554 |
+
|
555 |
+
if (res.scanFailed) {
|
556 |
+
jQuery('#wf-scan-failed-time-ago').text(res.scanFailedTiming);
|
557 |
+
jQuery('#wf-scan-failed').show();
|
558 |
+
}
|
559 |
+
else {
|
560 |
+
jQuery('#wf-scan-failed').hide();
|
561 |
+
}
|
562 |
}
|
563 |
this.activityLogUpdatePending = false;
|
564 |
},
|
js/admin.liveTraffic.js
CHANGED
@@ -25,8 +25,7 @@
|
|
25 |
new GroupByModel('statusCode', 'HTTP Response Code'),
|
26 |
new GroupByModel('action', 'Firewall Response', 'enum', ['ok', 'throttled', 'lockedOut', 'blocked', 'blocked:waf']),
|
27 |
new GroupByModel('ip', 'IP'),
|
28 |
-
urlGroupBy
|
29 |
-
new GroupByModel('host', 'Host')
|
30 |
];
|
31 |
|
32 |
self.presetFiltersOptions = ko.observableArray([
|
@@ -142,9 +141,15 @@
|
|
142 |
};
|
143 |
self.reloadListings = function(options) {
|
144 |
pullDownListings(options, function(listings) {
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
var newListings = [];
|
146 |
for (var i = 0; i < listings.length; i++) {
|
147 |
-
newListings.push(new ListingModel(listings[i]));
|
148 |
}
|
149 |
self.listings(newListings);
|
150 |
})
|
@@ -284,7 +289,7 @@
|
|
284 |
self.sql = ko.observable('');
|
285 |
};
|
286 |
|
287 |
-
var ListingModel = function(data) {
|
288 |
var self = this;
|
289 |
|
290 |
self.id = ko.observable(0);
|
@@ -330,6 +335,10 @@
|
|
330 |
self[prop] !== undefined && self[prop](data[prop]);
|
331 |
}
|
332 |
}
|
|
|
|
|
|
|
|
|
333 |
|
334 |
// Use the same format as these update.
|
335 |
self.timeAgo = ko.pureComputed(function() {
|
@@ -351,6 +360,26 @@
|
|
351 |
});
|
352 |
|
353 |
self.firewallAction = ko.pureComputed(function() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
var desc = '';
|
355 |
switch (self.action()) {
|
356 |
case 'lockedOut':
|
25 |
new GroupByModel('statusCode', 'HTTP Response Code'),
|
26 |
new GroupByModel('action', 'Firewall Response', 'enum', ['ok', 'throttled', 'lockedOut', 'blocked', 'blocked:waf']),
|
27 |
new GroupByModel('ip', 'IP'),
|
28 |
+
urlGroupBy
|
|
|
29 |
];
|
30 |
|
31 |
self.presetFiltersOptions = ko.observableArray([
|
141 |
};
|
142 |
self.reloadListings = function(options) {
|
143 |
pullDownListings(options, function(listings) {
|
144 |
+
var groupByKO = self.groupBy();
|
145 |
+
var groupBy = '';
|
146 |
+
if (groupByKO) {
|
147 |
+
groupBy = groupByKO.param();
|
148 |
+
}
|
149 |
+
|
150 |
var newListings = [];
|
151 |
for (var i = 0; i < listings.length; i++) {
|
152 |
+
newListings.push(new ListingModel(listings[i], groupBy));
|
153 |
}
|
154 |
self.listings(newListings);
|
155 |
})
|
289 |
self.sql = ko.observable('');
|
290 |
};
|
291 |
|
292 |
+
var ListingModel = function(data, groupBy) {
|
293 |
var self = this;
|
294 |
|
295 |
self.id = ko.observable(0);
|
335 |
self[prop] !== undefined && self[prop](data[prop]);
|
336 |
}
|
337 |
}
|
338 |
+
|
339 |
+
if (data['lastHit'] !== undefined) {
|
340 |
+
self['ctime'](data['lastHit']);
|
341 |
+
}
|
342 |
|
343 |
// Use the same format as these update.
|
344 |
self.timeAgo = ko.pureComputed(function() {
|
360 |
});
|
361 |
|
362 |
self.firewallAction = ko.pureComputed(function() {
|
363 |
+
//Grouped by firewall action listing
|
364 |
+
if (groupBy == 'action') {
|
365 |
+
switch (self.action()) {
|
366 |
+
case 'lockedOut':
|
367 |
+
return 'Locked out from logging in';
|
368 |
+
case 'blocked:waf-always':
|
369 |
+
return 'Blocked by the Wordfence Application Firewall and plugin settings';
|
370 |
+
case 'blocked:wordfence':
|
371 |
+
return 'Blocked by Wordfence plugin settings';
|
372 |
+
case 'blocked:wfsnrepeat':
|
373 |
+
case 'blocked:wfsn':
|
374 |
+
return 'Blocked by the Wordfence Security Network';
|
375 |
+
case 'blocked:waf':
|
376 |
+
return 'Blocked by the Wordfence Web Application Firewall';
|
377 |
+
default:
|
378 |
+
return 'Blocked by Wordfence';
|
379 |
+
}
|
380 |
+
}
|
381 |
+
|
382 |
+
//Standard listing
|
383 |
var desc = '';
|
384 |
switch (self.action()) {
|
385 |
case 'lockedOut':
|
lib/GeoIP.dat
CHANGED
Binary file
|
lib/GeoIPv6.dat
CHANGED
Binary file
|
lib/dashboard/widget_networkattacks.php
CHANGED
@@ -62,23 +62,9 @@ STYLING;
|
|
62 |
$labels = array();
|
63 |
$values = array();
|
64 |
|
65 |
-
$utc = new DateTimeZone('UTC');
|
66 |
foreach ($blocks as $b) {
|
67 |
$values[] = $b['c'];
|
68 |
-
|
69 |
-
$dtStr = gmdate("c", $b['t']); //Have to do it this way because of PHP 5.2
|
70 |
-
$dt = new DateTime($dtStr, $utc);
|
71 |
-
$tz = get_option('timezone_string');
|
72 |
-
if (!empty($tz)) {
|
73 |
-
$dt->setTimezone(new DateTimeZone($tz));
|
74 |
-
}
|
75 |
-
else {
|
76 |
-
$gmt = get_option('gmt_offset');
|
77 |
-
if (!empty($gmt)) {
|
78 |
-
$dt->setTimezone(new DateTimeZone('Etc/GMT' . ($gmt < 0 ? '+' : '-') . abs($gmt))); //The Etc/GMT timezones have the +- signs flipped
|
79 |
-
}
|
80 |
-
}
|
81 |
-
$labels[] = "'" . $dt->format('g a') . "'";
|
82 |
}
|
83 |
?>
|
84 |
labels: [<?php echo implode(',', $labels); ?>],
|
@@ -120,23 +106,9 @@ STYLING;
|
|
120 |
$labels = array();
|
121 |
$values = array();
|
122 |
|
123 |
-
$utc = new DateTimeZone('UTC');
|
124 |
foreach ($blocks as $b) {
|
125 |
$values[] = $b['c'];
|
126 |
-
|
127 |
-
$dtStr = gmdate("c", $b['t']); //Have to do it this way because of PHP 5.2
|
128 |
-
$dt = new DateTime($dtStr, $utc);
|
129 |
-
$tz = get_option('timezone_string');
|
130 |
-
if (!empty($tz)) {
|
131 |
-
$dt->setTimezone(new DateTimeZone($tz));
|
132 |
-
}
|
133 |
-
else {
|
134 |
-
$gmt = get_option('gmt_offset');
|
135 |
-
if (!empty($gmt)) {
|
136 |
-
$dt->setTimezone(new DateTimeZone('Etc/GMT' . ($gmt < 0 ? '+' : '-') . abs($gmt))); //The Etc/GMT timezones have the +- signs flipped
|
137 |
-
}
|
138 |
-
}
|
139 |
-
$labels[] = "'" . $dt->format('M j') . "'";
|
140 |
}
|
141 |
?>
|
142 |
labels: [<?php echo implode(',', $labels); ?>],
|
@@ -178,23 +150,9 @@ STYLING;
|
|
178 |
$labels = array();
|
179 |
$values = array();
|
180 |
|
181 |
-
$utc = new DateTimeZone('UTC');
|
182 |
foreach ($blocks as $b) {
|
183 |
$values[] = $b['c'];
|
184 |
-
|
185 |
-
$dtStr = gmdate("c", $b['t']); //Have to do it this way because of PHP 5.2
|
186 |
-
$dt = new DateTime($dtStr, $utc);
|
187 |
-
$tz = get_option('timezone_string');
|
188 |
-
if (!empty($tz)) {
|
189 |
-
$dt->setTimezone(new DateTimeZone($tz));
|
190 |
-
}
|
191 |
-
else {
|
192 |
-
$gmt = get_option('gmt_offset');
|
193 |
-
if (!empty($gmt)) {
|
194 |
-
$dt->setTimezone(new DateTimeZone('Etc/GMT' . ($gmt < 0 ? '+' : '-') . abs($gmt))); //The Etc/GMT timezones have the +- signs flipped
|
195 |
-
}
|
196 |
-
}
|
197 |
-
$labels[] = "'" . $dt->format('M j') . "'";
|
198 |
}
|
199 |
?>
|
200 |
labels: [<?php echo implode(',', $labels); ?>],
|
62 |
$labels = array();
|
63 |
$values = array();
|
64 |
|
|
|
65 |
foreach ($blocks as $b) {
|
66 |
$values[] = $b['c'];
|
67 |
+
$labels[] = "'" . wfUtils::formatLocalTime('g a', $b['t']) . "'";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
?>
|
70 |
labels: [<?php echo implode(',', $labels); ?>],
|
106 |
$labels = array();
|
107 |
$values = array();
|
108 |
|
|
|
109 |
foreach ($blocks as $b) {
|
110 |
$values[] = $b['c'];
|
111 |
+
$labels[] = "'" . wfUtils::formatLocalTime('M j', $b['t']) . "'";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
113 |
?>
|
114 |
labels: [<?php echo implode(',', $labels); ?>],
|
150 |
$labels = array();
|
151 |
$values = array();
|
152 |
|
|
|
153 |
foreach ($blocks as $b) {
|
154 |
$values[] = $b['c'];
|
155 |
+
$labels[] = "'" . wfUtils::formatLocalTime('M j', $b['t']) . "'";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
}
|
157 |
?>
|
158 |
labels: [<?php echo implode(',', $labels); ?>],
|
lib/email_newIssues.php
CHANGED
@@ -22,11 +22,23 @@
|
|
22 |
|
23 |
<?php foreach($issues as $i){ if($i['severity'] == 1){ ?>
|
24 |
<p>* <?php echo htmlspecialchars($i['shortMsg']) ?></p>
|
25 |
-
<?php
|
26 |
-
|
27 |
-
|
28 |
-
<p><strong>
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
<?php if (!empty($i['tmplData']['badURL'])): ?>
|
31 |
<p><img src="<?php echo WORDFENCE_API_URL_BASE_NONSEC . "?" . http_build_query(array(
|
32 |
'v' => wfUtils::getWPVersion(),
|
22 |
|
23 |
<?php foreach($issues as $i){ if($i['severity'] == 1){ ?>
|
24 |
<p>* <?php echo htmlspecialchars($i['shortMsg']) ?></p>
|
25 |
+
<?php
|
26 |
+
if ((isset($i['tmplData']['wpRemoved']) && $i['tmplData']['wpRemoved']) || (isset($i['tmplData']['abandoned']) && $i['tmplData']['abandoned'])) {
|
27 |
+
if (isset($i['tmplData']['vulnerable']) && $i['tmplData']['vulnerable']) {
|
28 |
+
echo '<p><strong>Plugin contains an unpatched security vulnerability.</strong></p>';
|
29 |
+
}
|
30 |
+
}
|
31 |
+
else if (isset($i['tmplData']['wpURL'])) {
|
32 |
+
echo '<p>';
|
33 |
+
if (isset($i['tmplData']['vulnerable']) && $i['tmplData']['vulnerable']) {
|
34 |
+
echo '<strong>Update includes security-related fixes.</strong> ';
|
35 |
+
}
|
36 |
+
echo $i['tmplData']['wpURL'] . '/#developers</p>';
|
37 |
+
}
|
38 |
+
else if (isset($i['tmplData']['vulnerable']) && $i['tmplData']['vulnerable']) {
|
39 |
+
echo '<p><strong>Update includes security-related fixes.</strong></p>';
|
40 |
+
}
|
41 |
+
?>
|
42 |
<?php if (!empty($i['tmplData']['badURL'])): ?>
|
43 |
<p><img src="<?php echo WORDFENCE_API_URL_BASE_NONSEC . "?" . http_build_query(array(
|
44 |
'v' => wfUtils::getWPVersion(),
|
lib/menu_activity.php
CHANGED
@@ -148,6 +148,7 @@
|
|
148 |
<div class="wf-filtered-traffic" data-bind="foreach: listings">
|
149 |
<div>
|
150 |
<div>
|
|
|
151 |
<div data-bind="if: loc()">
|
152 |
<img data-bind="attr: { src: '<?php echo wfUtils::getBaseURL() . 'images/flags/'; ?>' + loc().countryCode.toLowerCase() + '.png',
|
153 |
alt: loc().countryName, title: loc().countryName }" width="16" height="11"
|
@@ -175,10 +176,38 @@
|
|
175 |
</span>
|
176 |
</div>
|
177 |
<div>
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
</div>
|
|
|
180 |
<div>
|
181 |
-
<span
|
182 |
data-bind="attr: { 'data-timestamp': ctime, text: 'Last hit was ' + ctime() + ' ago.' }"
|
183 |
class="wfTimeAgo wfTimeAgo-timestamp"></span>
|
184 |
</div>
|
148 |
<div class="wf-filtered-traffic" data-bind="foreach: listings">
|
149 |
<div>
|
150 |
<div>
|
151 |
+
<!-- ko if: $root.groupBy().param() == 'ip' -->
|
152 |
<div data-bind="if: loc()">
|
153 |
<img data-bind="attr: { src: '<?php echo wfUtils::getBaseURL() . 'images/flags/'; ?>' + loc().countryCode.toLowerCase() + '.png',
|
154 |
alt: loc().countryName, title: loc().countryName }" width="16" height="11"
|
176 |
</span>
|
177 |
</div>
|
178 |
<div>
|
179 |
+
<span class="wfReverseLookup"><span data-bind="text: IP" style="display:none;"></span></span>
|
180 |
+
</div>
|
181 |
+
<!-- /ko -->
|
182 |
+
<!-- ko if: $root.groupBy().param() == 'type' -->
|
183 |
+
<div>
|
184 |
+
<strong>Type:</strong>
|
185 |
+
<span data-bind="if: jsRun() == '1'">Human</span>
|
186 |
+
<span data-bind="if: jsRun() == '0'">Bot</span>
|
187 |
+
</div>
|
188 |
+
<!-- /ko -->
|
189 |
+
<!-- ko if: $root.groupBy().param() == 'user_login' -->
|
190 |
+
<div>
|
191 |
+
<strong>Username:</strong> <span data-bind="text: username()"></span>
|
192 |
+
</div>
|
193 |
+
<!-- /ko -->
|
194 |
+
<!-- ko if: $root.groupBy().param() == 'statusCode' -->
|
195 |
+
<div>
|
196 |
+
<strong>HTTP Response Code:</strong> <span data-bind="text: statusCode()"></span>
|
197 |
+
</div>
|
198 |
+
<!-- /ko -->
|
199 |
+
<!-- ko if: $root.groupBy().param() == 'action' -->
|
200 |
+
<div>
|
201 |
+
<strong>Firewall Response:</strong> <span data-bind="text: firewallAction()"></span>
|
202 |
+
</div>
|
203 |
+
<!-- /ko -->
|
204 |
+
<!-- ko if: $root.groupBy().param() == 'url' -->
|
205 |
+
<div>
|
206 |
+
<strong>URL:</strong> <span data-bind="text: displayURL()"></span>
|
207 |
</div>
|
208 |
+
<!-- /ko -->
|
209 |
<div>
|
210 |
+
<strong>Last Hit:</strong> <span
|
211 |
data-bind="attr: { 'data-timestamp': ctime, text: 'Last hit was ' + ctime() + ' ago.' }"
|
212 |
class="wfTimeAgo wfTimeAgo-timestamp"></span>
|
213 |
</div>
|
lib/menu_dashboard.php
CHANGED
@@ -17,12 +17,12 @@ $d = new wfDashboard();
|
|
17 |
</div>
|
18 |
<?php elseif ($d->scanLastStatus == wfDashboard::SCAN_SUCCESS): ?>
|
19 |
<div class="wf-dashboard-item-title">
|
20 |
-
<strong>Last scan completed: <?php echo esc_html(
|
21 |
</div>
|
22 |
<div class="wf-dashboard-item-action wf-dashboard-item-action-text wf-dashboard-item-action-text-success">No security problems detected</div>
|
23 |
<?php elseif ($d->scanLastStatus == wfDashboard::SCAN_WARNINGS): ?>
|
24 |
<div class="wf-dashboard-item-title">
|
25 |
-
<strong>Last scan completed: <?php echo esc_html(
|
26 |
</div>
|
27 |
<div class="wf-dashboard-item-action wf-dashboard-item-action-text wf-dashboard-item-action-text-warning"><a href="<?php echo network_admin_url('admin.php?page=WordfenceScan'); ?>"><?php echo esc_html($d->scanLastStatusMessage); ?></a></div>
|
28 |
<?php elseif ($d->scanLastStatus == wfDashboard::SCAN_FAILED): ?>
|
17 |
</div>
|
18 |
<?php elseif ($d->scanLastStatus == wfDashboard::SCAN_SUCCESS): ?>
|
19 |
<div class="wf-dashboard-item-title">
|
20 |
+
<strong>Last scan completed: <?php echo esc_html(wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $d->scanLastCompletion)); ?></strong>
|
21 |
</div>
|
22 |
<div class="wf-dashboard-item-action wf-dashboard-item-action-text wf-dashboard-item-action-text-success">No security problems detected</div>
|
23 |
<?php elseif ($d->scanLastStatus == wfDashboard::SCAN_WARNINGS): ?>
|
24 |
<div class="wf-dashboard-item-title">
|
25 |
+
<strong>Last scan completed: <?php echo esc_html(wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $d->scanLastCompletion)); ?></strong>
|
26 |
</div>
|
27 |
<div class="wf-dashboard-item-action wf-dashboard-item-action-text wf-dashboard-item-action-text-warning"><a href="<?php echo network_admin_url('admin.php?page=WordfenceScan'); ?>"><?php echo esc_html($d->scanLastStatusMessage); ?></a></div>
|
28 |
<?php elseif ($d->scanLastStatus == wfDashboard::SCAN_FAILED): ?>
|
lib/menu_options.php
CHANGED
@@ -450,7 +450,7 @@ $w = new wfConfig();
|
|
450 |
),
|
451 |
array(
|
452 |
'id' => 'scansEnabled_oldVersions',
|
453 |
-
'label' => 'Scan for out of date plugins, themes and WordPress versions <a href="http://docs.wordfence.com/en/Wordfence_options#Scan_for_out_of_date_plugins.2C_themes_and_WordPress_versions" target="_blank" class="wfhelp"></a>',
|
454 |
),
|
455 |
array(
|
456 |
'id' => 'scansEnabled_suspiciousAdminUsers',
|
450 |
),
|
451 |
array(
|
452 |
'id' => 'scansEnabled_oldVersions',
|
453 |
+
'label' => 'Scan for out of date, abandoned, and vulnerable plugins, themes, and WordPress versions <a href="http://docs.wordfence.com/en/Wordfence_options#Scan_for_out_of_date_plugins.2C_themes_and_WordPress_versions" target="_blank" class="wfhelp"></a>',
|
454 |
),
|
455 |
array(
|
456 |
'id' => 'scansEnabled_suspiciousAdminUsers',
|
lib/menu_scan.php
CHANGED
@@ -277,7 +277,7 @@ $sigUpdateTime = wfConfig::get('signatureUpdateTime');
|
|
277 |
</td></tr>
|
278 |
</table>
|
279 |
</p>
|
280 |
-
{{if data.
|
281 |
<p>
|
282 |
{{html longMsg}}
|
283 |
<a href="<?php echo get_admin_url() . 'update-core.php'; ?>">Click here to update now</a>.
|
@@ -318,7 +318,7 @@ $sigUpdateTime = wfConfig::get('signatureUpdateTime');
|
|
318 |
</td></tr>
|
319 |
</table>
|
320 |
</p>
|
321 |
-
{{if data.
|
322 |
<p>
|
323 |
{{html longMsg}}
|
324 |
<a href="<?php echo get_admin_url() . 'update-core.php'; ?>">Click here to update now</a>.
|
@@ -341,6 +341,121 @@ $sigUpdateTime = wfConfig::get('signatureUpdateTime');
|
|
341 |
</div>
|
342 |
</script>
|
343 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
344 |
<script type="text/x-jquery-template" id="issueTmpl_wfUpgrade">
|
345 |
<div>
|
346 |
<div class="wfIssue">
|
277 |
</td></tr>
|
278 |
</table>
|
279 |
</p>
|
280 |
+
{{if data.vulnerable}}<p><strong>Update includes security-related fixes.</strong></p>{{/if}}
|
281 |
<p>
|
282 |
{{html longMsg}}
|
283 |
<a href="<?php echo get_admin_url() . 'update-core.php'; ?>">Click here to update now</a>.
|
318 |
</td></tr>
|
319 |
</table>
|
320 |
</p>
|
321 |
+
{{if data.vulnerable}}<p><strong>Update includes security-related fixes.</strong></p>{{/if}}
|
322 |
<p>
|
323 |
{{html longMsg}}
|
324 |
<a href="<?php echo get_admin_url() . 'update-core.php'; ?>">Click here to update now</a>.
|
341 |
</div>
|
342 |
</script>
|
343 |
|
344 |
+
<script type="text/x-jquery-template" id="issueTmpl_wfPluginRemoved">
|
345 |
+
<div>
|
346 |
+
<div class="wfIssue">
|
347 |
+
<h2>${shortMsg}</h2>
|
348 |
+
<p>
|
349 |
+
<table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
|
350 |
+
<tr><th><span class="wf-hidden-xs">Plugin </span>Name:</th><td>${data.Name}</td></tr>
|
351 |
+
{{if data.PluginURI}}<tr><th><span class="wf-hidden-xs">Plugin </span>Website:</th><td><a href="${data.PluginURI}" target="_blank"><span class="wf-hidden-xs wf-split-word">${data.PluginURI}</span><span class="wf-visible-xs">View</span></a></td></tr>{{/if}}
|
352 |
+
<tr><th>Current <span class="wf-hidden-xs">Plugin </span>Version:</th><td>${data.Version}</td></tr>
|
353 |
+
<tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
|
354 |
+
<tr><th>Status</th><td>
|
355 |
+
{{if status == 'new' }}New{{/if}}
|
356 |
+
{{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
|
357 |
+
</td></tr>
|
358 |
+
</table>
|
359 |
+
</p>
|
360 |
+
<p>
|
361 |
+
{{html longMsg}}
|
362 |
+
</p>
|
363 |
+
<div class="wfIssueOptions">
|
364 |
+
{{if status == 'new'}}
|
365 |
+
<ul>
|
366 |
+
<li><h3>Resolve:</h3></li>
|
367 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a></li>
|
368 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this issue</a></li>
|
369 |
+
</ul>
|
370 |
+
{{/if}}
|
371 |
+
{{if status == 'ignoreC' || status == 'ignoreP'}}
|
372 |
+
<ul>
|
373 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a></li>
|
374 |
+
</ul>
|
375 |
+
{{/if}}
|
376 |
+
</div>
|
377 |
+
</div>
|
378 |
+
</div>
|
379 |
+
</script>
|
380 |
+
|
381 |
+
<script type="text/x-jquery-template" id="issueTmpl_wfPluginAbandoned">
|
382 |
+
<div>
|
383 |
+
<div class="wfIssue">
|
384 |
+
<h2>${shortMsg}</h2>
|
385 |
+
<p>
|
386 |
+
<table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
|
387 |
+
<tr><th><span class="wf-hidden-xs">Plugin </span>Name:</th><td>${data.name}</td></tr>
|
388 |
+
{{if data.homepage}}<tr><th><span class="wf-hidden-xs">Plugin </span>Website:</th><td><a href="${data.homepage}" target="_blank"><span class="wf-hidden-xs wf-split-word">${data.homepage}</span><span class="wf-visible-xs">View</span></a></td></tr>{{/if}}
|
389 |
+
{{if data.wpURL}}<tr><th>Repository<span class="wf-hidden-xs"> Link</span>:</th><td><a href="${data.wpURL}" target="_blank"><span class="wf-hidden-xs wf-split-word">${data.wpURL}</span><span class="wf-visible-xs">View</span></a></td></tr>{{/if}}
|
390 |
+
<tr><th>Current <span class="wf-hidden-xs">Plugin </span>Version:</th><td>${data.version}</td></tr>
|
391 |
+
<tr><th>Last Updated:</th><td>${data.dateUpdated}</td></tr>
|
392 |
+
<tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
|
393 |
+
<tr><th>Status</th><td>
|
394 |
+
{{if status == 'new' }}New{{/if}}
|
395 |
+
{{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
|
396 |
+
</td></tr>
|
397 |
+
</table>
|
398 |
+
</p>
|
399 |
+
{{if data.vulnerable}}<p><strong>Plugin has unpatched security issues.</strong></p>{{/if}}
|
400 |
+
<p>
|
401 |
+
{{html longMsg}}
|
402 |
+
</p>
|
403 |
+
<div class="wfIssueOptions">
|
404 |
+
{{if status == 'new'}}
|
405 |
+
<ul>
|
406 |
+
<li><h3>Resolve:</h3></li>
|
407 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a></li>
|
408 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this issue</a></li>
|
409 |
+
</ul>
|
410 |
+
{{/if}}
|
411 |
+
{{if status == 'ignoreC' || status == 'ignoreP'}}
|
412 |
+
<ul>
|
413 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a></li>
|
414 |
+
</ul>
|
415 |
+
{{/if}}
|
416 |
+
</div>
|
417 |
+
</div>
|
418 |
+
</div>
|
419 |
+
</script>
|
420 |
+
|
421 |
+
<script type="text/x-jquery-template" id="issueTmpl_wfPluginVulnerable">
|
422 |
+
<div>
|
423 |
+
<div class="wfIssue">
|
424 |
+
<h2>${shortMsg}</h2>
|
425 |
+
<p>
|
426 |
+
<table border="0" class="wfIssue" cellspacing="0" cellpadding="0">
|
427 |
+
<tr><th><span class="wf-hidden-xs">Plugin </span>Name:</th><td>${data.Name}</td></tr>
|
428 |
+
{{if data.PluginURI}}<tr><th><span class="wf-hidden-xs">Plugin </span>Website:</th><td><a href="${data.PluginURI}" target="_blank"><span class="wf-hidden-xs wf-split-word">${data.PluginURI}</span><span class="wf-visible-xs">View</span></a></td></tr>{{/if}}
|
429 |
+
{{if data.wpURL}}<tr><th>Repository<span class="wf-hidden-xs"> Link</span>:</th><td><a href="${data.wpURL}" target="_blank"><span class="wf-hidden-xs wf-split-word">${data.wpURL}</span><span class="wf-visible-xs">View</span></a></td></tr>{{/if}}
|
430 |
+
<tr><th>Current <span class="wf-hidden-xs">Plugin </span>Version:</th><td>${data.Version}</td></tr>
|
431 |
+
<tr><th>Severity:</th><td>{{if severity == '1'}}Critical{{else}}Warning{{/if}}</td></tr>
|
432 |
+
<tr><th>Status</th><td>
|
433 |
+
{{if status == 'new' }}New{{/if}}
|
434 |
+
{{if status == 'ignoreP' || status == 'ignoreC' }}Ignored{{/if}}
|
435 |
+
</td></tr>
|
436 |
+
</table>
|
437 |
+
</p>
|
438 |
+
<p>
|
439 |
+
{{html longMsg}}
|
440 |
+
</p>
|
441 |
+
<div class="wfIssueOptions">
|
442 |
+
{{if status == 'new'}}
|
443 |
+
<ul>
|
444 |
+
<li><h3>Resolve:</h3></li>
|
445 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">I have fixed this issue</a></li>
|
446 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'ignoreC'); return false;">Ignore this issue</a></li>
|
447 |
+
</ul>
|
448 |
+
{{/if}}
|
449 |
+
{{if status == 'ignoreC' || status == 'ignoreP'}}
|
450 |
+
<ul>
|
451 |
+
<li><a href="#" onclick="WFAD.updateIssueStatus('${id}', 'delete'); return false;">Stop ignoring this issue</a></li>
|
452 |
+
</ul>
|
453 |
+
{{/if}}
|
454 |
+
</div>
|
455 |
+
</div>
|
456 |
+
</div>
|
457 |
+
</script>
|
458 |
+
|
459 |
<script type="text/x-jquery-template" id="issueTmpl_wfUpgrade">
|
460 |
<div>
|
461 |
<div class="wfIssue">
|
lib/menu_scan_scan.php
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
<div class="wordfenceModeElem" id="wordfenceMode_scan"></div>
|
|
|
|
|
|
|
|
|
2 |
<div class="wordfenceScanButton wf-center">
|
3 |
<a href="#" id="wfStartScanButton1" class="wfStartScanButton button button-primary" onclick="wordfenceAdmin.startScan(); return false;">Start a Wordfence Scan</a><br />
|
4 |
<a href="#" onclick="WFAD.killScan(); return false;" style="font-size: 10px; color: #AAA;">Click to kill the current scan.</a>
|
1 |
<div class="wordfenceModeElem" id="wordfenceMode_scan"></div>
|
2 |
+
<div class="wf-alert wf-alert-danger" id="wf-scan-failed" style="display: none;">
|
3 |
+
<h4>Scan Failed</h4>
|
4 |
+
<p>The current scan looks like it has failed. Its last status update was <span id="wf-scan-failed-time-ago"></span> ago. You may continue to wait in case it resumes or cancel and restart the scan. Some sites may need adjustments to run scans reliably. <a href="https://docs.wordfence.com/en/My_scans_don%27t_finish._What_would_cause_that%3F" target="_blank">Click here for steps you can try.</a></p>
|
5 |
+
</div>
|
6 |
<div class="wordfenceScanButton wf-center">
|
7 |
<a href="#" id="wfStartScanButton1" class="wfStartScanButton button button-primary" onclick="wordfenceAdmin.startScan(); return false;">Start a Wordfence Scan</a><br />
|
8 |
<a href="#" onclick="WFAD.killScan(); return false;" style="font-size: 10px; color: #AAA;">Click to kill the current scan.</a>
|
lib/menu_tools_diagnostic.php
CHANGED
@@ -357,8 +357,16 @@ if (!isset($sendingDiagnosticEmail)) { $sendingDiagnosticEmail = false; }
|
|
357 |
</tbody>
|
358 |
</table>
|
359 |
<?php
|
|
|
360 |
$wfdb = new wfDB();
|
361 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
362 |
if ($q):
|
363 |
$databaseCols = count($q[0]);
|
364 |
?>
|
@@ -399,7 +407,7 @@ if (!isset($sendingDiagnosticEmail)) { $sendingDiagnosticEmail = false; }
|
|
399 |
if ($count >= 250) {
|
400 |
?>
|
401 |
<tr>
|
402 |
-
<td colspan="<?php echo $databaseCols; ?>">and <?php echo
|
403 |
</tr>
|
404 |
<?php
|
405 |
break;
|
357 |
</tbody>
|
358 |
</table>
|
359 |
<?php
|
360 |
+
global $wpdb;
|
361 |
$wfdb = new wfDB();
|
362 |
+
//This must be done this way because MySQL with InnoDB tables does a full regeneration of all metadata if we don't. That takes a long time with a large table count.
|
363 |
+
$tables = $wfdb->querySelect('SELECT SQL_CALC_FOUND_ROWS TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() ORDER BY TABLE_NAME ASC LIMIT 250');
|
364 |
+
$total = $wfdb->querySingle('SELECT FOUND_ROWS()');
|
365 |
+
foreach ($tables as &$t) {
|
366 |
+
$t = "'" . esc_sql($t['TABLE_NAME']) . "'";
|
367 |
+
}
|
368 |
+
unset($t);
|
369 |
+
$q = $wfdb->querySelect("SHOW TABLE STATUS WHERE Name IN (" . implode(',', $tables) . ')');
|
370 |
if ($q):
|
371 |
$databaseCols = count($q[0]);
|
372 |
?>
|
407 |
if ($count >= 250) {
|
408 |
?>
|
409 |
<tr>
|
410 |
+
<td colspan="<?php echo $databaseCols; ?>">and <?php echo $total - $count; ?> more</td>
|
411 |
</tr>
|
412 |
<?php
|
413 |
break;
|
lib/wfActivityReport.php
CHANGED
@@ -724,14 +724,14 @@ class wfActivityReportView extends wfView {
|
|
724 |
if ($unix_time === null) {
|
725 |
$unix_time = time();
|
726 |
}
|
727 |
-
return
|
728 |
}
|
729 |
|
730 |
public function attackTime($unix_time = null) {
|
731 |
if ($unix_time === null) {
|
732 |
$unix_time = time();
|
733 |
}
|
734 |
-
return
|
735 |
}
|
736 |
|
737 |
public function displayIP($binaryIP) {
|
724 |
if ($unix_time === null) {
|
725 |
$unix_time = time();
|
726 |
}
|
727 |
+
return wfUtils::formatLocalTime('F j, Y g:ia', $unix_time);
|
728 |
}
|
729 |
|
730 |
public function attackTime($unix_time = null) {
|
731 |
if ($unix_time === null) {
|
732 |
$unix_time = time();
|
733 |
}
|
734 |
+
return wfUtils::formatLocalTime('F j, Y', $unix_time) . "<br>" . wfUtils::formatLocalTime('g:ia', $unix_time);
|
735 |
}
|
736 |
|
737 |
public function displayIP($binaryIP) {
|
lib/wfIssues.php
CHANGED
@@ -38,6 +38,7 @@ class wfIssues {
|
|
38 |
public static function statusPrep(){
|
39 |
wfConfig::set_ser('wfStatusStartMsgs', array());
|
40 |
wordfence::status(10, 'info', "SUM_PREP:Preparing a new scan.");
|
|
|
41 |
}
|
42 |
|
43 |
public static function statusStart($message) {
|
@@ -45,6 +46,7 @@ class wfIssues {
|
|
45 |
$statusStartMsgs[] = $message;
|
46 |
wfConfig::set_ser('wfStatusStartMsgs', $statusStartMsgs);
|
47 |
wordfence::status(10, 'info', 'SUM_START:' . $message);
|
|
|
48 |
return count($statusStartMsgs) - 1;
|
49 |
}
|
50 |
|
@@ -68,6 +70,7 @@ class wfIssues {
|
|
68 |
else if ($state == self::STATUS_SUCCESS) {
|
69 |
wordfence::status(10, 'info', 'SUM_ENDSUCCESS:' . $statusStartMsgs[$index]);
|
70 |
}
|
|
|
71 |
$statusStartMsgs[$index] = '';
|
72 |
wfConfig::set_ser('wfStatusStartMsgs', $statusStartMsgs);
|
73 |
}
|
@@ -80,14 +83,39 @@ class wfIssues {
|
|
80 |
$statusStartMsgs[$i] = '';
|
81 |
}
|
82 |
}
|
|
|
83 |
}
|
84 |
|
85 |
public static function statusPaidOnly($message) {
|
86 |
wordfence::status(10, 'info', "SUM_PAIDONLY:" . $message);
|
|
|
87 |
}
|
88 |
|
89 |
public static function statusDisabled($message) {
|
90 |
wordfence::status(10, 'info', "SUM_DISABLED:" . $message);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
|
93 |
public function __sleep(){ //Same order here as vars above
|
38 |
public static function statusPrep(){
|
39 |
wfConfig::set_ser('wfStatusStartMsgs', array());
|
40 |
wordfence::status(10, 'info', "SUM_PREP:Preparing a new scan.");
|
41 |
+
wfIssues::updateScanStillRunning();
|
42 |
}
|
43 |
|
44 |
public static function statusStart($message) {
|
46 |
$statusStartMsgs[] = $message;
|
47 |
wfConfig::set_ser('wfStatusStartMsgs', $statusStartMsgs);
|
48 |
wordfence::status(10, 'info', 'SUM_START:' . $message);
|
49 |
+
wfIssues::updateScanStillRunning();
|
50 |
return count($statusStartMsgs) - 1;
|
51 |
}
|
52 |
|
70 |
else if ($state == self::STATUS_SUCCESS) {
|
71 |
wordfence::status(10, 'info', 'SUM_ENDSUCCESS:' . $statusStartMsgs[$index]);
|
72 |
}
|
73 |
+
wfIssues::updateScanStillRunning();
|
74 |
$statusStartMsgs[$index] = '';
|
75 |
wfConfig::set_ser('wfStatusStartMsgs', $statusStartMsgs);
|
76 |
}
|
83 |
$statusStartMsgs[$i] = '';
|
84 |
}
|
85 |
}
|
86 |
+
wfIssues::updateScanStillRunning();
|
87 |
}
|
88 |
|
89 |
public static function statusPaidOnly($message) {
|
90 |
wordfence::status(10, 'info', "SUM_PAIDONLY:" . $message);
|
91 |
+
wfIssues::updateScanStillRunning();
|
92 |
}
|
93 |
|
94 |
public static function statusDisabled($message) {
|
95 |
wordfence::status(10, 'info', "SUM_DISABLED:" . $message);
|
96 |
+
wfIssues::updateScanStillRunning();
|
97 |
+
}
|
98 |
+
|
99 |
+
public static function updateScanStillRunning($running = true) {
|
100 |
+
$timestamp = time();
|
101 |
+
if (!$running) {
|
102 |
+
$timestamp = 0;
|
103 |
+
}
|
104 |
+
wfConfig::set('wf_scanLastStatusTime', $timestamp);
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Returns false if the scan has not been detected as failing. If it has, it returns the timestamp of the last status update.
|
109 |
+
*
|
110 |
+
* @return bool|int
|
111 |
+
*/
|
112 |
+
public static function hasScanFailed() {
|
113 |
+
if (wfConfig::get('wf_scanLastStatusTime', 0) === 0) {
|
114 |
+
return false;
|
115 |
+
}
|
116 |
+
|
117 |
+
$threshold = WORDFENCE_SCAN_FAILURE_THRESHOLD;
|
118 |
+
return (time() > wfConfig::get('wf_scanLastStatusTime', 0) + $threshold) ? wfConfig::get('wf_scanLastStatusTime', 0) : false;
|
119 |
}
|
120 |
|
121 |
public function __sleep(){ //Same order here as vars above
|
lib/wfLog.php
CHANGED
@@ -1877,17 +1877,24 @@ class wfLiveTrafficQuery {
|
|
1877 |
$wheres[] = $filtersSQL;
|
1878 |
}
|
1879 |
}
|
1880 |
-
$where = join(' AND ', $wheres);
|
1881 |
|
1882 |
$orderBy = 'ORDER BY h.ctime DESC';
|
1883 |
-
$select = '';
|
1884 |
$groupBySQL = '';
|
1885 |
if ($groupBy && $groupBy->validate()) {
|
1886 |
$groupBySQL = "GROUP BY {$groupBy->getParam()}";
|
1887 |
$orderBy = 'ORDER BY hitCount DESC';
|
1888 |
-
$select .= ', COUNT(h.id) as hitCount';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1889 |
}
|
1890 |
-
|
|
|
1891 |
if ($where) {
|
1892 |
$where = 'WHERE ' . $where;
|
1893 |
}
|
@@ -1897,7 +1904,7 @@ class wfLiveTrafficQuery {
|
|
1897 |
$limitSQL = $wpdb->prepare('LIMIT %d, %d', $offset, $limit);
|
1898 |
|
1899 |
$sql = <<<SQL
|
1900 |
-
SELECT h.*, u.display_name
|
1901 |
LEFT JOIN {$wpdb->users} u on h.userID = u.ID
|
1902 |
LEFT JOIN {$wpdb->base_prefix}wfLogins l on h.id = l.hitID
|
1903 |
$where
|
@@ -2119,6 +2126,8 @@ class wfLiveTrafficQueryFilter {
|
|
2119 |
'!=',
|
2120 |
'contains',
|
2121 |
'match',
|
|
|
|
|
2122 |
);
|
2123 |
|
2124 |
/**
|
@@ -2164,6 +2173,14 @@ class wfLiveTrafficQueryFilter {
|
|
2164 |
case 'match':
|
2165 |
$sql = $wpdb->prepare("$param LIKE %s", $value);
|
2166 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2167 |
|
2168 |
default:
|
2169 |
$sql = $wpdb->prepare("$param $operator %s", $value);
|
1877 |
$wheres[] = $filtersSQL;
|
1878 |
}
|
1879 |
}
|
|
|
1880 |
|
1881 |
$orderBy = 'ORDER BY h.ctime DESC';
|
1882 |
+
$select = ', l.username';
|
1883 |
$groupBySQL = '';
|
1884 |
if ($groupBy && $groupBy->validate()) {
|
1885 |
$groupBySQL = "GROUP BY {$groupBy->getParam()}";
|
1886 |
$orderBy = 'ORDER BY hitCount DESC';
|
1887 |
+
$select .= ', COUNT(h.id) as hitCount, MAX(h.ctime) AS lastHit, u.user_login AS username';
|
1888 |
+
|
1889 |
+
if ($groupBy->getParam() == 'user_login') {
|
1890 |
+
$wheres[] = 'user_login IS NOT NULL';
|
1891 |
+
}
|
1892 |
+
else if ($groupBy->getParam() == 'action') {
|
1893 |
+
$wheres[] = '(statusCode = 403 OR statusCode = 503)';
|
1894 |
+
}
|
1895 |
}
|
1896 |
+
|
1897 |
+
$where = join(' AND ', $wheres);
|
1898 |
if ($where) {
|
1899 |
$where = 'WHERE ' . $where;
|
1900 |
}
|
1904 |
$limitSQL = $wpdb->prepare('LIMIT %d, %d', $offset, $limit);
|
1905 |
|
1906 |
$sql = <<<SQL
|
1907 |
+
SELECT h.*, u.display_name{$select} FROM {$this->getTableName()} h
|
1908 |
LEFT JOIN {$wpdb->users} u on h.userID = u.ID
|
1909 |
LEFT JOIN {$wpdb->base_prefix}wfLogins l on h.id = l.hitID
|
1910 |
$where
|
2126 |
'!=',
|
2127 |
'contains',
|
2128 |
'match',
|
2129 |
+
'hregexp',
|
2130 |
+
'hnotregexp',
|
2131 |
);
|
2132 |
|
2133 |
/**
|
2173 |
case 'match':
|
2174 |
$sql = $wpdb->prepare("$param LIKE %s", $value);
|
2175 |
break;
|
2176 |
+
|
2177 |
+
case 'hregexp':
|
2178 |
+
$sql = $wpdb->prepare("HEX($param) REGEXP %s", $value);
|
2179 |
+
break;
|
2180 |
+
|
2181 |
+
case 'hnotregexp':
|
2182 |
+
$sql = $wpdb->prepare("HEX($param) NOT REGEXP %s", $value);
|
2183 |
+
break;
|
2184 |
|
2185 |
default:
|
2186 |
$sql = $wpdb->prepare("$param $operator %s", $value);
|
lib/wfScan.php
CHANGED
@@ -55,7 +55,9 @@ class wfScan {
|
|
55 |
self::errorExit("There is already a scan running.");
|
56 |
}
|
57 |
|
|
|
58 |
wfConfig::set('wfPeakMemory', 0, wfConfig::DONT_AUTOLOAD);
|
|
|
59 |
wfConfig::set('lowResourceScanWaitStep', false);
|
60 |
if (wfConfig::get('lowResourceScansEnabled')) {
|
61 |
self::status(1, 'info', "Using low resource scanning");
|
@@ -97,6 +99,21 @@ class wfScan {
|
|
97 |
self::status(2, 'error', "Scan terminated with error: " . $e->getMessage());
|
98 |
exit();
|
99 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
catch (Exception $e){
|
101 |
wfUtils::clearScanLock();
|
102 |
self::status(2, 'error', "Scan terminated with error: " . $e->getMessage());
|
55 |
self::errorExit("There is already a scan running.");
|
56 |
}
|
57 |
|
58 |
+
wfIssues::updateScanStillRunning();
|
59 |
wfConfig::set('wfPeakMemory', 0, wfConfig::DONT_AUTOLOAD);
|
60 |
+
wfConfig::set('wfScanStartVersion', wfUtils::getWPVersion());
|
61 |
wfConfig::set('lowResourceScanWaitStep', false);
|
62 |
if (wfConfig::get('lowResourceScansEnabled')) {
|
63 |
self::status(1, 'info', "Using low resource scanning");
|
99 |
self::status(2, 'error', "Scan terminated with error: " . $e->getMessage());
|
100 |
exit();
|
101 |
}
|
102 |
+
catch (wfScanEngineCoreVersionChangeException $e) {
|
103 |
+
wfUtils::clearScanLock();
|
104 |
+
$peakMemory = self::logPeakMemory();
|
105 |
+
self::status(2, 'info', "Wordfence used " . wfUtils::formatBytes($peakMemory - self::$peakMemAtStart) . " of memory for scan. Server peak memory usage was: " . wfUtils::formatBytes($peakMemory));
|
106 |
+
self::status(2, 'error', "Scan terminated with message: " . $e->getMessage());
|
107 |
+
|
108 |
+
$nextScheduledScan = wordfence::getNextScanStartTimestamp();
|
109 |
+
if ($nextScheduledScan !== false && $nextScheduledScan - time() > 21600 /* 6 hours */) {
|
110 |
+
$nextScheduledScan = time() + 3600;
|
111 |
+
wordfence::scheduleSingleScan($nextScheduledScan);
|
112 |
+
}
|
113 |
+
self::status(2, 'error', wordfence::getNextScanStartTime($nextScheduledScan));
|
114 |
+
|
115 |
+
exit();
|
116 |
+
}
|
117 |
catch (Exception $e){
|
118 |
wfUtils::clearScanLock();
|
119 |
self::status(2, 'error', "Scan terminated with error: " . $e->getMessage());
|
lib/wfScanEngine.php
CHANGED
@@ -41,6 +41,8 @@ class wfScanEngine {
|
|
41 |
private $passwdHasIssues = wfIssues::STATUS_SECURE;
|
42 |
private $suspectedFiles = false; //Files found with the ".suspected" extension
|
43 |
private $gsbMultisiteBlogOffset = 0;
|
|
|
|
|
44 |
|
45 |
/**
|
46 |
* @var wordfenceDBScanner
|
@@ -107,6 +109,9 @@ class wfScanEngine {
|
|
107 |
if ($failureType == 'duration') {
|
108 |
new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '<a href="' . network_admin_url('admin.php?page=WordfenceScan') . '">Scan aborted due to duration limit</a>', 'wfplugin_scan');
|
109 |
}
|
|
|
|
|
|
|
110 |
else {
|
111 |
$trimmedError = substr($message, 0, 100) . (strlen($message) > 100 ? '...' : '');
|
112 |
new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '<a href="' . network_admin_url('admin.php?page=WordfenceScan') . '">Scan failed: ' . esc_html($trimmedError) . '</a>', 'wfplugin_scan');
|
@@ -115,7 +120,7 @@ class wfScanEngine {
|
|
115 |
}
|
116 |
|
117 |
public function __sleep(){ //Same order here as above for properties that are included in serialization
|
118 |
-
return array('hasher', 'jobList', 'i', 'wp_version', 'apiKey', 'startTime', 'maxExecTime', 'publicScanEnabled', 'fileContentsResults', 'scanner', 'scanQueue', 'hoover', 'scanData', 'statusIDX', 'userPasswdQueue', 'passwdHasIssues', 'suspectedFiles', 'dbScanner', 'knownFilesLoader', 'metrics', 'checkHowGetIPsRequestTime', 'gsbMultisiteBlogOffset');
|
119 |
}
|
120 |
public function __construct(){
|
121 |
$this->startTime = time();
|
@@ -191,6 +196,18 @@ class wfScanEngine {
|
|
191 |
wfScanEngine::refreshScanNotification($this->i);
|
192 |
throw $e;
|
193 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
catch(Exception $e) {
|
195 |
wfConfig::set('lastScanCompleted', $e->getMessage());
|
196 |
wfConfig::set('lastScanFailureType', 'general');
|
@@ -204,9 +221,12 @@ class wfScanEngine {
|
|
204 |
}
|
205 |
}
|
206 |
public function checkForDurationLimit() {
|
207 |
-
$timeLimit =
|
208 |
-
if ($timeLimit
|
209 |
-
$timeLimit =
|
|
|
|
|
|
|
210 |
}
|
211 |
|
212 |
if ((time() - $this->startTime) > $timeLimit){
|
@@ -223,10 +243,35 @@ class wfScanEngine {
|
|
223 |
throw new wfScanEngineDurationLimitException($error);
|
224 |
}
|
225 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
public function shouldFork() {
|
227 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
}
|
229 |
public function forkIfNeeded(){
|
|
|
|
|
230 |
self::checkForKill();
|
231 |
$this->checkForDurationLimit();
|
232 |
if(time() - $this->cycleStartTime > $this->maxExecTime){
|
@@ -866,15 +911,15 @@ class wfScanEngine {
|
|
866 |
|
867 |
if ($result['badList'] == 'goog-malware-shavar') {
|
868 |
$shortMsg = "{$uctype} contains a suspected malware URL: " . esc_html($title);
|
869 |
-
$longMsg = "This
|
870 |
}
|
871 |
else if ($result['badList'] == 'googpub-phish-shavar') {
|
872 |
$shortMsg = "{$uctype} contains a suspected phishing site URL: " . esc_html($title);
|
873 |
-
$longMsg = "This
|
874 |
}
|
875 |
else if ($result['badList'] == 'wordfence-dbl') {
|
876 |
$shortMsg = "{$uctype} contains a suspected malware URL: " . esc_html($title);
|
877 |
-
$longMsg = "This
|
878 |
}
|
879 |
else {
|
880 |
//A list type that may be new and the plugin has not been upgraded yet.
|
@@ -984,15 +1029,15 @@ class wfScanEngine {
|
|
984 |
|
985 |
if ($result['badList'] == 'goog-malware-shavar') {
|
986 |
$shortMsg = "$uctype with author " . esc_html($author) . " contains a suspected malware URL.";
|
987 |
-
$longMsg = "This $type contains a suspected malware URL listed on Google's list of malware sites. The URL is: " . esc_html($result['URL']) . " - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=" . urlencode($result['URL']) . "&client=googlechrome&hl=en-US\" target=\"_blank\">Google Safe Browsing diagnostic page</a>.";
|
988 |
}
|
989 |
else if ($result['badList'] == 'googpub-phish-shavar') {
|
990 |
$shortMsg = "$uctype contains a suspected phishing site URL.";
|
991 |
-
$longMsg = "This $type contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. The URL is: " . esc_html($result['URL']);
|
992 |
}
|
993 |
else if ($result['badList'] == 'wordfence-dbl') {
|
994 |
$shortMsg = "$uctype contains a suspected malware URL.";
|
995 |
-
$longMsg = "This $type contains a URL that is currently listed on Wordfence's domain blacklist. The URL is: " . esc_html($result['URL']);
|
996 |
}
|
997 |
|
998 |
if(is_multisite()){
|
@@ -1368,31 +1413,92 @@ class wfScanEngine {
|
|
1368 |
}
|
1369 |
wfIssues::statusEnd($this->statusIDX['dns'], $haveIssues);
|
1370 |
}
|
1371 |
-
|
1372 |
-
private function
|
1373 |
$this->statusIDX['oldVersions'] = wfIssues::statusStart("Scanning for old themes, plugins and core files");
|
1374 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1375 |
|
1376 |
-
|
1377 |
-
$
|
1378 |
-
$update_check->checkAllVulnerabilities();
|
1379 |
|
1380 |
// WordPress core updates needed
|
1381 |
-
if ($
|
1382 |
-
$added = $this->addIssue('wfUpgrade', 1, 'wfUpgrade' . $
|
1383 |
'currentVersion' => $this->wp_version,
|
1384 |
-
'newVersion' => $
|
1385 |
));
|
1386 |
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1387 |
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1388 |
}
|
|
|
|
|
1389 |
|
1390 |
// Plugin updates needed
|
1391 |
-
if (count($
|
1392 |
-
foreach ($
|
1393 |
$severity = 1; //Critical
|
1394 |
-
if (isset($plugin['
|
1395 |
-
if (!$plugin['
|
1396 |
$severity = 2; //Warning
|
1397 |
}
|
1398 |
}
|
@@ -1401,25 +1507,122 @@ class wfScanEngine {
|
|
1401 |
$added = $this->addIssue('wfPluginUpgrade', $severity, $key, $key, $shortMsg, "You need to upgrade \"" . $plugin['Name'] . "\" to the newest version to ensure you have any security fixes the developer has released.", $plugin);
|
1402 |
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1403 |
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
|
|
|
|
|
|
|
|
1404 |
}
|
1405 |
}
|
1406 |
|
1407 |
// Theme updates needed
|
1408 |
-
if (count($
|
1409 |
-
foreach ($
|
1410 |
$severity = 1; //Critical
|
1411 |
-
if (isset($theme['
|
1412 |
-
if (!$theme['
|
1413 |
$severity = 2; //Warning
|
1414 |
}
|
1415 |
}
|
1416 |
$key = 'wfThemeUpgrade' . ' ' . $theme['Name'] . ' ' . $theme['version'] . ' ' . $theme['newVersion'];
|
1417 |
$shortMsg = "The Theme \"" . $theme['Name'] . "\" needs an upgrade (" . $theme['version'] . " -> " . $theme['newVersion'] . ").";
|
1418 |
-
$added = $this->addIssue('wfThemeUpgrade', $severity, $key, $key, $shortMsg, "You need to upgrade \"" . $theme['Name'] . "\" to the newest version to ensure you have any security fixes the developer has released.", $theme);
|
1419 |
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1420 |
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1421 |
}
|
1422 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1423 |
|
1424 |
wfIssues::statusEnd($this->statusIDX['oldVersions'], $haveIssues);
|
1425 |
}
|
@@ -1453,9 +1656,11 @@ class wfScanEngine {
|
|
1453 |
wordfence::status($level, $type, $msg);
|
1454 |
}
|
1455 |
public function addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) {
|
|
|
1456 |
return $this->i->addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed);
|
1457 |
}
|
1458 |
public function addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData){
|
|
|
1459 |
return $this->i->addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData);
|
1460 |
}
|
1461 |
public function getPendingIssueCount() {
|
@@ -1531,21 +1736,21 @@ class wfScanEngine {
|
|
1531 |
public function processResponse($result){
|
1532 |
return false;
|
1533 |
}
|
1534 |
-
public static function getMaxExecutionTime(){
|
1535 |
$config = wfConfig::get('maxExecutionTime');
|
1536 |
-
wordfence::status(4, 'info', "Got value from wf config maxExecutionTime: $config");
|
1537 |
if(is_numeric($config) && $config >= 10){
|
1538 |
-
wordfence::status(4, 'info', "getMaxExecutionTime() returning config value: $config");
|
1539 |
return $config;
|
1540 |
}
|
1541 |
$ini = @ini_get('max_execution_time');
|
1542 |
-
wordfence::status(4, 'info', "Got max_execution_time value from ini: $ini");
|
1543 |
if(is_numeric($ini) && $ini >= 10){
|
1544 |
$ini = floor($ini / 2);
|
1545 |
-
wordfence::status(4, 'info', "getMaxExecutionTime() returning half ini value: $ini");
|
1546 |
return $ini;
|
1547 |
}
|
1548 |
-
wordfence::status(4, 'info', "getMaxExecutionTime() returning default of: 15");
|
1549 |
return 15;
|
1550 |
}
|
1551 |
|
@@ -1563,6 +1768,11 @@ class wfScanEngine {
|
|
1563 |
* @return array
|
1564 |
*/
|
1565 |
public function getPlugins() {
|
|
|
|
|
|
|
|
|
|
|
1566 |
if(! function_exists( 'get_plugins')){
|
1567 |
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
1568 |
}
|
@@ -1927,3 +2137,6 @@ class wfPubliclyAccessibleFileTest extends wfCommonBackupFileTest {
|
|
1927 |
|
1928 |
class wfScanEngineDurationLimitException extends Exception {
|
1929 |
}
|
|
|
|
|
|
41 |
private $passwdHasIssues = wfIssues::STATUS_SECURE;
|
42 |
private $suspectedFiles = false; //Files found with the ".suspected" extension
|
43 |
private $gsbMultisiteBlogOffset = 0;
|
44 |
+
private $updateCheck = false;
|
45 |
+
private $pluginRepoStatus = array();
|
46 |
|
47 |
/**
|
48 |
* @var wordfenceDBScanner
|
109 |
if ($failureType == 'duration') {
|
110 |
new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '<a href="' . network_admin_url('admin.php?page=WordfenceScan') . '">Scan aborted due to duration limit</a>', 'wfplugin_scan');
|
111 |
}
|
112 |
+
else if ($failureType == 'versionchange') {
|
113 |
+
//No need to create a notification
|
114 |
+
}
|
115 |
else {
|
116 |
$trimmedError = substr($message, 0, 100) . (strlen($message) > 100 ? '...' : '');
|
117 |
new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '<a href="' . network_admin_url('admin.php?page=WordfenceScan') . '">Scan failed: ' . esc_html($trimmedError) . '</a>', 'wfplugin_scan');
|
120 |
}
|
121 |
|
122 |
public function __sleep(){ //Same order here as above for properties that are included in serialization
|
123 |
+
return array('hasher', 'jobList', 'i', 'wp_version', 'apiKey', 'startTime', 'maxExecTime', 'publicScanEnabled', 'fileContentsResults', 'scanner', 'scanQueue', 'hoover', 'scanData', 'statusIDX', 'userPasswdQueue', 'passwdHasIssues', 'suspectedFiles', 'dbScanner', 'knownFilesLoader', 'metrics', 'checkHowGetIPsRequestTime', 'gsbMultisiteBlogOffset', 'updateCheck', 'pluginRepoStatus');
|
124 |
}
|
125 |
public function __construct(){
|
126 |
$this->startTime = time();
|
196 |
wfScanEngine::refreshScanNotification($this->i);
|
197 |
throw $e;
|
198 |
}
|
199 |
+
catch (wfScanEngineCoreVersionChangeException $e) {
|
200 |
+
wfConfig::set('lastScanCompleted', $e->getMessage());
|
201 |
+
wfConfig::set('lastScanFailureType', 'versionchange');
|
202 |
+
$this->i->setScanTimeNow();
|
203 |
+
|
204 |
+
$this->recordMetric('scan', 'duration', (time() - $this->startTime));
|
205 |
+
$this->recordMetric('scan', 'memory', wfConfig::get('wfPeakMemory', 0, false));
|
206 |
+
$this->submitMetrics();
|
207 |
+
|
208 |
+
wfScanEngine::refreshScanNotification($this->i);
|
209 |
+
throw $e;
|
210 |
+
}
|
211 |
catch(Exception $e) {
|
212 |
wfConfig::set('lastScanCompleted', $e->getMessage());
|
213 |
wfConfig::set('lastScanFailureType', 'general');
|
221 |
}
|
222 |
}
|
223 |
public function checkForDurationLimit() {
|
224 |
+
static $timeLimit = false;
|
225 |
+
if ($timeLimit === false) {
|
226 |
+
$timeLimit = intval(wfConfig::get('scan_maxDuration'));
|
227 |
+
if ($timeLimit < 1) {
|
228 |
+
$timeLimit = WORDFENCE_DEFAULT_MAX_SCAN_TIME;
|
229 |
+
}
|
230 |
}
|
231 |
|
232 |
if ((time() - $this->startTime) > $timeLimit){
|
243 |
throw new wfScanEngineDurationLimitException($error);
|
244 |
}
|
245 |
}
|
246 |
+
public function checkForCoreVersionChange() {
|
247 |
+
$startVersion = wfConfig::get('wfScanStartVersion');
|
248 |
+
$currentVersion = wfUtils::getWPVersion(true);
|
249 |
+
if (version_compare($startVersion, $currentVersion) != 0) {
|
250 |
+
throw new wfScanEngineCoreVersionChangeException("Aborting scan because WordPress updated from version {$startVersion} to {$currentVersion}. The scan will be reattempted later.");
|
251 |
+
}
|
252 |
+
}
|
253 |
public function shouldFork() {
|
254 |
+
static $lastCheck = 0;
|
255 |
+
|
256 |
+
if (time() - $this->cycleStartTime > $this->maxExecTime) {
|
257 |
+
return true;
|
258 |
+
}
|
259 |
+
|
260 |
+
if ($lastCheck > time() - $this->maxExecTime) {
|
261 |
+
return false;
|
262 |
+
}
|
263 |
+
$lastCheck = time();
|
264 |
+
|
265 |
+
$this->checkForCoreVersionChange();
|
266 |
+
wfIssues::updateScanStillRunning();
|
267 |
+
self::checkForKill();
|
268 |
+
$this->checkForDurationLimit();
|
269 |
+
|
270 |
+
return false;
|
271 |
}
|
272 |
public function forkIfNeeded(){
|
273 |
+
wfIssues::updateScanStillRunning();
|
274 |
+
$this->checkForCoreVersionChange();
|
275 |
self::checkForKill();
|
276 |
$this->checkForDurationLimit();
|
277 |
if(time() - $this->cycleStartTime > $this->maxExecTime){
|
911 |
|
912 |
if ($result['badList'] == 'goog-malware-shavar') {
|
913 |
$shortMsg = "{$uctype} contains a suspected malware URL: " . esc_html($title);
|
914 |
+
$longMsg = "This " . esc_html($type) . " contains a suspected malware URL listed on Google's list of malware sites. The URL is: " . esc_html($result['URL']) . " - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=" . urlencode($result['URL']) . "&client=googlechrome&hl=en-US\" target=\"_blank\">Google Safe Browsing diagnostic page</a>.";
|
915 |
}
|
916 |
else if ($result['badList'] == 'googpub-phish-shavar') {
|
917 |
$shortMsg = "{$uctype} contains a suspected phishing site URL: " . esc_html($title);
|
918 |
+
$longMsg = "This " . esc_html($type) . " contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. The URL is: " . esc_html($result['URL']);
|
919 |
}
|
920 |
else if ($result['badList'] == 'wordfence-dbl') {
|
921 |
$shortMsg = "{$uctype} contains a suspected malware URL: " . esc_html($title);
|
922 |
+
$longMsg = "This " . esc_html($type) . " contains a URL that is currently listed on Wordfence's domain blacklist. The URL is: " . esc_html($result['URL']);
|
923 |
}
|
924 |
else {
|
925 |
//A list type that may be new and the plugin has not been upgraded yet.
|
1029 |
|
1030 |
if ($result['badList'] == 'goog-malware-shavar') {
|
1031 |
$shortMsg = "$uctype with author " . esc_html($author) . " contains a suspected malware URL.";
|
1032 |
+
$longMsg = "This " . esc_html($type) . " contains a suspected malware URL listed on Google's list of malware sites. The URL is: " . esc_html($result['URL']) . " - More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=" . urlencode($result['URL']) . "&client=googlechrome&hl=en-US\" target=\"_blank\">Google Safe Browsing diagnostic page</a>.";
|
1033 |
}
|
1034 |
else if ($result['badList'] == 'googpub-phish-shavar') {
|
1035 |
$shortMsg = "$uctype contains a suspected phishing site URL.";
|
1036 |
+
$longMsg = "This " . esc_html($type) . " contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. The URL is: " . esc_html($result['URL']);
|
1037 |
}
|
1038 |
else if ($result['badList'] == 'wordfence-dbl') {
|
1039 |
$shortMsg = "$uctype contains a suspected malware URL.";
|
1040 |
+
$longMsg = "This " . esc_html($type) . " contains a URL that is currently listed on Wordfence's domain blacklist. The URL is: " . esc_html($result['URL']);
|
1041 |
}
|
1042 |
|
1043 |
if(is_multisite()){
|
1413 |
}
|
1414 |
wfIssues::statusEnd($this->statusIDX['dns'], $haveIssues);
|
1415 |
}
|
1416 |
+
|
1417 |
+
private function scan_oldVersions_init() {
|
1418 |
$this->statusIDX['oldVersions'] = wfIssues::statusStart("Scanning for old themes, plugins and core files");
|
1419 |
+
|
1420 |
+
$this->updateCheck = new wfUpdateCheck();
|
1421 |
+
$this->updateCheck->checkAllUpdates(false);
|
1422 |
+
$this->updateCheck->checkAllVulnerabilities();
|
1423 |
+
|
1424 |
+
foreach ($this->updateCheck->getPluginSlugs() as $slug) {
|
1425 |
+
$this->pluginRepoStatus[$slug] = false;
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
//Strip plugins that have a pending update
|
1429 |
+
if (count($this->updateCheck->getPluginUpdates()) > 0) {
|
1430 |
+
foreach ($this->updateCheck->getPluginUpdates() as $plugin) {
|
1431 |
+
if (!empty($plugin['slug'])) {
|
1432 |
+
unset($this->pluginRepoStatus[$plugin['slug']]);
|
1433 |
+
}
|
1434 |
+
}
|
1435 |
+
}
|
1436 |
+
}
|
1437 |
+
|
1438 |
+
private function scan_oldVersions_main() {
|
1439 |
+
if (!function_exists('plugins_api')) {
|
1440 |
+
require_once(ABSPATH . 'wp-admin/includes/plugin-install.php');
|
1441 |
+
}
|
1442 |
+
|
1443 |
+
foreach ($this->pluginRepoStatus as $slug => $status) {
|
1444 |
+
if ($status === false) {
|
1445 |
+
$result = plugins_api('plugin_information', array(
|
1446 |
+
'slug' => $slug,
|
1447 |
+
'fields' => array(
|
1448 |
+
'short_description' => false,
|
1449 |
+
'description' => false,
|
1450 |
+
'sections' => false,
|
1451 |
+
'tested' => true,
|
1452 |
+
'requires' => true,
|
1453 |
+
'rating' => false,
|
1454 |
+
'ratings' => false,
|
1455 |
+
'downloaded' => false,
|
1456 |
+
'downloadlink' => false,
|
1457 |
+
'last_updated' => true,
|
1458 |
+
'added' => false,
|
1459 |
+
'tags' => false,
|
1460 |
+
'compatibility' => true,
|
1461 |
+
'homepage' => true,
|
1462 |
+
'versions' => false,
|
1463 |
+
'donate_link' => false,
|
1464 |
+
'reviews' => false,
|
1465 |
+
'banners' => false,
|
1466 |
+
'icons' => false,
|
1467 |
+
'active_installs' => false,
|
1468 |
+
'group' => false,
|
1469 |
+
'contributors' => false,
|
1470 |
+
),
|
1471 |
+
));
|
1472 |
+
unset($result->versions);
|
1473 |
+
unset($result->screenshots);
|
1474 |
+
$this->pluginRepoStatus[$slug] = $result;
|
1475 |
+
|
1476 |
+
$this->forkIfNeeded();
|
1477 |
+
}
|
1478 |
+
}
|
1479 |
+
}
|
1480 |
|
1481 |
+
private function scan_oldVersions_finish() {
|
1482 |
+
$haveIssues = wfIssues::STATUS_SECURE;
|
|
|
1483 |
|
1484 |
// WordPress core updates needed
|
1485 |
+
if ($this->updateCheck->needsCoreUpdate()) {
|
1486 |
+
$added = $this->addIssue('wfUpgrade', 1, 'wfUpgrade' . $this->updateCheck->getCoreUpdateVersion(), 'wfUpgrade' . $this->updateCheck->getCoreUpdateVersion(), "Your WordPress version is out of date", "WordPress version " . esc_html($this->updateCheck->getCoreUpdateVersion()) . " is now available. Please upgrade immediately to get the latest security updates from WordPress.", array(
|
1487 |
'currentVersion' => $this->wp_version,
|
1488 |
+
'newVersion' => $this->updateCheck->getCoreUpdateVersion(),
|
1489 |
));
|
1490 |
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1491 |
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1492 |
}
|
1493 |
+
|
1494 |
+
$allPlugins = $this->updateCheck->getAllPlugins();
|
1495 |
|
1496 |
// Plugin updates needed
|
1497 |
+
if (count($this->updateCheck->getPluginUpdates()) > 0) {
|
1498 |
+
foreach ($this->updateCheck->getPluginUpdates() as $plugin) {
|
1499 |
$severity = 1; //Critical
|
1500 |
+
if (isset($plugin['vulnerable'])) {
|
1501 |
+
if (!$plugin['vulnerable']) {
|
1502 |
$severity = 2; //Warning
|
1503 |
}
|
1504 |
}
|
1507 |
$added = $this->addIssue('wfPluginUpgrade', $severity, $key, $key, $shortMsg, "You need to upgrade \"" . $plugin['Name'] . "\" to the newest version to ensure you have any security fixes the developer has released.", $plugin);
|
1508 |
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1509 |
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1510 |
+
|
1511 |
+
if (isset($plugin['slug'])) {
|
1512 |
+
unset($allPlugins[$plugin['slug']]);
|
1513 |
+
}
|
1514 |
}
|
1515 |
}
|
1516 |
|
1517 |
// Theme updates needed
|
1518 |
+
if (count($this->updateCheck->getThemeUpdates()) > 0) {
|
1519 |
+
foreach ($this->updateCheck->getThemeUpdates() as $theme) {
|
1520 |
$severity = 1; //Critical
|
1521 |
+
if (isset($theme['vulnerable'])) {
|
1522 |
+
if (!$theme['vulnerable']) {
|
1523 |
$severity = 2; //Warning
|
1524 |
}
|
1525 |
}
|
1526 |
$key = 'wfThemeUpgrade' . ' ' . $theme['Name'] . ' ' . $theme['version'] . ' ' . $theme['newVersion'];
|
1527 |
$shortMsg = "The Theme \"" . $theme['Name'] . "\" needs an upgrade (" . $theme['version'] . " -> " . $theme['newVersion'] . ").";
|
1528 |
+
$added = $this->addIssue('wfThemeUpgrade', $severity, $key, $key, $shortMsg, "You need to upgrade \"" . esc_html($theme['Name']) . "\" to the newest version to ensure you have any security fixes the developer has released.", $theme);
|
1529 |
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1530 |
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1531 |
}
|
1532 |
}
|
1533 |
+
|
1534 |
+
//Abandoned plugins
|
1535 |
+
foreach ($this->pluginRepoStatus as $slug => $status) {
|
1536 |
+
if ($status !== false && !is_wp_error($status) && property_exists($status, 'last_updated')) {
|
1537 |
+
$lastUpdateTimestamp = strtotime($status->last_updated);
|
1538 |
+
if ($lastUpdateTimestamp > 0 && (time() - $lastUpdateTimestamp) > 63072000 /* ~2 years */) {
|
1539 |
+
$statusArray = (array) $status;
|
1540 |
+
$statusArray['dateUpdated'] = wfUtils::formatLocalTime(get_option('date_format'), $lastUpdateTimestamp);
|
1541 |
+
$severity = 2; //Warning
|
1542 |
+
$statusArray['abandoned'] = true;
|
1543 |
+
$statusArray['vulnerable'] = false;
|
1544 |
+
if ($this->updateCheck->isPluginVulnerable($slug, $statusArray['version'])) {
|
1545 |
+
$severity = 1; //Critical
|
1546 |
+
$statusArray['vulnerable'] = true;
|
1547 |
+
}
|
1548 |
+
|
1549 |
+
if (isset($allPlugins[$slug])) {
|
1550 |
+
$statusArray['wpURL'] = $allPlugins[$slug]['wpURL'];
|
1551 |
+
}
|
1552 |
+
|
1553 |
+
$key = "wfPluginAbandoned {$slug} {$statusArray['version']}";
|
1554 |
+
$shortMsg = 'The Plugin "' . $statusArray['name'] . '" appears to be abandoned.';
|
1555 |
+
$longMsg = 'It was last updated ' . wfUtils::makeTimeAgo(time() - $lastUpdateTimestamp) . ' ago.';
|
1556 |
+
if ($statusArray['vulnerable']) {
|
1557 |
+
$longMsg .= ' It has unpatched security issues and may have compatibility problems with the current version of WordPress.';
|
1558 |
+
}
|
1559 |
+
else {
|
1560 |
+
$longMsg .= ' It may have compatibility problems with the current version of WordPress or unknown security issues.';
|
1561 |
+
}
|
1562 |
+
$longMsg .= ' <a href="https://docs.wordfence.com/en/Understanding_scan_results#Plugin_appears_to_be_abandoned" target="_blank">Get more information.</a>';
|
1563 |
+
$added = $this->addIssue('wfPluginAbandoned', $severity, $key, $key, $shortMsg, $longMsg, $statusArray);
|
1564 |
+
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1565 |
+
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1566 |
+
|
1567 |
+
unset($allPlugins[$slug]);
|
1568 |
+
}
|
1569 |
+
}
|
1570 |
+
else if ($status !== false && is_wp_error($status) && isset($status->error_data['plugins_api_failed']) && $status->error_data['plugins_api_failed'] == 'N;') { //The plugin does not exist in the wp.org repo
|
1571 |
+
$knownFiles = $this->getKnownFilesLoader()->getKnownFiles();
|
1572 |
+
$requestedPlugins = $this->getPlugins();
|
1573 |
+
foreach ($requestedPlugins as $key => $data) {
|
1574 |
+
$testKey = trailingslashit($data['FullDir']) . '.';
|
1575 |
+
if ($data['ShortDir'] == $slug && isset($knownFiles['plugins'][$testKey])) { //It existed in the repo at some point and was removed
|
1576 |
+
$pluginFile = wfUtils::getPluginBaseDir() . $key;
|
1577 |
+
$pluginData = get_plugin_data($pluginFile);
|
1578 |
+
$pluginData['wpRemoved'] = true;
|
1579 |
+
$pluginData['vulnerable'] = false;
|
1580 |
+
if ($this->updateCheck->isPluginVulnerable($slug, $pluginData['Version'])) {
|
1581 |
+
$pluginData['vulnerable'] = true;
|
1582 |
+
}
|
1583 |
+
|
1584 |
+
$key = "wfPluginRemoved {$slug} {$pluginData['Version']}";
|
1585 |
+
$shortMsg = 'The Plugin "' . $pluginData['Name'] . '" has been removed from wordpress.org.';
|
1586 |
+
if ($pluginData['vulnerable']) {
|
1587 |
+
$longMsg = 'It has unpatched security issues and may have compatibility problems with the current version of WordPress.';
|
1588 |
+
}
|
1589 |
+
else {
|
1590 |
+
$longMsg = 'It may have compatibility problems with the current version of WordPress or unknown security issues.';
|
1591 |
+
}
|
1592 |
+
$longMsg .= ' <a href="https://docs.wordfence.com/en/Understanding_scan_results#Plugin_has_been_removed_from_wordpress.org" target="_blank">Get more information.</a>';
|
1593 |
+
$added = $this->addIssue('wfPluginRemoved', 1, $key, $key, $shortMsg, $longMsg, $pluginData);
|
1594 |
+
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1595 |
+
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1596 |
+
|
1597 |
+
unset($allPlugins[$slug]);
|
1598 |
+
}
|
1599 |
+
}
|
1600 |
+
}
|
1601 |
+
}
|
1602 |
+
|
1603 |
+
//Other vulnerable plugins
|
1604 |
+
//Disabled until we improve the data source to weed out false positives
|
1605 |
+
/*if (count($allPlugins) > 0) {
|
1606 |
+
foreach ($allPlugins as $plugin) {
|
1607 |
+
if (!isset($plugin['vulnerable']) || !$plugin['vulnerable']) {
|
1608 |
+
continue;
|
1609 |
+
}
|
1610 |
+
|
1611 |
+
$key = 'wfPluginVulnerable' . ' ' . $plugin['pluginFile'] . ' ' . $plugin['Version'];
|
1612 |
+
$shortMsg = "The Plugin \"" . $plugin['Name'] . "\" has an unpatched security vulnerability.";
|
1613 |
+
$longMsg = 'To protect your site from this vulnerability, the safest option is to deactivate and completely remove ' . esc_html($plugin['Name']) . ' until the developer releases a security fix. <a href="https://docs.wordfence.com/en/Understanding_scan_results#Plugin_has_an_unpatched_security_vulnerability" target="_blank">Get more information.</a>';
|
1614 |
+
$added = $this->addIssue('wfPluginVulnerable', 1, $key, $key, $shortMsg, $longMsg, $plugin);
|
1615 |
+
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; }
|
1616 |
+
else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; }
|
1617 |
+
|
1618 |
+
if (isset($plugin['slug'])) {
|
1619 |
+
unset($allPlugins[$plugin['slug']]);
|
1620 |
+
}
|
1621 |
+
}
|
1622 |
+
}*/
|
1623 |
+
|
1624 |
+
$this->updateCheck = false;
|
1625 |
+
$this->pluginRepoStatus = array();
|
1626 |
|
1627 |
wfIssues::statusEnd($this->statusIDX['oldVersions'], $haveIssues);
|
1628 |
}
|
1656 |
wordfence::status($level, $type, $msg);
|
1657 |
}
|
1658 |
public function addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) {
|
1659 |
+
wfIssues::updateScanStillRunning();
|
1660 |
return $this->i->addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed);
|
1661 |
}
|
1662 |
public function addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData){
|
1663 |
+
wfIssues::updateScanStillRunning();
|
1664 |
return $this->i->addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData);
|
1665 |
}
|
1666 |
public function getPendingIssueCount() {
|
1736 |
public function processResponse($result){
|
1737 |
return false;
|
1738 |
}
|
1739 |
+
public static function getMaxExecutionTime($staySilent = false) {
|
1740 |
$config = wfConfig::get('maxExecutionTime');
|
1741 |
+
if (!$staySilent) { wordfence::status(4, 'info', "Got value from wf config maxExecutionTime: $config"); }
|
1742 |
if(is_numeric($config) && $config >= 10){
|
1743 |
+
if (!$staySilent) { wordfence::status(4, 'info', "getMaxExecutionTime() returning config value: $config"); }
|
1744 |
return $config;
|
1745 |
}
|
1746 |
$ini = @ini_get('max_execution_time');
|
1747 |
+
if (!$staySilent) { wordfence::status(4, 'info', "Got max_execution_time value from ini: $ini"); }
|
1748 |
if(is_numeric($ini) && $ini >= 10){
|
1749 |
$ini = floor($ini / 2);
|
1750 |
+
if (!$staySilent) { wordfence::status(4, 'info', "getMaxExecutionTime() returning half ini value: $ini"); }
|
1751 |
return $ini;
|
1752 |
}
|
1753 |
+
if (!$staySilent) { wordfence::status(4, 'info', "getMaxExecutionTime() returning default of: 15"); }
|
1754 |
return 15;
|
1755 |
}
|
1756 |
|
1768 |
* @return array
|
1769 |
*/
|
1770 |
public function getPlugins() {
|
1771 |
+
static $plugins = null;
|
1772 |
+
if ($plugins !== null) {
|
1773 |
+
return $plugins;
|
1774 |
+
}
|
1775 |
+
|
1776 |
if(! function_exists( 'get_plugins')){
|
1777 |
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
1778 |
}
|
2137 |
|
2138 |
class wfScanEngineDurationLimitException extends Exception {
|
2139 |
}
|
2140 |
+
|
2141 |
+
class wfScanEngineCoreVersionChangeException extends Exception {
|
2142 |
+
}
|
lib/wfUnlockMsg.php
CHANGED
@@ -1,8 +1,17 @@
|
|
1 |
If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="https://docs.wordfence.com/en/Help!_I_locked_myself_out_and_can't_get_back_in._What_can_I_do%3F" target="_blank">Please read this FAQ entry if this does not work.</a>
|
2 |
<br /><br />
|
3 |
-
<form method="POST"
|
4 |
<?php require_once(ABSPATH .'wp-includes/pluggable.php'); ?>
|
5 |
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce('wf-form'); ?>" />
|
6 |
-
<input type="text" size="50" name="email" value="" maxlength="255" /> <input type="submit" name="s" value="Send me an unlock email" />
|
7 |
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
<br /><br />
|
1 |
If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="https://docs.wordfence.com/en/Help!_I_locked_myself_out_and_can't_get_back_in._What_can_I_do%3F" target="_blank">Please read this FAQ entry if this does not work.</a>
|
2 |
<br /><br />
|
3 |
+
<form method="POST" id="unlock-form" action="#">
|
4 |
<?php require_once(ABSPATH .'wp-includes/pluggable.php'); ?>
|
5 |
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce('wf-form'); ?>" />
|
6 |
+
<input type="text" size="50" name="email" id="unlock-email" value="" maxlength="255" /> <input type="submit" id="unlock-submit" name="s" value="Send me an unlock email" disabled />
|
7 |
</form>
|
8 |
+
<script type="application/javascript">
|
9 |
+
(function() {
|
10 |
+
var textfield = document.getElementById('unlock-email');
|
11 |
+
textfield.addEventListener('focus', function() {
|
12 |
+
document.getElementById('unlock-form').action = "<?php echo esc_attr(wfUtils::getSiteBaseURL()); ?>" + "?_wfsf=unlockEmail";
|
13 |
+
document.getElementById('unlock-submit').disabled = false;
|
14 |
+
});
|
15 |
+
})();
|
16 |
+
</script>
|
17 |
<br /><br />
|
lib/wfUpdateCheck.php
CHANGED
@@ -5,13 +5,23 @@ class wfUpdateCheck {
|
|
5 |
private $needs_core_update = false;
|
6 |
private $core_update_version = 0;
|
7 |
private $plugin_updates = array();
|
|
|
|
|
8 |
private $theme_updates = array();
|
9 |
private $api = null;
|
10 |
|
11 |
public function __construct() {
|
12 |
$this->api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
13 |
}
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
/**
|
16 |
* @return bool
|
17 |
*/
|
@@ -88,6 +98,12 @@ class wfUpdateCheck {
|
|
88 |
wp_update_plugins();
|
89 |
$update_plugins = get_site_transient('update_plugins');
|
90 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
|
92 |
if ($update_plugins && !empty($update_plugins->response)) {
|
93 |
foreach ($update_plugins->response as $plugin => $vals) {
|
@@ -98,22 +114,88 @@ class wfUpdateCheck {
|
|
98 |
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
99 |
$valsArray = (array) $vals;
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
$data = get_plugin_data($pluginFile);
|
102 |
$data['pluginFile'] = $pluginFile;
|
103 |
$data['newVersion'] = (isset($valsArray['new_version']) ? $valsArray['new_version'] : 'Unknown');
|
104 |
-
$data['slug'] =
|
105 |
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
106 |
|
107 |
//Check the vulnerability database
|
108 |
-
if (
|
109 |
-
$data['
|
110 |
}
|
111 |
else {
|
112 |
-
$data['
|
113 |
}
|
114 |
|
|
|
|
|
|
|
|
|
115 |
|
116 |
$this->plugin_updates[] = $data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
}
|
118 |
}
|
119 |
|
@@ -149,9 +231,9 @@ class wfUpdateCheck {
|
|
149 |
foreach ($update_themes->response as $theme => $vals) {
|
150 |
foreach ($themes as $name => $themeData) {
|
151 |
if (strtolower($name) == $theme) {
|
152 |
-
$
|
153 |
if (isset($themeData['Version'])) {
|
154 |
-
$
|
155 |
}
|
156 |
|
157 |
$this->theme_updates[] = array(
|
@@ -161,7 +243,7 @@ class wfUpdateCheck {
|
|
161 |
'Name' => $themeData['Name'],
|
162 |
'name' => $themeData['Name'],
|
163 |
'version' => $themeData['Version'],
|
164 |
-
'
|
165 |
);
|
166 |
}
|
167 |
}
|
@@ -184,29 +266,98 @@ class wfUpdateCheck {
|
|
184 |
require_once(ABSPATH . '/wp-admin/includes/plugin-install.php');
|
185 |
}
|
186 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
$this->checkPluginUpdates();
|
188 |
$update_plugins = get_site_transient('update_plugins');
|
189 |
-
|
190 |
-
$vulnerabilities = array();
|
191 |
-
if ($update_plugins && !empty($update_plugins->response)) {
|
192 |
if (!function_exists('get_plugin_data'))
|
193 |
{
|
194 |
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
195 |
}
|
196 |
|
197 |
-
|
198 |
-
$
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
210 |
try {
|
211 |
$result = $this->api->call('plugin_vulnerability_check', array(), array(
|
212 |
'plugins' => json_encode($vulnerabilities),
|
@@ -216,7 +367,7 @@ class wfUpdateCheck {
|
|
216 |
$vulnerableList = $result['vulnerable'];
|
217 |
foreach ($vulnerableList as $r) {
|
218 |
if ($r['slug'] == $v['slug']) {
|
219 |
-
$v['vulnerable'] = !!$r['vulnerable'];
|
220 |
break;
|
221 |
}
|
222 |
}
|
@@ -300,13 +451,13 @@ class wfUpdateCheck {
|
|
300 |
if ($v['fromVersion'] == 'Unknown' && $v['toVersion'] == 'Unknown') {
|
301 |
return $v['vulnerable'];
|
302 |
}
|
303 |
-
else if ($v['toVersion'] == 'Unknown' && version_compare($version, $v['fromVersion']) >= 0) {
|
304 |
return $v['vulnerable'];
|
305 |
}
|
306 |
-
else if ($v['fromVersion'] == 'Unknown' && version_compare($version, $v['toVersion']) < 0) {
|
307 |
return $v['vulnerable'];
|
308 |
}
|
309 |
-
else if (version_compare($version, $v['fromVersion']) >= 0 && version_compare($version, $v['toVersion']) < 0) {
|
310 |
return $v['vulnerable'];
|
311 |
}
|
312 |
}
|
@@ -334,6 +485,20 @@ class wfUpdateCheck {
|
|
334 |
public function getPluginUpdates() {
|
335 |
return $this->plugin_updates;
|
336 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
|
338 |
/**
|
339 |
* @return array
|
5 |
private $needs_core_update = false;
|
6 |
private $core_update_version = 0;
|
7 |
private $plugin_updates = array();
|
8 |
+
private $all_plugins = array();
|
9 |
+
private $plugin_slugs = array();
|
10 |
private $theme_updates = array();
|
11 |
private $api = null;
|
12 |
|
13 |
public function __construct() {
|
14 |
$this->api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
15 |
}
|
16 |
+
|
17 |
+
public function __sleep() {
|
18 |
+
return array('needs_core_update', 'core_update_version', 'plugin_updates', 'all_plugins', 'plugin_slugs', 'theme_updates');
|
19 |
+
}
|
20 |
+
|
21 |
+
public function __wakeup() {
|
22 |
+
$this->api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
23 |
+
}
|
24 |
+
|
25 |
/**
|
26 |
* @return bool
|
27 |
*/
|
98 |
wp_update_plugins();
|
99 |
$update_plugins = get_site_transient('update_plugins');
|
100 |
}
|
101 |
+
|
102 |
+
//Get the full plugin list
|
103 |
+
if (!function_exists('get_plugins')) {
|
104 |
+
require_once(ABSPATH . '/wp-admin/includes/plugin.php');
|
105 |
+
}
|
106 |
+
$installedPlugins = get_plugins();
|
107 |
|
108 |
if ($update_plugins && !empty($update_plugins->response)) {
|
109 |
foreach ($update_plugins->response as $plugin => $vals) {
|
114 |
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
115 |
$valsArray = (array) $vals;
|
116 |
|
117 |
+
$slug = (isset($valsArray['slug']) ? $valsArray['slug'] : null);
|
118 |
+
if ($slug === null) { //Plugin may have been removed from the repo or was never in it so guess
|
119 |
+
if (preg_match('/^([^\/]+)\//', $pluginFile, $matches)) {
|
120 |
+
$slug = $matches[1];
|
121 |
+
}
|
122 |
+
else if (preg_match('/^([^\/.]+)\.php$/', $pluginFile, $matches)) {
|
123 |
+
$slug = $matches[1];
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
$data = get_plugin_data($pluginFile);
|
128 |
$data['pluginFile'] = $pluginFile;
|
129 |
$data['newVersion'] = (isset($valsArray['new_version']) ? $valsArray['new_version'] : 'Unknown');
|
130 |
+
$data['slug'] = $slug;
|
131 |
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
132 |
|
133 |
//Check the vulnerability database
|
134 |
+
if ($slug !== null && isset($data['Version'])) {
|
135 |
+
$data['vulnerable'] = $this->isPluginVulnerable($slug, $data['Version']);
|
136 |
}
|
137 |
else {
|
138 |
+
$data['vulnerable'] = false;
|
139 |
}
|
140 |
|
141 |
+
if ($slug !== null) {
|
142 |
+
$this->plugin_slugs[] = $slug;
|
143 |
+
$this->all_plugins[$slug] = $data;
|
144 |
+
}
|
145 |
|
146 |
$this->plugin_updates[] = $data;
|
147 |
+
unset($installedPlugins[$plugin]);
|
148 |
+
}
|
149 |
+
}
|
150 |
+
|
151 |
+
//We have to grab the slugs from the update response because no built-in function exists to return the true slug from the local files
|
152 |
+
if ($update_plugins && !empty($update_plugins->no_update)) {
|
153 |
+
foreach ($update_plugins->no_update as $plugin => $vals) {
|
154 |
+
if (!function_exists('get_plugin_data')) {
|
155 |
+
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
156 |
+
}
|
157 |
+
|
158 |
+
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
159 |
+
$valsArray = (array) $vals;
|
160 |
+
|
161 |
+
$data = get_plugin_data($pluginFile);
|
162 |
+
$data['pluginFile'] = $pluginFile;
|
163 |
+
$data['slug'] = (isset($valsArray['slug']) ? $valsArray['slug'] : null);
|
164 |
+
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
165 |
+
|
166 |
+
//Check the vulnerability database
|
167 |
+
if (isset($valsArray['slug']) && isset($data['Version'])) {
|
168 |
+
$data['vulnerable'] = $this->isPluginVulnerable($valsArray['slug'], $data['Version']);
|
169 |
+
}
|
170 |
+
else {
|
171 |
+
$data['vulnerable'] = false;
|
172 |
+
}
|
173 |
+
|
174 |
+
if (isset($valsArray['slug'])) {
|
175 |
+
$this->plugin_slugs[] = $valsArray['slug'];
|
176 |
+
$this->all_plugins[$valsArray['slug']] = $data;
|
177 |
+
}
|
178 |
+
|
179 |
+
unset($installedPlugins[$plugin]);
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
+
//Get the remaining plugins (not in the wordpress.org repo for whatever reason)
|
184 |
+
foreach ($installedPlugins as $plugin => $data) {
|
185 |
+
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
186 |
+
$data = get_plugin_data($pluginFile);
|
187 |
+
|
188 |
+
$slug = null;
|
189 |
+
if (preg_match('/^([^\/]+)\//', $plugin, $matches)) {
|
190 |
+
$slug = $matches[1];
|
191 |
+
}
|
192 |
+
else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) {
|
193 |
+
$slug = $matches[1];
|
194 |
+
}
|
195 |
+
|
196 |
+
if ($slug !== null) {
|
197 |
+
$this->plugin_slugs[] = $slug;
|
198 |
+
$this->all_plugins[$slug] = $data;
|
199 |
}
|
200 |
}
|
201 |
|
231 |
foreach ($update_themes->response as $theme => $vals) {
|
232 |
foreach ($themes as $name => $themeData) {
|
233 |
if (strtolower($name) == $theme) {
|
234 |
+
$vulnerable = false;
|
235 |
if (isset($themeData['Version'])) {
|
236 |
+
$vulnerable = $this->isThemeVulnerable($theme, $themeData['Version']);
|
237 |
}
|
238 |
|
239 |
$this->theme_updates[] = array(
|
243 |
'Name' => $themeData['Name'],
|
244 |
'name' => $themeData['Name'],
|
245 |
'version' => $themeData['Version'],
|
246 |
+
'vulnerable' => $vulnerable
|
247 |
);
|
248 |
}
|
249 |
}
|
266 |
require_once(ABSPATH . '/wp-admin/includes/plugin-install.php');
|
267 |
}
|
268 |
|
269 |
+
$vulnerabilities = array();
|
270 |
+
|
271 |
+
//Get the full plugin list
|
272 |
+
if (!function_exists('get_plugins')) {
|
273 |
+
require_once(ABSPATH . '/wp-admin/includes/plugin.php');
|
274 |
+
}
|
275 |
+
$installedPlugins = get_plugins();
|
276 |
+
|
277 |
+
//Get the info for plugins on wordpress.org
|
278 |
$this->checkPluginUpdates();
|
279 |
$update_plugins = get_site_transient('update_plugins');
|
280 |
+
if ($update_plugins) {
|
|
|
|
|
281 |
if (!function_exists('get_plugin_data'))
|
282 |
{
|
283 |
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
284 |
}
|
285 |
|
286 |
+
if (!empty($update_plugins->response)) {
|
287 |
+
foreach ($update_plugins->response as $plugin => $vals) {
|
288 |
+
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
289 |
+
$valsArray = (array) $vals;
|
290 |
+
$data = get_plugin_data($pluginFile);
|
291 |
+
|
292 |
+
$slug = (isset($valsArray['slug']) ? $valsArray['slug'] : null);
|
293 |
+
if ($slug === null) { //Plugin may have been removed from the repo or was never in it so guess
|
294 |
+
if (preg_match('/^([^\/]+)\//', $plugin, $matches)) {
|
295 |
+
$slug = $matches[1];
|
296 |
+
}
|
297 |
+
else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) {
|
298 |
+
$slug = $matches[1];
|
299 |
+
}
|
300 |
+
}
|
301 |
+
|
302 |
+
$record = array();
|
303 |
+
$record['slug'] = $slug;
|
304 |
+
$record['toVersion'] = (isset($valsArray['new_version']) ? $valsArray['new_version'] : 'Unknown');
|
305 |
+
$record['fromVersion'] = (isset($data['Version']) ? $data['Version'] : 'Unknown');
|
306 |
+
$record['vulnerable'] = false;
|
307 |
+
$vulnerabilities[] = $record;
|
308 |
+
|
309 |
+
unset($installedPlugins[$plugin]);
|
310 |
+
}
|
311 |
+
}
|
312 |
+
|
313 |
+
if (!empty($update_plugins->no_update)) {
|
314 |
+
foreach ($update_plugins->no_update as $plugin => $vals) {
|
315 |
+
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
316 |
+
$valsArray = (array) $vals;
|
317 |
+
$data = get_plugin_data($pluginFile);
|
318 |
+
|
319 |
+
$slug = (isset($valsArray['slug']) ? $valsArray['slug'] : null);
|
320 |
+
if ($slug === null) { //Plugin may have been removed from the repo or was never in it so guess
|
321 |
+
if (preg_match('/^([^\/]+)\//', $plugin, $matches)) {
|
322 |
+
$slug = $matches[1];
|
323 |
+
}
|
324 |
+
else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) {
|
325 |
+
$slug = $matches[1];
|
326 |
+
}
|
327 |
+
}
|
328 |
+
|
329 |
+
$record = array();
|
330 |
+
$record['slug'] = $slug;
|
331 |
+
$record['fromVersion'] = (isset($data['Version']) ? $data['Version'] : 'Unknown');
|
332 |
+
$record['vulnerable'] = false;
|
333 |
+
$vulnerabilities[] = $record;
|
334 |
+
|
335 |
+
unset($installedPlugins[$plugin]);
|
336 |
+
}
|
337 |
}
|
338 |
+
}
|
339 |
+
|
340 |
+
//Get the remaining plugins (not in the wordpress.org repo for whatever reason)
|
341 |
+
foreach ($installedPlugins as $plugin => $data) {
|
342 |
+
$pluginFile = wfUtils::getPluginBaseDir() . $plugin;
|
343 |
+
$data = get_plugin_data($pluginFile);
|
344 |
|
345 |
+
$slug = null;
|
346 |
+
if (preg_match('/^([^\/]+)\//', $plugin, $matches)) {
|
347 |
+
$slug = $matches[1];
|
348 |
+
}
|
349 |
+
else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) {
|
350 |
+
$slug = $matches[1];
|
351 |
+
}
|
352 |
+
|
353 |
+
$record = array();
|
354 |
+
$record['slug'] = $slug;
|
355 |
+
$record['fromVersion'] = (isset($data['Version']) ? $data['Version'] : 'Unknown');
|
356 |
+
$record['vulnerable'] = false;
|
357 |
+
$vulnerabilities[] = $record;
|
358 |
+
}
|
359 |
+
|
360 |
+
if (count($vulnerabilities) > 0) {
|
361 |
try {
|
362 |
$result = $this->api->call('plugin_vulnerability_check', array(), array(
|
363 |
'plugins' => json_encode($vulnerabilities),
|
367 |
$vulnerableList = $result['vulnerable'];
|
368 |
foreach ($vulnerableList as $r) {
|
369 |
if ($r['slug'] == $v['slug']) {
|
370 |
+
$v['vulnerable'] = !!$r['vulnerable'];
|
371 |
break;
|
372 |
}
|
373 |
}
|
451 |
if ($v['fromVersion'] == 'Unknown' && $v['toVersion'] == 'Unknown') {
|
452 |
return $v['vulnerable'];
|
453 |
}
|
454 |
+
else if ((!isset($v['toVersion']) || $v['toVersion'] == 'Unknown') && version_compare($version, $v['fromVersion']) >= 0) {
|
455 |
return $v['vulnerable'];
|
456 |
}
|
457 |
+
else if ($v['fromVersion'] == 'Unknown' && isset($v['toVersion']) && version_compare($version, $v['toVersion']) < 0) {
|
458 |
return $v['vulnerable'];
|
459 |
}
|
460 |
+
else if (version_compare($version, $v['fromVersion']) >= 0 && isset($v['toVersion']) && version_compare($version, $v['toVersion']) < 0) {
|
461 |
return $v['vulnerable'];
|
462 |
}
|
463 |
}
|
485 |
public function getPluginUpdates() {
|
486 |
return $this->plugin_updates;
|
487 |
}
|
488 |
+
|
489 |
+
/**
|
490 |
+
* @return array
|
491 |
+
*/
|
492 |
+
public function getAllPlugins() {
|
493 |
+
return $this->all_plugins;
|
494 |
+
}
|
495 |
+
|
496 |
+
/**
|
497 |
+
* @return array
|
498 |
+
*/
|
499 |
+
public function getPluginSlugs() {
|
500 |
+
return $this->plugin_slugs;
|
501 |
+
}
|
502 |
|
503 |
/**
|
504 |
* @return array
|
lib/wfUtils.php
CHANGED
@@ -15,22 +15,54 @@ class wfUtils {
|
|
15 |
if($secs < 1){
|
16 |
return "a moment";
|
17 |
}
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
return self::pluralize($months, 'month', $days, 'day');
|
25 |
-
}
|
26 |
-
|
27 |
return self::pluralize($days, 'day', $hours, 'hour');
|
28 |
-
}
|
29 |
-
|
30 |
return self::pluralize($hours, 'hour', $minutes, 'min');
|
31 |
-
}
|
|
|
32 |
return self::pluralize($minutes, 'min');
|
33 |
-
}
|
|
|
34 |
if($noSeconds){
|
35 |
return "less than a minute";
|
36 |
} else {
|
@@ -809,7 +841,12 @@ class wfUtils {
|
|
809 |
$c2 = array_shift($trace);
|
810 |
error_log("Caller for " . $caller['file'] . " line " . $caller['line'] . " is " . $c2['file'] . ' line ' . $c2['line']);
|
811 |
}
|
812 |
-
public static function getWPVersion(){
|
|
|
|
|
|
|
|
|
|
|
813 |
if(wordfence::$wordfence_wp_version){
|
814 |
return wordfence::$wordfence_wp_version;
|
815 |
} else {
|
@@ -957,6 +994,7 @@ class wfUtils {
|
|
957 |
$wfdb->truncate($wpdb->base_prefix . 'wfHoover');
|
958 |
|
959 |
wfConfig::set('wf_scanRunning', '');
|
|
|
960 |
}
|
961 |
public static function isScanRunning(){
|
962 |
$scanRunning = wfConfig::get('wf_scanRunning');
|
@@ -1981,6 +2019,34 @@ class wfUtils {
|
|
1981 |
}
|
1982 |
return time() + $offset;
|
1983 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1984 |
}
|
1985 |
|
1986 |
// GeoIP lib uses these as well
|
15 |
if($secs < 1){
|
16 |
return "a moment";
|
17 |
}
|
18 |
+
|
19 |
+
if (function_exists('date_diff')) {
|
20 |
+
$now = new DateTime();
|
21 |
+
$utc = new DateTimeZone('UTC');
|
22 |
+
$dtStr = gmdate("c", $now->getTimestamp() + $secs); //Have to do it this way because of PHP 5.2
|
23 |
+
$then = new DateTime($dtStr, $utc);
|
24 |
+
|
25 |
+
$diff = $then->diff($now);
|
26 |
+
$years = $diff->y;
|
27 |
+
$months = $diff->m;
|
28 |
+
$days = $diff->d;
|
29 |
+
$hours = $diff->h;
|
30 |
+
$minutes = $diff->i;
|
31 |
+
}
|
32 |
+
else {
|
33 |
+
$years = 0;
|
34 |
+
$months = floor($secs / (86400 * 30));
|
35 |
+
$days = floor($secs / 86400);
|
36 |
+
$hours = floor($secs / 3600);
|
37 |
+
$minutes = floor($secs / 60);
|
38 |
+
|
39 |
+
if ($months) {
|
40 |
+
$days -= $months * 30;
|
41 |
+
}
|
42 |
+
else if ($days) {
|
43 |
+
$hours -= $days * 24;
|
44 |
+
}
|
45 |
+
else if ($hours) {
|
46 |
+
$minutes -= $hours * 60;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
if ($years) {
|
51 |
+
return self::pluralize($years, 'year', $months, 'month');
|
52 |
+
}
|
53 |
+
else if ($months) {
|
54 |
return self::pluralize($months, 'month', $days, 'day');
|
55 |
+
}
|
56 |
+
else if ($days) {
|
57 |
return self::pluralize($days, 'day', $hours, 'hour');
|
58 |
+
}
|
59 |
+
else if ($hours) {
|
60 |
return self::pluralize($hours, 'hour', $minutes, 'min');
|
61 |
+
}
|
62 |
+
else if ($minutes) {
|
63 |
return self::pluralize($minutes, 'min');
|
64 |
+
}
|
65 |
+
else {
|
66 |
if($noSeconds){
|
67 |
return "less than a minute";
|
68 |
} else {
|
841 |
$c2 = array_shift($trace);
|
842 |
error_log("Caller for " . $caller['file'] . " line " . $caller['line'] . " is " . $c2['file'] . ' line ' . $c2['line']);
|
843 |
}
|
844 |
+
public static function getWPVersion($forceRecheck = false){
|
845 |
+
if ($forceRecheck) {
|
846 |
+
require(ABSPATH . 'wp-includes/version.php'); //defines $wp_version
|
847 |
+
return $wp_version;
|
848 |
+
}
|
849 |
+
|
850 |
if(wordfence::$wordfence_wp_version){
|
851 |
return wordfence::$wordfence_wp_version;
|
852 |
} else {
|
994 |
$wfdb->truncate($wpdb->base_prefix . 'wfHoover');
|
995 |
|
996 |
wfConfig::set('wf_scanRunning', '');
|
997 |
+
wfIssues::updateScanStillRunning(false);
|
998 |
}
|
999 |
public static function isScanRunning(){
|
1000 |
$scanRunning = wfConfig::get('wf_scanRunning');
|
2019 |
}
|
2020 |
return time() + $offset;
|
2021 |
}
|
2022 |
+
|
2023 |
+
/**
|
2024 |
+
* Formats and returns the given timestamp using the time zone set for the WordPress installation.
|
2025 |
+
*
|
2026 |
+
* @param string $format See the PHP docs on DateTime for the format options.
|
2027 |
+
* @param int|null $timestamp Assumed to be in UTC. If null, defaults to the current timestamp.
|
2028 |
+
* @return string
|
2029 |
+
*/
|
2030 |
+
public static function formatLocalTime($format, $timestamp = null) {
|
2031 |
+
if ($timestamp === null) {
|
2032 |
+
$timestamp = time();
|
2033 |
+
}
|
2034 |
+
|
2035 |
+
$utc = new DateTimeZone('UTC');
|
2036 |
+
$dtStr = gmdate("c", $timestamp); //Have to do it this way because of PHP 5.2
|
2037 |
+
$dt = new DateTime($dtStr, $utc);
|
2038 |
+
$tz = get_option('timezone_string');
|
2039 |
+
if (!empty($tz)) {
|
2040 |
+
$dt->setTimezone(new DateTimeZone($tz));
|
2041 |
+
}
|
2042 |
+
else {
|
2043 |
+
$gmt = get_option('gmt_offset');
|
2044 |
+
if (!empty($gmt)) {
|
2045 |
+
$dt->setTimezone(new DateTimeZone('Etc/GMT' . ($gmt < 0 ? '+' : '-') . abs($gmt))); //The Etc/GMT timezones have the +- signs flipped
|
2046 |
+
}
|
2047 |
+
}
|
2048 |
+
return $dt->format($format);
|
2049 |
+
}
|
2050 |
}
|
2051 |
|
2052 |
// GeoIP lib uses these as well
|
lib/wordfenceClass.php
CHANGED
@@ -2658,7 +2658,7 @@ SQL
|
|
2658 |
}
|
2659 |
}
|
2660 |
}
|
2661 |
-
|
2662 |
// Removed ability to activate on network site in v5.3.12
|
2663 |
if (is_main_site()) {
|
2664 |
wp_schedule_single_event($futureTime, 'wordfence_start_scheduled_scan');
|
@@ -3506,7 +3506,7 @@ HTACCESS;
|
|
3506 |
if ($log->isWhitelisted($IP, $forcedWhitelistEntry)) {
|
3507 |
$message = "The IP address " . wp_kses($IP, array()) . " is whitelisted and can't be blocked. You can remove this IP from the whitelist on the Wordfence options page.";
|
3508 |
if ($forcedWhitelistEntry) {
|
3509 |
-
$message = "The IP address " . wp_kses($IP, array()) . " is in a range of
|
3510 |
}
|
3511 |
return array('err' => 1, 'errorMsg' => $message);
|
3512 |
}
|
@@ -3631,11 +3631,26 @@ HTACCESS;
|
|
3631 |
}
|
3632 |
public static function ajax_activityLogUpdate_callback(){
|
3633 |
$issues = new wfIssues();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3634 |
return array(
|
3635 |
'ok' => 1,
|
3636 |
'items' => self::getLog()->getStatusEvents($_POST['lastctime']),
|
3637 |
'currentScanID' => $issues->getScanTime(),
|
3638 |
'signatureUpdateTime' => wfConfig::get('signatureUpdateTime'),
|
|
|
|
|
3639 |
);
|
3640 |
}
|
3641 |
public static function ajax_updateAlertEmail_callback(){
|
@@ -6584,7 +6599,76 @@ to your httpd.conf if using Apache, or find documentation on how to disable dire
|
|
6584 |
$value = strtolower($value) === 'human' ? 1 : 0;
|
6585 |
break;
|
6586 |
case 'ip':
|
6587 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6588 |
break;
|
6589 |
case 'userid':
|
6590 |
$value = absint($value);
|
@@ -6600,9 +6684,9 @@ to your httpd.conf if using Apache, or find documentation on how to disable dire
|
|
6600 |
|
6601 |
try {
|
6602 |
$return['data'] = $query->execute();
|
6603 |
-
if (defined('WP_DEBUG') && WP_DEBUG) {
|
6604 |
$return['sql'] = $query->buildQuery();
|
6605 |
-
}
|
6606 |
} catch (wfLiveTrafficQueryException $e) {
|
6607 |
$return['data'] = array();
|
6608 |
$return['sql'] = $e->getMessage();
|
2658 |
}
|
2659 |
}
|
2660 |
}
|
2661 |
+
public static function scheduleSingleScan($futureTime){
|
2662 |
// Removed ability to activate on network site in v5.3.12
|
2663 |
if (is_main_site()) {
|
2664 |
wp_schedule_single_event($futureTime, 'wordfence_start_scheduled_scan');
|
3506 |
if ($log->isWhitelisted($IP, $forcedWhitelistEntry)) {
|
3507 |
$message = "The IP address " . wp_kses($IP, array()) . " is whitelisted and can't be blocked. You can remove this IP from the whitelist on the Wordfence options page.";
|
3508 |
if ($forcedWhitelistEntry) {
|
3509 |
+
$message = "The IP address " . wp_kses($IP, array()) . " is in a range of IP addresses that Wordfence does not block. The IP range may be internal or belong to a service safe to allow access for.";
|
3510 |
}
|
3511 |
return array('err' => 1, 'errorMsg' => $message);
|
3512 |
}
|
3631 |
}
|
3632 |
public static function ajax_activityLogUpdate_callback(){
|
3633 |
$issues = new wfIssues();
|
3634 |
+
$scanFailed = $issues->hasScanFailed();
|
3635 |
+
$scanFailedSeconds = time() - $scanFailed;
|
3636 |
+
$scanFailedTiming = wfUtils::makeTimeAgo($scanFailedSeconds);
|
3637 |
+
|
3638 |
+
$timeLimit = intval(wfConfig::get('scan_maxDuration'));
|
3639 |
+
if ($timeLimit < 1) {
|
3640 |
+
$timeLimit = WORDFENCE_DEFAULT_MAX_SCAN_TIME;
|
3641 |
+
}
|
3642 |
+
if ($scanFailedSeconds > $timeLimit) {
|
3643 |
+
$scanFailedTiming = 'more than ' . wfUtils::makeTimeAgo($timeLimit);
|
3644 |
+
}
|
3645 |
+
|
3646 |
+
wfUtils::doNotCache();
|
3647 |
return array(
|
3648 |
'ok' => 1,
|
3649 |
'items' => self::getLog()->getStatusEvents($_POST['lastctime']),
|
3650 |
'currentScanID' => $issues->getScanTime(),
|
3651 |
'signatureUpdateTime' => wfConfig::get('signatureUpdateTime'),
|
3652 |
+
'scanFailed' => ($scanFailed !== false && wfUtils::isScanRunning()),
|
3653 |
+
'scanFailedTiming' => $scanFailedTiming,
|
3654 |
);
|
3655 |
}
|
3656 |
public static function ajax_updateAlertEmail_callback(){
|
6599 |
$value = strtolower($value) === 'human' ? 1 : 0;
|
6600 |
break;
|
6601 |
case 'ip':
|
6602 |
+
$ip = $value;
|
6603 |
+
|
6604 |
+
if (strpos($ip, '*') !== false && ($operator == '=' || $operator == '!=')) { //If the IP contains a *, treat it as a wildcard for that segment and silently adjust the rule
|
6605 |
+
if (preg_match('/^(?:(?:\d{1,3}|\*)(?:\.|$)){2,4}/', $ip)) { //IPv4
|
6606 |
+
$value = array('00', '00', '00', '00', '00', '00', '00', '00', '00', '00', 'FF', 'FF');
|
6607 |
+
$octets = explode('.', $ip);
|
6608 |
+
foreach ($octets as $o)
|
6609 |
+
{
|
6610 |
+
if (strpos($o, '*') !== false) {
|
6611 |
+
$value[] = '..';
|
6612 |
+
}
|
6613 |
+
else {
|
6614 |
+
$value[] = strtoupper(str_pad(dechex($o), 2, '0', STR_PAD_LEFT));
|
6615 |
+
}
|
6616 |
+
}
|
6617 |
+
$value = '^' . implode('', array_pad($value, 16, '..')) . '$';
|
6618 |
+
$operator = ($operator == '=' ? 'hregexp' : 'hnotregexp');
|
6619 |
+
}
|
6620 |
+
else if (!empty($ip) && preg_match('/^((?:[\da-f*]{1,4}(?::|)){0,8})(::)?((?:[\da-f*]{1,4}(?::|)){0,8})$/i', $ip)) { //IPv6
|
6621 |
+
if ($ip === '::') {
|
6622 |
+
$value = '^' . str_repeat('00', 16) . '$';
|
6623 |
+
}
|
6624 |
+
else {
|
6625 |
+
$colon_count = substr_count($ip, ':');
|
6626 |
+
$dbl_colon_pos = strpos($ip, '::');
|
6627 |
+
if ($dbl_colon_pos !== false) {
|
6628 |
+
$ip = str_replace('::', str_repeat(':0000', (($dbl_colon_pos === 0 || $dbl_colon_pos === strlen($ip) - 2) ? 9 : 8) - $colon_count) . ':', $ip);
|
6629 |
+
$ip = trim($ip, ':');
|
6630 |
+
}
|
6631 |
+
|
6632 |
+
$ip_groups = explode(':', $ip);
|
6633 |
+
$value = array();
|
6634 |
+
foreach ($ip_groups as $ip_group) {
|
6635 |
+
if (strpos($ip_group, '*') !== false) {
|
6636 |
+
$value[] = '..';
|
6637 |
+
$value[] = '..';
|
6638 |
+
}
|
6639 |
+
else {
|
6640 |
+
$ip_group = strtoupper(str_pad($ip_group, 4, '0', STR_PAD_LEFT));
|
6641 |
+
$value[] = substr($ip_group, 0, 2);
|
6642 |
+
$value[] = substr($ip_group, -2);
|
6643 |
+
}
|
6644 |
+
}
|
6645 |
+
|
6646 |
+
$value = '^' . implode('', array_pad($value, 16, '..')) . '$';
|
6647 |
+
}
|
6648 |
+
$operator = ($operator == '=' ? 'hregexp' : 'hnotregexp');
|
6649 |
+
}
|
6650 |
+
else if (preg_match('/^((?:0{1,4}(?::|)){0,5})(::)?ffff:((?:\d{1,3}(?:\.|$)){4})$/i', $ip, $matches)) { //IPv4 mapped IPv6
|
6651 |
+
$value = array('00', '00', '00', '00', '00', '00', '00', '00', '00', '00', 'FF', 'FF');
|
6652 |
+
$octets = explode('.', $matches[3]);
|
6653 |
+
foreach ($octets as $o)
|
6654 |
+
{
|
6655 |
+
if (strpos($o, '*') !== false) {
|
6656 |
+
$value[] = '..';
|
6657 |
+
}
|
6658 |
+
else {
|
6659 |
+
$value[] = strtoupper(str_pad(dechex($o), 2, '0', STR_PAD_LEFT));
|
6660 |
+
}
|
6661 |
+
}
|
6662 |
+
$value = '^' . implode('', array_pad($value, 16, '.')) . '$';
|
6663 |
+
$operator = ($operator == '=' ? 'hregexp' : 'hnotregexp');
|
6664 |
+
}
|
6665 |
+
else {
|
6666 |
+
$value = false;
|
6667 |
+
}
|
6668 |
+
}
|
6669 |
+
else {
|
6670 |
+
$value = wfUtils::inet_pton($ip);
|
6671 |
+
}
|
6672 |
break;
|
6673 |
case 'userid':
|
6674 |
$value = absint($value);
|
6684 |
|
6685 |
try {
|
6686 |
$return['data'] = $query->execute();
|
6687 |
+
/*if (defined('WP_DEBUG') && WP_DEBUG) {
|
6688 |
$return['sql'] = $query->buildQuery();
|
6689 |
+
}*/
|
6690 |
} catch (wfLiveTrafficQueryException $e) {
|
6691 |
$return['data'] = array();
|
6692 |
$return['sql'] = $e->getMessage();
|
lib/wordfenceConstants.php
CHANGED
@@ -18,4 +18,5 @@ if (!defined('WORDFENCE_DISABLE_LIVE_TRAFFIC')) { define('WORDFENCE_DISABLE_LIVE
|
|
18 |
if (!defined('WORDFENCE_SCAN_ISSUES_PER_PAGE')) { define('WORDFENCE_SCAN_ISSUES_PER_PAGE', 100); }
|
19 |
if (!defined('WORDFENCE_BLOCKED_IPS_PER_PAGE')) { define('WORDFENCE_BLOCKED_IPS_PER_PAGE', 100); }
|
20 |
if (!defined('WORDFENCE_DISABLE_FILE_VIEWER')) { define('WORDFENCE_DISABLE_FILE_VIEWER', false); }
|
|
|
21 |
?>
|
18 |
if (!defined('WORDFENCE_SCAN_ISSUES_PER_PAGE')) { define('WORDFENCE_SCAN_ISSUES_PER_PAGE', 100); }
|
19 |
if (!defined('WORDFENCE_BLOCKED_IPS_PER_PAGE')) { define('WORDFENCE_BLOCKED_IPS_PER_PAGE', 100); }
|
20 |
if (!defined('WORDFENCE_DISABLE_FILE_VIEWER')) { define('WORDFENCE_DISABLE_FILE_VIEWER', false); }
|
21 |
+
if (!defined('WORDFENCE_SCAN_FAILURE_THRESHOLD')) { define('WORDFENCE_SCAN_FAILURE_THRESHOLD', 300); }
|
22 |
?>
|
lib/wordfenceHash.php
CHANGED
@@ -74,8 +74,7 @@ class wordfenceHash {
|
|
74 |
$this->db->truncate($this->db->prefix() . "wfPendingIssues");
|
75 |
$fetchCoreHashesStatus = wfIssues::statusStart("Fetching core, theme and plugin file signatures from Wordfence");
|
76 |
try {
|
77 |
-
$this->knownFiles = $this->engine->getKnownFilesLoader()
|
78 |
-
->getKnownFiles();
|
79 |
} catch (wfScanKnownFilesException $e) {
|
80 |
wfIssues::statusEndErr();
|
81 |
throw $e;
|
@@ -128,6 +127,23 @@ class wordfenceHash {
|
|
128 |
if($this->pluginsEnabled){ $this->status['plugins'] = wfIssues::statusStart("Comparing plugins against WordPress.org originals"); } else { wfIssues::statusDisabled("Skipping plugin scan"); }
|
129 |
if($this->malwareEnabled){ $this->status['malware'] = wfIssues::statusStart("Scanning for known malware files"); } else { wfIssues::statusDisabled("Skipping malware scan"); }
|
130 |
if($this->coreUnknownEnabled){ $this->status['coreUnknown'] = wfIssues::statusStart("Scanning for unknown files in wp-admin and wp-includes"); } else { wfIssues::statusDisabled("Skipping unknown core file scan"); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
132 |
public function __sleep(){
|
133 |
return array('striplen', 'totalFiles', 'totalDirs', 'totalData', 'stoppedOnFile', 'coreEnabled', 'pluginsEnabled', 'themesEnabled', 'malwareEnabled', 'coreUnknownEnabled', 'knownFiles', 'haveIssues', 'status', 'possibleMalware', 'path', 'only', 'totalForks', 'alertedOnUnknownWordPressVersion', 'foldersProcessed', 'suspectedFiles', 'indexed', 'indexSize', 'currentIndex', 'foldersEntered');
|
@@ -340,10 +356,8 @@ class wordfenceHash {
|
|
340 |
return ABSPATH . $file;
|
341 |
}
|
342 |
private function _checkForTimeout($path, $indexQueue = false) {
|
343 |
-
$this->engine->checkForKill();
|
344 |
-
$this->engine->checkForDurationLimit();
|
345 |
$file = substr($path, $this->striplen);
|
346 |
-
if ((!$this->stoppedOnFile) &&
|
347 |
if ($indexQueue !== false) {
|
348 |
$this->_serviceIndexQueue($indexQueue, true);
|
349 |
$this->stoppedOnFile = $file;
|
@@ -409,23 +423,6 @@ class wordfenceHash {
|
|
409 |
|
410 |
if ($allowKnownFileScan)
|
411 |
{
|
412 |
-
if ($this->coreUnknownEnabled && !$this->alertedOnUnknownWordPressVersion && empty($this->knownFiles['core'])) {
|
413 |
-
require(ABSPATH . 'wp-includes/version.php'); //defines $wp_version
|
414 |
-
$this->alertedOnUnknownWordPressVersion = true;
|
415 |
-
$added = $this->engine->addIssue(
|
416 |
-
'coreUnknown',
|
417 |
-
2,
|
418 |
-
'coreUnknown' . $wp_version,
|
419 |
-
'coreUnknown' . $wp_version,
|
420 |
-
'Unknown WordPress core version: ' . $wp_version,
|
421 |
-
"The core files scan will not be run because this version of WordPress is not currently indexed by Wordfence. This may be due to using a prerelease version or because the servers are still indexing a new release. If you are using an official WordPress release, this issue will automatically dismiss once the version is indexed and another scan is run.",
|
422 |
-
array()
|
423 |
-
);
|
424 |
-
|
425 |
-
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_PROBLEM; }
|
426 |
-
else if ($this->haveIssues['coreUnknown'] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_IGNORED; }
|
427 |
-
}
|
428 |
-
|
429 |
if (isset($this->knownFiles['core'][$file]))
|
430 |
{
|
431 |
if (strtoupper($this->knownFiles['core'][$file]) == $shac)
|
@@ -675,6 +672,16 @@ class wordfenceHash {
|
|
675 |
return false;
|
676 |
}
|
677 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
678 |
//Determine treatment
|
679 |
$fileExt = '';
|
680 |
if (preg_match('/\.([a-zA-Z\d\-]{1,7})$/', $file, $matches)) {
|
74 |
$this->db->truncate($this->db->prefix() . "wfPendingIssues");
|
75 |
$fetchCoreHashesStatus = wfIssues::statusStart("Fetching core, theme and plugin file signatures from Wordfence");
|
76 |
try {
|
77 |
+
$this->knownFiles = $this->engine->getKnownFilesLoader()->getKnownFiles();
|
|
|
78 |
} catch (wfScanKnownFilesException $e) {
|
79 |
wfIssues::statusEndErr();
|
80 |
throw $e;
|
127 |
if($this->pluginsEnabled){ $this->status['plugins'] = wfIssues::statusStart("Comparing plugins against WordPress.org originals"); } else { wfIssues::statusDisabled("Skipping plugin scan"); }
|
128 |
if($this->malwareEnabled){ $this->status['malware'] = wfIssues::statusStart("Scanning for known malware files"); } else { wfIssues::statusDisabled("Skipping malware scan"); }
|
129 |
if($this->coreUnknownEnabled){ $this->status['coreUnknown'] = wfIssues::statusStart("Scanning for unknown files in wp-admin and wp-includes"); } else { wfIssues::statusDisabled("Skipping unknown core file scan"); }
|
130 |
+
|
131 |
+
if ($this->coreUnknownEnabled && !$this->alertedOnUnknownWordPressVersion && empty($this->knownFiles['core'])) {
|
132 |
+
require(ABSPATH . 'wp-includes/version.php'); //defines $wp_version
|
133 |
+
$this->alertedOnUnknownWordPressVersion = true;
|
134 |
+
$added = $this->engine->addIssue(
|
135 |
+
'coreUnknown',
|
136 |
+
2,
|
137 |
+
'coreUnknown' . $wp_version,
|
138 |
+
'coreUnknown' . $wp_version,
|
139 |
+
'Unknown WordPress core version: ' . $wp_version,
|
140 |
+
"The core files scan will not be run because this version of WordPress is not currently indexed by Wordfence. This may be due to using a prerelease version or because the servers are still indexing a new release. If you are using an official WordPress release, this issue will automatically dismiss once the version is indexed and another scan is run.",
|
141 |
+
array()
|
142 |
+
);
|
143 |
+
|
144 |
+
if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_PROBLEM; }
|
145 |
+
else if ($this->haveIssues['coreUnknown'] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_IGNORED; }
|
146 |
+
}
|
147 |
}
|
148 |
public function __sleep(){
|
149 |
return array('striplen', 'totalFiles', 'totalDirs', 'totalData', 'stoppedOnFile', 'coreEnabled', 'pluginsEnabled', 'themesEnabled', 'malwareEnabled', 'coreUnknownEnabled', 'knownFiles', 'haveIssues', 'status', 'possibleMalware', 'path', 'only', 'totalForks', 'alertedOnUnknownWordPressVersion', 'foldersProcessed', 'suspectedFiles', 'indexed', 'indexSize', 'currentIndex', 'foldersEntered');
|
356 |
return ABSPATH . $file;
|
357 |
}
|
358 |
private function _checkForTimeout($path, $indexQueue = false) {
|
|
|
|
|
359 |
$file = substr($path, $this->striplen);
|
360 |
+
if ((!$this->stoppedOnFile) && $this->engine->shouldFork()) { //max X seconds but don't allow fork if we're looking for the file we stopped on. Search mode is VERY fast.
|
361 |
if ($indexQueue !== false) {
|
362 |
$this->_serviceIndexQueue($indexQueue, true);
|
363 |
$this->stoppedOnFile = $file;
|
423 |
|
424 |
if ($allowKnownFileScan)
|
425 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
426 |
if (isset($this->knownFiles['core'][$file]))
|
427 |
{
|
428 |
if (strtoupper($this->knownFiles['core'][$file]) == $shac)
|
672 |
return false;
|
673 |
}
|
674 |
|
675 |
+
//Unknown file in a core location
|
676 |
+
if ($this->coreUnknownEnabled && !$this->alertedOnUnknownWordPressVersion) {
|
677 |
+
$restrictedWordPressFolders = array(ABSPATH . 'wp-admin/', ABSPATH . WPINC . '/');
|
678 |
+
foreach ($restrictedWordPressFolders as $path) {
|
679 |
+
if (strpos($fullPath, $path) === 0) {
|
680 |
+
return true;
|
681 |
+
}
|
682 |
+
}
|
683 |
+
}
|
684 |
+
|
685 |
//Determine treatment
|
686 |
$fileExt = '';
|
687 |
if (preg_match('/\.([a-zA-Z\d\-]{1,7})$/', $file, $matches)) {
|
lib/wordfenceScanner.php
CHANGED
@@ -400,8 +400,6 @@ class wordfenceScanner {
|
|
400 |
$record->updateStoppedOn($rule[0], $currentPosition);
|
401 |
fclose($fh);
|
402 |
|
403 |
-
wfScanEngine::checkForKill();
|
404 |
-
$forkObj->checkForDurationLimit();
|
405 |
wordfence::status(4, 'info', "Forking during malware scan ({$rule[0]}) to ensure continuity.");
|
406 |
$forkObj->fork(); //exits
|
407 |
}
|
400 |
$record->updateStoppedOn($rule[0], $currentPosition);
|
401 |
fclose($fh);
|
402 |
|
|
|
|
|
403 |
wordfence::status(4, 'info', "Forking during malware scan ({$rule[0]}) to ensure continuity.");
|
404 |
$forkObj->fork(); //exits
|
405 |
}
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: mmaunder
|
|
3 |
Tags: security, secure, security plugin, wordpress security, login security, firewall, malware, antivirus, web application firewall, block hackers, country blocking
|
4 |
Requires at least: 3.9
|
5 |
Tested up to: 4.8.0
|
6 |
-
Stable tag: 6.3.
|
7 |
|
8 |
Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
|
9 |
|
@@ -160,6 +160,19 @@ Secure your website with Wordfence.
|
|
160 |
|
161 |
== Changelog ==
|
162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
= 6.3.10 =
|
164 |
* Improvement: Reduction in overall memory usage and peak memory usage for the scanner.
|
165 |
* Improvement: Support for exporting a list of all blocked and locked out IP addresses.
|
3 |
Tags: security, secure, security plugin, wordpress security, login security, firewall, malware, antivirus, web application firewall, block hackers, country blocking
|
4 |
Requires at least: 3.9
|
5 |
Tested up to: 4.8.0
|
6 |
+
Stable tag: 6.3.11
|
7 |
|
8 |
Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
|
9 |
|
160 |
|
161 |
== Changelog ==
|
162 |
|
163 |
+
= 6.3.11 =
|
164 |
+
* Improvement: The scan will alert for plugins that have not been updated in 2+ years or have been removed from the wordpress.org directory. It will also indicate if there is a known vulnerability.
|
165 |
+
* Improvement: Added a self-check to the scan to detect if it has stalled.
|
166 |
+
* Improvement: If WordPress auto-updates while a scan is running, the scan will self-abort and reschedule itself to try again later.
|
167 |
+
* Improvement: IP-based filtering in Live Traffic can now use wildcards.
|
168 |
+
* Improvement: Updated the bundled GeoIP database.
|
169 |
+
* Improvement: Added an anti-crawler feature to the lockout page to avoid crawlers erroneously following the unlock link.
|
170 |
+
* Improvement: The live traffic "Group By" options now dynamically show the results in a more useful format depending on the option selected.
|
171 |
+
* Improvement: Improved the unknown core files check to include all extra files in core locations regardless of whether or not the "Scan images, binary, and other files as if they were executable" option is on.
|
172 |
+
* Improvement: Better wording for the whitelisting IP range error message.
|
173 |
+
* Fix: Addressed a performance issue on databases with tens of thousands of tables when trying to load the diagnostics page.
|
174 |
+
* Fix: All dashboard and activity report email times are now displayed in the time zone configured for the WordPress installation.
|
175 |
+
|
176 |
= 6.3.10 =
|
177 |
* Improvement: Reduction in overall memory usage and peak memory usage for the scanner.
|
178 |
* Improvement: Support for exporting a list of all blocked and locked out IP addresses.
|
vendor/wordfence/wf-waf/src/lib/waf.php
CHANGED
@@ -967,8 +967,18 @@ HTML
|
|
967 |
$template = '403';
|
968 |
}
|
969 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
970 |
return wfWAFView::create($template, array(
|
971 |
'waf' => $this,
|
|
|
|
|
972 |
))->render();
|
973 |
}
|
974 |
|
@@ -979,6 +989,7 @@ HTML
|
|
979 |
if ($template === null) { $template = '503'; }
|
980 |
try {
|
981 |
$homeURL = wfWAF::getInstance()->getStorageEngine()->getConfig('homeURL');
|
|
|
982 |
}
|
983 |
catch (Exception $e) {
|
984 |
//Do nothing
|
@@ -988,6 +999,7 @@ HTML
|
|
988 |
'waf' => $this,
|
989 |
'reason' => $reason,
|
990 |
'homeURL' => $homeURL,
|
|
|
991 |
))->render();
|
992 |
}
|
993 |
|
967 |
$template = '403';
|
968 |
}
|
969 |
}
|
970 |
+
try {
|
971 |
+
$homeURL = wfWAF::getInstance()->getStorageEngine()->getConfig('homeURL');
|
972 |
+
$siteURL = wfWAF::getInstance()->getStorageEngine()->getConfig('siteURL');
|
973 |
+
}
|
974 |
+
catch (Exception $e) {
|
975 |
+
//Do nothing
|
976 |
+
}
|
977 |
+
|
978 |
return wfWAFView::create($template, array(
|
979 |
'waf' => $this,
|
980 |
+
'homeURL' => $homeURL,
|
981 |
+
'siteURL' => $siteURL,
|
982 |
))->render();
|
983 |
}
|
984 |
|
989 |
if ($template === null) { $template = '503'; }
|
990 |
try {
|
991 |
$homeURL = wfWAF::getInstance()->getStorageEngine()->getConfig('homeURL');
|
992 |
+
$siteURL = wfWAF::getInstance()->getStorageEngine()->getConfig('siteURL');
|
993 |
}
|
994 |
catch (Exception $e) {
|
995 |
//Do nothing
|
999 |
'waf' => $this,
|
1000 |
'reason' => $reason,
|
1001 |
'homeURL' => $homeURL,
|
1002 |
+
'siteURL' => $siteURL,
|
1003 |
))->render();
|
1004 |
}
|
1005 |
|
vendor/wordfence/wf-waf/src/views/503-lockout.php
CHANGED
@@ -17,15 +17,24 @@
|
|
17 |
<?php
|
18 |
endif;
|
19 |
$nonce = $waf->createNonce('wf-form');
|
20 |
-
if (!empty($
|
21 |
<br />
|
22 |
|
23 |
If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="https://docs.wordfence.com/en/Help!_I_locked_myself_out_and_can't_get_back_in._What_can_I_do%3F" target="_blank">Please read this FAQ entry if this does not work.</a>
|
24 |
<br /><br />
|
25 |
-
<form method="POST"
|
26 |
<input type="hidden" name="nonce" value="<?php echo $nonce; ?>" />
|
27 |
-
<input type="text" size="50" name="email" value="" maxlength="255" /> <input type="submit" name="s" value="Send me an unlock email" />
|
28 |
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
<?php endif; ?>
|
30 |
</p>
|
31 |
<p style="color: #999999;margin-top: 2rem;"><em>Generated by Wordfence at <?php echo gmdate('D, j M Y G:i:s T', wfWAFUtils::normalizedTime()); ?>.<br>Your computer's time: <script type="application/javascript">document.write(new Date().toUTCString());</script>.</em></p>
|
17 |
<?php
|
18 |
endif;
|
19 |
$nonce = $waf->createNonce('wf-form');
|
20 |
+
if (!empty($siteURL) && !empty($nonce)) : ?>
|
21 |
<br />
|
22 |
|
23 |
If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="https://docs.wordfence.com/en/Help!_I_locked_myself_out_and_can't_get_back_in._What_can_I_do%3F" target="_blank">Please read this FAQ entry if this does not work.</a>
|
24 |
<br /><br />
|
25 |
+
<form method="POST" id="unlock-form" action="#">
|
26 |
<input type="hidden" name="nonce" value="<?php echo $nonce; ?>" />
|
27 |
+
<input type="text" size="50" name="email" id="unlock-email" value="" maxlength="255" /> <input type="submit" name="s" id="unlock-submit" value="Send me an unlock email" disabled />
|
28 |
</form>
|
29 |
+
<script type="application/javascript">
|
30 |
+
(function() {
|
31 |
+
var textfield = document.getElementById('unlock-email');
|
32 |
+
textfield.addEventListener('focus', function() {
|
33 |
+
document.getElementById('unlock-form').action = "<?php echo rtrim($siteURL, '/') . '/'; ?>" + "?_wfsf=unlockEmail";
|
34 |
+
document.getElementById('unlock-submit').disabled = false;
|
35 |
+
});
|
36 |
+
})();
|
37 |
+
</script>
|
38 |
<?php endif; ?>
|
39 |
</p>
|
40 |
<p style="color: #999999;margin-top: 2rem;"><em>Generated by Wordfence at <?php echo gmdate('D, j M Y G:i:s T', wfWAFUtils::normalizedTime()); ?>.<br>Your computer's time: <script type="application/javascript">document.write(new Date().toUTCString());</script>.</em></p>
|
vendor/wordfence/wf-waf/src/views/503.php
CHANGED
@@ -19,15 +19,24 @@
|
|
19 |
|
20 |
<?php
|
21 |
$nonce = $waf->createNonce('wf-form');
|
22 |
-
if (!empty($
|
23 |
-
<br
|
24 |
|
25 |
-
If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="https://docs.wordfence.com/en/Help!_I_locked_myself_out_and_can't_get_back_in._What_can_I_do%3F" target="_blank">Please read this FAQ entry if this does not work.</a>
|
26 |
-
<br /><br />
|
27 |
-
<form method="POST"
|
28 |
-
|
29 |
-
|
30 |
-
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
<?php endif; ?>
|
32 |
<br /><br />
|
33 |
|
19 |
|
20 |
<?php
|
21 |
$nonce = $waf->createNonce('wf-form');
|
22 |
+
if (!empty($siteURL) && !empty($nonce)) : ?>
|
23 |
+
<br />
|
24 |
|
25 |
+
If you are a site administrator and have been accidentally locked out, please enter your email in the box below and click "Send". If the email address you enter belongs to a known site administrator or someone set to receive Wordfence alerts, we will send you an email to help you regain access. <a href="https://docs.wordfence.com/en/Help!_I_locked_myself_out_and_can't_get_back_in._What_can_I_do%3F" target="_blank">Please read this FAQ entry if this does not work.</a>
|
26 |
+
<br /><br />
|
27 |
+
<form method="POST" id="unlock-form" action="#">
|
28 |
+
<input type="hidden" name="nonce" value="<?php echo $nonce; ?>" />
|
29 |
+
<input type="text" size="50" name="email" id="unlock-email" value="" maxlength="255" /> <input type="submit" name="s" id="unlock-submit" value="Send me an unlock email" disabled />
|
30 |
+
</form>
|
31 |
+
<script type="application/javascript">
|
32 |
+
(function() {
|
33 |
+
var textfield = document.getElementById('unlock-email');
|
34 |
+
textfield.addEventListener('focus', function() {
|
35 |
+
document.getElementById('unlock-form').action = "<?php echo rtrim($siteURL, '/') . '/'; ?>" + "?_wfsf=unlockEmail";
|
36 |
+
document.getElementById('unlock-submit').disabled = false;
|
37 |
+
});
|
38 |
+
})();
|
39 |
+
</script>
|
40 |
<?php endif; ?>
|
41 |
<br /><br />
|
42 |
|
views/reports/activity-report-email-inline.php
CHANGED
@@ -5,8 +5,8 @@
|
|
5 |
|
6 |
$start_time = wfActivityReport::getReportDateFrom();
|
7 |
$end_time = time();
|
8 |
-
$report_start =
|
9 |
-
$report_end =
|
10 |
$title = sprintf('Wordfence activity from <br><strong>%s</strong> to <strong>%s</strong>', $report_start, $report_end);
|
11 |
$bg_colors = array(
|
12 |
'even' => 'background-color: #eeeeee;',
|
@@ -351,7 +351,7 @@ h6 a:visited { color: purple !important; }
|
|
351 |
$newVersion = ($plugin['newVersion'] == 'Unknown' ? $plugin['newVersion'] : "v{$plugin['newVersion']}");
|
352 |
?>
|
353 |
<li style="font-size: 100%; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
|
354 |
-
A new version of the plugin "<?php echo esc_html("{$plugin['Name']} ({$newVersion})") ?>" is available.<?php if (isset($plugin['
|
355 |
</li>
|
356 |
<?php endforeach ?>
|
357 |
</ul>
|
@@ -364,7 +364,7 @@ h6 a:visited { color: purple !important; }
|
|
364 |
$newVersion = ($theme['newVersion'] == 'Unknown' ? $theme['newVersion'] : "v{$theme['newVersion']}");
|
365 |
?>
|
366 |
<li style="font-size: 100%; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
|
367 |
-
A new version of the theme "<?php echo esc_html("{$theme['name']} ({$newVersion})") ?>" is available.<?php if (isset($theme['
|
368 |
</li>
|
369 |
<?php endforeach ?>
|
370 |
</ul>
|
5 |
|
6 |
$start_time = wfActivityReport::getReportDateFrom();
|
7 |
$end_time = time();
|
8 |
+
$report_start = wfUtils::formatLocalTime(get_option('date_format'), $start_time);
|
9 |
+
$report_end = wfUtils::formatLocalTime(get_option('date_format'), $end_time);
|
10 |
$title = sprintf('Wordfence activity from <br><strong>%s</strong> to <strong>%s</strong>', $report_start, $report_end);
|
11 |
$bg_colors = array(
|
12 |
'even' => 'background-color: #eeeeee;',
|
351 |
$newVersion = ($plugin['newVersion'] == 'Unknown' ? $plugin['newVersion'] : "v{$plugin['newVersion']}");
|
352 |
?>
|
353 |
<li style="font-size: 100%; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
|
354 |
+
A new version of the plugin "<?php echo esc_html("{$plugin['Name']} ({$newVersion})") ?>" is available.<?php if (isset($plugin['vulnerable']) && $plugin['vulnerable']) { echo " <strong>This update includes security-related fixes.</strong>"; } ?>
|
355 |
</li>
|
356 |
<?php endforeach ?>
|
357 |
</ul>
|
364 |
$newVersion = ($theme['newVersion'] == 'Unknown' ? $theme['newVersion'] : "v{$theme['newVersion']}");
|
365 |
?>
|
366 |
<li style="font-size: 100%; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
|
367 |
+
A new version of the theme "<?php echo esc_html("{$theme['name']} ({$newVersion})") ?>" is available.<?php if (isset($theme['vulnerable']) && $theme['vulnerable']) { echo " <strong>This update includes security-related fixes.</strong>"; } ?>
|
368 |
</li>
|
369 |
<?php endforeach ?>
|
370 |
</ul>
|
views/reports/activity-report-email.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* @var wfActivityReportView $this
|
4 |
*/
|
5 |
-
$title = 'Wordfence Activity for the week of ' .
|
6 |
?>
|
7 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
8 |
<html xmlns="http://www.w3.org/1999/xhtml">
|
@@ -293,7 +293,7 @@ $title = 'Wordfence Activity for the week of ' . date_i18n(get_option('date_form
|
|
293 |
<td valign="top">
|
294 |
<div class="wrapper wp-core-ui">
|
295 |
<div style="float: right;text-align: right;line-height:1.1;color: #666666;margin:20px 0 0;">
|
296 |
-
Activity for week of<br> <strong><?php echo
|
297 |
</div>
|
298 |
<a href="http://www.wordfence.com/zz7/"><img src="<?php echo wfUtils::getBaseURL(); ?>images/logo.png" alt=""/></a>
|
299 |
|
2 |
/**
|
3 |
* @var wfActivityReportView $this
|
4 |
*/
|
5 |
+
$title = 'Wordfence Activity for the week of ' . wfUtils::formatLocalTime(get_option('date_format'));
|
6 |
?>
|
7 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
8 |
<html xmlns="http://www.w3.org/1999/xhtml">
|
293 |
<td valign="top">
|
294 |
<div class="wrapper wp-core-ui">
|
295 |
<div style="float: right;text-align: right;line-height:1.1;color: #666666;margin:20px 0 0;">
|
296 |
+
Activity for week of<br> <strong><?php echo wfUtils::formatLocalTime(get_option('date_format')) ?></strong>
|
297 |
</div>
|
298 |
<a href="http://www.wordfence.com/zz7/"><img src="<?php echo wfUtils::getBaseURL(); ?>images/logo.png" alt=""/></a>
|
299 |
|
wordfence.php
CHANGED
@@ -4,14 +4,14 @@ Plugin Name: Wordfence Security
|
|
4 |
Plugin URI: http://www.wordfence.com/
|
5 |
Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
|
6 |
Author: Wordfence
|
7 |
-
Version: 6.3.
|
8 |
Author URI: http://www.wordfence.com/
|
9 |
Network: true
|
10 |
*/
|
11 |
if(defined('WP_INSTALLING') && WP_INSTALLING){
|
12 |
return;
|
13 |
}
|
14 |
-
define('WORDFENCE_VERSION', '6.3.
|
15 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
16 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
17 |
|
4 |
Plugin URI: http://www.wordfence.com/
|
5 |
Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
|
6 |
Author: Wordfence
|
7 |
+
Version: 6.3.11
|
8 |
Author URI: http://www.wordfence.com/
|
9 |
Network: true
|
10 |
*/
|
11 |
if(defined('WP_INSTALLING') && WP_INSTALLING){
|
12 |
return;
|
13 |
}
|
14 |
+
define('WORDFENCE_VERSION', '6.3.11');
|
15 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
16 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
17 |
|