Version Description
- Improvement: All URLs are now checked against the Wordfence Domain Blacklist in addition to Google's.
- Improvement: Better page load performance for multisite installations with thousands of tables.
- Improvement: Updated the bundled GeoIP database.
- Improvement: Integrated blacklist blocking statistics into the dashboard for Premium users.
- Fix: Added locking to the automatic update process to ensure non-standard crons don't break Wordfence.
- Fix: Fixed an activation error on multisite installations on very old WordPress versions.
- Fix: Adjusted the behavior of the blacklist toggle for Free users.
Download this release
Release Info
Developer | wfryan |
Plugin | Wordfence Security – Firewall & Malware Scan |
Version | 6.3.7 |
Comparing to | |
See all releases |
Code changes from version 6.3.6 to 6.3.7
- css/main.css +1 -1
- lib/GeoIP.dat +0 -0
- lib/GeoIPv6.dat +0 -0
- lib/dashboard/widget_blacklist.php +89 -0
- lib/dashboard/widget_content_blacklist.php +22 -0
- lib/dashboard/widget_countries.php +1 -1
- lib/dashboard/widget_ips.php +4 -5
- lib/dashboard/widget_localattacks.php +43 -22
- lib/dashboard/widget_networkattacks.php +1 -1
- lib/dashboard/widget_tdf.php +39 -4
- lib/menu_dashboard.php +6 -1
- lib/menu_firewall_waf.php +1 -1
- lib/wfActivityReport.php +64 -6
- lib/wfConfig.php +65 -2
- lib/wfDB.php +7 -1
- lib/wfDashboard.php +120 -11
- lib/wfIssues.php +3 -3
- lib/wfScanEngine.php +36 -15
- lib/wfSchema.php +1 -1
- lib/wordfenceClass.php +74 -11
- lib/wordfenceScanner.php +19 -2
- lib/wordfenceURLHoover.php +377 -134
- readme.txt +11 -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-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}.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>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-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}.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 .wf-dashboard-item-title{font-size:0.75rem;width:100%}.wf-dashboard-item .wf-dashboard-item-inner .wf-dashboard-item-content .wf-dashboard-item-title .wf-dashboard-item-inline-subtitle{color:#9f9fa0}.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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered{margin:0 -1rem;padding:0;list-style:none}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered>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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered>li>*:first-child{-webkit-flex-grow:1;flex-grow:1;min-width:0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li.wf-dashboard-item-list-header,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered>li.wf-dashboard-item-list-header{font-weight:bold;color:#00709e}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li.wf-dashboard-item-list-header p,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered>li.wf-dashboard-item-list-header p{margin:0.5rem 0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li.wf-dashboard-item-list-body,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list>li.wf-dashboard-item-list-footer,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered>li.wf-dashboard-item-list-body,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered>li.wf-dashboard-item-list-footer{border-top:0px}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal>li{border-top:0px}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered{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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered>li{-webkit-flex-grow:1;flex-grow:1;-webkit-flex-basis:100%;flex-basis:100%;border-left:0px}@media (min-width: 768px){.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered>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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered>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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered>*:first-child,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal>*:first-child,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered>*: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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered.wf-dashboard-item-list-equal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered.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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered.wf-dashboard-item-list-equal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal.wf-dashboard-item-list-equal>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered.wf-dashboard-item-list-equal>li{max-width:25%}}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list.wf-dashboard-item-list-horizontal-bordered>li,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered.wf-dashboard-item-list-horizontal-bordered>li{border-left:1px solid #eeeeee}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-state,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .wf-dashboard-item-list-state-premium{color:#9f9fa0}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list .wf-dashboard-item-list-dismiss,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .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,.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-list-bordered .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:0.5rem}.wf-dashboard-item .wf-dashboard-item-extra .wf-dashboard-item-labeled-count-label{font-size:0.75rem;color:#9f9fa0;padding:0 1rem 0.5rem 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,.wf-blacklist{max-height:30rem;overflow-y:hidden;margin-bottom:20px}.wf-ips .wf-table,.wf-recent-logins .wf-table,.wf-countries .wf-table,.wf-blacklist .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}}
|
lib/GeoIP.dat
CHANGED
Binary file
|
lib/GeoIPv6.dat
CHANGED
Binary file
|
lib/dashboard/widget_blacklist.php
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
//$d is defined here as a wfDashboard instance
|
3 |
+
|
4 |
+
if (!isset($limit)) { $limit = 10; }
|
5 |
+
?>
|
6 |
+
<div class="wf-row">
|
7 |
+
<div class="wf-col-xs-12">
|
8 |
+
<div class="wf-dashboard-item active">
|
9 |
+
<div class="wf-dashboard-item-inner">
|
10 |
+
<div class="wf-dashboard-item-content">
|
11 |
+
<div class="wf-dashboard-item-title">
|
12 |
+
<strong>IP Blacklist: </strong><span class="wf-dashboard-item-inline-subtitle">Last 7 Days</span>
|
13 |
+
</div>
|
14 |
+
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
15 |
+
</div>
|
16 |
+
</div>
|
17 |
+
<div class="wf-dashboard-item-extra">
|
18 |
+
<ul class="wf-dashboard-item-list">
|
19 |
+
<li>
|
20 |
+
<div>
|
21 |
+
<div class="wf-blacklist wf-blacklist-7d">
|
22 |
+
<?php if (count($d->blacklist7d['counts']) == 0): ?>
|
23 |
+
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
24 |
+
<?php else: ?>
|
25 |
+
<?php $data = array_slice($d->blacklist7d['counts'], 0, min($limit, count($d->blacklist7d['counts'])), true); include(dirname(__FILE__) . '/widget_content_blacklist.php'); ?>
|
26 |
+
<?php if (count($d->blacklist7d['counts']) > $limit): ?>
|
27 |
+
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="blacklist" data-period="7d"><a href="#">Show more</a></div></div>
|
28 |
+
<?php endif; ?>
|
29 |
+
<?php endif; ?>
|
30 |
+
</div>
|
31 |
+
<script type="application/javascript">
|
32 |
+
(function($) {
|
33 |
+
$('.wf-blacklist .wf-dashboard-show-more a').on('click', function(e) {
|
34 |
+
e.preventDefault();
|
35 |
+
e.stopPropagation();
|
36 |
+
|
37 |
+
var grouping = $(this).parent().data('grouping');
|
38 |
+
var period = $(this).parent().data('period');
|
39 |
+
|
40 |
+
$(this).closest('.wf-dashboard-item-list-text').fadeOut();
|
41 |
+
|
42 |
+
var self = this;
|
43 |
+
WFAD.ajax('wordfence_dashboardShowMore', {
|
44 |
+
grouping: grouping,
|
45 |
+
period: period
|
46 |
+
}, function(res) {
|
47 |
+
if (res.ok) {
|
48 |
+
var table = $('#blacklist-data-template').tmpl(res);
|
49 |
+
$(self).closest('.wf-blacklist').css('overflow-y', 'auto');
|
50 |
+
$(self).closest('.wf-blacklist').find('table').replaceWith(table);
|
51 |
+
}
|
52 |
+
else {
|
53 |
+
WFAD.colorbox('300px', 'An error occurred', 'We encountered an error trying load more data.');
|
54 |
+
$(this).closest('.wf-dashboard-item-list-text').fadeIn();
|
55 |
+
}
|
56 |
+
});
|
57 |
+
});
|
58 |
+
})(jQuery);
|
59 |
+
</script>
|
60 |
+
</div>
|
61 |
+
</li>
|
62 |
+
</ul>
|
63 |
+
</div>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
</div>
|
67 |
+
<script type="text/x-jquery-template" id="blacklist-data-template">
|
68 |
+
<table class="wf-table wf-table-hover">
|
69 |
+
<thead>
|
70 |
+
<tr>
|
71 |
+
<th>IP</th>
|
72 |
+
<th colspan="2">Country</th>
|
73 |
+
<th>Blocked Attacks Local</th>
|
74 |
+
<th>Blocked Attacks Network</th>
|
75 |
+
</tr>
|
76 |
+
</thead>
|
77 |
+
<tbody>
|
78 |
+
{{each(idx, d) data}}
|
79 |
+
<tr>
|
80 |
+
<td>${d.IP}</td>
|
81 |
+
<td>${d.countryName}</td>
|
82 |
+
<td><img src="${d.countryFlag}" class="wfFlag" height="11" width="16" alt="${d.countryName}" title="${d.countryName}"></td>
|
83 |
+
<td>${d.localCount}</td>
|
84 |
+
<td>${d.networkCount}</td>
|
85 |
+
</tr>
|
86 |
+
{{/each}}
|
87 |
+
</tbody>
|
88 |
+
</table>
|
89 |
+
</script>
|
lib/dashboard/widget_content_blacklist.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php //$data is defined here as an array of blacklisted block totals: array('ip' => text ip, 'countryCode' => string, 'local' => int, 'network' => int, 'countryName' => string) ?>
|
2 |
+
<table class="wf-table wf-table-hover">
|
3 |
+
<thead>
|
4 |
+
<tr>
|
5 |
+
<th>IP</th>
|
6 |
+
<th colspan="2">Country</th>
|
7 |
+
<th>Blocked Attacks Local</th>
|
8 |
+
<th>Blocked Attacks Network</th>
|
9 |
+
</tr>
|
10 |
+
</thead>
|
11 |
+
<tbody>
|
12 |
+
<?php foreach ($data as $l): ?>
|
13 |
+
<tr>
|
14 |
+
<td><?php echo esc_html($l['ip']); ?></td>
|
15 |
+
<td><?php echo esc_html($l['countryName']); ?></td>
|
16 |
+
<td><img src="<?php echo wfUtils::getBaseURL() . 'images/flags/' . esc_attr(strtolower($l['countryCode'])); ?>.png" class="wfFlag" height="11" width="16" alt="<?php echo esc_attr($l['countryName']); ?>" title="<?php echo esc_attr($l['countryName']); ?>"></td>
|
17 |
+
<td><?php echo esc_html(number_format_i18n($l['local'])); ?></td>
|
18 |
+
<td><?php echo esc_html(number_format_i18n($l['network'])); ?></td>
|
19 |
+
</tr>
|
20 |
+
<?php endforeach; ?>
|
21 |
+
</tbody>
|
22 |
+
</table>
|
lib/dashboard/widget_countries.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
<div class="wf-dashboard-item-inner">
|
6 |
<div class="wf-dashboard-item-content">
|
7 |
<div class="wf-dashboard-item-title">
|
8 |
-
<strong>Top Countries by Number of Attacks -
|
9 |
</div>
|
10 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
11 |
</div>
|
5 |
<div class="wf-dashboard-item-inner">
|
6 |
<div class="wf-dashboard-item-content">
|
7 |
<div class="wf-dashboard-item-title">
|
8 |
+
<strong>Top Countries by Number of Attacks: </strong><span class="wf-dashboard-item-inline-subtitle">Last 7 Days</span>
|
9 |
</div>
|
10 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
11 |
</div>
|
lib/dashboard/widget_ips.php
CHANGED
@@ -1,8 +1,7 @@
|
|
1 |
<?php
|
2 |
//$d is defined here as a wfDashboard instance
|
3 |
|
4 |
-
$
|
5 |
-
if (!isset($limit)) { $limit = 10; $initial = true; }
|
6 |
?>
|
7 |
<div class="wf-row">
|
8 |
<div class="wf-col-xs-12">
|
@@ -31,7 +30,7 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
|
|
31 |
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
32 |
<?php else: ?>
|
33 |
<?php $data = array_slice($d->ips24h, 0, min($limit, count($d->ips24h)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
|
34 |
-
<?php if (count($d->ips24h) > $limit
|
35 |
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="24h"><a href="#">Show more</a></div></div>
|
36 |
<?php endif; ?>
|
37 |
<?php endif; ?>
|
@@ -41,7 +40,7 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
|
|
41 |
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
42 |
<?php else: ?>
|
43 |
<?php $data = array_slice($d->ips7d, 0, min($limit, count($d->ips7d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
|
44 |
-
<?php if (count($d->ips7d) > $limit
|
45 |
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="7d"><a href="#">Show more</a></div></div>
|
46 |
<?php endif; ?>
|
47 |
<?php endif; ?>
|
@@ -51,7 +50,7 @@ if (!isset($limit)) { $limit = 10; $initial = true; }
|
|
51 |
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
52 |
<?php else: ?>
|
53 |
<?php $data = array_slice($d->ips30d, 0, min($limit, count($d->ips30d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
|
54 |
-
<?php if (count($d->ips30d) > $limit
|
55 |
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="30d"><a href="#">Show more</a></div></div>
|
56 |
<?php endif; ?>
|
57 |
<?php endif; ?>
|
1 |
<?php
|
2 |
//$d is defined here as a wfDashboard instance
|
3 |
|
4 |
+
if (!isset($limit)) { $limit = 10; }
|
|
|
5 |
?>
|
6 |
<div class="wf-row">
|
7 |
<div class="wf-col-xs-12">
|
30 |
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
31 |
<?php else: ?>
|
32 |
<?php $data = array_slice($d->ips24h, 0, min($limit, count($d->ips24h)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
|
33 |
+
<?php if (count($d->ips24h) > $limit): ?>
|
34 |
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="24h"><a href="#">Show more</a></div></div>
|
35 |
<?php endif; ?>
|
36 |
<?php endif; ?>
|
40 |
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
41 |
<?php else: ?>
|
42 |
<?php $data = array_slice($d->ips7d, 0, min($limit, count($d->ips7d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
|
43 |
+
<?php if (count($d->ips7d) > $limit): ?>
|
44 |
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="7d"><a href="#">Show more</a></div></div>
|
45 |
<?php endif; ?>
|
46 |
<?php endif; ?>
|
50 |
<div class="wf-dashboard-item-list-text"><p><em>No blocks have been recorded.</em></p></div>
|
51 |
<?php else: ?>
|
52 |
<?php $data = array_slice($d->ips30d, 0, min($limit, count($d->ips30d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?>
|
53 |
+
<?php if (count($d->ips30d) > $limit): ?>
|
54 |
<div class="wf-dashboard-item-list-text"><div class="wf-dashboard-show-more" data-grouping="ips" data-period="30d"><a href="#">Show more</a></div></div>
|
55 |
<?php endif; ?>
|
56 |
<?php endif; ?>
|
lib/dashboard/widget_localattacks.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
<div class="wf-dashboard-item-inner">
|
5 |
<div class="wf-dashboard-item-content">
|
6 |
<div class="wf-dashboard-item-title">
|
7 |
-
<strong>Firewall Summary -
|
8 |
</div>
|
9 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
10 |
</div>
|
@@ -12,29 +12,50 @@
|
|
12 |
<div class="wf-dashboard-item-extra">
|
13 |
<ul class="wf-dashboard-item-list">
|
14 |
<li>
|
15 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
<div class="wf-dashboard-item-list-text"><em>No blocks have been recorded.</em></div>
|
17 |
<?php else: ?>
|
18 |
-
<
|
19 |
-
<
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
</
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
<
|
34 |
-
<
|
35 |
-
|
36 |
-
|
37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
<?php endif; ?>
|
39 |
</li>
|
40 |
</ul>
|
4 |
<div class="wf-dashboard-item-inner">
|
5 |
<div class="wf-dashboard-item-content">
|
6 |
<div class="wf-dashboard-item-title">
|
7 |
+
<strong>Firewall Summary: </strong><span class="wf-dashboard-item-inline-subtitle">Attacks Blocked for <?php echo esc_html(preg_replace('/^[^:]+:\/\//', '', network_site_url())); ?></span>
|
8 |
</div>
|
9 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
10 |
</div>
|
12 |
<div class="wf-dashboard-item-extra">
|
13 |
<ul class="wf-dashboard-item-list">
|
14 |
<li>
|
15 |
+
<?php
|
16 |
+
$hasSome = false;
|
17 |
+
foreach ($d->localBlocks as $row) {
|
18 |
+
if ($row['24h'] > 0 || $row['7d'] > 0 || $row['30d'] > 0) {
|
19 |
+
$hasSome = true;
|
20 |
+
break;
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
if (!$hasSome):
|
25 |
+
?>
|
26 |
<div class="wf-dashboard-item-list-text"><em>No blocks have been recorded.</em></div>
|
27 |
<?php else: ?>
|
28 |
+
<table class="wf-table wf-table-hover">
|
29 |
+
<thead>
|
30 |
+
<tr>
|
31 |
+
<th>Block Type</th>
|
32 |
+
<th>Today</th>
|
33 |
+
<th>Week</th>
|
34 |
+
<th>Month</th>
|
35 |
+
</tr>
|
36 |
+
</thead>
|
37 |
+
<tbody>
|
38 |
+
<?php
|
39 |
+
$totals = array('24h' => 0, '7d' => 0, '30d' => 0);
|
40 |
+
foreach ($d->localBlocks as $row): ?>
|
41 |
+
<tr>
|
42 |
+
<td><?php echo esc_html($row['title']); ?></td>
|
43 |
+
<td><?php echo esc_html(number_format_i18n($row['24h'])); ?></td>
|
44 |
+
<td><?php echo esc_html(number_format_i18n($row['7d'])); ?></td>
|
45 |
+
<td><?php echo esc_html(number_format_i18n($row['30d'])); ?></td>
|
46 |
+
</tr>
|
47 |
+
<?php $totals['24h'] += $row['24h']; $totals['7d'] += $row['7d']; $totals['30d'] += $row['30d']; ?>
|
48 |
+
<?php endforeach; ?>
|
49 |
+
</tbody>
|
50 |
+
<tfoot>
|
51 |
+
<tr>
|
52 |
+
<th>Total</th>
|
53 |
+
<th><?php echo esc_html(number_format_i18n($totals['24h'])); ?></th>
|
54 |
+
<th><?php echo esc_html(number_format_i18n($totals['7d'])); ?></th>
|
55 |
+
<th><?php echo esc_html(number_format_i18n($totals['30d'])); ?></th>
|
56 |
+
</tr>
|
57 |
+
</tfoot>
|
58 |
+
</table>
|
59 |
<?php endif; ?>
|
60 |
</li>
|
61 |
</ul>
|
lib/dashboard/widget_networkattacks.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
<div class="wf-dashboard-item-inner">
|
5 |
<div class="wf-dashboard-item-content">
|
6 |
<div class="wf-dashboard-item-title">
|
7 |
-
<strong>Total Attacks Blocked -
|
8 |
</div>
|
9 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
10 |
</div>
|
4 |
<div class="wf-dashboard-item-inner">
|
5 |
<div class="wf-dashboard-item-content">
|
6 |
<div class="wf-dashboard-item-title">
|
7 |
+
<strong>Total Attacks Blocked: </strong><span class="wf-dashboard-item-inline-subtitle">Wordfence Network</span>
|
8 |
</div>
|
9 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
10 |
</div>
|
lib/dashboard/widget_tdf.php
CHANGED
@@ -4,14 +4,43 @@
|
|
4 |
<div class="wf-dashboard-item-inner">
|
5 |
<div class="wf-dashboard-item-content">
|
6 |
<div class="wf-dashboard-item-title">
|
7 |
-
<strong>Threat Defense Feed
|
8 |
</div>
|
9 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
10 |
</div>
|
11 |
</div>
|
12 |
<div class="wf-dashboard-item-extra">
|
13 |
<ul class="wf-dashboard-item-list">
|
14 |
-
<li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
<?php if ($d->tdfCommunity === null): ?>
|
16 |
<div class="wf-dashboard-item-list-text"><em>Threat Defense Feed statistics will be updated soon.</em></div>
|
17 |
<?php else: ?>
|
@@ -28,18 +57,24 @@
|
|
28 |
<div class="wf-dashboard-item-labeled-count-label">Premium Count</div>
|
29 |
</div>
|
30 |
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
</ul>
|
32 |
<?php endif; ?>
|
33 |
</li>
|
34 |
<?php if (!wfConfig::get('isPaid')): ?>
|
35 |
-
<li>
|
36 |
<div class="wf-dashboard-item-list-text">
|
37 |
<p>As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by an additional <?php echo ($d->tdfPremium - $d->tdfCommunity); ?> firewall rules and malware signatures. Upgrade to Premium today to improve your protection.</p>
|
38 |
<p><a class="wf-btn wf-btn-primary wf-btn-callout" href="https://www.wordfence.com/gnl1scanUpgrade/wordfence-signup/" target="_blank">Upgrade to Premium</a></p>
|
39 |
</div>
|
40 |
</li>
|
41 |
<?php else: ?>
|
42 |
-
<li>
|
43 |
<div class="wf-dashboard-item-list-text">
|
44 |
<p>As a Premium user you receive updates to the Threat Defense Feed in real-time. You are currently protected by an additional <?php echo ($d->tdfPremium - $d->tdfCommunity); ?> firewall rules and malware signatures.</p>
|
45 |
</div>
|
4 |
<div class="wf-dashboard-item-inner">
|
5 |
<div class="wf-dashboard-item-content">
|
6 |
<div class="wf-dashboard-item-title">
|
7 |
+
<strong>Threat Defense Feed</strong>
|
8 |
</div>
|
9 |
<div class="wf-dashboard-item-action"><div class="wf-dashboard-item-action-disclosure"></div></div>
|
10 |
</div>
|
11 |
</div>
|
12 |
<div class="wf-dashboard-item-extra">
|
13 |
<ul class="wf-dashboard-item-list">
|
14 |
+
<li class="wf-dashboard-item-list-header"><p>IP Blacklist</p></li>
|
15 |
+
<li class="wf-dashboard-item-list-body">
|
16 |
+
<?php if ($d->tdfBlacklist === null): ?>
|
17 |
+
<div class="wf-dashboard-item-list-text"><em>Threat Defense Feed statistics will be updated soon.</em></div>
|
18 |
+
<?php else: ?>
|
19 |
+
<ul class="wf-dashboard-item-list wf-dashboard-item-list-horizontal">
|
20 |
+
<li>
|
21 |
+
<div class="wf-dashboard-item-labeled-count">
|
22 |
+
<div class="wf-dashboard-item-labeled-count-count"><?php echo $d->tdfBlacklist; ?></div>
|
23 |
+
<div class="wf-dashboard-item-labeled-count-label">Blacklisted IP Addresses</div>
|
24 |
+
</div>
|
25 |
+
</li>
|
26 |
+
</ul>
|
27 |
+
<?php endif; ?>
|
28 |
+
</li>
|
29 |
+
<?php if (!wfConfig::get('isPaid')): ?>
|
30 |
+
<li class="wf-dashboard-item-list-footer">
|
31 |
+
<div class="wf-dashboard-item-list-text">
|
32 |
+
<p>Premium users are protected by the Wordfence Real-time IP Blacklist, blocking all requests from the most malicious attackers. Upgrade today to enable this feature.</p>
|
33 |
+
</div>
|
34 |
+
</li>
|
35 |
+
<?php else: ?>
|
36 |
+
<li class="wf-dashboard-item-list-footer">
|
37 |
+
<div class="wf-dashboard-item-list-text">
|
38 |
+
<p>Premium users are protected by the Wordfence Real-time IP Blacklist, blocking all requests from the most malicious attackers.</p>
|
39 |
+
</div>
|
40 |
+
</li>
|
41 |
+
<?php endif; ?>
|
42 |
+
<li class="wf-dashboard-item-list-header"><p>Total Firewall Rules and Malware Signatures</p></li>
|
43 |
+
<li class="wf-dashboard-item-list-body">
|
44 |
<?php if ($d->tdfCommunity === null): ?>
|
45 |
<div class="wf-dashboard-item-list-text"><em>Threat Defense Feed statistics will be updated soon.</em></div>
|
46 |
<?php else: ?>
|
57 |
<div class="wf-dashboard-item-labeled-count-label">Premium Count</div>
|
58 |
</div>
|
59 |
</li>
|
60 |
+
<li>
|
61 |
+
<div class="wf-dashboard-item-labeled-count">
|
62 |
+
<div class="wf-dashboard-item-labeled-count-count"><?php echo max($d->tdfPremium - $d->tdfCommunity, 0); ?></div>
|
63 |
+
<div class="wf-dashboard-item-labeled-count-label">Premium Only Count</div>
|
64 |
+
</div>
|
65 |
+
</li>
|
66 |
</ul>
|
67 |
<?php endif; ?>
|
68 |
</li>
|
69 |
<?php if (!wfConfig::get('isPaid')): ?>
|
70 |
+
<li class="wf-dashboard-item-list-footer">
|
71 |
<div class="wf-dashboard-item-list-text">
|
72 |
<p>As a free Wordfence user, you are currently using the Community version of the Threat Defense Feed. Premium users are protected by an additional <?php echo ($d->tdfPremium - $d->tdfCommunity); ?> firewall rules and malware signatures. Upgrade to Premium today to improve your protection.</p>
|
73 |
<p><a class="wf-btn wf-btn-primary wf-btn-callout" href="https://www.wordfence.com/gnl1scanUpgrade/wordfence-signup/" target="_blank">Upgrade to Premium</a></p>
|
74 |
</div>
|
75 |
</li>
|
76 |
<?php else: ?>
|
77 |
+
<li class="wf-dashboard-item-list-footer">
|
78 |
<div class="wf-dashboard-item-list-text">
|
79 |
<p>As a Premium user you receive updates to the Threat Defense Feed in real-time. You are currently protected by an additional <?php echo ($d->tdfPremium - $d->tdfCommunity); ?> firewall rules and malware signatures.</p>
|
80 |
</div>
|
lib/menu_dashboard.php
CHANGED
@@ -53,7 +53,7 @@ $d = new wfDashboard();
|
|
53 |
<div class="wf-dashboard-item-extra">
|
54 |
<ul class="wf-dashboard-item-list">
|
55 |
<li>
|
56 |
-
<ul class="wf-dashboard-item-list wf-dashboard-item-list-horizontal wf-dashboard-item-list-equal">
|
57 |
<?php foreach ($d->features as $f): ?>
|
58 |
<li>
|
59 |
<div class="wf-dashboard-item-list-title"><a href="<?php echo esc_html($f['link']); ?>"><?php echo esc_html($f['name']); ?></a></div>
|
@@ -95,6 +95,11 @@ $d = new wfDashboard();
|
|
95 |
<!-- begin total attacks blocked network -->
|
96 |
<?php include(dirname(__FILE__) . '/dashboard/widget_networkattacks.php'); ?>
|
97 |
<!-- end total attacks blocked network -->
|
|
|
|
|
|
|
|
|
|
|
98 |
<!-- begin countries blocked -->
|
99 |
<?php include(dirname(__FILE__) . '/dashboard/widget_countries.php'); ?>
|
100 |
<!-- end countries blocked -->
|
53 |
<div class="wf-dashboard-item-extra">
|
54 |
<ul class="wf-dashboard-item-list">
|
55 |
<li>
|
56 |
+
<ul class="wf-dashboard-item-list-bordered wf-dashboard-item-list-horizontal-bordered wf-dashboard-item-list-equal">
|
57 |
<?php foreach ($d->features as $f): ?>
|
58 |
<li>
|
59 |
<div class="wf-dashboard-item-list-title"><a href="<?php echo esc_html($f['link']); ?>"><?php echo esc_html($f['name']); ?></a></div>
|
95 |
<!-- begin total attacks blocked network -->
|
96 |
<?php include(dirname(__FILE__) . '/dashboard/widget_networkattacks.php'); ?>
|
97 |
<!-- end total attacks blocked network -->
|
98 |
+
<?php if (isset($d->blacklist7d)): ?>
|
99 |
+
<!-- begin blacklist blocks -->
|
100 |
+
<?php include(dirname(__FILE__) . '/dashboard/widget_blacklist.php'); ?>
|
101 |
+
<!-- end blacklist blocks -->
|
102 |
+
<?php endif; ?>
|
103 |
<!-- begin countries blocked -->
|
104 |
<?php include(dirname(__FILE__) . '/dashboard/widget_countries.php'); ?>
|
105 |
<!-- end countries blocked -->
|
lib/menu_firewall_waf.php
CHANGED
@@ -236,7 +236,7 @@ $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&wafAction=removeA
|
|
236 |
<label class="wf-checkbox-inline"><input type="checkbox" id="waf-disable-ip-blocking" name="waf-disable-ip-blocking" value="1"<?php echo $config->getConfig('disableWAFIPBlocking') ? ' checked' : ''; ?>>Delay IP and Country blocking until after WordPress and plugins have loaded (only process firewall rules early) <a href="https://docs.wordfence.com/en/WAF#Advanced_Configuration" target="_blank" class="wfhelp"></a></label>
|
237 |
</div>
|
238 |
<div class="wf-col-xs-12">
|
239 |
-
<label class="wf-checkbox-inline"><input type="checkbox" id="waf-disable-blacklist-blocking" name="waf-disable-blacklist-blocking" value="1"<?php echo !$config->getConfig('disableWAFBlacklistBlocking') ? ' checked' : ''; ?>>Preemptively block malicious IP addresses <span style="color: #F00;">Premium Feature</span> <a href="https://docs.wordfence.com/en/WAF#Advanced_Configuration" target="_blank" class="wfhelp"></a></label>
|
240 |
</div>
|
241 |
</div>
|
242 |
</div>
|
236 |
<label class="wf-checkbox-inline"><input type="checkbox" id="waf-disable-ip-blocking" name="waf-disable-ip-blocking" value="1"<?php echo $config->getConfig('disableWAFIPBlocking') ? ' checked' : ''; ?>>Delay IP and Country blocking until after WordPress and plugins have loaded (only process firewall rules early) <a href="https://docs.wordfence.com/en/WAF#Advanced_Configuration" target="_blank" class="wfhelp"></a></label>
|
237 |
</div>
|
238 |
<div class="wf-col-xs-12">
|
239 |
+
<label class="wf-checkbox-inline<?php echo (wfConfig::p() ? '' : ' wf-disabled'); ?>"><input type="checkbox" id="waf-disable-blacklist-blocking" name="waf-disable-blacklist-blocking" value="1"<?php echo !$config->getConfig('disableWAFBlacklistBlocking') ? ' checked' : ''; echo (wfConfig::p() ? '' : ' disabled'); ?>>Preemptively block malicious IP addresses <span style="color: #F00;">Premium Feature</span> <a href="https://docs.wordfence.com/en/WAF#Advanced_Configuration" target="_blank" class="wfhelp"></a></label>
|
240 |
</div>
|
241 |
</div>
|
242 |
</div>
|
lib/wfActivityReport.php
CHANGED
@@ -1,6 +1,10 @@
|
|
1 |
<?php
|
2 |
|
3 |
class wfActivityReport {
|
|
|
|
|
|
|
|
|
4 |
|
5 |
/**
|
6 |
* @var int
|
@@ -185,7 +189,7 @@ class wfActivityReport {
|
|
185 |
);
|
186 |
}
|
187 |
|
188 |
-
public function getBlockedCount($maxAgeDays = null) {
|
189 |
$maxAgeDays = (int) $maxAgeDays;
|
190 |
if ($maxAgeDays <= 0) {
|
191 |
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day)) / 86400)';
|
@@ -202,14 +206,68 @@ class wfActivityReport {
|
|
202 |
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval ' . $maxAgeDays . ' day)) / 86400)';
|
203 |
}
|
204 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
$count = $this->db->get_var(<<<SQL
|
206 |
SELECT SUM(blockCount) as blockCount
|
207 |
FROM {$this->db->prefix}wfBlockedIPLog
|
208 |
-
WHERE unixday >= {$interval}
|
209 |
SQL
|
210 |
);
|
211 |
return $count;
|
212 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
|
214 |
/**
|
215 |
* @param int $limit
|
@@ -423,7 +481,7 @@ SQL
|
|
423 |
* @param mixed $ip_address
|
424 |
* @param int|null $unixday
|
425 |
*/
|
426 |
-
public static function logBlockedIP($ip_address, $unixday = null, $type = null) {
|
427 |
/** @var wpdb $wpdb */
|
428 |
global $wpdb;
|
429 |
|
@@ -451,10 +509,10 @@ SQL
|
|
451 |
|
452 |
$wpdb->query($wpdb->prepare(<<<SQL
|
453 |
INSERT INTO $blocked_table (IP, countryCode, blockCount, unixday, blockType)
|
454 |
-
VALUES (%s, %s,
|
455 |
-
ON DUPLICATE KEY UPDATE blockCount = blockCount +
|
456 |
SQL
|
457 |
-
, $ip_bin, $country, $type));
|
458 |
}
|
459 |
|
460 |
/**
|
1 |
<?php
|
2 |
|
3 |
class wfActivityReport {
|
4 |
+
|
5 |
+
const BLOCK_TYPE_COMPLEX = 'complex';
|
6 |
+
const BLOCK_TYPE_BRUTE_FORCE = 'bruteforce';
|
7 |
+
const BLOCK_TYPE_BLACKLIST = 'blacklist';
|
8 |
|
9 |
/**
|
10 |
* @var int
|
189 |
);
|
190 |
}
|
191 |
|
192 |
+
public function getBlockedCount($maxAgeDays = null, $grouping = null) {
|
193 |
$maxAgeDays = (int) $maxAgeDays;
|
194 |
if ($maxAgeDays <= 0) {
|
195 |
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day)) / 86400)';
|
206 |
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval ' . $maxAgeDays . ' day)) / 86400)';
|
207 |
}
|
208 |
|
209 |
+
//Possible values for blockType: throttle, manual, brute, fakegoogle, badpost, country, advanced, blacklist, waf
|
210 |
+
$groupingWHERE = '';
|
211 |
+
switch ($grouping) {
|
212 |
+
case self::BLOCK_TYPE_COMPLEX:
|
213 |
+
$groupingWHERE = ' AND blockType IN ("throttle", "fakegoogle", "badpost", "country", "advanced", "waf", "manual")';
|
214 |
+
break;
|
215 |
+
case self::BLOCK_TYPE_BRUTE_FORCE:
|
216 |
+
$groupingWHERE = ' AND blockType IN ("brute")';
|
217 |
+
break;
|
218 |
+
case self::BLOCK_TYPE_BLACKLIST:
|
219 |
+
$groupingWHERE = ' AND blockType IN ("blacklist")';
|
220 |
+
break;
|
221 |
+
}
|
222 |
+
|
223 |
$count = $this->db->get_var(<<<SQL
|
224 |
SELECT SUM(blockCount) as blockCount
|
225 |
FROM {$this->db->prefix}wfBlockedIPLog
|
226 |
+
WHERE unixday >= {$interval}{$groupingWHERE}
|
227 |
SQL
|
228 |
);
|
229 |
return $count;
|
230 |
}
|
231 |
+
|
232 |
+
public function getBlacklistBlockedStats($maxAgeDays = null, $ips = null) {
|
233 |
+
$maxAgeDays = (int) $maxAgeDays;
|
234 |
+
if ($maxAgeDays <= 0) {
|
235 |
+
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day)) / 86400)';
|
236 |
+
switch (wfConfig::get('email_summary_interval', 'weekly')) {
|
237 |
+
case 'daily':
|
238 |
+
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 day)) / 86400)';
|
239 |
+
break;
|
240 |
+
case 'monthly':
|
241 |
+
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 month)) / 86400)';
|
242 |
+
break;
|
243 |
+
}
|
244 |
+
}
|
245 |
+
else {
|
246 |
+
$interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval ' . $maxAgeDays . ' day)) / 86400)';
|
247 |
+
}
|
248 |
+
|
249 |
+
if ($ips !== null) {
|
250 |
+
foreach ($ips as &$ip) {
|
251 |
+
$ip = '"' . esc_sql($ip) . '"';
|
252 |
+
}
|
253 |
+
$ipsWHERE = ' AND IP IN (' . implode(',', $ips) . ')';
|
254 |
+
}
|
255 |
+
|
256 |
+
$stats = $this->db->get_results(<<<SQL
|
257 |
+
SELECT SUM(blockCount) as blockCount, IP, countryCode
|
258 |
+
FROM {$this->db->prefix}wfBlockedIPLog
|
259 |
+
WHERE unixday >= {$interval}{$ipsWHERE} GROUP BY IP
|
260 |
+
SQL
|
261 |
+
, ARRAY_A);
|
262 |
+
|
263 |
+
if ($stats) {
|
264 |
+
foreach ($stats as &$row) {
|
265 |
+
$row['countryName'] = $this->getCountryNameByCode($row['countryCode']);
|
266 |
+
}
|
267 |
+
}
|
268 |
+
|
269 |
+
return $stats;
|
270 |
+
}
|
271 |
|
272 |
/**
|
273 |
* @param int $limit
|
481 |
* @param mixed $ip_address
|
482 |
* @param int|null $unixday
|
483 |
*/
|
484 |
+
public static function logBlockedIP($ip_address, $unixday = null, $type = null, $count = 1) {
|
485 |
/** @var wpdb $wpdb */
|
486 |
global $wpdb;
|
487 |
|
509 |
|
510 |
$wpdb->query($wpdb->prepare(<<<SQL
|
511 |
INSERT INTO $blocked_table (IP, countryCode, blockCount, unixday, blockType)
|
512 |
+
VALUES (%s, %s, %d, $unixday_insert, %s)
|
513 |
+
ON DUPLICATE KEY UPDATE blockCount = blockCount + VALUES(blockCount)
|
514 |
SQL
|
515 |
+
, $ip_bin, $country, $count, $type));
|
516 |
}
|
517 |
|
518 |
/**
|
lib/wfConfig.php
CHANGED
@@ -190,8 +190,13 @@ class wfConfig {
|
|
190 |
return $options;
|
191 |
}
|
192 |
public static function updateTableExists() {
|
193 |
-
$
|
194 |
-
self::$tableExists =
|
|
|
|
|
|
|
|
|
|
|
195 |
}
|
196 |
private static function updateCachedOption($name, $val) {
|
197 |
$options = self::loadAllOptions();
|
@@ -683,6 +688,57 @@ class wfConfig {
|
|
683 |
wfConfig::set('autoUpdate', '0');
|
684 |
wp_clear_scheduled_hook('wordfence_daily_autoUpdate');
|
685 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
686 |
public static function autoUpdate(){
|
687 |
try {
|
688 |
if(getenv('noabort') != '1' && stristr($_SERVER['SERVER_SOFTWARE'], 'litespeed') !== false){
|
@@ -712,6 +768,11 @@ class wfConfig {
|
|
712 |
}
|
713 |
require_once(ABSPATH . 'wp-includes/update.php');
|
714 |
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
|
|
|
|
|
|
|
|
|
|
715 |
wp_update_plugins();
|
716 |
ob_start();
|
717 |
$upgrader = new Plugin_Upgrader();
|
@@ -725,6 +786,8 @@ class wfConfig {
|
|
725 |
$output = @ob_get_contents();
|
726 |
@ob_end_clean();
|
727 |
} catch(Exception $e){}
|
|
|
|
|
728 |
}
|
729 |
|
730 |
/**
|
190 |
return $options;
|
191 |
}
|
192 |
public static function updateTableExists() {
|
193 |
+
global $wpdb;
|
194 |
+
self::$tableExists = $wpdb->get_col($wpdb->prepare(<<<SQL
|
195 |
+
SELECT TABLE_NAME FROM information_schema.TABLES
|
196 |
+
WHERE TABLE_SCHEMA=DATABASE()
|
197 |
+
AND TABLE_NAME=%s
|
198 |
+
SQL
|
199 |
+
, self::table()));
|
200 |
}
|
201 |
private static function updateCachedOption($name, $val) {
|
202 |
$options = self::loadAllOptions();
|
688 |
wfConfig::set('autoUpdate', '0');
|
689 |
wp_clear_scheduled_hook('wordfence_daily_autoUpdate');
|
690 |
}
|
691 |
+
public static function createLock($name, $timeout = null) { //Polyfill since WP's built-in version wasn't added until 4.5
|
692 |
+
global $wpdb;
|
693 |
+
$oldBlogID = $wpdb->set_blog_id(0);
|
694 |
+
|
695 |
+
if (function_exists('WP_Upgrader::create_lock')) {
|
696 |
+
$result = WP_Upgrader::create_lock($name, $timeout);
|
697 |
+
$wpdb->set_blog_id($oldBlogID);
|
698 |
+
return $result;
|
699 |
+
}
|
700 |
+
|
701 |
+
if (!$timeout) {
|
702 |
+
$timeout = 3600;
|
703 |
+
}
|
704 |
+
|
705 |
+
$lock_option = $name . '.lock';
|
706 |
+
$lock_result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time()));
|
707 |
+
|
708 |
+
if (!$lock_result) {
|
709 |
+
$lock_result = get_option($lock_option);
|
710 |
+
if (!$lock_result) {
|
711 |
+
$wpdb->set_blog_id($oldBlogID);
|
712 |
+
return false;
|
713 |
+
}
|
714 |
+
|
715 |
+
if ($lock_result > (time() - $timeout)) {
|
716 |
+
$wpdb->set_blog_id($oldBlogID);
|
717 |
+
return false;
|
718 |
+
}
|
719 |
+
|
720 |
+
self::releaseLock($name);
|
721 |
+
$wpdb->set_blog_id($oldBlogID);
|
722 |
+
return self::createLock($name, $timeout);
|
723 |
+
}
|
724 |
+
|
725 |
+
update_option($lock_option, time());
|
726 |
+
$wpdb->set_blog_id($oldBlogID);
|
727 |
+
return true;
|
728 |
+
}
|
729 |
+
public static function releaseLock($name) {
|
730 |
+
global $wpdb;
|
731 |
+
$oldBlogID = $wpdb->set_blog_id(0);
|
732 |
+
if (function_exists('WP_Upgrader::release_lock')) {
|
733 |
+
$result = WP_Upgrader::release_lock($name);
|
734 |
+
}
|
735 |
+
else {
|
736 |
+
$result = delete_option($name . '.lock');
|
737 |
+
}
|
738 |
+
|
739 |
+
$wpdb->set_blog_id($oldBlogID);
|
740 |
+
return $result;
|
741 |
+
}
|
742 |
public static function autoUpdate(){
|
743 |
try {
|
744 |
if(getenv('noabort') != '1' && stristr($_SERVER['SERVER_SOFTWARE'], 'litespeed') !== false){
|
768 |
}
|
769 |
require_once(ABSPATH . 'wp-includes/update.php');
|
770 |
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
771 |
+
|
772 |
+
if (!self::createLock('wfAutoUpdate')) {
|
773 |
+
return;
|
774 |
+
}
|
775 |
+
|
776 |
wp_update_plugins();
|
777 |
ob_start();
|
778 |
$upgrader = new Plugin_Upgrader();
|
786 |
$output = @ob_get_contents();
|
787 |
@ob_end_clean();
|
788 |
} catch(Exception $e){}
|
789 |
+
|
790 |
+
self::releaseLock('wfAutoUpdate');
|
791 |
}
|
792 |
|
793 |
/**
|
lib/wfDB.php
CHANGED
@@ -72,7 +72,13 @@ class wfDB {
|
|
72 |
}
|
73 |
public function createKeyIfNotExists($table, $col, $keyName){
|
74 |
$table = $this->prefix() . $table;
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
$keyFound = false;
|
77 |
if($exists){
|
78 |
$q = $this->querySelect("show keys from $table");
|
72 |
}
|
73 |
public function createKeyIfNotExists($table, $col, $keyName){
|
74 |
$table = $this->prefix() . $table;
|
75 |
+
|
76 |
+
$exists = $this->querySingle(<<<SQL
|
77 |
+
SELECT TABLE_NAME FROM information_schema.TABLES
|
78 |
+
WHERE TABLE_SCHEMA=DATABASE()
|
79 |
+
AND TABLE_NAME='%s'
|
80 |
+
SQL
|
81 |
+
, $table);
|
82 |
$keyFound = false;
|
83 |
if($exists){
|
84 |
$q = $this->querySelect("show keys from $table");
|
lib/wfDashboard.php
CHANGED
@@ -22,6 +22,7 @@ class wfDashboard {
|
|
22 |
|
23 |
public $tdfCommunity;
|
24 |
public $tdfPremium;
|
|
|
25 |
|
26 |
public $ips24h;
|
27 |
public $ips7d;
|
@@ -30,9 +31,9 @@ class wfDashboard {
|
|
30 |
public $loginsSuccess;
|
31 |
public $loginsFail;
|
32 |
|
33 |
-
public $
|
34 |
-
|
35 |
-
public $
|
36 |
|
37 |
public $networkBlock24h;
|
38 |
public $networkBlock7d;
|
@@ -41,7 +42,21 @@ class wfDashboard {
|
|
41 |
public $countriesLocal;
|
42 |
public $countriesNetwork;
|
43 |
|
44 |
-
public static function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
if (isset($data['notifications'])) {
|
46 |
foreach ($data['notifications'] as $n) {
|
47 |
if (!isset($n['id']) || !isset($n['priority']) || !isset($n['html'])) {
|
@@ -53,6 +68,28 @@ class wfDashboard {
|
|
53 |
|
54 |
unset($data['notifications']);
|
55 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
wfConfig::set_ser('dashboardData', $data);
|
57 |
}
|
58 |
|
@@ -119,10 +156,19 @@ class wfDashboard {
|
|
119 |
$api = new wfAPI($apiKey, $wp_version);
|
120 |
wfConfig::set('lastDashboardCheck', time());
|
121 |
try {
|
|
|
|
|
|
|
|
|
122 |
$json = $api->getStaticURL('/stats.json');
|
123 |
-
$
|
124 |
-
if ($json && is_array($
|
125 |
-
self::processDashboardResponse($
|
|
|
|
|
|
|
|
|
|
|
126 |
}
|
127 |
}
|
128 |
catch (Exception $e) {
|
@@ -136,9 +182,10 @@ class wfDashboard {
|
|
136 |
}
|
137 |
|
138 |
// TDF
|
139 |
-
if (is_array($data) && isset($data['tdf']) && isset($data['tdf']['community'])) {
|
140 |
$this->tdfCommunity = (int) $data['tdf']['community'];
|
141 |
$this->tdfPremium = (int) $data['tdf']['premium'];
|
|
|
142 |
}
|
143 |
|
144 |
// Top IPs Blocked
|
@@ -172,10 +219,53 @@ class wfDashboard {
|
|
172 |
}
|
173 |
}
|
174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
// Local Attack Data
|
176 |
-
$this->
|
177 |
-
$this->
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
|
180 |
// Network Attack Data
|
181 |
if (is_array($data) && isset($data['attackdata']) && isset($data['attackdata']['24h'])) {
|
@@ -203,4 +293,23 @@ class wfDashboard {
|
|
203 |
$this->countriesNetwork = $networkCountries;
|
204 |
}
|
205 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
}
|
22 |
|
23 |
public $tdfCommunity;
|
24 |
public $tdfPremium;
|
25 |
+
public $tdfBlacklist;
|
26 |
|
27 |
public $ips24h;
|
28 |
public $ips7d;
|
31 |
public $loginsSuccess;
|
32 |
public $loginsFail;
|
33 |
|
34 |
+
public $blacklist7d;
|
35 |
+
|
36 |
+
public $localBlocks;
|
37 |
|
38 |
public $networkBlock24h;
|
39 |
public $networkBlock7d;
|
42 |
public $countriesLocal;
|
43 |
public $countriesNetwork;
|
44 |
|
45 |
+
public static function updatePOSTParams() {
|
46 |
+
if (wfConfig::p()) {
|
47 |
+
global $wpdb;
|
48 |
+
$topIPs = $wpdb->get_col("SELECT DISTINCT IP FROM (SELECT IP FROM {$wpdb->prefix}wfBlockedIPLog WHERE unixday >= FLOOR(UNIX_TIMESTAMP() / 86400) - 7 AND unixday <= FLOOR(UNIX_TIMESTAMP() / 86400) AND blockType = 'blacklist' ORDER BY blockCount DESC LIMIT 50) AS t ORDER BY IP ASC");
|
49 |
+
$topIPs = base64_encode(implode('', $topIPs));
|
50 |
+
return array('topBlacklist' => $topIPs);
|
51 |
+
}
|
52 |
+
return array();
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @param array $data The data, parsed from JSON, of the response from noc1.
|
57 |
+
* @param bool|string $blacklistIPs The binary list of IPs that was sent for `topBlacklist` and that the `blacklistCounts` fields will correspond to.
|
58 |
+
*/
|
59 |
+
public static function processDashboardResponse($data, $blacklistIPs = false) {
|
60 |
if (isset($data['notifications'])) {
|
61 |
foreach ($data['notifications'] as $n) {
|
62 |
if (!isset($n['id']) || !isset($n['priority']) || !isset($n['html'])) {
|
68 |
|
69 |
unset($data['notifications']);
|
70 |
}
|
71 |
+
|
72 |
+
if (isset($data['blacklistCounts']) && is_string($blacklistIPs)) {
|
73 |
+
$rawCounts = @base64_decode($data['blacklistCounts']);
|
74 |
+
if ((wfUtils::strlen($rawCounts) / 4) == (wfUtils::strlen($blacklistIPs) / 16)) {
|
75 |
+
$blacklistCounts = array('updated' => time(), 'counts' => array());
|
76 |
+
$offsetIPs = 0;
|
77 |
+
$offsetCounts = 0;
|
78 |
+
while ($offsetIPs < wfUtils::strlen($blacklistIPs)) {
|
79 |
+
$ip = wfUtils::inet_ntop(wfUtils::substr($blacklistIPs, $offsetIPs, 16));
|
80 |
+
$countArr = @unpack('V', wfUtils::substr($rawCounts, $offsetCounts, 4));
|
81 |
+
$count = (int) @array_shift($countArr);
|
82 |
+
$blacklistCounts['counts'][] = array('ip' => $ip, 'network' => $count);
|
83 |
+
$offsetIPs += 16;
|
84 |
+
$offsetCounts += 4;
|
85 |
+
}
|
86 |
+
$data['blacklistCounts'] = $blacklistCounts;
|
87 |
+
}
|
88 |
+
else {
|
89 |
+
unset($data['blacklistCounts']);
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
wfConfig::set_ser('dashboardData', $data);
|
94 |
}
|
95 |
|
156 |
$api = new wfAPI($apiKey, $wp_version);
|
157 |
wfConfig::set('lastDashboardCheck', time());
|
158 |
try {
|
159 |
+
if (isset($data['blacklistCounts']) && $data['blacklistCounts']['updated'] > (time() - 86400)) { //Preserve blacklist stats across hourly updates for 24 hours
|
160 |
+
$blacklistCounts = $data['blacklistCounts'];
|
161 |
+
}
|
162 |
+
|
163 |
$json = $api->getStaticURL('/stats.json');
|
164 |
+
$updated = @json_decode($json, true);
|
165 |
+
if ($json && is_array($updated)) {
|
166 |
+
self::processDashboardResponse($updated);
|
167 |
+
$data = wfConfig::get_ser('dashboardData');
|
168 |
+
if (isset($blacklistCounts)) { //Re-insert blacklist stats
|
169 |
+
$data['blacklistCounts'] = $blacklistCounts;
|
170 |
+
wfConfig::set_ser('dashboardData', $data);
|
171 |
+
}
|
172 |
}
|
173 |
}
|
174 |
catch (Exception $e) {
|
182 |
}
|
183 |
|
184 |
// TDF
|
185 |
+
if (is_array($data) && isset($data['tdf']) && isset($data['tdf']['community']) && isset($data['tdf']['premium']) && isset($data['tdf']['blacklist'])) {
|
186 |
$this->tdfCommunity = (int) $data['tdf']['community'];
|
187 |
$this->tdfPremium = (int) $data['tdf']['premium'];
|
188 |
+
$this->tdfBlacklist = (int) $data['tdf']['blacklist'];
|
189 |
}
|
190 |
|
191 |
// Top IPs Blocked
|
219 |
}
|
220 |
}
|
221 |
|
222 |
+
// Blacklist
|
223 |
+
if (is_array($data) && isset($data['blacklistCounts']) && wfConfig::p()) {
|
224 |
+
$this->blacklist7d = $data['blacklistCounts'];
|
225 |
+
$ips = array();
|
226 |
+
foreach ($this->blacklist7d['counts'] as $entry) {
|
227 |
+
$ips[] = wfUtils::inet_pton($entry['ip']);
|
228 |
+
}
|
229 |
+
|
230 |
+
$localStats = $activityReport->getBlacklistBlockedStats(7, $ips);
|
231 |
+
foreach ($this->blacklist7d['counts'] as &$blacklistEntry) {
|
232 |
+
$local = 0;
|
233 |
+
$countryName = 'Unknown';
|
234 |
+
$countryCode = '';
|
235 |
+
foreach ($localStats as $l) {
|
236 |
+
if ($l['IP'] == wfUtils::inet_pton($blacklistEntry['ip'])) {
|
237 |
+
$local = $l['blockCount'];
|
238 |
+
$countryName = $l['countryName'];
|
239 |
+
$countryCode = $l['countryCode'];
|
240 |
+
break;
|
241 |
+
}
|
242 |
+
}
|
243 |
+
$blacklistEntry['ip'] = $this->_obfuscateIP($blacklistEntry['ip']);
|
244 |
+
$blacklistEntry['local'] = $local;
|
245 |
+
$blacklistEntry['countryName'] = $countryName;
|
246 |
+
$blacklistEntry['countryCode'] = $countryCode;
|
247 |
+
}
|
248 |
+
|
249 |
+
usort($this->blacklist7d['counts'], array($this, '_sortBlacklist'));
|
250 |
+
}
|
251 |
+
|
252 |
// Local Attack Data
|
253 |
+
$this->localBlocks = array();
|
254 |
+
$this->localBlocks[] = array('title' => 'Complex',
|
255 |
+
'24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_COMPLEX),
|
256 |
+
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_COMPLEX),
|
257 |
+
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_COMPLEX),
|
258 |
+
);
|
259 |
+
$this->localBlocks[] = array('title' => 'Brute Force',
|
260 |
+
'24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
261 |
+
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
262 |
+
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
|
263 |
+
);
|
264 |
+
$this->localBlocks[] = array('title' => 'Blacklist',
|
265 |
+
'24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
266 |
+
'7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
267 |
+
'30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BLACKLIST),
|
268 |
+
);
|
269 |
|
270 |
// Network Attack Data
|
271 |
if (is_array($data) && isset($data['attackdata']) && isset($data['attackdata']['24h'])) {
|
293 |
$this->countriesNetwork = $networkCountries;
|
294 |
}
|
295 |
}
|
296 |
+
|
297 |
+
protected function _sortBlacklist($a, $b) {
|
298 |
+
if ($a['local'] == $b['local']) { return 0; }
|
299 |
+
if ($a['local'] < $b['local']) { return 1; }
|
300 |
+
return -1;
|
301 |
+
}
|
302 |
+
|
303 |
+
protected function _obfuscateIP($ip) {
|
304 |
+
if (wfUtils::isIPv6MappedIPv4($ip)) {
|
305 |
+
$ip = substr($ip, strrpos($ip, ':') + 1);
|
306 |
+
}
|
307 |
+
|
308 |
+
if (preg_match('/^(\d+)\.\d+\.\d+\.(\d+)$/', $ip, $matches)) {
|
309 |
+
return $matches[1] . '.x.x.' . $matches[2];
|
310 |
+
}
|
311 |
+
|
312 |
+
$binIP = wfUtils::inet_pton($ip);
|
313 |
+
return bin2hex(wfUtils::substr($binIP, 0, 4)) . '::x::' . bin2hex(wfUtils::substr($binIP, -4));
|
314 |
+
}
|
315 |
}
|
lib/wfIssues.php
CHANGED
@@ -25,10 +25,10 @@ class wfIssues {
|
|
25 |
$this->db = new wfDB();
|
26 |
}
|
27 |
public function addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) {
|
28 |
-
$this->_addIssue('issue', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed);
|
29 |
}
|
30 |
public function addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData) {
|
31 |
-
$this->_addIssue('pending', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData);
|
32 |
}
|
33 |
private function _addIssue($group, $type, $severity,
|
34 |
$ignoreP, /* some piece of data used for md5 for permanent ignores */
|
@@ -351,7 +351,7 @@ class wfIssues {
|
|
351 |
$res1 = $wpdb->get_col("SELECT count(*) as cnt FROM $wpdb->posts where post_type='post' and post_status NOT IN ('auto-draft')"); $dat['totalPosts'] = $res1['0'];
|
352 |
$res1 = $wpdb->get_col("SELECT count(*) as cnt FROM $wpdb->comments"); $dat['totalComments'] = $res1['0'];
|
353 |
$res1 = $wpdb->get_col("SELECT count(*) as cnt FROM $wpdb->term_taxonomy where taxonomy='category'"); $dat['totalCategories'] = $res1['0'];
|
354 |
-
$res1 = $wpdb->get_col("
|
355 |
$totalRows = 0;
|
356 |
foreach($res1 as $table){
|
357 |
$res2 = $wpdb->get_col("select count(*) from `$table`");
|
25 |
$this->db = new wfDB();
|
26 |
}
|
27 |
public function addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) {
|
28 |
+
return $this->_addIssue('issue', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed);
|
29 |
}
|
30 |
public function addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData) {
|
31 |
+
return $this->_addIssue('pending', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData);
|
32 |
}
|
33 |
private function _addIssue($group, $type, $severity,
|
34 |
$ignoreP, /* some piece of data used for md5 for permanent ignores */
|
351 |
$res1 = $wpdb->get_col("SELECT count(*) as cnt FROM $wpdb->posts where post_type='post' and post_status NOT IN ('auto-draft')"); $dat['totalPosts'] = $res1['0'];
|
352 |
$res1 = $wpdb->get_col("SELECT count(*) as cnt FROM $wpdb->comments"); $dat['totalComments'] = $res1['0'];
|
353 |
$res1 = $wpdb->get_col("SELECT count(*) as cnt FROM $wpdb->term_taxonomy where taxonomy='category'"); $dat['totalCategories'] = $res1['0'];
|
354 |
+
$res1 = $wpdb->get_col("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()"); $dat['totalTables'] = sizeof($res1);
|
355 |
$totalRows = 0;
|
356 |
foreach($res1 as $table){
|
357 |
$res2 = $wpdb->get_col("select count(*) from `$table`");
|
lib/wfScanEngine.php
CHANGED
@@ -328,7 +328,7 @@ class wfScanEngine {
|
|
328 |
|
329 |
private function scan_checkGSB(){
|
330 |
if(wfConfig::get('isPaid')){
|
331 |
-
$this->statusIDX['checkGSB'] = wordfence::statusStart("Checking if your site is on
|
332 |
|
333 |
$urlsToCheck = array(array(get_site_url()));
|
334 |
$haveIssues = false;
|
@@ -349,9 +349,14 @@ class wfScanEngine {
|
|
349 |
$longMsg = "The URL " . esc_html($url) . " is on the phishing list. More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=" . urlencode($url) . "&client=googlechrome&hl=en-US\" target=\"_blank\">Google Safe Browsing diagnostic page</a>.";
|
350 |
$gsb = $badList;
|
351 |
}
|
|
|
|
|
|
|
|
|
|
|
352 |
else {
|
353 |
-
$shortMsg = 'Your site is listed on
|
354 |
-
$longMsg = "The URL is: " . esc_html($url)
|
355 |
$gsb = 'unknown';
|
356 |
}
|
357 |
|
@@ -363,7 +368,7 @@ class wfScanEngine {
|
|
363 |
|
364 |
wordfence::statusEnd($this->statusIDX['checkGSB'], $haveIssues);
|
365 |
} else {
|
366 |
-
wordfence::statusPaidOnly("Checking if your site is on
|
367 |
sleep(2);
|
368 |
}
|
369 |
}
|
@@ -623,7 +628,7 @@ class wfScanEngine {
|
|
623 |
}
|
624 |
private function scan_fileContents_init(){
|
625 |
$this->statusIDX['infect'] = wordfence::statusStart('Scanning file contents for infections and vulnerabilities');
|
626 |
-
$this->statusIDX['GSB'] = wordfence::statusStart('Scanning files for URLs
|
627 |
$this->scanner = new wordfenceScanner($this->apiKey, $this->wp_version, ABSPATH);
|
628 |
$this->status(2, 'info', "Starting scan of file contents");
|
629 |
}
|
@@ -640,10 +645,11 @@ class wfScanEngine {
|
|
640 |
$haveIssuesGSB = false;
|
641 |
foreach($this->fileContentsResults as $issue){
|
642 |
$this->status(2, 'info', "Adding issue: " . $issue['shortMsg']);
|
643 |
-
if($this->addIssue($issue['type'], $issue['severity'], $issue['ignoreP'], $issue['ignoreC'], $issue['shortMsg'], $issue['longMsg'], $issue['data'])){
|
644 |
-
if(
|
645 |
$haveIssuesGSB = true;
|
646 |
-
}
|
|
|
647 |
$haveIssues = true;
|
648 |
}
|
649 |
}
|
@@ -688,7 +694,7 @@ class wfScanEngine {
|
|
688 |
}
|
689 |
|
690 |
private function scan_posts_init(){
|
691 |
-
$this->statusIDX['posts'] = wordfence::statusStart('Scanning posts for URLs
|
692 |
$blogsToScan = self::getBlogsToScan('posts');
|
693 |
$wfdb = new wfDB();
|
694 |
$this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version);
|
@@ -757,10 +763,16 @@ class wfScanEngine {
|
|
757 |
if($result['badList'] == 'goog-malware-shavar'){
|
758 |
$shortMsg = "$uctype contains a suspected malware URL: " . esc_html($this->scanData[$idString]['title']);
|
759 |
$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>.";
|
760 |
-
}
|
|
|
761 |
$shortMsg = "$uctype contains a suspected phishing site URL: " . esc_html($this->scanData[$idString]['title']);
|
762 |
$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']);
|
763 |
-
}
|
|
|
|
|
|
|
|
|
|
|
764 |
//A list type that may be new and the plugin has not been upgraded yet.
|
765 |
continue;
|
766 |
}
|
@@ -795,7 +807,7 @@ class wfScanEngine {
|
|
795 |
wordfence::statusEnd($this->statusIDX['posts'], $haveIssues);
|
796 |
}
|
797 |
private function scan_comments_init(){
|
798 |
-
$this->statusIDX['comments'] = wordfence::statusStart('Scanning comments for URLs
|
799 |
$this->scanData = array();
|
800 |
$this->scanQueue = '';
|
801 |
$this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version);
|
@@ -852,7 +864,7 @@ class wfScanEngine {
|
|
852 |
$blog = null;
|
853 |
$comment = null;
|
854 |
foreach ($hresults as $result) {
|
855 |
-
if ($result['badList'] != 'goog-malware-shavar' && $result['badList'] != 'googpub-phish-shavar') {
|
856 |
continue; //A list type that may be new and the plugin has not been upgraded yet.
|
857 |
}
|
858 |
|
@@ -878,6 +890,10 @@ class wfScanEngine {
|
|
878 |
$shortMsg = "$uctype contains a suspected phishing site URL.";
|
879 |
$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']);
|
880 |
}
|
|
|
|
|
|
|
|
|
881 |
|
882 |
if(is_multisite()){
|
883 |
switch_to_blog($blogID);
|
@@ -932,10 +948,15 @@ class wfScanEngine {
|
|
932 |
if($result['badList'] == 'goog-malware-shavar'){
|
933 |
$this->status(2, 'info', "Marking comment as spam for containing a malware URL. Comment has $cDesc");
|
934 |
return true;
|
935 |
-
}
|
|
|
936 |
$this->status(2, 'info', "Marking comment as spam for containing a phishing URL. Comment has $cDesc");
|
937 |
return true;
|
938 |
-
}
|
|
|
|
|
|
|
|
|
939 |
//A list type that may be new and the plugin has not been upgraded yet.
|
940 |
continue;
|
941 |
}
|
328 |
|
329 |
private function scan_checkGSB(){
|
330 |
if(wfConfig::get('isPaid')){
|
331 |
+
$this->statusIDX['checkGSB'] = wordfence::statusStart("Checking if your site is on a domain blacklist");
|
332 |
|
333 |
$urlsToCheck = array(array(get_site_url()));
|
334 |
$haveIssues = false;
|
349 |
$longMsg = "The URL " . esc_html($url) . " is on the phishing list. More info available at <a href=\"http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=" . urlencode($url) . "&client=googlechrome&hl=en-US\" target=\"_blank\">Google Safe Browsing diagnostic page</a>.";
|
350 |
$gsb = $badList;
|
351 |
}
|
352 |
+
else if ($badList == 'wordfence-dbl') {
|
353 |
+
$shortMsg = 'Your site is listed on the Wordfence domain blacklist.';
|
354 |
+
$longMsg = "The URL " . esc_html($url) . " is on the blacklist.";
|
355 |
+
$gsb = $badList;
|
356 |
+
}
|
357 |
else {
|
358 |
+
$shortMsg = 'Your site is listed on a domain blacklist.';
|
359 |
+
$longMsg = "The URL is: " . esc_html($url);
|
360 |
$gsb = 'unknown';
|
361 |
}
|
362 |
|
368 |
|
369 |
wordfence::statusEnd($this->statusIDX['checkGSB'], $haveIssues);
|
370 |
} else {
|
371 |
+
wordfence::statusPaidOnly("Checking if your site is on a domain blacklist is for paid members only");
|
372 |
sleep(2);
|
373 |
}
|
374 |
}
|
628 |
}
|
629 |
private function scan_fileContents_init(){
|
630 |
$this->statusIDX['infect'] = wordfence::statusStart('Scanning file contents for infections and vulnerabilities');
|
631 |
+
$this->statusIDX['GSB'] = wordfence::statusStart('Scanning files for URLs on a domain blacklists');
|
632 |
$this->scanner = new wordfenceScanner($this->apiKey, $this->wp_version, ABSPATH);
|
633 |
$this->status(2, 'info', "Starting scan of file contents");
|
634 |
}
|
645 |
$haveIssuesGSB = false;
|
646 |
foreach($this->fileContentsResults as $issue){
|
647 |
$this->status(2, 'info', "Adding issue: " . $issue['shortMsg']);
|
648 |
+
if ($this->addIssue($issue['type'], $issue['severity'], $issue['ignoreP'], $issue['ignoreC'], $issue['shortMsg'], $issue['longMsg'], $issue['data'])) {
|
649 |
+
if (isset($issue['data']['gsb'])) {
|
650 |
$haveIssuesGSB = true;
|
651 |
+
}
|
652 |
+
else {
|
653 |
$haveIssues = true;
|
654 |
}
|
655 |
}
|
694 |
}
|
695 |
|
696 |
private function scan_posts_init(){
|
697 |
+
$this->statusIDX['posts'] = wordfence::statusStart('Scanning posts for URLs on a domain blacklist');
|
698 |
$blogsToScan = self::getBlogsToScan('posts');
|
699 |
$wfdb = new wfDB();
|
700 |
$this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version);
|
763 |
if($result['badList'] == 'goog-malware-shavar'){
|
764 |
$shortMsg = "$uctype contains a suspected malware URL: " . esc_html($this->scanData[$idString]['title']);
|
765 |
$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>.";
|
766 |
+
}
|
767 |
+
else if($result['badList'] == 'googpub-phish-shavar') {
|
768 |
$shortMsg = "$uctype contains a suspected phishing site URL: " . esc_html($this->scanData[$idString]['title']);
|
769 |
$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']);
|
770 |
+
}
|
771 |
+
else if ($result['badList'] == 'wordfence-dbl') {
|
772 |
+
$shortMsg = "$uctype contains a suspected malware URL: " . esc_html($this->scanData[$idString]['title']);
|
773 |
+
$longMsg = "This $type contains a URL that is currently listed on Wordfence's domain blacklist. The URL is: " . esc_html($result['URL']);
|
774 |
+
}
|
775 |
+
else {
|
776 |
//A list type that may be new and the plugin has not been upgraded yet.
|
777 |
continue;
|
778 |
}
|
807 |
wordfence::statusEnd($this->statusIDX['posts'], $haveIssues);
|
808 |
}
|
809 |
private function scan_comments_init(){
|
810 |
+
$this->statusIDX['comments'] = wordfence::statusStart('Scanning comments for URLs on a domain blacklist');
|
811 |
$this->scanData = array();
|
812 |
$this->scanQueue = '';
|
813 |
$this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version);
|
864 |
$blog = null;
|
865 |
$comment = null;
|
866 |
foreach ($hresults as $result) {
|
867 |
+
if ($result['badList'] != 'goog-malware-shavar' && $result['badList'] != 'googpub-phish-shavar' && $result['badList'] != 'wordfence-dbl') {
|
868 |
continue; //A list type that may be new and the plugin has not been upgraded yet.
|
869 |
}
|
870 |
|
890 |
$shortMsg = "$uctype contains a suspected phishing site URL.";
|
891 |
$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']);
|
892 |
}
|
893 |
+
else if ($result['badList'] == 'wordfence-dbl') {
|
894 |
+
$shortMsg = "$uctype contains a suspected malware URL.";
|
895 |
+
$longMsg = "This $type contains a URL that is currently listed on Wordfence's domain blacklist. The URL is: " . esc_html($result['URL']);
|
896 |
+
}
|
897 |
|
898 |
if(is_multisite()){
|
899 |
switch_to_blog($blogID);
|
948 |
if($result['badList'] == 'goog-malware-shavar'){
|
949 |
$this->status(2, 'info', "Marking comment as spam for containing a malware URL. Comment has $cDesc");
|
950 |
return true;
|
951 |
+
}
|
952 |
+
else if($result['badList'] == 'googpub-phish-shavar'){
|
953 |
$this->status(2, 'info', "Marking comment as spam for containing a phishing URL. Comment has $cDesc");
|
954 |
return true;
|
955 |
+
}
|
956 |
+
else if ($result['badList'] == 'wordfence-dbl') {
|
957 |
+
$this->status(2, 'info', "Marking comment as spam for containing a malware URL. Comment has $cDesc");
|
958 |
+
}
|
959 |
+
else {
|
960 |
//A list type that may be new and the plugin has not been upgraded yet.
|
961 |
continue;
|
962 |
}
|
lib/wfSchema.php
CHANGED
@@ -157,7 +157,7 @@ class wfSchema {
|
|
157 |
owner text,
|
158 |
host text,
|
159 |
path text,
|
160 |
-
hostKey
|
161 |
KEY k2(hostKey)
|
162 |
) default charset=utf8",
|
163 |
'wfFileMods' => "(
|
157 |
owner text,
|
158 |
host text,
|
159 |
path text,
|
160 |
+
hostKey varbinary(124),
|
161 |
KEY k2(hostKey)
|
162 |
) default charset=utf8",
|
163 |
'wfFileMods' => "(
|
lib/wordfenceClass.php
CHANGED
@@ -92,7 +92,7 @@ class wordfence {
|
|
92 |
$schema->dropAll();
|
93 |
wfConfig::updateTableExists();
|
94 |
foreach(array('wordfence_version', 'wordfenceActivated') as $opt){
|
95 |
-
if (is_multisite()) {
|
96 |
delete_network_option(null, $opt);
|
97 |
}
|
98 |
delete_option($opt);
|
@@ -167,7 +167,8 @@ class wordfence {
|
|
167 |
public static function dailyCron(){
|
168 |
$api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
169 |
try {
|
170 |
-
$
|
|
|
171 |
if(isset($keyData['_isPaidKey']) && $keyData['_isPaidKey']){
|
172 |
$keyExpDays = $keyData['_keyExpDays'];
|
173 |
$keyIsExpired = $keyData['_expired'];
|
@@ -208,7 +209,7 @@ class wordfence {
|
|
208 |
}
|
209 |
if (isset($keyData['dashboard'])) {
|
210 |
wfConfig::set('lastDashboardCheck', time());
|
211 |
-
wfDashboard::processDashboardResponse($keyData['dashboard']);
|
212 |
}
|
213 |
}
|
214 |
catch(Exception $e){
|
@@ -364,8 +365,8 @@ class wordfence {
|
|
364 |
if (function_exists('ignore_user_abort')) {
|
365 |
ignore_user_abort(true);
|
366 |
}
|
367 |
-
$previous_version = (is_multisite() ? get_network_option(null, 'wordfence_version', '0.0.0') : get_option('wordfence_version', '0.0.0'));
|
368 |
-
if (is_multisite()) {
|
369 |
update_network_option(null, 'wordfence_version', WORDFENCE_VERSION); //In case we have a fatal error we don't want to keep running install.
|
370 |
}
|
371 |
else {
|
@@ -700,6 +701,20 @@ SQL
|
|
700 |
$wpdb->query("ALTER TABLE {$fileModsTable} ADD COLUMN `isSafeFile` VARCHAR(1) NOT NULL DEFAULT '?' AFTER `stoppedOnPosition`");
|
701 |
}
|
702 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
703 |
//Check the How does Wordfence get IPs setting
|
704 |
wfUtils::requestDetectProxyCallback();
|
705 |
|
@@ -752,7 +767,7 @@ SQL
|
|
752 |
register_activation_hook(WORDFENCE_FCPATH, 'wordfence::installPlugin');
|
753 |
register_deactivation_hook(WORDFENCE_FCPATH, 'wordfence::uninstallPlugin');
|
754 |
|
755 |
-
$versionInOptions = (is_multisite() ? get_network_option(null, 'wordfence_version', false) : get_option('wordfence_version', false));
|
756 |
if( (! $versionInOptions) || version_compare(WORDFENCE_VERSION, $versionInOptions, '>')){
|
757 |
//Either there is no version in options or the version in options is greater and we need to run the upgrade
|
758 |
self::runInstall();
|
@@ -3038,10 +3053,11 @@ SQL
|
|
3038 |
} else {
|
3039 |
$api = new wfAPI($opts['apiKey'], wfUtils::getWPVersion());
|
3040 |
try {
|
3041 |
-
$
|
|
|
3042 |
if (isset($keyData['dashboard'])) {
|
3043 |
wfConfig::set('lastDashboardCheck', time());
|
3044 |
-
wfDashboard::processDashboardResponse($keyData['dashboard']);
|
3045 |
}
|
3046 |
}
|
3047 |
catch (Exception $e){
|
@@ -4256,6 +4272,17 @@ HTACCESS;
|
|
4256 |
return array('ok' => 1, 'data' => $data);
|
4257 |
}
|
4258 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4259 |
|
4260 |
return array('error' => 'Unknown dashboard data set.');
|
4261 |
}
|
@@ -6041,9 +6068,13 @@ HTML
|
|
6041 |
self::status(10, 'info', "SUM_PAIDONLY:" . $msg);
|
6042 |
}
|
6043 |
public static function wfSchemaExists(){
|
6044 |
-
$
|
6045 |
-
|
6046 |
-
|
|
|
|
|
|
|
|
|
6047 |
return $exists ? true : false;
|
6048 |
}
|
6049 |
public static function isDebugOn(){
|
@@ -6907,6 +6938,38 @@ LIMIT %d", $lastSendTime, $limit));
|
|
6907 |
if (array_key_exists('data', $jsonData) && array_key_exists('watchedIPList', $jsonData['data'])) {
|
6908 |
$waf->getStorageEngine()->setConfig('watchedIPs', $jsonData['data']['watchedIPList']);
|
6909 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6910 |
}
|
6911 |
}
|
6912 |
} else if (is_string($okToSendBody) && preg_match('/next check in: ([0-9]+)/', $okToSendBody, $matches)) {
|
92 |
$schema->dropAll();
|
93 |
wfConfig::updateTableExists();
|
94 |
foreach(array('wordfence_version', 'wordfenceActivated') as $opt){
|
95 |
+
if (is_multisite() && function_exists('delete_network_option')) {
|
96 |
delete_network_option(null, $opt);
|
97 |
}
|
98 |
delete_option($opt);
|
167 |
public static function dailyCron(){
|
168 |
$api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
169 |
try {
|
170 |
+
$postParams = wfDashboard::updatePOSTParams();
|
171 |
+
$keyData = $api->call('ping_api_key', array(), $postParams);
|
172 |
if(isset($keyData['_isPaidKey']) && $keyData['_isPaidKey']){
|
173 |
$keyExpDays = $keyData['_keyExpDays'];
|
174 |
$keyIsExpired = $keyData['_expired'];
|
209 |
}
|
210 |
if (isset($keyData['dashboard'])) {
|
211 |
wfConfig::set('lastDashboardCheck', time());
|
212 |
+
wfDashboard::processDashboardResponse($keyData['dashboard'], @base64_decode($postParams['topBlacklist']));
|
213 |
}
|
214 |
}
|
215 |
catch(Exception $e){
|
365 |
if (function_exists('ignore_user_abort')) {
|
366 |
ignore_user_abort(true);
|
367 |
}
|
368 |
+
$previous_version = ((is_multisite() && function_exists('get_network_option')) ? get_network_option(null, 'wordfence_version', '0.0.0') : get_option('wordfence_version', '0.0.0'));
|
369 |
+
if (is_multisite() && function_exists('update_network_option')) {
|
370 |
update_network_option(null, 'wordfence_version', WORDFENCE_VERSION); //In case we have a fatal error we don't want to keep running install.
|
371 |
}
|
372 |
else {
|
701 |
$wpdb->query("ALTER TABLE {$fileModsTable} ADD COLUMN `isSafeFile` VARCHAR(1) NOT NULL DEFAULT '?' AFTER `stoppedOnPosition`");
|
702 |
}
|
703 |
|
704 |
+
//6.3.7
|
705 |
+
$hooverTable = wfDB::networkPrefix() . 'wfHoover';
|
706 |
+
$hostKeySize = $wpdb->get_var($wpdb->prepare(<<<SQL
|
707 |
+
SELECT CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS
|
708 |
+
WHERE TABLE_SCHEMA=DATABASE()
|
709 |
+
AND COLUMN_NAME='hostKey'
|
710 |
+
AND TABLE_NAME=%s
|
711 |
+
SQL
|
712 |
+
, $hooverTable));
|
713 |
+
if ($hostKeySize < 124) {
|
714 |
+
$wpdb->query("ALTER TABLE {$hooverTable} CHANGE `hostKey` `hostKey` VARBINARY(124) NULL DEFAULT NULL");
|
715 |
+
}
|
716 |
+
|
717 |
+
|
718 |
//Check the How does Wordfence get IPs setting
|
719 |
wfUtils::requestDetectProxyCallback();
|
720 |
|
767 |
register_activation_hook(WORDFENCE_FCPATH, 'wordfence::installPlugin');
|
768 |
register_deactivation_hook(WORDFENCE_FCPATH, 'wordfence::uninstallPlugin');
|
769 |
|
770 |
+
$versionInOptions = ((is_multisite() && function_exists('get_network_option')) ? get_network_option(null, 'wordfence_version', false) : get_option('wordfence_version', false));
|
771 |
if( (! $versionInOptions) || version_compare(WORDFENCE_VERSION, $versionInOptions, '>')){
|
772 |
//Either there is no version in options or the version in options is greater and we need to run the upgrade
|
773 |
self::runInstall();
|
3053 |
} else {
|
3054 |
$api = new wfAPI($opts['apiKey'], wfUtils::getWPVersion());
|
3055 |
try {
|
3056 |
+
$postParams = wfDashboard::updatePOSTParams();
|
3057 |
+
$keyData = $api->call('ping_api_key', array(), $postParams);
|
3058 |
if (isset($keyData['dashboard'])) {
|
3059 |
wfConfig::set('lastDashboardCheck', time());
|
3060 |
+
wfDashboard::processDashboardResponse($keyData['dashboard'], @base64_decode($postParams['topBlacklist']));
|
3061 |
}
|
3062 |
}
|
3063 |
catch (Exception $e){
|
4272 |
return array('ok' => 1, 'data' => $data);
|
4273 |
}
|
4274 |
}
|
4275 |
+
else if ($grouping == 'blacklist') {
|
4276 |
+
$data = $dashboard->blacklist7d['counts'];
|
4277 |
+
foreach ($data as &$d) {
|
4278 |
+
$d['IP'] = esc_html($d['ip']);
|
4279 |
+
$d['localCount'] = esc_html(number_format_i18n($d['local']));
|
4280 |
+
$d['networkCount'] = esc_html(number_format_i18n($d['network']));
|
4281 |
+
$d['countryFlag'] = esc_attr(wfUtils::getBaseURL() . 'images/flags/' . esc_attr(strtolower($d['countryCode'])) . '.png');
|
4282 |
+
$d['countryName'] = esc_html($d['countryName']);
|
4283 |
+
}
|
4284 |
+
return array('ok' => 1, 'data' => $data);
|
4285 |
+
}
|
4286 |
|
4287 |
return array('error' => 'Unknown dashboard data set.');
|
4288 |
}
|
6068 |
self::status(10, 'info', "SUM_PAIDONLY:" . $msg);
|
6069 |
}
|
6070 |
public static function wfSchemaExists(){
|
6071 |
+
global $wpdb;
|
6072 |
+
$exists = $wpdb->get_col($wpdb->prepare(<<<SQL
|
6073 |
+
SELECT TABLE_NAME FROM information_schema.TABLES
|
6074 |
+
WHERE TABLE_SCHEMA=DATABASE()
|
6075 |
+
AND TABLE_NAME=%s
|
6076 |
+
SQL
|
6077 |
+
, $wpdb->base_prefix . 'wfConfig'));
|
6078 |
return $exists ? true : false;
|
6079 |
}
|
6080 |
public static function isDebugOn(){
|
6938 |
if (array_key_exists('data', $jsonData) && array_key_exists('watchedIPList', $jsonData['data'])) {
|
6939 |
$waf->getStorageEngine()->setConfig('watchedIPs', $jsonData['data']['watchedIPList']);
|
6940 |
}
|
6941 |
+
|
6942 |
+
if (array_key_exists('data', $jsonData) && array_key_exists('blacklisted', $jsonData['data'])) {
|
6943 |
+
$blacklisted = base64_decode($jsonData['data']['blacklisted']);
|
6944 |
+
$statsToUpdate = array();
|
6945 |
+
foreach ($dataToSend as $record) {
|
6946 |
+
$blockDay = floor($record[0] / 86400);
|
6947 |
+
$blockIP = @wfUtils::inet_pton($record[2]);
|
6948 |
+
if ($blockIP !== false) {
|
6949 |
+
$position = wfUtils::strpos($blacklisted, $blockIP);
|
6950 |
+
if ($position !== false && $position % 16 == 0) {
|
6951 |
+
if (!isset($statsToUpdate[$blockIP])) {
|
6952 |
+
$statsToUpdate[$blockIP] = array();
|
6953 |
+
}
|
6954 |
+
$statsToUpdate[$blockIP][$blockDay] = 1;
|
6955 |
+
}
|
6956 |
+
}
|
6957 |
+
}
|
6958 |
+
|
6959 |
+
global $wpdb;
|
6960 |
+
foreach ($statsToUpdate as $blockIP => $days) {
|
6961 |
+
$days = array_keys($days);
|
6962 |
+
foreach ($days as $d) {
|
6963 |
+
$existingCount = $wpdb->get_var($wpdb->prepare("SELECT blockCount FROM {$wpdb->base_prefix}wfBlockedIPLog WHERE IP = %s AND unixday = %d and blockType = 'waf'", $blockIP, $d));
|
6964 |
+
if ($existingCount > 0) {
|
6965 |
+
wfActivityReport::logBlockedIP(wfUtils::inet_ntop($blockIP), $d, 'blacklist', $existingCount);
|
6966 |
+
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->base_prefix}wfBlockedIPLog WHERE IP = %s AND unixday = %d and blockType = 'waf'", $blockIP, $d));
|
6967 |
+
}
|
6968 |
+
}
|
6969 |
+
|
6970 |
+
|
6971 |
+
}
|
6972 |
+
}
|
6973 |
}
|
6974 |
}
|
6975 |
} else if (is_string($okToSendBody) && preg_match('/next check in: ([0-9]+)/', $okToSendBody, $matches)) {
|
lib/wordfenceScanner.php
CHANGED
@@ -444,7 +444,7 @@ class wordfenceScanner {
|
|
444 |
continue;
|
445 |
}
|
446 |
|
447 |
-
if($result['badList'] == 'goog-malware-shavar'){
|
448 |
$this->addResult(array(
|
449 |
'type' => 'file',
|
450 |
'severity' => 1,
|
@@ -459,7 +459,8 @@ class wordfenceScanner {
|
|
459 |
'gsb' => 'goog-malware-shavar'
|
460 |
), $dataForFile),
|
461 |
));
|
462 |
-
}
|
|
|
463 |
$this->addResult(array(
|
464 |
'type' => 'file',
|
465 |
'severity' => 1,
|
@@ -475,6 +476,22 @@ class wordfenceScanner {
|
|
475 |
), $dataForFile),
|
476 |
));
|
477 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
478 |
}
|
479 |
}
|
480 |
wfUtils::endProcessingFile();
|
444 |
continue;
|
445 |
}
|
446 |
|
447 |
+
if ($result['badList'] == 'goog-malware-shavar') {
|
448 |
$this->addResult(array(
|
449 |
'type' => 'file',
|
450 |
'severity' => 1,
|
459 |
'gsb' => 'goog-malware-shavar'
|
460 |
), $dataForFile),
|
461 |
));
|
462 |
+
}
|
463 |
+
else if ($result['badList'] == 'googpub-phish-shavar') {
|
464 |
$this->addResult(array(
|
465 |
'type' => 'file',
|
466 |
'severity' => 1,
|
476 |
), $dataForFile),
|
477 |
));
|
478 |
}
|
479 |
+
else if ($result['badList'] == 'wordfence-dbl') {
|
480 |
+
$this->addResult(array(
|
481 |
+
'type' => 'file',
|
482 |
+
'severity' => 1,
|
483 |
+
'ignoreP' => $this->path . $file,
|
484 |
+
'ignoreC' => md5_file($this->path . $file),
|
485 |
+
'shortMsg' => "File contains suspected malware URL: " . esc_html($this->path . $file),
|
486 |
+
'longMsg' => "This file contains a URL that is currently listed on Wordfence's domain blacklist. The URL is: " . esc_html($result['URL']),
|
487 |
+
'data' => array_merge(array(
|
488 |
+
'file' => $file,
|
489 |
+
'shac' => $record->SHAC,
|
490 |
+
'badURL' => $result['URL'],
|
491 |
+
'gsb' => 'wordfence-dbl'
|
492 |
+
), $dataForFile),
|
493 |
+
));
|
494 |
+
}
|
495 |
}
|
496 |
}
|
497 |
wfUtils::endProcessingFile();
|
lib/wordfenceURLHoover.php
CHANGED
@@ -16,16 +16,19 @@ class wordfenceURLHoover {
|
|
16 |
private $dRegex = 'AAA|AARP|ABB|ABBOTT|ABBVIE|ABOGADO|ABUDHABI|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTIVE|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AETNA|AF|AFL|AG|AGAKHAN|AGENCY|AI|AIG|AIRFORCE|AIRTEL|AKDN|AL|ALIBABA|ALIPAY|ALLFINANZ|ALLY|ALSACE|AM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|ANQUAN|AO|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAMCO|ARCHI|ARMY|ARPA|ARTE|AS|ASIA|ASSOCIATES|AT|ATTORNEY|AU|AUCTION|AUDI|AUDIO|AUTHOR|AUTO|AUTOS|AVIANCA|AW|AWS|AX|AXA|AZ|AZURE|BA|BABY|BAIDU|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BAREFOOT|BARGAINS|BAUHAUS|BAYERN|BB|BBC|BBVA|BCG|BCN|BD|BE|BEATS|BEER|BENTLEY|BERLIN|BEST|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOG|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNL|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOM|BOND|BOO|BOOK|BOOTS|BOSCH|BOSTIK|BOT|BOUTIQUE|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CARTIER|CASA|CASH|CASINO|CAT|CATERING|CBA|CBN|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHASE|CHAT|CHEAP|CHLOE|CHRISTMAS|CHROME|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOL|COOP|CORSICA|COUNTRY|COUPON|COUPONS|COURSES|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATE|DATING|DATSUN|DAY|DCLK|DDS|DE|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DHL|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DJ|DK|DM|DNP|DO|DOCS|DOG|DOHA|DOMAINS|DOT|DOWNLOAD|DRIVE|DTV|DUBAI|DURBAN|DVAG|DZ|EARTH|EAT|EC|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERNI|ES|ESQ|ESTATE|ET|EU|EUROVISION|EUS|EVENTS|EVERBANK|EXCHANGE|EXPERT|EXPOSED|EXPRESS|EXTRASPACE|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FASHION|FAST|FEEDBACK|FERRERO|FI|FILM|FINAL|FINANCE|FINANCIAL|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLIR|FLORIST|FLOWERS|FLSMIDTH|FLY|FM|FO|FOO|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FRESENIUS|FRL|FROGANS|FRONTIER|FTR|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLO|GALLUP|GAME|GAMES|GARDEN|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMBH|GMO|GMX|GN|GOLD|GOLDPOINT|GOLF|GOO|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROUP|GS|GT|GU|GUARDIAN|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAMBURG|HANGOUT|HAUS|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HIPHOP|HISAMITSU|HITACHI|HIV|HK|HKT|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMES|HONDA|HORSE|HOST|HOSTING|HOTELES|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HTC|HU|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IFM|IINET|IL|IM|IMAMAT|IMMO|IMMOBILIEN|IN|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTERNATIONAL|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISELECT|ISMAILI|IST|ISTANBUL|IT|ITAU|IWC|JAGUAR|JAVA|JCB|JCP|JE|JETZT|JEWELRY|JLC|JLL|JM|JMP|JNJ|JO|JOBS|JOBURG|JOT|JOY|JP|JPMORGAN|JPRS|JUEGOS|KAUFEN|KDDI|KE|KERRYHOTELS|KERRYLOGISTICS|KERRYPROPERTIES|KFH|KG|KH|KI|KIA|KIM|KINDER|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KP|KPMG|KPN|KR|KRD|KRED|KUOKGROUP|KW|KY|KYOTO|KZ|LA|LACAIXA|LAMBORGHINI|LAMER|LANCASTER|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEGAL|LEXUS|LGBT|LI|LIAISON|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIPSY|LIVE|LIVING|LIXIL|LK|LOAN|LOANS|LOCKER|LOCUS|LOL|LONDON|LOTTE|LOTTO|LOVE|LR|LS|LT|LTD|LTDA|LU|LUPIN|LUXE|LUXURY|LV|LY|MA|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MARKET|MARKETING|MARKETS|MARRIOTT|MATTEL|MBA|MC|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MEO|METLIFE|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MK|ML|MLB|MLS|MM|MMA|MN|MO|MOBI|MOBILY|MODA|MOE|MOI|MOM|MONASH|MONEY|MONTBLANC|MORMON|MORTGAGE|MOSCOW|MOTORCYCLES|MOV|MOVIE|MOVISTAR|MP|MQ|MR|MS|MT|MTN|MTPC|MTR|MU|MUSEUM|MUTUAL|MUTUELLE|MV|MW|MX|MY|MZ|NA|NADEX|NAGOYA|NAME|NATURA|NAVY|NC|NE|NEC|NET|NETBANK|NETFLIX|NETWORK|NEUSTAR|NEW|NEWS|NEXT|NEXTDIRECT|NEXUS|NF|NG|NGO|NHK|NI|NICO|NIKON|NINJA|NISSAN|NISSAY|NL|NO|NOKIA|NORTHWESTERNMUTUAL|NORTON|NOWRUZ|NOWTV|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OFFICE|OKINAWA|OLAYAN|OLAYANGROUP|OLLO|OM|OMEGA|ONE|ONG|ONL|ONLINE|OOO|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OTT|OVH|PA|PAGE|PAMPEREDCHEF|PANERAI|PARIS|PARS|PARTNERS|PARTS|PARTY|PASSAGENS|PCCW|PE|PET|PF|PG|PH|PHARMACY|PHILIPS|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PIAGET|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIONEER|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|POHL|POKER|PORN|POST|PR|PRAXI|PRESS|PRO|PROD|PRODUCTIONS|PROF|PROGRESSIVE|PROMO|PROPERTIES|PROPERTY|PROTECTION|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|RACING|RE|READ|REALESTATE|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICHARDLI|RICOH|RIO|RIP|RO|ROCHER|ROCKS|RODEO|ROOM|RS|RSVP|RU|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SAPO|SARL|SAS|SAXO|SB|SBI|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCOR|SCOT|SD|SE|SEAT|SECURITY|SEEK|SELECT|SENER|SERVICES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHARP|SHAW|SHELL|SHIA|SHIKSHA|SHOES|SHOP|SHOUJI|SHOW|SHRIRAM|SI|SINA|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SM|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONG|SONY|SOY|SPACE|SPIEGEL|SPOT|SPREADBETTING|SR|SRL|ST|STADA|STAR|STARHUB|STATEBANK|STATEFARM|STATOIL|STC|STCGROUP|STOCKHOLM|STORAGE|STORE|STREAM|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TALK|TAOBAO|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TEAM|TECH|TECHNOLOGY|TEL|TELECITY|TELEFONICA|TEMASEK|TENNIS|TEST|TEVA|TF|TG|TH|THD|THEATER|THEATRE|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TK|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOTAL|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUNES|TUSHU|TV|TVS|TW|TZ|UA|UBS|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|UPS|US|UY|UZ|VA|VACATIONS|VANA|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VIG|VIKING|VILLAS|VIN|VIP|VIRGIN|VISION|VISTA|VISTAPRINT|VIVA|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOTE|VOTING|VOTO|VOYAGE|VU|VUELOS|WALES|WALTER|WANG|WANGGOU|WARMAN|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIBO|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WME|WOLTERSKLUWER|WORK|WORKS|WORLD|WS|WTC|WTF|XBOX|XEROX|XIHUAN|XIN|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3PXU8K|XN--42C2D9A|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--55QW42G|XN--55QX5D|XN--5TZM5G|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--9KRT00A|XN--B4W605FERD|XN--BCK1B9A5DRE4C|XN--C1AVG|XN--C2BR7G|XN--CCK2B3B|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--ESTV75G|XN--FCT429K|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--FZYS8D69UVGM|XN--G2XX48C|XN--GCKR3F0F|XN--GECRJ9C|XN--H2BRJ9C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--JVR189M|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBA7C0BBN0A|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAYH7GPA|XN--MGBB9FBPOB|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBCA7DZDO|XN--MGBERP4A5D4AR|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXAM|XN--RHQV96G|XN--ROVU88B|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--W4R85EL8FHU5DNRA|XN--W4RS40L|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XPERIA|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOU|YOUTUBE|YT|YUN|ZA|ZAPPOS|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW';
|
17 |
private $api = false;
|
18 |
private $db = false;
|
19 |
-
|
|
|
20 |
$this->writeHosts();
|
21 |
return array('debug', 'errorMsg', 'table', 'apiKey', 'wordpressVersion', 'dRegex');
|
22 |
}
|
23 |
-
|
|
|
24 |
$this->hostsToAdd = new wfArray(array('owner', 'host', 'path', 'hostKey'));
|
25 |
$this->api = new wfAPI($this->apiKey, $this->wordpressVersion);
|
26 |
$this->db = new wfDB();
|
27 |
-
}
|
28 |
-
|
|
|
29 |
$this->hostsToAdd = new wfArray(array('owner', 'host', 'path', 'hostKey'));
|
30 |
$this->apiKey = $apiKey;
|
31 |
$this->wordpressVersion = $wordpressVersion;
|
@@ -41,96 +44,51 @@ class wordfenceURLHoover {
|
|
41 |
} else {
|
42 |
$this->table = 'wp_wfHoover';
|
43 |
}
|
44 |
-
|
|
|
45 |
}
|
46 |
-
|
|
|
47 |
$this->db->truncate($this->table);
|
48 |
}
|
49 |
-
|
50 |
-
|
51 |
-
return false;
|
52 |
-
}
|
53 |
$this->currentHooverID = $id;
|
54 |
$this->_foundSome = false;
|
55 |
-
|
56 |
-
@preg_replace_callback("/(?<=^|[^a-zA-Z0-9\-])(?:[a-z][a-z0-9\-\+\.]*\:)?\/\/((?:[a-zA-Z0-9\-]+\.)+)(" . $this->dRegex . ")($|[\r\n\s\t]|[\/\?][^\r\n\s\t\"\'\$\{\}<>]*)/i", array($this, 'addHost'), $data);
|
57 |
-
//((?:$|[^a-zA-Z0-9\-\.\'\"])[^\r\n\s\t\"\'\$\{\}<>]*)
|
58 |
-
//"\$this->" . "addHost(\$id, '$1$2', '$3')", $data);
|
59 |
-
} catch(Exception $e){
|
60 |
-
//error_log("Regex error 1: $e");
|
61 |
-
}
|
62 |
-
@preg_replace_callback("/(?<=[^\d]|^)(\d{8,10}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})($|[\r\n\s\t]|\/[^\r\n\s\t\"\'\$\{\}<>]*)/", array($this, 'addIP'), $data);
|
63 |
-
//([^\d\'\"][^\r\n\s\t\"\'\$\{\}<>]*)
|
64 |
-
//"\$this->" . "addIP(\$id, \"$1\",\"$2\")", $data);
|
65 |
$this->writeHosts();
|
66 |
return $this->_foundSome;
|
67 |
}
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
//error_log("DEBUG: $msg\n");
|
72 |
-
}
|
73 |
}
|
74 |
-
|
|
|
75 |
$id = $this->currentHooverID;
|
76 |
-
$
|
77 |
-
$
|
78 |
-
if(
|
79 |
-
$path = '/';
|
80 |
-
} else {
|
81 |
-
$path = preg_replace_callback('/([^A-Za-z0-9\-\.\_\~:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,;\=]+)/', 'wordfenceURLHoover::urlenc', $path);
|
82 |
-
}
|
83 |
-
$host = strtolower($host);
|
84 |
-
$hostParts = explode('.', $host);
|
85 |
-
if(sizeof($hostParts) == 2){
|
86 |
-
$hostKey = substr(hash('sha256', $hostParts[0] . '.' . $hostParts[1] . '/', true), 0, 4);
|
87 |
-
$this->hostsToAdd->push(array('owner' => $id, 'host' => $host, 'path' => $path, 'hostKey' => $hostKey));
|
88 |
-
} else if(sizeof($hostParts) > 2){
|
89 |
-
$hostKeyThreeParts = substr(hash('sha256',$hostParts[sizeof($hostParts) - 3] . '.' . $hostParts[sizeof($hostParts) - 2] . '.' . $hostParts[sizeof($hostParts) - 1] . '/', true), 0, 4);
|
90 |
-
$hostKeyTwoParts = substr(hash('sha256', $hostParts[sizeof($hostParts) - 2] . '.' . $hostParts[sizeof($hostParts) - 1] . '/', true), 0, 4);
|
91 |
-
$this->hostsToAdd->push(array('owner' => $id, 'host' => $host, 'path' => $path, 'hostKey' => $hostKeyThreeParts));
|
92 |
-
$this->hostsToAdd->push(array('owner' => $id, 'host' => $host, 'path' => $path, 'hostKey' => $hostKeyTwoParts));
|
93 |
-
}
|
94 |
-
if($this->hostsToAdd->size() > 1000){ $this->writeHosts(); }
|
95 |
-
}
|
96 |
-
public function addIP($matches){
|
97 |
-
$id = $this->currentHooverID;
|
98 |
-
$ipdata = $matches[1];
|
99 |
-
$path = $matches[2];
|
100 |
-
$this->dbg("Add IP called with $ipdata $path");
|
101 |
-
if(strstr($ipdata, '.') === false){
|
102 |
-
if($ipdata >= 16777216 && $ipdata <= 4026531840){
|
103 |
-
$ipdata = long2ip($ipdata);
|
104 |
-
} else {
|
105 |
-
return; //Is int but invalid address.
|
106 |
-
}
|
107 |
-
}
|
108 |
-
$parts = explode('.', $ipdata);
|
109 |
-
foreach($parts as $part){
|
110 |
-
if($part < 0 || $part > 255){
|
111 |
-
return;
|
112 |
-
}
|
113 |
-
}
|
114 |
-
if(wfUtils::isPrivateAddress($ipdata) ){
|
115 |
return;
|
116 |
}
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
|
|
|
|
|
|
121 |
}
|
122 |
-
$
|
123 |
-
|
124 |
-
if($this->hostsToAdd->size() > 1000){ $this->writeHosts(); }
|
125 |
-
}
|
126 |
-
public static function urlenc($m){
|
127 |
-
return urlencode($m[1]);
|
128 |
}
|
129 |
-
|
130 |
-
|
131 |
-
if($this->
|
132 |
-
|
133 |
-
|
|
|
134 |
//This may be an issue for hyperDB or other abstraction layers, but leaving it for now.
|
135 |
$sql .= sprintf("('%s', '%s', '%s', '%s'),",
|
136 |
$this->db->realEscape($elem['owner']),
|
@@ -141,9 +99,10 @@ class wordfenceURLHoover {
|
|
141 |
}
|
142 |
$sql = rtrim($sql, ',');
|
143 |
$this->db->queryWrite($sql);
|
144 |
-
}
|
145 |
-
|
146 |
-
|
|
|
147 |
$this->hostList[] = array(
|
148 |
'owner' => $elem['owner'],
|
149 |
'host' => $elem['host'],
|
@@ -155,113 +114,125 @@ class wordfenceURLHoover {
|
|
155 |
|
156 |
$this->_foundSome = true;
|
157 |
}
|
158 |
-
public function getBaddies(){
|
159 |
$allHostKeys = array();
|
160 |
-
if($this->useDB){
|
161 |
-
$q1 = $this->db->querySelect("
|
162 |
-
foreach($q1 as $hRec){
|
163 |
-
$allHostKeys
|
164 |
}
|
165 |
-
}
|
|
|
166 |
$allHostKeys = $this->hostKeys;
|
167 |
}
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
|
|
|
|
|
|
|
|
176 |
$this->dbg("Checking hostkey: " . bin2hex($key));
|
177 |
}
|
178 |
}
|
179 |
-
|
|
|
180 |
$resp = $this->api->binCall('check_host_keys', implode('', $allHostKeys));
|
181 |
wordfence::status(2, 'info', "Done host key check.");
|
182 |
$this->dbg("Done host key check");
|
183 |
|
184 |
$badHostKeys = array();
|
185 |
-
if($resp['code']
|
186 |
$this->dbg("Host key response: " . bin2hex($resp['data']));
|
187 |
$dataLen = strlen($resp['data']);
|
188 |
-
if($dataLen > 0){
|
189 |
-
if($dataLen % 2 != 0){
|
190 |
-
$this->errorMsg = "Invalid data length received from Wordfence server: " . $dataLen;
|
191 |
-
$this->dbg($this->errorMsg);
|
192 |
-
return false;
|
193 |
-
}
|
194 |
$this->dbg("Checking response indexes");
|
195 |
-
for($i = 0; $i < $dataLen; $i += 2){
|
196 |
$idxArr = unpack('n', substr($resp['data'], $i, 2));
|
197 |
$idx = $idxArr[1];
|
198 |
$this->dbg("Checking index {$idx}");
|
199 |
-
if(isset($allHostKeys[$idx])
|
200 |
$badHostKeys[] = $allHostKeys[$idx];
|
201 |
$this->dbg("Got bad hostkey for record: " . bin2hex($allHostKeys[$idx]));
|
202 |
-
}
|
|
|
203 |
$this->dbg("Bad allHostKeys index: $idx");
|
204 |
$this->errorMsg = "Bad allHostKeys index: $idx";
|
205 |
return false;
|
206 |
}
|
207 |
}
|
208 |
}
|
209 |
-
else {
|
210 |
-
$this->
|
|
|
|
|
211 |
}
|
212 |
-
}
|
|
|
213 |
$this->errorMsg = "Wordfence server responded with an error. HTTP code " . $resp['code'] . " and data: " . $resp['data'];
|
214 |
return false;
|
215 |
}
|
216 |
-
|
|
|
217 |
$urlsToCheck = array();
|
218 |
$totalURLs = 0;
|
219 |
-
|
220 |
-
//
|
221 |
-
foreach($badHostKeys as $badHostKey){
|
222 |
-
if($this->useDB){
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
|
|
|
|
|
|
228 |
$url = 'http://' . $rec['host'] . $rec['path'];
|
229 |
-
if(!
|
230 |
$urlsToCheck[$rec['owner']] = array();
|
231 |
}
|
232 |
-
if(!
|
233 |
$urlsToCheck[$rec['owner']][] = $url;
|
234 |
$totalURLs++;
|
235 |
}
|
236 |
}
|
237 |
-
}
|
238 |
-
|
239 |
-
|
|
|
|
|
240 |
$url = 'http://' . $rec['host'] . $rec['path'];
|
241 |
-
if(!
|
242 |
$urlsToCheck[$rec['owner']] = array();
|
243 |
}
|
244 |
-
if(!
|
245 |
$urlsToCheck[$rec['owner']][] = $url;
|
246 |
$totalURLs++;
|
247 |
}
|
248 |
}
|
249 |
}
|
250 |
}
|
|
|
251 |
}
|
252 |
|
253 |
-
if(
|
254 |
wordfence::status(2, 'info', "Checking " . $totalURLs . " URLs from " . sizeof($urlsToCheck) . " sources.");
|
255 |
-
$badURLs = $this->api->call('check_bad_urls', array(), array(
|
256 |
wordfence::status(2, 'info', "Done URL check.");
|
257 |
$this->dbg("Done URL check");
|
258 |
-
if(is_array($badURLs) &&
|
259 |
$finalResults = array();
|
260 |
-
foreach($badURLs as $file => $badSiteList){
|
261 |
-
if(!
|
262 |
$finalResults[$file] = array();
|
263 |
}
|
264 |
-
foreach($badSiteList as $badSite){
|
265 |
$finalResults[$file][] = array(
|
266 |
'URL' => $badSite[0],
|
267 |
'badList' => $badSite[1]
|
@@ -277,5 +248,277 @@ class wordfenceURLHoover {
|
|
277 |
|
278 |
return array();
|
279 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
}
|
281 |
?>
|
16 |
private $dRegex = 'AAA|AARP|ABB|ABBOTT|ABBVIE|ABOGADO|ABUDHABI|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTIVE|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AETNA|AF|AFL|AG|AGAKHAN|AGENCY|AI|AIG|AIRFORCE|AIRTEL|AKDN|AL|ALIBABA|ALIPAY|ALLFINANZ|ALLY|ALSACE|AM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|ANQUAN|AO|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAMCO|ARCHI|ARMY|ARPA|ARTE|AS|ASIA|ASSOCIATES|AT|ATTORNEY|AU|AUCTION|AUDI|AUDIO|AUTHOR|AUTO|AUTOS|AVIANCA|AW|AWS|AX|AXA|AZ|AZURE|BA|BABY|BAIDU|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BAREFOOT|BARGAINS|BAUHAUS|BAYERN|BB|BBC|BBVA|BCG|BCN|BD|BE|BEATS|BEER|BENTLEY|BERLIN|BEST|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOG|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNL|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOM|BOND|BOO|BOOK|BOOTS|BOSCH|BOSTIK|BOT|BOUTIQUE|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CARTIER|CASA|CASH|CASINO|CAT|CATERING|CBA|CBN|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHASE|CHAT|CHEAP|CHLOE|CHRISTMAS|CHROME|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOL|COOP|CORSICA|COUNTRY|COUPON|COUPONS|COURSES|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATE|DATING|DATSUN|DAY|DCLK|DDS|DE|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DHL|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DJ|DK|DM|DNP|DO|DOCS|DOG|DOHA|DOMAINS|DOT|DOWNLOAD|DRIVE|DTV|DUBAI|DURBAN|DVAG|DZ|EARTH|EAT|EC|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERNI|ES|ESQ|ESTATE|ET|EU|EUROVISION|EUS|EVENTS|EVERBANK|EXCHANGE|EXPERT|EXPOSED|EXPRESS|EXTRASPACE|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FASHION|FAST|FEEDBACK|FERRERO|FI|FILM|FINAL|FINANCE|FINANCIAL|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLIR|FLORIST|FLOWERS|FLSMIDTH|FLY|FM|FO|FOO|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FRESENIUS|FRL|FROGANS|FRONTIER|FTR|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLO|GALLUP|GAME|GAMES|GARDEN|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMBH|GMO|GMX|GN|GOLD|GOLDPOINT|GOLF|GOO|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROUP|GS|GT|GU|GUARDIAN|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAMBURG|HANGOUT|HAUS|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HIPHOP|HISAMITSU|HITACHI|HIV|HK|HKT|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMES|HONDA|HORSE|HOST|HOSTING|HOTELES|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HTC|HU|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IFM|IINET|IL|IM|IMAMAT|IMMO|IMMOBILIEN|IN|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTERNATIONAL|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISELECT|ISMAILI|IST|ISTANBUL|IT|ITAU|IWC|JAGUAR|JAVA|JCB|JCP|JE|JETZT|JEWELRY|JLC|JLL|JM|JMP|JNJ|JO|JOBS|JOBURG|JOT|JOY|JP|JPMORGAN|JPRS|JUEGOS|KAUFEN|KDDI|KE|KERRYHOTELS|KERRYLOGISTICS|KERRYPROPERTIES|KFH|KG|KH|KI|KIA|KIM|KINDER|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KP|KPMG|KPN|KR|KRD|KRED|KUOKGROUP|KW|KY|KYOTO|KZ|LA|LACAIXA|LAMBORGHINI|LAMER|LANCASTER|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEGAL|LEXUS|LGBT|LI|LIAISON|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIPSY|LIVE|LIVING|LIXIL|LK|LOAN|LOANS|LOCKER|LOCUS|LOL|LONDON|LOTTE|LOTTO|LOVE|LR|LS|LT|LTD|LTDA|LU|LUPIN|LUXE|LUXURY|LV|LY|MA|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MARKET|MARKETING|MARKETS|MARRIOTT|MATTEL|MBA|MC|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MEO|METLIFE|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MK|ML|MLB|MLS|MM|MMA|MN|MO|MOBI|MOBILY|MODA|MOE|MOI|MOM|MONASH|MONEY|MONTBLANC|MORMON|MORTGAGE|MOSCOW|MOTORCYCLES|MOV|MOVIE|MOVISTAR|MP|MQ|MR|MS|MT|MTN|MTPC|MTR|MU|MUSEUM|MUTUAL|MUTUELLE|MV|MW|MX|MY|MZ|NA|NADEX|NAGOYA|NAME|NATURA|NAVY|NC|NE|NEC|NET|NETBANK|NETFLIX|NETWORK|NEUSTAR|NEW|NEWS|NEXT|NEXTDIRECT|NEXUS|NF|NG|NGO|NHK|NI|NICO|NIKON|NINJA|NISSAN|NISSAY|NL|NO|NOKIA|NORTHWESTERNMUTUAL|NORTON|NOWRUZ|NOWTV|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OFFICE|OKINAWA|OLAYAN|OLAYANGROUP|OLLO|OM|OMEGA|ONE|ONG|ONL|ONLINE|OOO|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OTT|OVH|PA|PAGE|PAMPEREDCHEF|PANERAI|PARIS|PARS|PARTNERS|PARTS|PARTY|PASSAGENS|PCCW|PE|PET|PF|PG|PH|PHARMACY|PHILIPS|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PIAGET|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIONEER|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|POHL|POKER|PORN|POST|PR|PRAXI|PRESS|PRO|PROD|PRODUCTIONS|PROF|PROGRESSIVE|PROMO|PROPERTIES|PROPERTY|PROTECTION|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|RACING|RE|READ|REALESTATE|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICHARDLI|RICOH|RIO|RIP|RO|ROCHER|ROCKS|RODEO|ROOM|RS|RSVP|RU|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SAPO|SARL|SAS|SAXO|SB|SBI|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCOR|SCOT|SD|SE|SEAT|SECURITY|SEEK|SELECT|SENER|SERVICES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHARP|SHAW|SHELL|SHIA|SHIKSHA|SHOES|SHOP|SHOUJI|SHOW|SHRIRAM|SI|SINA|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SM|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONG|SONY|SOY|SPACE|SPIEGEL|SPOT|SPREADBETTING|SR|SRL|ST|STADA|STAR|STARHUB|STATEBANK|STATEFARM|STATOIL|STC|STCGROUP|STOCKHOLM|STORAGE|STORE|STREAM|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TALK|TAOBAO|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TEAM|TECH|TECHNOLOGY|TEL|TELECITY|TELEFONICA|TEMASEK|TENNIS|TEST|TEVA|TF|TG|TH|THD|THEATER|THEATRE|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TK|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOTAL|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUNES|TUSHU|TV|TVS|TW|TZ|UA|UBS|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|UPS|US|UY|UZ|VA|VACATIONS|VANA|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VIG|VIKING|VILLAS|VIN|VIP|VIRGIN|VISION|VISTA|VISTAPRINT|VIVA|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOTE|VOTING|VOTO|VOYAGE|VU|VUELOS|WALES|WALTER|WANG|WANGGOU|WARMAN|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIBO|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WME|WOLTERSKLUWER|WORK|WORKS|WORLD|WS|WTC|WTF|XBOX|XEROX|XIHUAN|XIN|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3PXU8K|XN--42C2D9A|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--55QW42G|XN--55QX5D|XN--5TZM5G|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--9KRT00A|XN--B4W605FERD|XN--BCK1B9A5DRE4C|XN--C1AVG|XN--C2BR7G|XN--CCK2B3B|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--ESTV75G|XN--FCT429K|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--FZYS8D69UVGM|XN--G2XX48C|XN--GCKR3F0F|XN--GECRJ9C|XN--H2BRJ9C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--JVR189M|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBA7C0BBN0A|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAYH7GPA|XN--MGBB9FBPOB|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBCA7DZDO|XN--MGBERP4A5D4AR|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXAM|XN--RHQV96G|XN--ROVU88B|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--W4R85EL8FHU5DNRA|XN--W4RS40L|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XPERIA|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOU|YOUTUBE|YT|YUN|ZA|ZAPPOS|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW';
|
17 |
private $api = false;
|
18 |
private $db = false;
|
19 |
+
|
20 |
+
public function __sleep() {
|
21 |
$this->writeHosts();
|
22 |
return array('debug', 'errorMsg', 'table', 'apiKey', 'wordpressVersion', 'dRegex');
|
23 |
}
|
24 |
+
|
25 |
+
public function __wakeup() {
|
26 |
$this->hostsToAdd = new wfArray(array('owner', 'host', 'path', 'hostKey'));
|
27 |
$this->api = new wfAPI($this->apiKey, $this->wordpressVersion);
|
28 |
$this->db = new wfDB();
|
29 |
+
}
|
30 |
+
|
31 |
+
public function __construct($apiKey, $wordpressVersion, $db = false) {
|
32 |
$this->hostsToAdd = new wfArray(array('owner', 'host', 'path', 'hostKey'));
|
33 |
$this->apiKey = $apiKey;
|
34 |
$this->wordpressVersion = $wordpressVersion;
|
44 |
} else {
|
45 |
$this->table = 'wp_wfHoover';
|
46 |
}
|
47 |
+
|
48 |
+
$this->cleanup();
|
49 |
}
|
50 |
+
|
51 |
+
public function cleanup() {
|
52 |
$this->db->truncate($this->table);
|
53 |
}
|
54 |
+
|
55 |
+
public function hoover($id, $data) {
|
|
|
|
|
56 |
$this->currentHooverID = $id;
|
57 |
$this->_foundSome = false;
|
58 |
+
@preg_replace_callback('/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/i', array($this, 'captureURL'), $data);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
$this->writeHosts();
|
60 |
return $this->_foundSome;
|
61 |
}
|
62 |
+
|
63 |
+
private function dbg($msg) {
|
64 |
+
if ($this->debug) { wordfence::status(4, 'info', $msg); }
|
|
|
|
|
65 |
}
|
66 |
+
|
67 |
+
public function captureURL($matches) {
|
68 |
$id = $this->currentHooverID;
|
69 |
+
$url = $matches[0];
|
70 |
+
$components = parse_url($url);
|
71 |
+
if (!isset($components['scheme']) || !preg_match('/^https?$/i', $components['scheme'])) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
return;
|
73 |
}
|
74 |
+
|
75 |
+
$host = (isset($components['host']) ? $components['host'] : '');
|
76 |
+
$path = (isset($components['path']) && !empty($components['path']) ? $components['path'] : '/');
|
77 |
+
$hashes = $this->_generateHashes($url);
|
78 |
+
$prefixes = '';
|
79 |
+
foreach ($hashes as $h) {
|
80 |
+
$prefixes .= wfUtils::substr($h, 0, 4);
|
81 |
}
|
82 |
+
$this->hostsToAdd->push(array('owner' => $id, 'host' => $host, 'path' => $path, 'hostKey' => $prefixes));
|
83 |
+
|
84 |
+
if($this->hostsToAdd->size() > 1000){ $this->writeHosts(); }
|
|
|
|
|
|
|
85 |
}
|
86 |
+
|
87 |
+
private function writeHosts() {
|
88 |
+
if ($this->hostsToAdd->size() < 1) { return; }
|
89 |
+
if ($this->useDB) {
|
90 |
+
$sql = "INSERT INTO " . $this->table . " (owner, host, path, hostKey) VALUES ";
|
91 |
+
while ($elem = $this->hostsToAdd->shift()) {
|
92 |
//This may be an issue for hyperDB or other abstraction layers, but leaving it for now.
|
93 |
$sql .= sprintf("('%s', '%s', '%s', '%s'),",
|
94 |
$this->db->realEscape($elem['owner']),
|
99 |
}
|
100 |
$sql = rtrim($sql, ',');
|
101 |
$this->db->queryWrite($sql);
|
102 |
+
}
|
103 |
+
else {
|
104 |
+
while ($elem = $this->hostsToAdd->shift()) {
|
105 |
+
$this->hostKeys = array_merge($this->hostKeys, str_split($elem['hostKey'], 4));
|
106 |
$this->hostList[] = array(
|
107 |
'owner' => $elem['owner'],
|
108 |
'host' => $elem['host'],
|
114 |
|
115 |
$this->_foundSome = true;
|
116 |
}
|
117 |
+
public function getBaddies() {
|
118 |
$allHostKeys = array();
|
119 |
+
if ($this->useDB) {
|
120 |
+
$q1 = $this->db->querySelect("SELECT hostKey FROM {$this->table}");
|
121 |
+
foreach ($q1 as $hRec) {
|
122 |
+
$allHostKeys = array_merge($allHostKeys, str_split($hRec['hostKey'], 4));
|
123 |
}
|
124 |
+
}
|
125 |
+
else {
|
126 |
$allHostKeys = $this->hostKeys;
|
127 |
}
|
128 |
+
|
129 |
+
$allHostKeys = array_values(array_unique($allHostKeys));
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Check hash prefixes first. Each one is a 4-byte binary prefix of a SHA-256 hash of the URL. The response will
|
133 |
+
* be a binary list of 4-byte indices; The full URL for each index should be sent in the secondary query to
|
134 |
+
* find the true good/bad status.
|
135 |
+
*/
|
136 |
+
if (count($allHostKeys) > 0) {
|
137 |
+
if ($this->debug) {
|
138 |
+
$this->dbg("Checking " . count($allHostKeys) . " hostkeys");
|
139 |
+
foreach ($allHostKeys as $key) {
|
140 |
$this->dbg("Checking hostkey: " . bin2hex($key));
|
141 |
}
|
142 |
}
|
143 |
+
|
144 |
+
wordfence::status(2, 'info', "Checking " . count($allHostKeys) . " host keys against Wordfence scanning servers.");
|
145 |
$resp = $this->api->binCall('check_host_keys', implode('', $allHostKeys));
|
146 |
wordfence::status(2, 'info', "Done host key check.");
|
147 |
$this->dbg("Done host key check");
|
148 |
|
149 |
$badHostKeys = array();
|
150 |
+
if ($resp['code'] >= 200 && $resp['code'] <= 299) {
|
151 |
$this->dbg("Host key response: " . bin2hex($resp['data']));
|
152 |
$dataLen = strlen($resp['data']);
|
153 |
+
if ($dataLen > 0 && $dataLen % 2 == 0) {
|
|
|
|
|
|
|
|
|
|
|
154 |
$this->dbg("Checking response indexes");
|
155 |
+
for ($i = 0; $i < $dataLen; $i += 2) {
|
156 |
$idxArr = unpack('n', substr($resp['data'], $i, 2));
|
157 |
$idx = $idxArr[1];
|
158 |
$this->dbg("Checking index {$idx}");
|
159 |
+
if (isset($allHostKeys[$idx])) {
|
160 |
$badHostKeys[] = $allHostKeys[$idx];
|
161 |
$this->dbg("Got bad hostkey for record: " . bin2hex($allHostKeys[$idx]));
|
162 |
+
}
|
163 |
+
else {
|
164 |
$this->dbg("Bad allHostKeys index: $idx");
|
165 |
$this->errorMsg = "Bad allHostKeys index: $idx";
|
166 |
return false;
|
167 |
}
|
168 |
}
|
169 |
}
|
170 |
+
else if ($dataLen > 0) {
|
171 |
+
$this->errorMsg = "Invalid data length received from Wordfence server: " . $dataLen;
|
172 |
+
$this->dbg($this->errorMsg);
|
173 |
+
return false;
|
174 |
}
|
175 |
+
}
|
176 |
+
else {
|
177 |
$this->errorMsg = "Wordfence server responded with an error. HTTP code " . $resp['code'] . " and data: " . $resp['data'];
|
178 |
return false;
|
179 |
}
|
180 |
+
|
181 |
+
if (count($badHostKeys) > 0) {
|
182 |
$urlsToCheck = array();
|
183 |
$totalURLs = 0;
|
184 |
+
|
185 |
+
//Reconcile flagged prefixes with their corresponding URLs
|
186 |
+
foreach ($badHostKeys as $badHostKey) {
|
187 |
+
if ($this->useDB) {
|
188 |
+
/**
|
189 |
+
* Putting a 10000 limit in here for sites that have a huge number of items with the same URL
|
190 |
+
* that repeats. This is an edge case. But if the URLs are malicious then presumably the admin
|
191 |
+
* will fix the malicious URLs and on subsequent scans the items (owners) that are above the
|
192 |
+
* 10000 limit will appear.
|
193 |
+
*/
|
194 |
+
$q1 = $this->db->querySelect("SELECT owner, host, path, LOCATE('%s', hostKey) AS position FROM {$this->table} HAVING position != 0 AND MOD(position - 1, 4) = 0 LIMIT 10000", $badHostKey);
|
195 |
+
foreach ($q1 as $rec) {
|
196 |
$url = 'http://' . $rec['host'] . $rec['path'];
|
197 |
+
if (!isset($urlsToCheck[$rec['owner']])) {
|
198 |
$urlsToCheck[$rec['owner']] = array();
|
199 |
}
|
200 |
+
if (!in_array($url, $urlsToCheck[$rec['owner']])) {
|
201 |
$urlsToCheck[$rec['owner']][] = $url;
|
202 |
$totalURLs++;
|
203 |
}
|
204 |
}
|
205 |
+
}
|
206 |
+
else {
|
207 |
+
foreach ($this->hostList as $rec) {
|
208 |
+
$pos = strpos($rec['hostKey'], $badHostKey);
|
209 |
+
if ($pos !== false && $pos % 4 == 0) {
|
210 |
$url = 'http://' . $rec['host'] . $rec['path'];
|
211 |
+
if (!isset($urlsToCheck[$rec['owner']])) {
|
212 |
$urlsToCheck[$rec['owner']] = array();
|
213 |
}
|
214 |
+
if (!in_array($url, $urlsToCheck[$rec['owner']])) {
|
215 |
$urlsToCheck[$rec['owner']][] = $url;
|
216 |
$totalURLs++;
|
217 |
}
|
218 |
}
|
219 |
}
|
220 |
}
|
221 |
+
if ($totalURLs > 10000) { break; }
|
222 |
}
|
223 |
|
224 |
+
if (count($urlsToCheck) > 0) {
|
225 |
wordfence::status(2, 'info', "Checking " . $totalURLs . " URLs from " . sizeof($urlsToCheck) . " sources.");
|
226 |
+
$badURLs = $this->api->call('check_bad_urls', array(), array('toCheck' => json_encode($urlsToCheck)));
|
227 |
wordfence::status(2, 'info', "Done URL check.");
|
228 |
$this->dbg("Done URL check");
|
229 |
+
if (is_array($badURLs) && count($badURLs) > 0) {
|
230 |
$finalResults = array();
|
231 |
+
foreach ($badURLs as $file => $badSiteList) {
|
232 |
+
if (!isset($finalResults[$file])) {
|
233 |
$finalResults[$file] = array();
|
234 |
}
|
235 |
+
foreach ($badSiteList as $badSite) {
|
236 |
$finalResults[$file][] = array(
|
237 |
'URL' => $badSite[0],
|
238 |
'badList' => $badSite[1]
|
248 |
|
249 |
return array();
|
250 |
}
|
251 |
+
|
252 |
+
protected function _generateHashes($url) {
|
253 |
+
//The GSB specification requires generating and sending hash prefixes for a number of additional similar URLs. See: https://developers.google.com/safe-browsing/v4/urls-hashing#suffixprefix-expressions
|
254 |
+
|
255 |
+
$canonicalURL = $this->_canonicalizeURL($url);
|
256 |
+
|
257 |
+
//Extract the scheme
|
258 |
+
$scheme = 'http';
|
259 |
+
if (preg_match('~^([a-z]+[a-z0-9+\.\-]*)://(.*)$~i', $canonicalURL, $matches)) {
|
260 |
+
$scheme = strtolower($matches[1]);
|
261 |
+
$canonicalURL = $matches[2];
|
262 |
+
}
|
263 |
+
|
264 |
+
//Separate URL and query string
|
265 |
+
$query = '';
|
266 |
+
if (preg_match('/^([^?]+)(\??.*)/', $canonicalURL, $matches)) {
|
267 |
+
$canonicalURL = $matches[1];
|
268 |
+
$query = $matches[2];
|
269 |
+
}
|
270 |
+
|
271 |
+
//Separate host and path
|
272 |
+
$path = '';
|
273 |
+
preg_match('~^(.*?)(?:(/.*)|$)~', $canonicalURL, $matches);
|
274 |
+
$host = $matches[1];
|
275 |
+
if (isset($matches[2])) {
|
276 |
+
$path = $matches[2];
|
277 |
+
}
|
278 |
+
|
279 |
+
//Clean host
|
280 |
+
$host = $this->_normalizeHost($host);
|
281 |
+
|
282 |
+
//Generate hosts list
|
283 |
+
$hosts = array();
|
284 |
+
if (filter_var(trim($host, '[]'), FILTER_VALIDATE_IP)) {
|
285 |
+
$hosts[] = $host;
|
286 |
+
}
|
287 |
+
else {
|
288 |
+
$hostComponents = explode('.', $host);
|
289 |
+
|
290 |
+
$numComponents = count($hostComponents) - 7;
|
291 |
+
if ($numComponents < 1) {
|
292 |
+
$numComponents = 1;
|
293 |
+
}
|
294 |
+
|
295 |
+
$hosts[] = $host;
|
296 |
+
for ($i = $numComponents; $i < count($hostComponents) - 1; $i++) {
|
297 |
+
$hosts[] = implode('.', array_slice($hostComponents, $i));
|
298 |
+
}
|
299 |
+
}
|
300 |
+
|
301 |
+
//Generate paths list
|
302 |
+
$paths = array('/');
|
303 |
+
$pathComponents = array_filter(explode('/', $path));
|
304 |
+
|
305 |
+
$numComponents = min(count($pathComponents), 4);
|
306 |
+
for ($i = 1; $i < $numComponents; $i++) {
|
307 |
+
$paths[] = '/' . implode('/', array_slice($pathComponents, 0, $i)) . '/';
|
308 |
+
}
|
309 |
+
if ($path != '/') {
|
310 |
+
$paths[] = $path;
|
311 |
+
}
|
312 |
+
if (strlen($query) > 0) {
|
313 |
+
$paths[] = $path . '?' . $query;
|
314 |
+
}
|
315 |
+
$paths = array_reverse($paths); //So we start at the most specific and move to most generic
|
316 |
+
|
317 |
+
//Generate hashes
|
318 |
+
$hashes = array();
|
319 |
+
foreach ($hosts as $h) {
|
320 |
+
$hashes[$h] = hash('sha256', $h, true); //WFSB compatibility -- it uses hashes without the path
|
321 |
+
foreach ($paths as $p) {
|
322 |
+
$key = $h . $p;
|
323 |
+
$hashes[$key] = hash('sha256', $key, true);
|
324 |
+
}
|
325 |
+
}
|
326 |
+
|
327 |
+
return $hashes;
|
328 |
+
}
|
329 |
+
|
330 |
+
protected function _canonicalizeURL($url) { //Based on https://developers.google.com/safe-browsing/v4/urls-hashing#canonicalization and Google's reference implementation https://github.com/google/safebrowsing/blob/master/urls.go
|
331 |
+
//Strip fragment
|
332 |
+
$url = $this->_array_first(explode('#', $url));
|
333 |
+
|
334 |
+
//Trim space
|
335 |
+
$url = trim($url);
|
336 |
+
|
337 |
+
//Remove tabs, CR, LF
|
338 |
+
$url = preg_replace('/[\t\n\r]/', '', $url);
|
339 |
+
|
340 |
+
//Normalize escapes
|
341 |
+
$url = $this->_normalizeEscape($url);
|
342 |
+
if ($url === false) { return false; }
|
343 |
+
|
344 |
+
//Extract the scheme
|
345 |
+
$scheme = 'http';
|
346 |
+
if (preg_match('~^([a-z]+[a-z0-9+\.\-]*)://(.*)$~i', $url, $matches)) {
|
347 |
+
$scheme = strtolower($matches[1]);
|
348 |
+
$url = $matches[2];
|
349 |
+
}
|
350 |
+
|
351 |
+
//Separate URL and query string
|
352 |
+
$query = '';
|
353 |
+
if (preg_match('/^([^?]+)(\??.*)/', $url, $matches)) {
|
354 |
+
$url = $matches[1];
|
355 |
+
$query = $matches[2];
|
356 |
+
}
|
357 |
+
$endsWithSlash = substr($url, -1) == '/';
|
358 |
+
|
359 |
+
//Separate host and path
|
360 |
+
$path = '';
|
361 |
+
preg_match('~^(.*?)(?:(/.*)|$)~', $url, $matches);
|
362 |
+
$host = $matches[1];
|
363 |
+
if (isset($matches[2])) {
|
364 |
+
$path = $matches[2];
|
365 |
+
}
|
366 |
+
|
367 |
+
//Clean host
|
368 |
+
$host = $this->_normalizeHost($host);
|
369 |
+
if ($host === false) { return false; }
|
370 |
+
|
371 |
+
//Clean path
|
372 |
+
$path = preg_replace('~//+~', '/', $path); //Multiple slashes -> single slash
|
373 |
+
$path = preg_replace('~(?:^|/)\.(?:$|/)~', '/', $path); //. path components removed
|
374 |
+
while (preg_match('~/(?!\.\./)[^/]+/\.\.(?:$|/)~', $path)) { //Resolve ..
|
375 |
+
$path = preg_replace('~/(?!\.\./)[^/]+/\.\.(?:$|/)~', '/', $path, 1);
|
376 |
+
}
|
377 |
+
$path = preg_replace('~(?:^|/)\.\.(?:$|/)~', '/', $path); //Eliminate .. at the beginning
|
378 |
+
$path = trim($path, '.');
|
379 |
+
$path = preg_replace('/\.\.+/', '.', $path);
|
380 |
+
|
381 |
+
if ($path == '.' || $path == '') {
|
382 |
+
$path = '/';
|
383 |
+
}
|
384 |
+
else if ($endsWithSlash && substr($path, -1) != '/') {
|
385 |
+
$path .= '/';
|
386 |
+
}
|
387 |
+
|
388 |
+
return $scheme . '://' . $host . $path . $query;
|
389 |
+
}
|
390 |
+
|
391 |
+
protected function _normalizeEscape($url) {
|
392 |
+
$maxDepth = 1024;
|
393 |
+
$i = 0;
|
394 |
+
while (preg_match('/%([0-9a-f]{2})/i', $url)) {
|
395 |
+
$url = preg_replace_callback('/%([0-9a-f]{2})/i', array($this, '_hex2binCallback'), $url);
|
396 |
+
$i++;
|
397 |
+
|
398 |
+
if ($i > $maxDepth) {
|
399 |
+
return false;
|
400 |
+
}
|
401 |
+
}
|
402 |
+
|
403 |
+
return preg_replace_callback('/[\x00-\x20\x7f-\xff#%]/', array($this, '_bin2hexCallback'), $url);
|
404 |
+
}
|
405 |
+
|
406 |
+
protected function _hex2binCallback($matches) {
|
407 |
+
return wfUtils::hex2bin($matches[1]);
|
408 |
+
}
|
409 |
+
|
410 |
+
protected function _bin2hexCallback($matches) {
|
411 |
+
return '%' . bin2hex($matches[0]);
|
412 |
+
}
|
413 |
+
|
414 |
+
protected function _normalizeHost($host) {
|
415 |
+
//Strip username:password
|
416 |
+
$host = $this->_array_last(explode('@', $host));
|
417 |
+
|
418 |
+
//IPv6 literal
|
419 |
+
if (substr($host, 0, 1) == '[') {
|
420 |
+
if (strpos($host, ']') === false) { //No closing bracket
|
421 |
+
return false;
|
422 |
+
}
|
423 |
+
}
|
424 |
+
|
425 |
+
//Strip port
|
426 |
+
$host = preg_replace('/:\d+$/', '', $host);
|
427 |
+
|
428 |
+
//Unicode to IDNA
|
429 |
+
$u = rawurldecode($host);
|
430 |
+
if (preg_match('/[\x81-\xff]/', $u)) { //0x80 is technically Unicode, but the GSB canonicalization doesn't consider it one
|
431 |
+
if (function_exists('idn_to_ascii')) { //Some PHP versions don't have this and we don't have a polyfill
|
432 |
+
$host = idn_to_ascii($u);
|
433 |
+
}
|
434 |
+
}
|
435 |
+
|
436 |
+
//Remove extra dots
|
437 |
+
$host = trim($host, '.');
|
438 |
+
$host = preg_replace('/\.\.+/', '.', $host);
|
439 |
+
|
440 |
+
//Canonicalize IP addresses
|
441 |
+
if ($iphost = $this->_parseIP($host)) {
|
442 |
+
return $iphost;
|
443 |
+
}
|
444 |
+
|
445 |
+
return strtolower($host);
|
446 |
+
}
|
447 |
+
|
448 |
+
protected function _parseIP($host) {
|
449 |
+
// The Windows resolver allows a 4-part dotted decimal IP address to have a
|
450 |
+
// space followed by any old rubbish, so long as the total length of the
|
451 |
+
// string doesn't get above 15 characters. So, "10.192.95.89 xy" is
|
452 |
+
// resolved to 10.192.95.89. If the string length is greater than 15
|
453 |
+
// characters, e.g. "10.192.95.89 xy.wildcard.example.com", it will be
|
454 |
+
// resolved through DNS.
|
455 |
+
if (strlen($host) <= 15) {
|
456 |
+
$host = $this->_array_first(explode(' ', $host));
|
457 |
+
}
|
458 |
+
|
459 |
+
if (!preg_match('/^((?:0x[0-9a-f]+|[0-9\.])+)$/i', $host)) {
|
460 |
+
return false;
|
461 |
+
}
|
462 |
+
|
463 |
+
$parts = explode('.', $host);
|
464 |
+
if (count($parts) > 4) {
|
465 |
+
return false;
|
466 |
+
}
|
467 |
+
|
468 |
+
$strings = array();
|
469 |
+
foreach ($parts as $i => $p) {
|
470 |
+
if ($i == count($parts) - 1) {
|
471 |
+
$strings[] = $this->_canonicalNum($p, 5 - count($parts));
|
472 |
+
}
|
473 |
+
else {
|
474 |
+
$strings[] = $this->_canonicalNum($p, 1);
|
475 |
+
}
|
476 |
+
|
477 |
+
if ($strings[$i] == '') {
|
478 |
+
return '';
|
479 |
+
}
|
480 |
+
}
|
481 |
+
|
482 |
+
return implode('.', $strings);
|
483 |
+
}
|
484 |
+
|
485 |
+
protected function _canonicalNum($part, $n) {
|
486 |
+
if ($n <= 0 || $n > 4) {
|
487 |
+
return '';
|
488 |
+
}
|
489 |
+
|
490 |
+
if (preg_match('/^0x(\d+)$/i', $part, $matches)) { //hex
|
491 |
+
$part = hexdec($matches[1]);
|
492 |
+
}
|
493 |
+
else if (preg_match('/^0(\d+)$/i', $part, $matches)) { //octal
|
494 |
+
$part = octdec($matches[1]);
|
495 |
+
}
|
496 |
+
else {
|
497 |
+
$part = (int) $part;
|
498 |
+
}
|
499 |
+
|
500 |
+
$strings = array_fill(0, $n, '');
|
501 |
+
for ($i = $n - 1; $i >= 0; $i--) {
|
502 |
+
$strings[$i] = (string) ($part & 0xff);
|
503 |
+
$part = $part >> 8;
|
504 |
+
}
|
505 |
+
return implode('.', $strings);
|
506 |
+
}
|
507 |
+
|
508 |
+
protected function _array_first($array) {
|
509 |
+
if (empty($array)) {
|
510 |
+
return null;
|
511 |
+
}
|
512 |
+
|
513 |
+
return $array[0];
|
514 |
+
}
|
515 |
+
|
516 |
+
protected function _array_last($array) {
|
517 |
+
if (empty($array)) {
|
518 |
+
return null;
|
519 |
+
}
|
520 |
+
|
521 |
+
return $array[count($array) - 1];
|
522 |
+
}
|
523 |
}
|
524 |
?>
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
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.7.
|
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,15 @@ Secure your website with Wordfence.
|
|
160 |
|
161 |
== Changelog ==
|
162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
= 6.3.6 =
|
164 |
* Improvement: Optimized the malware signature scan to reduce memory usage.
|
165 |
* Improvement: Optimized the overall scan to make fewer network calls.
|
2 |
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.7.4
|
6 |
+
Stable tag: 6.3.7
|
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.7 =
|
164 |
+
* Improvement: All URLs are now checked against the Wordfence Domain Blacklist in addition to Google's.
|
165 |
+
* Improvement: Better page load performance for multisite installations with thousands of tables.
|
166 |
+
* Improvement: Updated the bundled GeoIP database.
|
167 |
+
* Improvement: Integrated blacklist blocking statistics into the dashboard for Premium users.
|
168 |
+
* Fix: Added locking to the automatic update process to ensure non-standard crons don't break Wordfence.
|
169 |
+
* Fix: Fixed an activation error on multisite installations on very old WordPress versions.
|
170 |
+
* Fix: Adjusted the behavior of the blacklist toggle for Free users.
|
171 |
+
|
172 |
= 6.3.6 =
|
173 |
* Improvement: Optimized the malware signature scan to reduce memory usage.
|
174 |
* Improvement: Optimized the overall scan to make fewer network calls.
|
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.7
|
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.7');
|
15 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
16 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
17 |
|