Version Description
- Fix: Mask Login Area description text is misleading
- Fix: wp-admin link of sub-sites in networks link to wrong admin URL
- Fix: Prevent Information Disclosure & Prevent PHP Execution show false error message when first applied
- Fix: Dashboard reporting section mis-alignment
- Other minor enhancements and fixes
Download this release
Release Info
Developer | hoang1213 |
Plugin | Defender Security – Malware Scanner, Login Security & Firewall |
Version | 1.9.1 |
Comparing to | |
See all releases |
Code changes from version 1.9 to 1.9.1
- app/behavior/report-free.php +2 -2
- app/controller/gdpr.php +0 -1
- app/module/advanced-tools/behavior/at-widget.php +2 -2
- app/module/advanced-tools/component/auth-api.php +1 -0
- app/module/advanced-tools/component/mask-api.php +57 -4
- app/module/advanced-tools/controller/mask-login.php +62 -2
- app/module/advanced-tools/view/login/disabled.php +9 -2
- app/module/advanced-tools/view/mask-login/disabled.php +2 -2
- app/module/advanced-tools/view/mask-login/enabled.php +4 -4
- app/module/audit/behavior/audit-free.php +3 -3
- app/module/audit/view/pro-feature.php +3 -3
- app/module/hardener/component/db-prefix-service.php +3 -3
- app/module/hardener/component/disable-file-editor-service.php +3 -3
- app/module/hardener/component/hide-error-service.php +2 -2
- app/module/hardener/component/protect-information-service.php +3 -3
- app/module/hardener/component/security-key-service.php +2 -2
- app/module/hardener/component/servers/apache-service.php +95 -93
- app/module/ip-lockout/component/logs-table.php +2 -2
- app/module/ip-lockout/controller/main.php +3 -2
- app/module/ip-lockout/model/settings.php +7 -1
- app/module/ip-lockout/view/blacklist/enabled.php +2 -2
- app/module/ip-lockout/view/notification/report-free.php +2 -2
- app/module/ip-lockout/view/pro-feature.php +3 -3
- app/module/scan/behavior/scan.php +4 -4
- app/module/scan/component/result-table.php +2 -2
- app/module/scan/component/scan-api.php +3 -0
- app/module/scan/controller/main.php +3 -3
- app/module/scan/js/script.js +17 -0
- app/module/scan/model/settings.php +8 -2
- app/module/scan/view/automation-free.php +2 -2
- app/module/scan/view/new.php +1 -1
- app/module/scan/view/pro-feature.php +3 -3
- app/module/scan/view/scanning.php +2 -2
- app/module/scan/view/setting-free.php +2 -2
- app/view/pro-feature.php +3 -3
- app/view/settings.php +2 -2
- assets/css/styles.css +12 -8
- languages/wpdef-default.pot +116 -120
- main-activator.php +3 -7
- readme.txt +8 -1
- wp-defender.php +1 -1
app/behavior/report-free.php
CHANGED
@@ -59,7 +59,7 @@ class Report_Free extends Behavior {
|
|
59 |
<div class="presale-text">
|
60 |
<div>
|
61 |
<?php printf( __( " Automated reports are included in a WPMU DEV membership along with 100+ plugins
|
62 |
-
|
63 |
it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL( 'defender_dash_reports_upsell_link' ) ) ?>
|
64 |
</div>
|
65 |
</div>
|
@@ -138,4 +138,4 @@ class Report_Free extends Behavior {
|
|
138 |
|
139 |
return $text;
|
140 |
}
|
141 |
-
}
|
59 |
<div class="presale-text">
|
60 |
<div>
|
61 |
<?php printf( __( " Automated reports are included in a WPMU DEV membership along with 100+ plugins
|
62 |
+
, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try
|
63 |
it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL( 'defender_dash_reports_upsell_link' ) ) ?>
|
64 |
</div>
|
65 |
</div>
|
138 |
|
139 |
return $text;
|
140 |
}
|
141 |
+
}
|
app/controller/gdpr.php
CHANGED
@@ -19,7 +19,6 @@ class GDPR extends Controller {
|
|
19 |
$content .= '<p>' . __( "This site may be using WPMU DEV third-party cloud storage to store backups of its audit logs where personal information is collected.", "defender-security" ) . '</p>';
|
20 |
$content .= '<p><strong>' . __( "Additional data", "defender-security" ) . '</strong></p>';
|
21 |
$content .= '<p>' . __( "This site creates and stores an activity log that capture the IP address, username, email address and tracks user activity (like when a user makes a comment). Information will be stored locally for 30 days and remotely for 1 year. Information on remote logs cannot be cleared for security purposes.", "defender-security" ) . '</p>';
|
22 |
-
|
23 |
return $content;
|
24 |
}
|
25 |
}
|
19 |
$content .= '<p>' . __( "This site may be using WPMU DEV third-party cloud storage to store backups of its audit logs where personal information is collected.", "defender-security" ) . '</p>';
|
20 |
$content .= '<p><strong>' . __( "Additional data", "defender-security" ) . '</strong></p>';
|
21 |
$content .= '<p>' . __( "This site creates and stores an activity log that capture the IP address, username, email address and tracks user activity (like when a user makes a comment). Information will be stored locally for 30 days and remotely for 1 year. Information on remote logs cannot be cleared for security purposes.", "defender-security" ) . '</p>';
|
|
|
22 |
return $content;
|
23 |
}
|
24 |
}
|
app/module/advanced-tools/behavior/at-widget.php
CHANGED
@@ -76,7 +76,7 @@ class AT_Widget extends Behavior {
|
|
76 |
</strong>
|
77 |
<span>
|
78 |
<?php
|
79 |
-
_e(
|
80 |
?>
|
81 |
</span>
|
82 |
<?php
|
@@ -111,4 +111,4 @@ class AT_Widget extends Behavior {
|
|
111 |
</div>
|
112 |
<?php
|
113 |
}
|
114 |
-
}
|
76 |
</strong>
|
77 |
<span>
|
78 |
<?php
|
79 |
+
_e( 'Change the location of WordPress’s default login area.', "defender-security" )
|
80 |
?>
|
81 |
</span>
|
82 |
<?php
|
111 |
</div>
|
112 |
<?php
|
113 |
}
|
114 |
+
}
|
app/module/advanced-tools/component/auth-api.php
CHANGED
@@ -61,6 +61,7 @@ class Auth_API extends Component {
|
|
61 |
$secret = $base32->decode( $secret );
|
62 |
//timestep fixed at 30
|
63 |
if ( is_null( $counter ) ) {
|
|
|
64 |
$counter = time();
|
65 |
}
|
66 |
$input = floor( $counter / 30 );
|
61 |
$secret = $base32->decode( $secret );
|
62 |
//timestep fixed at 30
|
63 |
if ( is_null( $counter ) ) {
|
64 |
+
|
65 |
$counter = time();
|
66 |
}
|
67 |
$input = floor( $counter / 30 );
|
app/module/advanced-tools/component/mask-api.php
CHANGED
@@ -23,8 +23,7 @@ class Mask_Api extends Component {
|
|
23 |
if ( empty( $requestUri ) ) {
|
24 |
$requestUri = $_SERVER['REQUEST_URI'];
|
25 |
}
|
26 |
-
|
27 |
-
$prefix = parse_url( network_site_url(), PHP_URL_PATH );
|
28 |
$requestPath = parse_url( $requestUri, PHP_URL_PATH );
|
29 |
//clean it a bit
|
30 |
if ( Utils::instance()->isActivatedSingle() == false
|
@@ -32,6 +31,7 @@ class Mask_Api extends Component {
|
|
32 |
&& constant( 'SUBDOMAIN_INSTALL' ) == false
|
33 |
&& get_current_blog_id() != 1
|
34 |
) {
|
|
|
35 |
//get the prefix
|
36 |
$siteInfo = get_blog_details();
|
37 |
$path = $siteInfo->path;
|
@@ -51,6 +51,56 @@ class Mask_Api extends Component {
|
|
51 |
return $requestPath;
|
52 |
}
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
/**
|
55 |
* @return string
|
56 |
*/
|
@@ -63,10 +113,13 @@ class Mask_Api extends Component {
|
|
63 |
/**
|
64 |
* @return string
|
65 |
*/
|
66 |
-
public static function getNewLoginUrl() {
|
67 |
$settings = Mask_Settings::instance();
|
|
|
|
|
|
|
68 |
|
69 |
-
return untrailingslashit(
|
70 |
}
|
71 |
|
72 |
/**
|
23 |
if ( empty( $requestUri ) ) {
|
24 |
$requestUri = $_SERVER['REQUEST_URI'];
|
25 |
}
|
26 |
+
$prefix = parse_url( self::site_url(), PHP_URL_PATH );;
|
|
|
27 |
$requestPath = parse_url( $requestUri, PHP_URL_PATH );
|
28 |
//clean it a bit
|
29 |
if ( Utils::instance()->isActivatedSingle() == false
|
31 |
&& constant( 'SUBDOMAIN_INSTALL' ) == false
|
32 |
&& get_current_blog_id() != 1
|
33 |
) {
|
34 |
+
$prefix = parse_url( self::network_site_url(), PHP_URL_PATH );
|
35 |
//get the prefix
|
36 |
$siteInfo = get_blog_details();
|
37 |
$path = $siteInfo->path;
|
51 |
return $requestPath;
|
52 |
}
|
53 |
|
54 |
+
/**
|
55 |
+
* A clone of network_site_url but remove the filter
|
56 |
+
*
|
57 |
+
* @param string $path
|
58 |
+
* @param null $scheme
|
59 |
+
*
|
60 |
+
* @return string
|
61 |
+
*/
|
62 |
+
private static function site_url( $path = '', $scheme = null ) {
|
63 |
+
if ( empty( $blog_id ) || ! is_multisite() ) {
|
64 |
+
$url = get_option( 'siteurl' );
|
65 |
+
} else {
|
66 |
+
switch_to_blog( $blog_id );
|
67 |
+
$url = get_option( 'siteurl' );
|
68 |
+
restore_current_blog();
|
69 |
+
}
|
70 |
+
|
71 |
+
$url = set_url_scheme( $url, $scheme );
|
72 |
+
|
73 |
+
if ( $path && is_string( $path ) ) {
|
74 |
+
$url .= '/' . ltrim( $path, '/' );
|
75 |
+
}
|
76 |
+
|
77 |
+
return $url;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* A clone of network_site_url but remove the filter
|
82 |
+
*
|
83 |
+
* @param string $path
|
84 |
+
* @param null $scheme
|
85 |
+
*
|
86 |
+
* @return string
|
87 |
+
*/
|
88 |
+
private static function network_site_url( $path = '', $scheme = null ) {
|
89 |
+
$current_network = get_network();
|
90 |
+
|
91 |
+
if ( 'relative' == $scheme ) {
|
92 |
+
$url = $current_network->path;
|
93 |
+
} else {
|
94 |
+
$url = set_url_scheme( 'http://' . $current_network->domain . $current_network->path, $scheme );
|
95 |
+
}
|
96 |
+
|
97 |
+
if ( $path && is_string( $path ) ) {
|
98 |
+
$url .= ltrim( $path, '/' );
|
99 |
+
}
|
100 |
+
|
101 |
+
return $url;
|
102 |
+
}
|
103 |
+
|
104 |
/**
|
105 |
* @return string
|
106 |
*/
|
113 |
/**
|
114 |
* @return string
|
115 |
*/
|
116 |
+
public static function getNewLoginUrl( $domain = null ) {
|
117 |
$settings = Mask_Settings::instance();
|
118 |
+
if ( $domain == null ) {
|
119 |
+
$domain = site_url();
|
120 |
+
}
|
121 |
|
122 |
+
return untrailingslashit( $domain . '/' . ltrim( $settings->maskUrl, '/' ) );
|
123 |
}
|
124 |
|
125 |
/**
|
app/module/advanced-tools/controller/mask-login.php
CHANGED
@@ -41,6 +41,8 @@ class Mask_Login extends Controller {
|
|
41 |
$this->add_filter( 'wp_redirect', 'filterWPRedirect', 10, 2 );
|
42 |
$this->add_filter( 'site_url', 'filterSiteUrl', 9999, 4 );
|
43 |
$this->add_filter( 'network_site_url', 'filterNetworkSiteUrl', 9999, 3 );
|
|
|
|
|
44 |
remove_action( 'template_redirect', 'wp_redirect_admin_locations' );
|
45 |
} else {
|
46 |
if ( $isJetpackSSO ) {
|
@@ -71,18 +73,45 @@ class Mask_Login extends Controller {
|
|
71 |
}
|
72 |
}
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
public function filterNetworkSiteUrl( $url, $path, $scheme ) {
|
75 |
return $this->alterLoginUrl( $url, $scheme );
|
76 |
}
|
77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
public function filterSiteUrl( $url, $path, $scheme, $blog_id ) {
|
79 |
return $this->alterLoginUrl( $url, $scheme );
|
80 |
}
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
public function filterWPRedirect( $location, $status ) {
|
83 |
return $this->alterLoginUrl( $location );
|
84 |
}
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
private function alterLoginUrl( $currentUrl, $scheme = null ) {
|
87 |
if ( strpos( $currentUrl, 'wp-login.php' ) !== false ) {
|
88 |
//this is URL go to old wp-login.php
|
@@ -94,11 +123,44 @@ class Mask_Login extends Controller {
|
|
94 |
} else {
|
95 |
return Mask_Api::getNewLoginUrl();
|
96 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
}
|
98 |
|
99 |
return $currentUrl;
|
100 |
}
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
/**
|
103 |
* Catch any request to wp-admin/*, block or redirect it base on settings.
|
104 |
* This wont apply for logged in user
|
@@ -109,7 +171,6 @@ class Mask_Login extends Controller {
|
|
109 |
//we need to allow ajax access for other tasks
|
110 |
return;
|
111 |
}
|
112 |
-
|
113 |
if ( is_user_logged_in() ) {
|
114 |
return;
|
115 |
}
|
@@ -117,7 +178,6 @@ class Mask_Login extends Controller {
|
|
117 |
$this->_maybeLock();
|
118 |
}
|
119 |
|
120 |
-
|
121 |
private function _handleRequestToLoginPage() {
|
122 |
$this->_maybeLock();
|
123 |
}
|
41 |
$this->add_filter( 'wp_redirect', 'filterWPRedirect', 10, 2 );
|
42 |
$this->add_filter( 'site_url', 'filterSiteUrl', 9999, 4 );
|
43 |
$this->add_filter( 'network_site_url', 'filterNetworkSiteUrl', 9999, 3 );
|
44 |
+
// $this->add_filter( 'network_admin_url', 'filterAdminUrl', 9999, 2 );
|
45 |
+
// $this->add_filter( 'admin_url', 'filterAdminUrl', 9999, 2 );
|
46 |
remove_action( 'template_redirect', 'wp_redirect_admin_locations' );
|
47 |
} else {
|
48 |
if ( $isJetpackSSO ) {
|
73 |
}
|
74 |
}
|
75 |
|
76 |
+
/**
|
77 |
+
* @param $url
|
78 |
+
* @param $path
|
79 |
+
* @param $scheme
|
80 |
+
*
|
81 |
+
* @return string
|
82 |
+
*/
|
83 |
public function filterNetworkSiteUrl( $url, $path, $scheme ) {
|
84 |
return $this->alterLoginUrl( $url, $scheme );
|
85 |
}
|
86 |
|
87 |
+
/**
|
88 |
+
* @param $url
|
89 |
+
* @param $path
|
90 |
+
* @param $scheme
|
91 |
+
* @param $blog_id
|
92 |
+
*
|
93 |
+
* @return string
|
94 |
+
*/
|
95 |
public function filterSiteUrl( $url, $path, $scheme, $blog_id ) {
|
96 |
return $this->alterLoginUrl( $url, $scheme );
|
97 |
}
|
98 |
|
99 |
+
/**
|
100 |
+
* @param $location
|
101 |
+
* @param $status
|
102 |
+
*
|
103 |
+
* @return string
|
104 |
+
*/
|
105 |
public function filterWPRedirect( $location, $status ) {
|
106 |
return $this->alterLoginUrl( $location );
|
107 |
}
|
108 |
|
109 |
+
/**
|
110 |
+
* @param $currentUrl
|
111 |
+
* @param null $scheme
|
112 |
+
*
|
113 |
+
* @return string
|
114 |
+
*/
|
115 |
private function alterLoginUrl( $currentUrl, $scheme = null ) {
|
116 |
if ( strpos( $currentUrl, 'wp-login.php' ) !== false ) {
|
117 |
//this is URL go to old wp-login.php
|
123 |
} else {
|
124 |
return Mask_Api::getNewLoginUrl();
|
125 |
}
|
126 |
+
} else {
|
127 |
+
//this case when admin map a domain into subsite, we need to update the new domain/masked-login into the list
|
128 |
+
if ( ! function_exists( 'get_current_screen' ) ) {
|
129 |
+
require_once( ABSPATH . 'wp-admin/includes/screen.php' );
|
130 |
+
}
|
131 |
+
$screen = get_current_screen();
|
132 |
+
if ( ! is_object( $screen ) ) {
|
133 |
+
return $currentUrl;
|
134 |
+
}
|
135 |
+
if ( $screen->id == 'sites-network' ) {
|
136 |
+
//case URLs inside sites list, need to check those with custom domain cause when redirect, it will require re-loggin
|
137 |
+
$requestPath = Mask_Api::getRequestPath( $currentUrl );
|
138 |
+
if ( $requestPath == '/wp-admin' ) {
|
139 |
+
$currentDomain = $_SERVER['HTTP_HOST'];
|
140 |
+
$subDomain = parse_url( $currentUrl, PHP_URL_HOST );
|
141 |
+
if ( stristr( $subDomain, $currentDomain ) === false ) {
|
142 |
+
return Mask_Api::getNewLoginUrl( $subDomain );
|
143 |
+
}
|
144 |
+
}
|
145 |
+
}
|
146 |
}
|
147 |
|
148 |
return $currentUrl;
|
149 |
}
|
150 |
|
151 |
+
/**
|
152 |
+
* Filter admin URL when sync with HUB
|
153 |
+
*
|
154 |
+
* @param $currentUrl
|
155 |
+
* @param null $scheme
|
156 |
+
*
|
157 |
+
* @return mixed
|
158 |
+
*/
|
159 |
+
public function filterAdminUrl( $currentUrl, $scheme = null ) {
|
160 |
+
|
161 |
+
return $currentUrl;
|
162 |
+
}
|
163 |
+
|
164 |
/**
|
165 |
* Catch any request to wp-admin/*, block or redirect it base on settings.
|
166 |
* This wont apply for logged in user
|
171 |
//we need to allow ajax access for other tasks
|
172 |
return;
|
173 |
}
|
|
|
174 |
if ( is_user_logged_in() ) {
|
175 |
return;
|
176 |
}
|
178 |
$this->_maybeLock();
|
179 |
}
|
180 |
|
|
|
181 |
private function _handleRequestToLoginPage() {
|
182 |
$this->_maybeLock();
|
183 |
}
|
app/module/advanced-tools/view/login/disabled.php
CHANGED
@@ -16,6 +16,13 @@
|
|
16 |
?>
|
17 |
</div>
|
18 |
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
<div id="def2">
|
20 |
<div class="destroy-sessions">
|
21 |
<button type="button" class="button" id="show2AuthActivator">
|
@@ -47,7 +54,7 @@
|
|
47 |
<p><strong><?php _e( "2. Scan the barcode", "defender-security" ) ?></strong></p>
|
48 |
<p><?php _e( "Open the Google Authenticator app you just downloaded, tap the “+” symbol and then use your phone’s camera to scan the barcode below.", "defender-security" ) ?></p>
|
49 |
<img class="barcode"
|
50 |
-
src="<?php echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode(
|
51 |
<div class="line"></div>
|
52 |
<p><strong><?php _e( "3. Enter passcode", "defender-security" ) ?></strong></p>
|
53 |
<p>
|
@@ -79,7 +86,7 @@
|
|
79 |
$('#def2qr').hide();
|
80 |
$('#def2').show();
|
81 |
})
|
82 |
-
$("input#otpCode").keydown(function(event) {
|
83 |
if (event.keyCode == 13) {
|
84 |
event.preventDefault();
|
85 |
|
16 |
?>
|
17 |
</div>
|
18 |
<?php endif; ?>
|
19 |
+
<?php
|
20 |
+
$user = wp_get_current_user();
|
21 |
+
$email = '';
|
22 |
+
if ( is_object( $user ) ) {
|
23 |
+
$email = $user->user_email;
|
24 |
+
}
|
25 |
+
?>
|
26 |
<div id="def2">
|
27 |
<div class="destroy-sessions">
|
28 |
<button type="button" class="button" id="show2AuthActivator">
|
54 |
<p><strong><?php _e( "2. Scan the barcode", "defender-security" ) ?></strong></p>
|
55 |
<p><?php _e( "Open the Google Authenticator app you just downloaded, tap the “+” symbol and then use your phone’s camera to scan the barcode below.", "defender-security" ) ?></p>
|
56 |
<img class="barcode"
|
57 |
+
src="<?php echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode( urlencode( get_bloginfo( 'name' ) ) . ':' . $email, $secretKey, 149, 149, urlencode( get_bloginfo( 'name' ) ) ) ?>"/>
|
58 |
<div class="line"></div>
|
59 |
<p><strong><?php _e( "3. Enter passcode", "defender-security" ) ?></strong></p>
|
60 |
<p>
|
86 |
$('#def2qr').hide();
|
87 |
$('#def2').show();
|
88 |
})
|
89 |
+
$("input#otpCode").keydown(function (event) {
|
90 |
if (event.keyCode == 13) {
|
91 |
event.preventDefault();
|
92 |
|
app/module/advanced-tools/view/mask-login/disabled.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
<div class="box-content issues-box-content tc">
|
8 |
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>"/>
|
9 |
<p>
|
10 |
-
<?php _e(
|
11 |
</p>
|
12 |
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
13 |
|
@@ -21,4 +21,4 @@
|
|
21 |
<div class="clear"></div>
|
22 |
</form>
|
23 |
</div>
|
24 |
-
</div>
|
7 |
<div class="box-content issues-box-content tc">
|
8 |
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>"/>
|
9 |
<p>
|
10 |
+
<?php _e( 'Change the location of WordPress’s default login area, making it harder for automated bots to find and also more convenient for your users.', "defender-security" ) ?>
|
11 |
</p>
|
12 |
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
13 |
|
21 |
<div class="clear"></div>
|
22 |
</form>
|
23 |
</div>
|
24 |
+
</div>
|
app/module/advanced-tools/view/mask-login/enabled.php
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
</div>
|
7 |
<div class="box-content issues-box-content">
|
8 |
<form method="post" id="ad-mask-settings-frm" class="advanced-settings-frm">
|
9 |
-
<p class="line"><?php _e( "Change your default
|
10 |
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
11 |
<div class="well well-error with-cap">
|
12 |
<i class="def-icon icon-warning icon-yellow "></i>
|
@@ -32,7 +32,7 @@
|
|
32 |
<div class="column is-one-third">
|
33 |
<label><?php _e( "Masking URLs", "defender-security" ) ?></label>
|
34 |
<span class="sub">
|
35 |
-
<?php _e( "Choose the new URL slug where users of your website will now navigate to
|
36 |
</span>
|
37 |
</div>
|
38 |
<div class="column">
|
@@ -46,7 +46,7 @@
|
|
46 |
<div class="column is-one-third">
|
47 |
<label><?php _e( "Redirect traffic", "defender-security" ) ?></label>
|
48 |
<span class="sub">
|
49 |
-
<?php _e( "With this feature you can send visitors and bots who try to visit the default
|
50 |
</span>
|
51 |
</div>
|
52 |
<div class="column">
|
@@ -90,4 +90,4 @@
|
|
90 |
<div class="clear"></div>
|
91 |
</form>
|
92 |
</div>
|
93 |
-
</div>
|
6 |
</div>
|
7 |
<div class="box-content issues-box-content">
|
8 |
<form method="post" id="ad-mask-settings-frm" class="advanced-settings-frm">
|
9 |
+
<p class="line"><?php _e( "Change your default WordPress login URL to hide your login area from hackers and bots.", "defender-security" ) ?></p>
|
10 |
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
11 |
<div class="well well-error with-cap">
|
12 |
<i class="def-icon icon-warning icon-yellow "></i>
|
32 |
<div class="column is-one-third">
|
33 |
<label><?php _e( "Masking URLs", "defender-security" ) ?></label>
|
34 |
<span class="sub">
|
35 |
+
<?php _e( "Choose the new URL slug where users of your website will now navigate to log in or register.", "defender-security" ) ?>
|
36 |
</span>
|
37 |
</div>
|
38 |
<div class="column">
|
46 |
<div class="column is-one-third">
|
47 |
<label><?php _e( "Redirect traffic", "defender-security" ) ?></label>
|
48 |
<span class="sub">
|
49 |
+
<?php _e( "With this feature you can send visitors and bots who try to visit the default WordPress login URLs to a separate URL to avoid 404s.", "defender-security" ) ?>
|
50 |
</span>
|
51 |
</div>
|
52 |
<div class="column">
|
90 |
<div class="clear"></div>
|
91 |
</form>
|
92 |
</div>
|
93 |
+
</div>
|
app/module/audit/behavior/audit-free.php
CHANGED
@@ -27,8 +27,8 @@ class Audit_Free extends Behavior {
|
|
27 |
</div>
|
28 |
<div class="presale-text">
|
29 |
<div>
|
30 |
-
<?php printf( __( "Audit logging is a pro feature included in a WPMU DEV membership along with 100+ plugins
|
31 |
-
|
32 |
</a>
|
33 |
</div>
|
34 |
</div>
|
@@ -37,4 +37,4 @@ class Audit_Free extends Behavior {
|
|
37 |
</div>
|
38 |
<?php
|
39 |
}
|
40 |
-
}
|
27 |
</div>
|
28 |
<div class="presale-text">
|
29 |
<div>
|
30 |
+
<?php printf( __( "Audit logging is a pro feature included in a WPMU DEV membership along with 100+ plugins,
|
31 |
+
24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL('defender_dash_auditlogging_upsell_link') ) ?>
|
32 |
</a>
|
33 |
</div>
|
34 |
</div>
|
37 |
</div>
|
38 |
<?php
|
39 |
}
|
40 |
+
}
|
app/module/audit/view/pro-feature.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
-
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
@@ -33,7 +33,7 @@
|
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
-
<p class="is-marginless"><?php _e( "As part
|
37 |
</div>
|
38 |
</div>
|
39 |
-
</dialog>
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
+
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro:", "defender-security" ) ?></p>
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
+
<p class="is-marginless"><?php _e( "As part of a WPMU DEV free trial.", "defender-security" ) ?></p>
|
37 |
</div>
|
38 |
</div>
|
39 |
+
</dialog>
|
app/module/hardener/component/db-prefix-service.php
CHANGED
@@ -29,7 +29,7 @@ class DB_Prefix_Service extends Rule_Service implements IRule_Service {
|
|
29 |
$config_path = $this->retrieveWPConfigPath();
|
30 |
if ( ! is_writeable( $config_path ) ) {
|
31 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
32 |
-
sprintf( __( "The file %s is not
|
33 |
}
|
34 |
|
35 |
$hook_line = $this->findDefaultHookLine( file( $config_path ) );
|
@@ -92,7 +92,7 @@ class DB_Prefix_Service extends Rule_Service implements IRule_Service {
|
|
92 |
if ( ! file_put_contents( $config_path, implode( null, $config ), LOCK_EX ) ) {
|
93 |
//should not happen
|
94 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
95 |
-
sprintf( __( "The file %s is not
|
96 |
}
|
97 |
|
98 |
return true;
|
@@ -224,4 +224,4 @@ class DB_Prefix_Service extends Rule_Service implements IRule_Service {
|
|
224 |
public function listen() {
|
225 |
// TODO: Implement listen() method.
|
226 |
}
|
227 |
-
}
|
29 |
$config_path = $this->retrieveWPConfigPath();
|
30 |
if ( ! is_writeable( $config_path ) ) {
|
31 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
32 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
33 |
}
|
34 |
|
35 |
$hook_line = $this->findDefaultHookLine( file( $config_path ) );
|
92 |
if ( ! file_put_contents( $config_path, implode( null, $config ), LOCK_EX ) ) {
|
93 |
//should not happen
|
94 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
95 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
96 |
}
|
97 |
|
98 |
return true;
|
224 |
public function listen() {
|
225 |
// TODO: Implement listen() method.
|
226 |
}
|
227 |
+
}
|
app/module/hardener/component/disable-file-editor-service.php
CHANGED
@@ -29,7 +29,7 @@ class Disable_File_Editor_Service extends Rule_Service implements IRule_Service
|
|
29 |
$config_path = $this->retrieveWPConfigPath();
|
30 |
if ( ! is_writeable( $config_path ) ) {
|
31 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
32 |
-
sprintf( __( "The file %s is not
|
33 |
}
|
34 |
$config = file( $config_path );
|
35 |
$line = $this->findLine( $config );
|
@@ -63,7 +63,7 @@ class Disable_File_Editor_Service extends Rule_Service implements IRule_Service
|
|
63 |
$config_path = $this->retrieveWPConfigPath();
|
64 |
if ( ! is_writeable( $config_path ) ) {
|
65 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
66 |
-
sprintf( __( "The file %s is not
|
67 |
}
|
68 |
$config = file( $config_path );
|
69 |
$line = $this->findLine( $config );
|
@@ -96,4 +96,4 @@ class Disable_File_Editor_Service extends Rule_Service implements IRule_Service
|
|
96 |
|
97 |
return false;
|
98 |
}
|
99 |
-
}
|
29 |
$config_path = $this->retrieveWPConfigPath();
|
30 |
if ( ! is_writeable( $config_path ) ) {
|
31 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
32 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
33 |
}
|
34 |
$config = file( $config_path );
|
35 |
$line = $this->findLine( $config );
|
63 |
$config_path = $this->retrieveWPConfigPath();
|
64 |
if ( ! is_writeable( $config_path ) ) {
|
65 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
66 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
67 |
}
|
68 |
$config = file( $config_path );
|
69 |
$line = $this->findLine( $config );
|
96 |
|
97 |
return false;
|
98 |
}
|
99 |
+
}
|
app/module/hardener/component/hide-error-service.php
CHANGED
@@ -58,7 +58,7 @@ class Hide_Error_Service extends Rule_Service implements IRule_Service {
|
|
58 |
//check if can write
|
59 |
if ( ! is_writeable( $config_path ) ) {
|
60 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
61 |
-
sprintf( __( "The file %s is not
|
62 |
}
|
63 |
$config = file( $config_path );
|
64 |
if ( ( $info = $this->findWPDebugLine( $config ) ) === - 1 ) {
|
@@ -158,4 +158,4 @@ class Hide_Error_Service extends Rule_Service implements IRule_Service {
|
|
158 |
public function listen() {
|
159 |
|
160 |
}
|
161 |
-
}
|
58 |
//check if can write
|
59 |
if ( ! is_writeable( $config_path ) ) {
|
60 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
61 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
62 |
}
|
63 |
$config = file( $config_path );
|
64 |
if ( ( $info = $this->findWPDebugLine( $config ) ) === - 1 ) {
|
158 |
public function listen() {
|
159 |
|
160 |
}
|
161 |
+
}
|
app/module/hardener/component/protect-information-service.php
CHANGED
@@ -43,7 +43,7 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
43 |
}
|
44 |
if ( ! is_writeable( $htPath ) ) {
|
45 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
46 |
-
sprintf( __( "The file %s is not
|
47 |
}
|
48 |
$htConfig = file( $htPath );
|
49 |
$rules = $this->apache_rule();
|
@@ -66,7 +66,7 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
66 |
$htPath = ABSPATH . '.htaccess';
|
67 |
if ( ! is_writeable( $htPath ) ) {
|
68 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
69 |
-
sprintf( __( "The file %s is not
|
70 |
}
|
71 |
$htConfig = file_get_contents( $htPath );
|
72 |
$rules = $this->apache_rule();
|
@@ -126,4 +126,4 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
126 |
}
|
127 |
return $rules;
|
128 |
}
|
129 |
-
}
|
43 |
}
|
44 |
if ( ! is_writeable( $htPath ) ) {
|
45 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
46 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
47 |
}
|
48 |
$htConfig = file( $htPath );
|
49 |
$rules = $this->apache_rule();
|
66 |
$htPath = ABSPATH . '.htaccess';
|
67 |
if ( ! is_writeable( $htPath ) ) {
|
68 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
69 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
70 |
}
|
71 |
$htConfig = file_get_contents( $htPath );
|
72 |
$rules = $this->apache_rule();
|
126 |
}
|
127 |
return $rules;
|
128 |
}
|
129 |
+
}
|
app/module/hardener/component/security-key-service.php
CHANGED
@@ -45,7 +45,7 @@ class Security_Key_Service extends Rule_Service implements IRule_Service {
|
|
45 |
//check if can write
|
46 |
if ( ! is_writeable( $config_path ) ) {
|
47 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
48 |
-
sprintf( __( "The file %s is not
|
49 |
}
|
50 |
|
51 |
return $this->generateSalt( $config_path );
|
@@ -124,4 +124,4 @@ class Security_Key_Service extends Rule_Service implements IRule_Service {
|
|
124 |
|
125 |
return true;
|
126 |
}
|
127 |
-
}
|
45 |
//check if can write
|
46 |
if ( ! is_writeable( $config_path ) ) {
|
47 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
48 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
49 |
}
|
50 |
|
51 |
return $this->generateSalt( $config_path );
|
124 |
|
125 |
return true;
|
126 |
}
|
127 |
+
}
|
app/module/hardener/component/servers/apache-service.php
CHANGED
@@ -12,32 +12,32 @@ use WP_Defender\Module\Hardener\Rule_Service;
|
|
12 |
|
13 |
class Apache_Service extends Rule_Service implements IRule_Service {
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
|
22 |
/**
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
|
29 |
-
|
30 |
* @return bool
|
31 |
*/
|
32 |
public function check() {
|
33 |
-
|
34 |
-
|
35 |
|
36 |
-
|
37 |
* @return bool|\WP_Error
|
38 |
*/
|
39 |
-
|
40 |
-
|
41 |
if ( is_wp_error( $ret ) ) {
|
42 |
return $ret;
|
43 |
}
|
@@ -53,36 +53,36 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
53 |
}
|
54 |
|
55 |
return true;
|
56 |
-
|
57 |
|
58 |
-
|
59 |
* @return bool|\WP_Error
|
60 |
*/
|
61 |
private function protectIncludesDir() {
|
62 |
$htPath = ABSPATH . WPINC . '/' . '.htaccess';
|
63 |
|
64 |
if ( ! is_file( $htPath ) ) {
|
65 |
-
if (
|
66 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
67 |
-
sprintf( __( "The file %s is not
|
68 |
}
|
69 |
} elseif ( ! is_writeable( $htPath ) ) {
|
70 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
71 |
-
sprintf( __( "The file %s is not
|
72 |
}
|
73 |
-
$htConfig
|
74 |
-
$deny
|
75 |
-
$allow
|
76 |
-
$default
|
77 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
78 |
'<Files *.php>' . PHP_EOL .
|
79 |
-
$deny
|
80 |
'</Files>' . PHP_EOL,
|
81 |
'<Files wp-tinymce.php>' . PHP_EOL .
|
82 |
-
$allow
|
83 |
'</Files>' . PHP_EOL,
|
84 |
'<Files ms-files.php>' . PHP_EOL .
|
85 |
-
$allow
|
86 |
'</Files>' . PHP_EOL,
|
87 |
'## WP Defender - End ##' . PHP_EOL
|
88 |
);
|
@@ -106,18 +106,18 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
106 |
private function protectContentDir() {
|
107 |
$htPath = WP_CONTENT_DIR . '/' . '.htaccess';
|
108 |
if ( ! file_exists( $htPath ) ) {
|
109 |
-
if (
|
110 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
111 |
-
sprintf( __( "The file %s is not
|
112 |
}
|
113 |
} elseif ( ! is_writeable( $htPath ) ) {
|
114 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
115 |
-
sprintf( __( "The file %s is not
|
116 |
}
|
117 |
-
$htConfig
|
118 |
-
$deny
|
119 |
-
$allow
|
120 |
-
$default
|
121 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
122 |
'<Files *.php>' . PHP_EOL .
|
123 |
$deny .
|
@@ -130,11 +130,11 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
130 |
$custom_exclude = array();
|
131 |
|
132 |
foreach ( $this->exclude_file_paths as $file_path ) {
|
133 |
-
$file_path = trim( preg_replace('/\s\s+/', ' ', $file_path ) ); //remove trailing new lines
|
134 |
-
if ( !empty( $file_path ) ) {
|
135 |
-
$custom_exclude[] = '<Files ' . $file_path . '> '. PHP_EOL .
|
136 |
-
|
137 |
-
|
138 |
}
|
139 |
}
|
140 |
|
@@ -157,7 +157,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
157 |
/**
|
158 |
* Protect uploads directory
|
159 |
* Sometimes a user will set a custom upload directory
|
160 |
-
*
|
161 |
* @return bool|\WP_Error
|
162 |
*/
|
163 |
public function protectUploadsDir() {
|
@@ -166,16 +166,16 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
166 |
if ( ! file_exists( $htPath ) ) {
|
167 |
if ( ! file_put_contents( $htPath, '', LOCK_EX ) ) {
|
168 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
169 |
-
sprintf( __( "The file %s is not
|
170 |
}
|
171 |
} elseif ( ! is_writeable( $htPath ) ) {
|
172 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
173 |
-
sprintf( __( "The file %s is not
|
174 |
}
|
175 |
-
$htConfig
|
176 |
-
$deny
|
177 |
-
$allow
|
178 |
-
$default
|
179 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
180 |
'<Files *.php>' . PHP_EOL .
|
181 |
$deny .
|
@@ -188,11 +188,11 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
188 |
$custom_exclude = array();
|
189 |
|
190 |
foreach ( $this->exclude_file_paths as $file_path ) {
|
191 |
-
$file_path = trim( preg_replace('/\s\s+/', ' ', $file_path ) ); //remove trailing new lines
|
192 |
-
if ( !empty( $file_path ) ) {
|
193 |
-
$custom_exclude[] = '<Files ' . $file_path . '> '. PHP_EOL .
|
194 |
-
|
195 |
-
|
196 |
}
|
197 |
}
|
198 |
|
@@ -209,6 +209,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
209 |
file_put_contents( $htPath, implode( '', $htConfig ), LOCK_EX );
|
210 |
}
|
211 |
}
|
|
|
212 |
return true;
|
213 |
}
|
214 |
|
@@ -216,14 +217,14 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
216 |
$htPath = WP_CONTENT_DIR . '/' . '.htaccess';
|
217 |
if ( ! is_writeable( $htPath ) ) {
|
218 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
219 |
-
sprintf( __( "The file %s is not
|
220 |
}
|
221 |
-
$htConfig
|
222 |
-
$deny
|
223 |
-
$default
|
224 |
-
PHP_EOL .'## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
225 |
'<Files *.php>' . PHP_EOL .
|
226 |
-
$deny
|
227 |
'</Files>' . PHP_EOL,
|
228 |
'## WP Defender - End ##' . PHP_EOL
|
229 |
);
|
@@ -233,7 +234,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
233 |
}
|
234 |
|
235 |
//Introduced regex
|
236 |
-
preg_match_all('/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches);
|
237 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
238 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
239 |
} else {
|
@@ -247,26 +248,26 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
247 |
$htPath = ABSPATH . WPINC . '/' . '.htaccess';
|
248 |
if ( ! is_writeable( $htPath ) ) {
|
249 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
250 |
-
sprintf( __( "The file %s is not
|
251 |
}
|
252 |
-
$htConfig
|
253 |
-
$deny
|
254 |
-
$allow
|
255 |
-
$default
|
256 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
257 |
'<Files *.php>' . PHP_EOL .
|
258 |
-
$deny
|
259 |
'</Files>' . PHP_EOL,
|
260 |
'<Files wp-tinymce.php>' . PHP_EOL .
|
261 |
-
$allow
|
262 |
'</Files>' . PHP_EOL,
|
263 |
'<Files ms-files.php>' . PHP_EOL .
|
264 |
-
$allow
|
265 |
'</Files>' . PHP_EOL,
|
266 |
'## WP Defender - End ##' . PHP_EOL
|
267 |
);
|
268 |
|
269 |
-
preg_match_all('/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches);
|
270 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
271 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
272 |
} else {
|
@@ -281,14 +282,14 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
281 |
$htPath = ABSPATH . UPLOADS . '/' . '.htaccess';
|
282 |
if ( ! is_writeable( $htPath ) ) {
|
283 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
284 |
-
sprintf( __( "The file %s is not
|
285 |
}
|
286 |
-
$htConfig
|
287 |
-
$deny
|
288 |
-
$default
|
289 |
-
PHP_EOL .'## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
290 |
'<Files *.php>' . PHP_EOL .
|
291 |
-
$deny
|
292 |
'</Files>' . PHP_EOL,
|
293 |
'## WP Defender - End ##' . PHP_EOL
|
294 |
);
|
@@ -298,7 +299,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
298 |
}
|
299 |
|
300 |
//Introduced regex
|
301 |
-
preg_match_all('/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches);
|
302 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
303 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
304 |
} else {
|
@@ -309,28 +310,28 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
309 |
}
|
310 |
}
|
311 |
|
312 |
-
|
313 |
* @return bool|\WP_Error
|
314 |
*/
|
315 |
public function revert() {
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
}
|
325 |
$ret = $this->unProtectUploadDir();
|
326 |
if ( is_wp_error( $ret ) ) {
|
327 |
-
|
328 |
}
|
329 |
|
330 |
-
|
331 |
-
|
332 |
|
333 |
-
|
334 |
* Set the exclude file paths
|
335 |
*
|
336 |
* @param String $paths
|
@@ -349,7 +350,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
349 |
*/
|
350 |
public function getExcludedFilePaths() {
|
351 |
return $this->exclude_file_paths;
|
352 |
-
}
|
353 |
|
354 |
/**
|
355 |
* Set the exclude file paths
|
@@ -370,7 +371,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
370 |
*/
|
371 |
public function getNewHtConfig() {
|
372 |
return $this->new_htconfig;
|
373 |
-
}
|
374 |
|
375 |
/**
|
376 |
* Return the correct apache rules for allow/deny
|
@@ -390,9 +391,10 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
390 |
return 'Allow from all' . PHP_EOL;
|
391 |
} else {
|
392 |
return 'Order allow,deny' . PHP_EOL .
|
393 |
-
|
394 |
}
|
395 |
}
|
396 |
}
|
397 |
}
|
398 |
-
|
|
12 |
|
13 |
class Apache_Service extends Rule_Service implements IRule_Service {
|
14 |
|
15 |
+
/**
|
16 |
+
* Exclude file paths
|
17 |
+
*
|
18 |
+
* @var array|bool|mixed
|
19 |
+
*/
|
20 |
+
private $exclude_file_paths = array();
|
21 |
|
22 |
/**
|
23 |
+
* New htaccess file
|
24 |
+
*
|
25 |
+
* @var array|bool|mixed
|
26 |
+
*/
|
27 |
+
private $new_htconfig = array();
|
28 |
|
29 |
+
/**
|
30 |
* @return bool
|
31 |
*/
|
32 |
public function check() {
|
33 |
+
return true;
|
34 |
+
}
|
35 |
|
36 |
+
/**
|
37 |
* @return bool|\WP_Error
|
38 |
*/
|
39 |
+
public function process() {
|
40 |
+
$ret = $this->protectContentDir();
|
41 |
if ( is_wp_error( $ret ) ) {
|
42 |
return $ret;
|
43 |
}
|
53 |
}
|
54 |
|
55 |
return true;
|
56 |
+
}
|
57 |
|
58 |
+
/**
|
59 |
* @return bool|\WP_Error
|
60 |
*/
|
61 |
private function protectIncludesDir() {
|
62 |
$htPath = ABSPATH . WPINC . '/' . '.htaccess';
|
63 |
|
64 |
if ( ! is_file( $htPath ) ) {
|
65 |
+
if ( file_put_contents( $htPath, '', LOCK_EX ) === false ) {
|
66 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
67 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
68 |
}
|
69 |
} elseif ( ! is_writeable( $htPath ) ) {
|
70 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
71 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
72 |
}
|
73 |
+
$htConfig = file( $htPath );
|
74 |
+
$deny = $this->generateHtAccessRule( false );
|
75 |
+
$allow = $this->generateHtAccessRule( true );
|
76 |
+
$default = array(
|
77 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
78 |
'<Files *.php>' . PHP_EOL .
|
79 |
+
$deny .
|
80 |
'</Files>' . PHP_EOL,
|
81 |
'<Files wp-tinymce.php>' . PHP_EOL .
|
82 |
+
$allow .
|
83 |
'</Files>' . PHP_EOL,
|
84 |
'<Files ms-files.php>' . PHP_EOL .
|
85 |
+
$allow .
|
86 |
'</Files>' . PHP_EOL,
|
87 |
'## WP Defender - End ##' . PHP_EOL
|
88 |
);
|
106 |
private function protectContentDir() {
|
107 |
$htPath = WP_CONTENT_DIR . '/' . '.htaccess';
|
108 |
if ( ! file_exists( $htPath ) ) {
|
109 |
+
if ( file_put_contents( $htPath, '', LOCK_EX ) === false ) {
|
110 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
111 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
112 |
}
|
113 |
} elseif ( ! is_writeable( $htPath ) ) {
|
114 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
115 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
116 |
}
|
117 |
+
$htConfig = file( $htPath );
|
118 |
+
$deny = $this->generateHtAccessRule( false );
|
119 |
+
$allow = $this->generateHtAccessRule( true );
|
120 |
+
$default = array(
|
121 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
122 |
'<Files *.php>' . PHP_EOL .
|
123 |
$deny .
|
130 |
$custom_exclude = array();
|
131 |
|
132 |
foreach ( $this->exclude_file_paths as $file_path ) {
|
133 |
+
$file_path = trim( preg_replace( '/\s\s+/', ' ', $file_path ) ); //remove trailing new lines
|
134 |
+
if ( ! empty( $file_path ) ) {
|
135 |
+
$custom_exclude[] = '<Files ' . $file_path . '> ' . PHP_EOL .
|
136 |
+
$allow .
|
137 |
+
'</Files>' . PHP_EOL;
|
138 |
}
|
139 |
}
|
140 |
|
157 |
/**
|
158 |
* Protect uploads directory
|
159 |
* Sometimes a user will set a custom upload directory
|
160 |
+
*
|
161 |
* @return bool|\WP_Error
|
162 |
*/
|
163 |
public function protectUploadsDir() {
|
166 |
if ( ! file_exists( $htPath ) ) {
|
167 |
if ( ! file_put_contents( $htPath, '', LOCK_EX ) ) {
|
168 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
169 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
170 |
}
|
171 |
} elseif ( ! is_writeable( $htPath ) ) {
|
172 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
173 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
174 |
}
|
175 |
+
$htConfig = file( $htPath );
|
176 |
+
$deny = $this->generateHtAccessRule( false );
|
177 |
+
$allow = $this->generateHtAccessRule( true );
|
178 |
+
$default = array(
|
179 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
180 |
'<Files *.php>' . PHP_EOL .
|
181 |
$deny .
|
188 |
$custom_exclude = array();
|
189 |
|
190 |
foreach ( $this->exclude_file_paths as $file_path ) {
|
191 |
+
$file_path = trim( preg_replace( '/\s\s+/', ' ', $file_path ) ); //remove trailing new lines
|
192 |
+
if ( ! empty( $file_path ) ) {
|
193 |
+
$custom_exclude[] = '<Files ' . $file_path . '> ' . PHP_EOL .
|
194 |
+
$allow .
|
195 |
+
'</Files>' . PHP_EOL;
|
196 |
}
|
197 |
}
|
198 |
|
209 |
file_put_contents( $htPath, implode( '', $htConfig ), LOCK_EX );
|
210 |
}
|
211 |
}
|
212 |
+
|
213 |
return true;
|
214 |
}
|
215 |
|
217 |
$htPath = WP_CONTENT_DIR . '/' . '.htaccess';
|
218 |
if ( ! is_writeable( $htPath ) ) {
|
219 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
220 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
221 |
}
|
222 |
+
$htConfig = file_get_contents( $htPath );
|
223 |
+
$deny = $this->generateHtAccessRule( false );
|
224 |
+
$default = array(
|
225 |
+
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
226 |
'<Files *.php>' . PHP_EOL .
|
227 |
+
$deny .
|
228 |
'</Files>' . PHP_EOL,
|
229 |
'## WP Defender - End ##' . PHP_EOL
|
230 |
);
|
234 |
}
|
235 |
|
236 |
//Introduced regex
|
237 |
+
preg_match_all( '/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches );
|
238 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
239 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
240 |
} else {
|
248 |
$htPath = ABSPATH . WPINC . '/' . '.htaccess';
|
249 |
if ( ! is_writeable( $htPath ) ) {
|
250 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
251 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
252 |
}
|
253 |
+
$htConfig = file_get_contents( $htPath );
|
254 |
+
$deny = $this->generateHtAccessRule( false );
|
255 |
+
$allow = $this->generateHtAccessRule( true );
|
256 |
+
$default = array(
|
257 |
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
258 |
'<Files *.php>' . PHP_EOL .
|
259 |
+
$deny .
|
260 |
'</Files>' . PHP_EOL,
|
261 |
'<Files wp-tinymce.php>' . PHP_EOL .
|
262 |
+
$allow .
|
263 |
'</Files>' . PHP_EOL,
|
264 |
'<Files ms-files.php>' . PHP_EOL .
|
265 |
+
$allow .
|
266 |
'</Files>' . PHP_EOL,
|
267 |
'## WP Defender - End ##' . PHP_EOL
|
268 |
);
|
269 |
|
270 |
+
preg_match_all( '/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches );
|
271 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
272 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
273 |
} else {
|
282 |
$htPath = ABSPATH . UPLOADS . '/' . '.htaccess';
|
283 |
if ( ! is_writeable( $htPath ) ) {
|
284 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
285 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
286 |
}
|
287 |
+
$htConfig = file_get_contents( $htPath );
|
288 |
+
$deny = $this->generateHtAccessRule( false );
|
289 |
+
$default = array(
|
290 |
+
PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
|
291 |
'<Files *.php>' . PHP_EOL .
|
292 |
+
$deny .
|
293 |
'</Files>' . PHP_EOL,
|
294 |
'## WP Defender - End ##' . PHP_EOL
|
295 |
);
|
299 |
}
|
300 |
|
301 |
//Introduced regex
|
302 |
+
preg_match_all( '/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches );
|
303 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
304 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
305 |
} else {
|
310 |
}
|
311 |
}
|
312 |
|
313 |
+
/**
|
314 |
* @return bool|\WP_Error
|
315 |
*/
|
316 |
public function revert() {
|
317 |
+
$ret = $this->unProtectContentDir();
|
318 |
+
if ( is_wp_error( $ret ) ) {
|
319 |
+
return $ret;
|
320 |
+
}
|
321 |
+
|
322 |
+
$ret = $this->unProtectIncludeDir();
|
323 |
+
if ( is_wp_error( $ret ) ) {
|
324 |
+
return $ret;
|
325 |
}
|
326 |
$ret = $this->unProtectUploadDir();
|
327 |
if ( is_wp_error( $ret ) ) {
|
328 |
+
return $ret;
|
329 |
}
|
330 |
|
331 |
+
return true;
|
332 |
+
}
|
333 |
|
334 |
+
/**
|
335 |
* Set the exclude file paths
|
336 |
*
|
337 |
* @param String $paths
|
350 |
*/
|
351 |
public function getExcludedFilePaths() {
|
352 |
return $this->exclude_file_paths;
|
353 |
+
}
|
354 |
|
355 |
/**
|
356 |
* Set the exclude file paths
|
371 |
*/
|
372 |
public function getNewHtConfig() {
|
373 |
return $this->new_htconfig;
|
374 |
+
}
|
375 |
|
376 |
/**
|
377 |
* Return the correct apache rules for allow/deny
|
391 |
return 'Allow from all' . PHP_EOL;
|
392 |
} else {
|
393 |
return 'Order allow,deny' . PHP_EOL .
|
394 |
+
'Deny from all' . PHP_EOL;
|
395 |
}
|
396 |
}
|
397 |
}
|
398 |
}
|
399 |
+
|
400 |
+
?>
|
app/module/ip-lockout/component/logs-table.php
CHANGED
@@ -178,7 +178,7 @@ class Logs_Table extends \WP_List_Table {
|
|
178 |
</div>
|
179 |
<div class="column is-4">
|
180 |
<strong>
|
181 |
-
<?php _e( "
|
182 |
</strong>
|
183 |
<input name="ip_address" type="text"
|
184 |
placeholder="<?php esc_attr_e( "Enter an IP address", "defender-security" ) ?>">
|
@@ -471,4 +471,4 @@ class Logs_Table extends \WP_List_Table {
|
|
471 |
echo "<$tag $scope $id $class>$column_display_name</$tag>";
|
472 |
}
|
473 |
}
|
474 |
-
}
|
178 |
</div>
|
179 |
<div class="column is-4">
|
180 |
<strong>
|
181 |
+
<?php _e( "IP Address", "defender-security" ) ?>
|
182 |
</strong>
|
183 |
<input name="ip_address" type="text"
|
184 |
placeholder="<?php esc_attr_e( "Enter an IP address", "defender-security" ) ?>">
|
471 |
echo "<$tag $scope $id $class>$column_display_name</$tag>";
|
472 |
}
|
473 |
}
|
474 |
+
}
|
app/module/ip-lockout/controller/main.php
CHANGED
@@ -222,11 +222,12 @@ class Main extends Controller {
|
|
222 |
'message' => Login_Protection_Api::getLogsActionsText( $log )
|
223 |
) );
|
224 |
} else {
|
225 |
-
$item
|
226 |
$item->ip = $ip;
|
|
|
227 |
wp_send_json_success( array(
|
228 |
'message' => sprintf( __( "IP %s has been added to your blacklist. You can control your blacklist in <a href=\"%s\">IP Lockouts.</a>", "defender-security" ), $ip, network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ),
|
229 |
-
'buttons' => Login_Protection_Api::getLogsActionsText($item )
|
230 |
) );
|
231 |
}
|
232 |
} else {
|
222 |
'message' => Login_Protection_Api::getLogsActionsText( $log )
|
223 |
) );
|
224 |
} else {
|
225 |
+
$item = new \StdClass();
|
226 |
$item->ip = $ip;
|
227 |
+
$item->id = null;
|
228 |
wp_send_json_success( array(
|
229 |
'message' => sprintf( __( "IP %s has been added to your blacklist. You can control your blacklist in <a href=\"%s\">IP Lockouts.</a>", "defender-security" ), $ip, network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ),
|
230 |
+
'buttons' => Login_Protection_Api::getLogsActionsText( $item )
|
231 |
) );
|
232 |
}
|
233 |
} else {
|
app/module/ip-lockout/model/settings.php
CHANGED
@@ -65,7 +65,13 @@ class Settings extends \Hammer\WP\Settings {
|
|
65 |
|
66 |
//default is weekly
|
67 |
$this->report_day = strtolower( date( 'l' ) );
|
68 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
}
|
70 |
parent::__construct( $id, $isMulti );
|
71 |
}
|
65 |
|
66 |
//default is weekly
|
67 |
$this->report_day = strtolower( date( 'l' ) );
|
68 |
+
$hour = date( 'H', current_time( 'timestamp' ) );
|
69 |
+
if ( $hour == '00' ) {
|
70 |
+
$hour = 0;
|
71 |
+
} else {
|
72 |
+
$hour = ltrim( $hour, '0' );
|
73 |
+
}
|
74 |
+
$this->report_time = $hour . ':0';
|
75 |
}
|
76 |
parent::__construct( $id, $isMulti );
|
77 |
}
|
app/module/ip-lockout/view/blacklist/enabled.php
CHANGED
@@ -14,7 +14,7 @@
|
|
14 |
<?php _e( "Blacklist", "defender-security" ) ?>
|
15 |
</label>
|
16 |
<span class="sub">
|
17 |
-
<?php _e( "Any IP addresses you list here will be completely blocked from accessing
|
18 |
</span>
|
19 |
</div>
|
20 |
<div class="column">
|
@@ -116,4 +116,4 @@
|
|
116 |
<div class="clear"></div>
|
117 |
</form>
|
118 |
</div>
|
119 |
-
</div>
|
14 |
<?php _e( "Blacklist", "defender-security" ) ?>
|
15 |
</label>
|
16 |
<span class="sub">
|
17 |
+
<?php _e( "Any IP addresses you list here will be completely blocked from accessing your website, including admins.", "defender-security" ) ?>
|
18 |
</span>
|
19 |
</div>
|
20 |
<div class="column">
|
116 |
<div class="clear"></div>
|
117 |
</form>
|
118 |
</div>
|
119 |
+
</div>
|
app/module/ip-lockout/view/notification/report-free.php
CHANGED
@@ -76,9 +76,9 @@
|
|
76 |
</form>
|
77 |
<div class="presale-text">
|
78 |
<div>
|
79 |
-
<?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins
|
80 |
</div>
|
81 |
</div>
|
82 |
</div>
|
83 |
</div>
|
84 |
-
<?php $controller->renderPartial('pro-feature') ?>
|
76 |
</form>
|
77 |
<div class="presale-text">
|
78 |
<div>
|
79 |
+
<?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all FREE today!</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_iplockouts_reports_upsell_link') ) ?>
|
80 |
</div>
|
81 |
</div>
|
82 |
</div>
|
83 |
</div>
|
84 |
+
<?php $controller->renderPartial('pro-feature') ?>
|
app/module/ip-lockout/view/pro-feature.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
-
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
@@ -33,7 +33,7 @@
|
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
-
<p class="is-marginless"><?php _e( "As part
|
37 |
</div>
|
38 |
</div>
|
39 |
-
</dialog>
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
+
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro:", "defender-security" ) ?></p>
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
+
<p class="is-marginless"><?php _e( "As part of a WPMU DEV free trial.", "defender-security" ) ?></p>
|
37 |
</div>
|
38 |
</div>
|
39 |
+
</dialog>
|
app/module/scan/behavior/scan.php
CHANGED
@@ -88,7 +88,7 @@ class Scan extends Behavior {
|
|
88 |
<?php
|
89 |
if ( $this->countAll == 0 ): ?>
|
90 |
<span class="def-tag tag-success">
|
91 |
-
<?php else:
|
92 |
?>
|
93 |
<span class="def-tag tag-error">
|
94 |
<?php endif;
|
@@ -195,8 +195,8 @@ class Scan extends Behavior {
|
|
195 |
ob_start();
|
196 |
?>
|
197 |
<div class="line">
|
198 |
-
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get
|
199 |
-
|
200 |
</div>
|
201 |
<form id="start-a-scan" method="post" class="scan-frm">
|
202 |
<?php
|
@@ -239,4 +239,4 @@ class Scan extends Behavior {
|
|
239 |
<?php
|
240 |
return ob_get_clean();
|
241 |
}
|
242 |
-
}
|
88 |
<?php
|
89 |
if ( $this->countAll == 0 ): ?>
|
90 |
<span class="def-tag tag-success">
|
91 |
+
<?php else:
|
92 |
?>
|
93 |
<span class="def-tag tag-error">
|
94 |
<?php endif;
|
195 |
ob_start();
|
196 |
?>
|
197 |
<div class="line">
|
198 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get
|
199 |
+
notified about anything suspicious.", "defender-security" ) ?>
|
200 |
</div>
|
201 |
<form id="start-a-scan" method="post" class="scan-frm">
|
202 |
<?php
|
239 |
<?php
|
240 |
return ob_get_clean();
|
241 |
}
|
242 |
+
}
|
app/module/scan/component/result-table.php
CHANGED
@@ -103,7 +103,7 @@ class Result_Table extends \WP_List_Table {
|
|
103 |
*/
|
104 |
function prepare_items() {
|
105 |
$model = Scan_Api::getLastScan();
|
106 |
-
$itemsPerPage =
|
107 |
$totalItems = $model->countAll( $this->type );
|
108 |
|
109 |
$this->set_pagination_args( array(
|
@@ -197,7 +197,7 @@ class Result_Table extends \WP_List_Table {
|
|
197 |
<select name="bulk" class="bulk-action">
|
198 |
<?php if ( $this->type != Result_Item::STATUS_IGNORED ): ?>
|
199 |
<option value="ignore"><?php _e( "Ignore", "defender-security" ) ?></option>
|
200 |
-
<!-- <option value="resolve">--><?php //_e( "Resolve", "defender-security" ) ?><!--</option>-->
|
201 |
<!-- <option value="delete">--><?php //_e( "Delete", "defender-security" ) ?><!--</option>-->
|
202 |
<?php endif; ?>
|
203 |
<?php if ( $this->type == Result_Item::STATUS_IGNORED ): ?>
|
103 |
*/
|
104 |
function prepare_items() {
|
105 |
$model = Scan_Api::getLastScan();
|
106 |
+
$itemsPerPage = 100;
|
107 |
$totalItems = $model->countAll( $this->type );
|
108 |
|
109 |
$this->set_pagination_args( array(
|
197 |
<select name="bulk" class="bulk-action">
|
198 |
<?php if ( $this->type != Result_Item::STATUS_IGNORED ): ?>
|
199 |
<option value="ignore"><?php _e( "Ignore", "defender-security" ) ?></option>
|
200 |
+
<!-- <option value="resolve">--><?php //_e( "Resolve", "defender-security" ) ?><!--</option>-->
|
201 |
<!-- <option value="delete">--><?php //_e( "Delete", "defender-security" ) ?><!--</option>-->
|
202 |
<?php endif; ?>
|
203 |
<?php if ( $this->type == Result_Item::STATUS_IGNORED ): ?>
|
app/module/scan/component/scan-api.php
CHANGED
@@ -432,6 +432,9 @@ class Scan_Api extends Component {
|
|
432 |
}
|
433 |
}
|
434 |
}
|
|
|
|
|
|
|
435 |
|
436 |
if ( $total > 0 ) {
|
437 |
return round( ( $currentIndex / $total ) * 100, 2 );
|
432 |
}
|
433 |
}
|
434 |
}
|
435 |
+
if ( php_sapi_name() == "cli" ) {
|
436 |
+
echo $total . PHP_EOL;
|
437 |
+
}
|
438 |
|
439 |
if ( $total > 0 ) {
|
440 |
return round( ( $currentIndex / $total ) * 100, 2 );
|
app/module/scan/controller/main.php
CHANGED
@@ -209,7 +209,7 @@ class Main extends \WP_Defender\Controller {
|
|
209 |
if ( $ids ) {
|
210 |
$this->submitStatsToDev();
|
211 |
wp_send_json_success( array(
|
212 |
-
'message' => _n( "The suspicious
|
213 |
"The suspicious files have been successfully deleted.",
|
214 |
count( $items ), "defender-security" )
|
215 |
) );
|
@@ -232,7 +232,7 @@ class Main extends \WP_Defender\Controller {
|
|
232 |
if ( $ids ) {
|
233 |
$this->submitStatsToDev();
|
234 |
wp_send_json_success( array(
|
235 |
-
'message' => _n( "The suspicious
|
236 |
"The suspicious files have been successfully resolved.",
|
237 |
count( $items ), "defender-security" )
|
238 |
) );
|
@@ -912,4 +912,4 @@ class Main extends \WP_Defender\Controller {
|
|
912 |
|
913 |
return $counts;
|
914 |
}
|
915 |
-
}
|
209 |
if ( $ids ) {
|
210 |
$this->submitStatsToDev();
|
211 |
wp_send_json_success( array(
|
212 |
+
'message' => _n( "The suspicious file has been successfully deleted.",
|
213 |
"The suspicious files have been successfully deleted.",
|
214 |
count( $items ), "defender-security" )
|
215 |
) );
|
232 |
if ( $ids ) {
|
233 |
$this->submitStatsToDev();
|
234 |
wp_send_json_success( array(
|
235 |
+
'message' => _n( "The suspicious file has been successfully resolved.",
|
236 |
"The suspicious files have been successfully resolved.",
|
237 |
count( $items ), "defender-security" )
|
238 |
) );
|
912 |
|
913 |
return $counts;
|
914 |
}
|
915 |
+
}
|
app/module/scan/js/script.js
CHANGED
@@ -14,6 +14,22 @@ jQuery(function ($) {
|
|
14 |
Defender.showNotification('error', data.data.message);
|
15 |
}
|
16 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
//processing scan
|
18 |
if ($('#scanning').size() > 0) {
|
19 |
$('body').addClass('wpmud');
|
@@ -121,6 +137,7 @@ jQuery(function ($) {
|
|
121 |
}
|
122 |
|
123 |
if (data.success == true) {
|
|
|
124 |
var parent = form.closest('.source-code');
|
125 |
parent.html(data.data.html);
|
126 |
|
14 |
Defender.showNotification('error', data.data.message);
|
15 |
}
|
16 |
});
|
17 |
+
var current_issue = null;
|
18 |
+
$('body').on('click', '#next_issue', function () {
|
19 |
+
var parent = $(this).parent().find('.inner-sourcecode').first();
|
20 |
+
if (current_issue === null) {
|
21 |
+
current_issue = parent.find('del').first();
|
22 |
+
} else {
|
23 |
+
current_issue = current_issue.next('del').first();
|
24 |
+
}
|
25 |
+
console.log(parent);
|
26 |
+
if (current_issue.size() > 0) {
|
27 |
+
var pos = current_issue.position();
|
28 |
+
console.log(current_issue.offset());
|
29 |
+
console.log(current_issue.position());
|
30 |
+
parent.scrollTop(pos.top);
|
31 |
+
}
|
32 |
+
})
|
33 |
//processing scan
|
34 |
if ($('#scanning').size() > 0) {
|
35 |
$('body').addClass('wpmud');
|
137 |
}
|
138 |
|
139 |
if (data.success == true) {
|
140 |
+
current_issue = null;
|
141 |
var parent = form.closest('.source-code');
|
142 |
parent.html(data.data.html);
|
143 |
|
app/module/scan/model/settings.php
CHANGED
@@ -128,8 +128,14 @@ Official WPMU DEV Superhero', "defender-security" );
|
|
128 |
if ( is_admin() || is_network_admin() && current_user_can( 'manage_options' ) ) {
|
129 |
$this->receipts[] = get_current_user_id();
|
130 |
//default is weekly
|
131 |
-
$this->day
|
132 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
}
|
134 |
|
135 |
parent::__construct( $id, $is_multi );
|
128 |
if ( is_admin() || is_network_admin() && current_user_can( 'manage_options' ) ) {
|
129 |
$this->receipts[] = get_current_user_id();
|
130 |
//default is weekly
|
131 |
+
$this->day = date( 'l' );
|
132 |
+
$hour = date( 'H', current_time( 'timestamp' ) );
|
133 |
+
if ( $hour == '00' ) {
|
134 |
+
$hour = 0;
|
135 |
+
} else {
|
136 |
+
$hour = ltrim( $hour, '0' );
|
137 |
+
}
|
138 |
+
$this->time = $hour . ':0';
|
139 |
}
|
140 |
|
141 |
parent::__construct( $id, $is_multi );
|
app/module/scan/view/automation-free.php
CHANGED
@@ -60,8 +60,8 @@
|
|
60 |
</form>
|
61 |
<div class="presale-text">
|
62 |
<div>
|
63 |
-
<?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins
|
64 |
</div>
|
65 |
</div>
|
66 |
</div>
|
67 |
-
</div>
|
60 |
</form>
|
61 |
<div class="presale-text">
|
62 |
<div>
|
63 |
+
<?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all FREE today!</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_reports_upsell_link') ) ?>
|
64 |
</div>
|
65 |
</div>
|
66 |
</div>
|
67 |
+
</div>
|
app/module/scan/view/new.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
<div class="box-content tc">
|
9 |
<img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/scan-man.svg" class="mline">
|
10 |
<div class="line max-600">
|
11 |
-
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get
|
12 |
</div>
|
13 |
<form id="start-a-scan" method="post" class="scan-frm">
|
14 |
<?php
|
8 |
<div class="box-content tc">
|
9 |
<img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/scan-man.svg" class="mline">
|
10 |
<div class="line max-600">
|
11 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious. Defender will keep an eye on your code without you having to worry.", "defender-security" ) ?>
|
12 |
</div>
|
13 |
<form id="start-a-scan" method="post" class="scan-frm">
|
14 |
<?php
|
app/module/scan/view/pro-feature.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
-
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue" aria-hidden="true"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
@@ -33,7 +33,7 @@
|
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
-
<p class="is-marginless"><?php _e( "As part
|
37 |
</div>
|
38 |
</div>
|
39 |
-
</dialog>
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
+
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro:", "defender-security" ) ?></p>
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue" aria-hidden="true"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
+
<p class="is-marginless"><?php _e( "As part of a WPMU DEV free trial.", "defender-security" ) ?></p>
|
37 |
</div>
|
38 |
</div>
|
39 |
+
</dialog>
|
app/module/scan/view/scanning.php
CHANGED
@@ -46,9 +46,9 @@
|
|
46 |
<div class="presale-text">
|
47 |
<div>
|
48 |
<?php printf( __( "Did you know the Pro version of Defender comes with advanced full code scanning and automated reporting?
|
49 |
-
Get enhanced security protection as part of a WPMU DEV membership including 100+ plugins
|
50 |
support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_modal_inprogress_upsell_link') ) ?>
|
51 |
</div>
|
52 |
</div>
|
53 |
<?php endif; ?>
|
54 |
-
</dialog>
|
46 |
<div class="presale-text">
|
47 |
<div>
|
48 |
<?php printf( __( "Did you know the Pro version of Defender comes with advanced full code scanning and automated reporting?
|
49 |
+
Get enhanced security protection as part of a WPMU DEV membership including 100+ plugins, 24/7
|
50 |
support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_modal_inprogress_upsell_link') ) ?>
|
51 |
</div>
|
52 |
</div>
|
53 |
<?php endif; ?>
|
54 |
+
</dialog>
|
app/module/scan/view/setting-free.php
CHANGED
@@ -56,7 +56,7 @@
|
|
56 |
<div class="clear"></div>
|
57 |
<div class="presale-text">
|
58 |
<div>
|
59 |
-
<?php printf( __( "
|
60 |
</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_upsell_link') ) ?>
|
61 |
</div>
|
62 |
</div>
|
@@ -148,4 +148,4 @@
|
|
148 |
<textarea rows="12" name="email_all_ok"><?php echo $setting->email_all_ok ?></textarea>
|
149 |
<button class="button"><?php _e( "Save", "defender-security" ) ?></button>
|
150 |
</form>
|
151 |
-
</dialog>
|
56 |
<div class="clear"></div>
|
57 |
<div class="presale-text">
|
58 |
<div>
|
59 |
+
<?php printf( __( "Defender scans through every line of code on your website, searching for anything suspicious. This feature is included when you join WPMU DEV, along with 100+ plugins, 24/7 support and lots of handy site management tools. – <a href=\"%s\" target='_blank' role='button'>Try it all FREE today!
|
60 |
</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_upsell_link') ) ?>
|
61 |
</div>
|
62 |
</div>
|
148 |
<textarea rows="12" name="email_all_ok"><?php echo $setting->email_all_ok ?></textarea>
|
149 |
<button class="button"><?php _e( "Save", "defender-security" ) ?></button>
|
150 |
</form>
|
151 |
+
</dialog>
|
app/view/pro-feature.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
-
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
@@ -33,7 +33,7 @@
|
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
-
<p class="is-marginless"><?php _e( "As part
|
37 |
</div>
|
38 |
</div>
|
39 |
-
</dialog>
|
1 |
<dialog class="dev-team" id="pro-feature" title="<?php _e( "Defender Pro Features", "defender-security" ) ?>">
|
2 |
<div class="wp-defender">
|
3 |
+
<p class=""><?php _e( "Here’s what you’ll get by upgrading to Defender Pro:", "defender-security" ) ?></p>
|
4 |
<div class="well well-blank with-cap">
|
5 |
<i class="def-icon icon-tick fill-blue"></i>
|
6 |
<strong><?php _e( "Automatic Full File Scans & Notifications", "defender-security" ) ?></strong>
|
33 |
</div>
|
34 |
<div class="tc">
|
35 |
<a class="button button-green mline" href="https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade"><?php _e( "Get Defender Pro for Free", "defender-security" ) ?></a>
|
36 |
+
<p class="is-marginless"><?php _e( "As part of a WPMU DEV free trial.", "defender-security" ) ?></p>
|
37 |
</div>
|
38 |
</div>
|
39 |
+
</dialog>
|
app/view/settings.php
CHANGED
@@ -235,7 +235,7 @@
|
|
235 |
<p>{USER_NAME}</p>
|
236 |
</div>
|
237 |
<div class="col span_8_of_12">
|
238 |
-
<?php esc_html_e( "We’ll grab the users first name, or display name
|
239 |
</div>
|
240 |
</div>
|
241 |
<div class="wd-clearfix"></div>
|
@@ -332,4 +332,4 @@
|
|
332 |
</div>
|
333 |
</div>
|
334 |
</div>
|
335 |
-
</div>
|
235 |
<p>{USER_NAME}</p>
|
236 |
</div>
|
237 |
<div class="col span_8_of_12">
|
238 |
+
<?php esc_html_e( "We’ll grab the users first name, or display name if first name isn’t available", "defender-security" ) ?>
|
239 |
</div>
|
240 |
</div>
|
241 |
<div class="wd-clearfix"></div>
|
332 |
</div>
|
333 |
</div>
|
334 |
</div>
|
335 |
+
</div>
|
assets/css/styles.css
CHANGED
@@ -1468,15 +1468,17 @@
|
|
1468 |
.wp-defender .report-status.with-corner.feature-disabled:after {
|
1469 |
border-right-color: #E6E6E6;
|
1470 |
border-top-color: #E6E6E6; }
|
1471 |
-
.wp-defender .report-status.feature-disabled
|
1472 |
-
|
1473 |
-
|
1474 |
-
cursor: pointer; }
|
1475 |
-
.wp-defender .report-status.feature-disabled .corner i:before {
|
1476 |
-
font-size: 16px;
|
1477 |
color: #666;
|
1478 |
-
|
1479 |
-
|
|
|
|
|
|
|
|
|
|
|
1480 |
.wp-defender .well {
|
1481 |
width: 100%;
|
1482 |
background: #F9F9F9;
|
@@ -2175,6 +2177,8 @@
|
|
2175 |
margin-right: 18px; }
|
2176 |
.wp-defender .wdf-scanning .inner-nav li a span.def-tag, .wp-defender .scan-dialog .inner-nav li a span.def-tag {
|
2177 |
color: white; }
|
|
|
|
|
2178 |
.wp-defender .auditing .row > .col-third {
|
2179 |
width: 25%; }
|
2180 |
.wp-defender .auditing .row > .col-two-third {
|
1468 |
.wp-defender .report-status.with-corner.feature-disabled:after {
|
1469 |
border-right-color: #E6E6E6;
|
1470 |
border-top-color: #E6E6E6; }
|
1471 |
+
.wp-defender .report-status.feature-disabled {
|
1472 |
+
left: 0; }
|
1473 |
+
.wp-defender .report-status.feature-disabled .corner {
|
|
|
|
|
|
|
1474 |
color: #666;
|
1475 |
+
font-size: 18px;
|
1476 |
+
cursor: pointer; }
|
1477 |
+
.wp-defender .report-status.feature-disabled .corner i:before {
|
1478 |
+
font-size: 16px;
|
1479 |
+
color: #666;
|
1480 |
+
width: 16px;
|
1481 |
+
height: 16px; }
|
1482 |
.wp-defender .well {
|
1483 |
width: 100%;
|
1484 |
background: #F9F9F9;
|
2177 |
margin-right: 18px; }
|
2178 |
.wp-defender .wdf-scanning .inner-nav li a span.def-tag, .wp-defender .scan-dialog .inner-nav li a span.def-tag {
|
2179 |
color: white; }
|
2180 |
+
.wp-defender .wdf-scanning .inner-sourcecode, .wp-defender .scan-dialog .inner-sourcecode {
|
2181 |
+
position: relative; }
|
2182 |
.wp-defender .auditing .row > .col-third {
|
2183 |
width: 25%; }
|
2184 |
.wp-defender .auditing .row > .col-two-third {
|
languages/wpdef-default.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the GNU General Public License (Version 2 - GPLv2).
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Defender Pro 1.9-beta5\n"
|
6 |
"Report-Msgid-Bugs-To: https://wpmudev.org\n"
|
7 |
-
"POT-Creation-Date: 2018-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -134,8 +134,8 @@ msgstr ""
|
|
134 |
msgid ""
|
135 |
" Automated reports are included in a WPMU DEV membership along with 100+ "
|
136 |
"plugins\n"
|
137 |
-
"
|
138 |
-
"
|
139 |
" it all absolutely FREE</a>"
|
140 |
msgstr ""
|
141 |
|
@@ -152,17 +152,17 @@ msgid "Lockout reports are active scheduled to send %s"
|
|
152 |
msgstr ""
|
153 |
|
154 |
#: app/behavior/report-free.php:129 app/behavior/report.php:224
|
155 |
-
#: app/behavior/utils.php:
|
156 |
msgid "daily"
|
157 |
msgstr ""
|
158 |
|
159 |
#: app/behavior/report-free.php:132 app/behavior/report.php:227
|
160 |
-
#: app/behavior/utils.php:
|
161 |
msgid "weekly"
|
162 |
msgstr ""
|
163 |
|
164 |
#: app/behavior/report-free.php:135 app/behavior/report.php:230
|
165 |
-
#: app/behavior/utils.php:
|
166 |
msgid "monthly"
|
167 |
msgstr ""
|
168 |
|
@@ -236,7 +236,7 @@ msgstr ""
|
|
236 |
msgid "Never"
|
237 |
msgstr ""
|
238 |
|
239 |
-
#: app/behavior/utils.php:
|
240 |
msgid "Please upgrade to 5.3 or later"
|
241 |
msgstr ""
|
242 |
|
@@ -407,7 +407,7 @@ msgid "Mask Login Area"
|
|
407 |
msgstr ""
|
408 |
|
409 |
#: app/module/advanced-tools/behavior/at-widget.php:79
|
410 |
-
msgid "Change the location of WordPress’s default
|
411 |
msgstr ""
|
412 |
|
413 |
#: app/module/advanced-tools/behavior/at-widget.php:89
|
@@ -421,26 +421,26 @@ msgstr ""
|
|
421 |
msgid "Masking is currently active at <strong>%s</strong>"
|
422 |
msgstr ""
|
423 |
|
424 |
-
#: app/module/advanced-tools/component/mask-api.php:
|
425 |
msgid "The URL is invalid"
|
426 |
msgstr ""
|
427 |
|
428 |
-
#: app/module/advanced-tools/component/mask-api.php:
|
429 |
-
#: app/module/advanced-tools/component/mask-api.php:
|
430 |
msgid ""
|
431 |
"A page already exists at this URL, please pick a unique page for your new "
|
432 |
"login area."
|
433 |
msgstr ""
|
434 |
|
435 |
#: app/module/advanced-tools/controller/main.php:60
|
436 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
437 |
msgid ""
|
438 |
"We’ve detected a conflict with Jetpack’s Wordpress.com Log In feature. "
|
439 |
"Please disable it and return to this page to continue setup."
|
440 |
msgstr ""
|
441 |
|
442 |
#: app/module/advanced-tools/controller/main.php:63
|
443 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
444 |
msgid ""
|
445 |
"We’ve detected a conflict with Theme my login. Please disable it and return "
|
446 |
"to this page to continue setup."
|
@@ -486,9 +486,9 @@ msgid "Edit Email"
|
|
486 |
msgstr ""
|
487 |
|
488 |
#: app/module/advanced-tools/controller/main.php:554
|
489 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
490 |
#: app/module/audit/controller/main.php:197
|
491 |
-
#: app/module/ip-lockout/controller/main.php:
|
492 |
#: app/module/scan/controller/main.php:306
|
493 |
msgid "Your settings have been updated."
|
494 |
msgstr ""
|
@@ -510,11 +510,11 @@ msgstr ""
|
|
510 |
msgid "Test email failed."
|
511 |
msgstr ""
|
512 |
|
513 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
514 |
msgid "This feature is disabled"
|
515 |
msgstr ""
|
516 |
|
517 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
518 |
msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
|
519 |
msgstr ""
|
520 |
|
@@ -544,7 +544,7 @@ msgid "Available variables"
|
|
544 |
msgstr ""
|
545 |
|
546 |
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:39
|
547 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
548 |
#: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
|
549 |
#: app/module/scan/view/setting.php:158
|
550 |
msgid "Cancel"
|
@@ -579,48 +579,48 @@ msgstr ""
|
|
579 |
msgid "Security"
|
580 |
msgstr ""
|
581 |
|
582 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
583 |
#: app/module/ip-lockout/view/detect-404/disabled.php:16
|
584 |
#: app/module/ip-lockout/view/login-lockouts/disabled.php:18
|
585 |
msgid "Enable"
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
589 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
590 |
msgid "Use the Google Authenticator app to sign in with a separate passcode."
|
591 |
msgstr ""
|
592 |
|
593 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
594 |
msgid "1. Install the Verification app"
|
595 |
msgstr ""
|
596 |
|
597 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
598 |
msgid ""
|
599 |
"Download and install the Google Authenticator app on your device using the "
|
600 |
"links below."
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
604 |
msgid "2. Scan the barcode"
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
608 |
msgid ""
|
609 |
"Open the Google Authenticator app you just downloaded, tap the “+” symbol "
|
610 |
"and then use your phone’s camera to scan the barcode below."
|
611 |
msgstr ""
|
612 |
|
613 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
614 |
msgid "3. Enter passcode"
|
615 |
msgstr ""
|
616 |
|
617 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
618 |
msgid ""
|
619 |
"Enter the 6 digit passcode that is shown on your device into the input "
|
620 |
"field below and hit “Verify”."
|
621 |
msgstr ""
|
622 |
|
623 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
624 |
msgid "Verify"
|
625 |
msgstr ""
|
626 |
|
@@ -853,13 +853,14 @@ msgstr ""
|
|
853 |
|
854 |
#: app/module/advanced-tools/view/mask-login/disabled.php:10
|
855 |
msgid ""
|
856 |
-
"Change the location of WordPress’s default
|
857 |
-
"
|
858 |
-
"users."
|
859 |
msgstr ""
|
860 |
|
861 |
#: app/module/advanced-tools/view/mask-login/enabled.php:9
|
862 |
-
msgid "
|
|
|
|
|
863 |
msgstr ""
|
864 |
|
865 |
#: app/module/advanced-tools/view/mask-login/enabled.php:19
|
@@ -874,8 +875,8 @@ msgstr ""
|
|
874 |
|
875 |
#: app/module/advanced-tools/view/mask-login/enabled.php:35
|
876 |
msgid ""
|
877 |
-
"Choose the new URL slug where users of your website will now navigate to
|
878 |
-
"log in
|
879 |
msgstr ""
|
880 |
|
881 |
#: app/module/advanced-tools/view/mask-login/enabled.php:39
|
@@ -899,7 +900,7 @@ msgstr ""
|
|
899 |
#: app/module/advanced-tools/view/mask-login/enabled.php:49
|
900 |
msgid ""
|
901 |
"With this feature you can send visitors and bots who try to visit the "
|
902 |
-
"default
|
903 |
msgstr ""
|
904 |
|
905 |
#: app/module/advanced-tools/view/mask-login/enabled.php:60
|
@@ -931,75 +932,74 @@ msgstr ""
|
|
931 |
#: app/module/audit/behavior/audit-free.php:30
|
932 |
msgid ""
|
933 |
"Audit logging is a pro feature included in a WPMU DEV membership along with "
|
934 |
-
"100+ plugins
|
935 |
-
"
|
936 |
-
"
|
937 |
-
"FREE</a>"
|
938 |
msgstr ""
|
939 |
|
940 |
#: app/module/audit/behavior/audit.php:31
|
941 |
msgid "Please hold on, Defender will update Audit information soon..."
|
942 |
msgstr ""
|
943 |
|
944 |
-
#: app/module/audit/component/audit-api.php:
|
945 |
-
#: app/module/audit/component/audit-api.php:
|
946 |
msgid ""
|
947 |
"Whoops, Defender had trouble loading up your event log. You can try a <a "
|
948 |
"href='%s'class=''>quick refresh</a> of this page or check back again "
|
949 |
"later."
|
950 |
msgstr ""
|
951 |
|
952 |
-
#: app/module/audit/component/audit-api.php:
|
953 |
msgid "trashed"
|
954 |
msgstr ""
|
955 |
|
956 |
-
#: app/module/audit/component/audit-api.php:
|
957 |
msgid "updated"
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: app/module/audit/component/audit-api.php:
|
961 |
msgid "deleted"
|
962 |
msgstr ""
|
963 |
|
964 |
-
#: app/module/audit/component/audit-api.php:
|
965 |
msgid "created"
|
966 |
msgstr ""
|
967 |
|
968 |
-
#: app/module/audit/component/audit-api.php:
|
969 |
msgid "restored"
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: app/module/audit/component/audit-api.php:
|
973 |
#: app/module/ip-lockout/component/login-protection-api.php:248
|
974 |
msgid "year"
|
975 |
msgstr ""
|
976 |
|
977 |
-
#: app/module/audit/component/audit-api.php:
|
978 |
#: app/module/ip-lockout/component/login-protection-api.php:249
|
979 |
msgid "month"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: app/module/audit/component/audit-api.php:
|
983 |
#: app/module/ip-lockout/component/login-protection-api.php:250
|
984 |
msgid "week"
|
985 |
msgstr ""
|
986 |
|
987 |
-
#: app/module/audit/component/audit-api.php:
|
988 |
#: app/module/ip-lockout/component/login-protection-api.php:251
|
989 |
msgid "day"
|
990 |
msgstr ""
|
991 |
|
992 |
-
#: app/module/audit/component/audit-api.php:
|
993 |
#: app/module/ip-lockout/component/login-protection-api.php:252
|
994 |
msgid "hour"
|
995 |
msgstr ""
|
996 |
|
997 |
-
#: app/module/audit/component/audit-api.php:
|
998 |
#: app/module/ip-lockout/component/login-protection-api.php:253
|
999 |
msgid "minute"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: app/module/audit/component/audit-api.php:
|
1003 |
#: app/module/ip-lockout/component/login-protection-api.php:254
|
1004 |
msgid "second"
|
1005 |
msgstr ""
|
@@ -1492,7 +1492,7 @@ msgstr ""
|
|
1492 |
#: app/module/scan/view/layouts/layout.php:132
|
1493 |
#: app/module/scan/view/layouts/layout.php:149
|
1494 |
#: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
|
1495 |
-
#: app/view/settings.php:6 free/main-activator.php:
|
1496 |
msgid "Settings"
|
1497 |
msgstr ""
|
1498 |
|
@@ -1759,8 +1759,8 @@ msgstr ""
|
|
1759 |
msgid "<a href=\"%s\">Configure reporting preferences</a>"
|
1760 |
msgstr ""
|
1761 |
|
1762 |
-
#: app/module/audit/view/free.php:9 free/main-activator.php:
|
1763 |
-
#: free/main-activator.php:
|
1764 |
msgid "Upgrade"
|
1765 |
msgstr ""
|
1766 |
|
@@ -1840,7 +1840,7 @@ msgstr ""
|
|
1840 |
#: app/module/audit/view/pro-feature.php:3
|
1841 |
#: app/module/ip-lockout/view/pro-feature.php:3
|
1842 |
#: app/module/scan/view/pro-feature.php:3 app/view/pro-feature.php:3
|
1843 |
-
msgid "Here’s what you’ll get by upgrading to Defender Pro
|
1844 |
msgstr ""
|
1845 |
|
1846 |
#: app/module/audit/view/pro-feature.php:6
|
@@ -1906,7 +1906,7 @@ msgstr ""
|
|
1906 |
#: app/module/audit/view/pro-feature.php:36
|
1907 |
#: app/module/ip-lockout/view/pro-feature.php:36
|
1908 |
#: app/module/scan/view/pro-feature.php:36 app/view/pro-feature.php:36
|
1909 |
-
msgid "As part
|
1910 |
msgstr ""
|
1911 |
|
1912 |
#: app/module/audit/view/report.php:3
|
@@ -2022,7 +2022,7 @@ msgid ""
|
|
2022 |
"access."
|
2023 |
msgstr ""
|
2024 |
|
2025 |
-
#: app/module/audit/view/table.php:
|
2026 |
msgid "There have been no events logged in the selected time period."
|
2027 |
msgstr ""
|
2028 |
|
@@ -2113,10 +2113,10 @@ msgstr ""
|
|
2113 |
#: app/module/hardener/component/servers/apache-service.php:115
|
2114 |
#: app/module/hardener/component/servers/apache-service.php:169
|
2115 |
#: app/module/hardener/component/servers/apache-service.php:173
|
2116 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2117 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2118 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2119 |
-
msgid "The file %s is not
|
2120 |
msgstr ""
|
2121 |
|
2122 |
#: app/module/hardener/component/db-prefix-service.php:37
|
@@ -2271,7 +2271,7 @@ msgstr ""
|
|
2271 |
|
2272 |
#: app/module/hardener/rule.php:111
|
2273 |
#: app/module/scan/behavior/core-result.php:189
|
2274 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
2275 |
#: app/module/scan/behavior/pro/vuln-result.php:156
|
2276 |
#: app/module/scan/component/result-table.php:199
|
2277 |
msgid "Ignore"
|
@@ -2797,8 +2797,8 @@ msgid "Lockout notifications are disabled"
|
|
2797 |
msgstr ""
|
2798 |
|
2799 |
#: app/module/ip-lockout/component/login-protection-api.php:61
|
2800 |
-
#: app/module/ip-lockout/controller/main.php:
|
2801 |
-
#: app/module/ip-lockout/controller/main.php:
|
2802 |
msgid ""
|
2803 |
"You have been locked out by the administrator for attempting to login with "
|
2804 |
"a banned username"
|
@@ -2902,7 +2902,8 @@ msgid "404 lockout"
|
|
2902 |
msgstr ""
|
2903 |
|
2904 |
#: app/module/ip-lockout/component/logs-table.php:181
|
2905 |
-
|
|
|
2906 |
msgstr ""
|
2907 |
|
2908 |
#: app/module/ip-lockout/component/logs-table.php:184
|
@@ -2963,78 +2964,78 @@ msgstr ""
|
|
2963 |
msgid "Your logs have been successfully deleted."
|
2964 |
msgstr ""
|
2965 |
|
2966 |
-
#: app/module/ip-lockout/controller/main.php:
|
2967 |
msgid ""
|
2968 |
"IP %s has been added to your blacklist. You can control your blacklist in "
|
2969 |
"<a href=\"%s\">IP Lockouts.</a>"
|
2970 |
msgstr ""
|
2971 |
|
2972 |
-
#: app/module/ip-lockout/controller/main.php:
|
2973 |
msgid "No record found"
|
2974 |
msgstr ""
|
2975 |
|
2976 |
-
#: app/module/ip-lockout/controller/main.php:
|
2977 |
msgid "Demo"
|
2978 |
msgstr ""
|
2979 |
|
2980 |
-
#: app/module/ip-lockout/controller/main.php:
|
2981 |
msgid "404 lockout alert for %s"
|
2982 |
msgstr ""
|
2983 |
|
2984 |
-
#: app/module/ip-lockout/controller/main.php:
|
2985 |
msgid "Login lockout alert for %s"
|
2986 |
msgstr ""
|
2987 |
|
2988 |
-
#: app/module/ip-lockout/controller/main.php:
|
2989 |
msgid "Failed login attempt with username %s"
|
2990 |
msgstr ""
|
2991 |
|
2992 |
-
#: app/module/ip-lockout/controller/main.php:
|
2993 |
-
#: app/module/ip-lockout/controller/main.php:
|
2994 |
msgid "%d login attempts remaining"
|
2995 |
msgstr ""
|
2996 |
|
2997 |
-
#: app/module/ip-lockout/controller/main.php:
|
2998 |
msgid ""
|
2999 |
"Your settings have been updated, however some IPs were removed because "
|
3000 |
"invalid format, or you blacklist yourself"
|
3001 |
msgstr ""
|
3002 |
|
3003 |
-
#: app/module/ip-lockout/controller/main.php:
|
3004 |
msgid "Login Protection has been activated."
|
3005 |
msgstr ""
|
3006 |
|
3007 |
-
#: app/module/ip-lockout/controller/main.php:
|
3008 |
msgid "Login Protection has been deactivated."
|
3009 |
msgstr ""
|
3010 |
|
3011 |
-
#: app/module/ip-lockout/controller/main.php:
|
3012 |
msgid "404 Detection has been activated."
|
3013 |
msgstr ""
|
3014 |
|
3015 |
-
#: app/module/ip-lockout/controller/main.php:
|
3016 |
msgid "404 Detection has been deactivated."
|
3017 |
msgstr ""
|
3018 |
|
3019 |
-
#: app/module/ip-lockout/controller/main.php:
|
3020 |
#: app/view/activator-free.php:33 app/view/activator.php:49
|
3021 |
msgid "IP Lockouts"
|
3022 |
msgstr ""
|
3023 |
|
3024 |
-
#: app/module/ip-lockout/controller/main.php:
|
3025 |
-
#: app/module/ip-lockout/controller/main.php:
|
3026 |
msgid "Your file is invalid!"
|
3027 |
msgstr ""
|
3028 |
|
3029 |
-
#: app/module/ip-lockout/controller/main.php:
|
3030 |
msgid "Your file content is invalid!"
|
3031 |
msgstr ""
|
3032 |
|
3033 |
-
#: app/module/ip-lockout/controller/main.php:
|
3034 |
msgid "Your whitelist/blacklist has been successfully imported."
|
3035 |
msgstr ""
|
3036 |
|
3037 |
-
#: app/module/ip-lockout/controller/main.php:
|
3038 |
msgid "Thanks for your patience. All set."
|
3039 |
msgstr ""
|
3040 |
|
@@ -3066,7 +3067,7 @@ msgstr ""
|
|
3066 |
#: app/module/ip-lockout/view/blacklist/enabled.php:17
|
3067 |
msgid ""
|
3068 |
"Any IP addresses you list here will be completely blocked from accessing "
|
3069 |
-
"
|
3070 |
msgstr ""
|
3071 |
|
3072 |
#: app/module/ip-lockout/view/blacklist/enabled.php:24
|
@@ -3440,10 +3441,6 @@ msgstr ""
|
|
3440 |
msgid "Oldest"
|
3441 |
msgstr ""
|
3442 |
|
3443 |
-
#: app/module/ip-lockout/view/logging/enabled.php:10
|
3444 |
-
msgid "IP Address"
|
3445 |
-
msgstr ""
|
3446 |
-
|
3447 |
#: app/module/ip-lockout/view/login-lockouts/disabled.php:10
|
3448 |
msgid ""
|
3449 |
"Watch and protect your login area for attackers trying to randomly guess "
|
@@ -3651,9 +3648,9 @@ msgstr ""
|
|
3651 |
#: app/module/scan/view/automation-free.php:63
|
3652 |
msgid ""
|
3653 |
"Schedule automated file scanning and email reporting for all your websites. "
|
3654 |
-
"This feature is included in a WPMU DEV membership along with 100+ plugins
|
3655 |
-
"
|
3656 |
-
"
|
3657 |
msgstr ""
|
3658 |
|
3659 |
#: app/module/ip-lockout/view/settings.php:10
|
@@ -3762,7 +3759,7 @@ msgid "Date Added"
|
|
3762 |
msgstr ""
|
3763 |
|
3764 |
#: app/module/scan/behavior/core-result.php:197
|
3765 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3766 |
msgid "Delete"
|
3767 |
msgstr ""
|
3768 |
|
@@ -3773,12 +3770,12 @@ msgid ""
|
|
3773 |
msgstr ""
|
3774 |
|
3775 |
#: app/module/scan/behavior/core-result.php:202
|
3776 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3777 |
msgid "Yes"
|
3778 |
msgstr ""
|
3779 |
|
3780 |
#: app/module/scan/behavior/core-result.php:205
|
3781 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3782 |
msgid "No"
|
3783 |
msgstr ""
|
3784 |
|
@@ -3798,7 +3795,7 @@ msgstr ""
|
|
3798 |
#: app/module/scan/behavior/core-result.php:281
|
3799 |
#: app/module/scan/behavior/core-result.php:303
|
3800 |
#: app/module/scan/behavior/core-result.php:325
|
3801 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3802 |
msgid "Pulling source file..."
|
3803 |
msgstr ""
|
3804 |
|
@@ -3830,19 +3827,19 @@ msgid ""
|
|
3830 |
"recommend backing up your website."
|
3831 |
msgstr ""
|
3832 |
|
3833 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3834 |
msgid ""
|
3835 |
"This will permanent delete the whole plugin containing this file, do you "
|
3836 |
"want to do this?"
|
3837 |
msgstr ""
|
3838 |
|
3839 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3840 |
msgid ""
|
3841 |
"This will permanent delete the whole theme containing this file, do you "
|
3842 |
"want to do this?"
|
3843 |
msgstr ""
|
3844 |
|
3845 |
-
#: app/module/scan/behavior/pro/content-result.php:
|
3846 |
msgid "This will permanent delete this file, do you want to do this?"
|
3847 |
msgstr ""
|
3848 |
|
@@ -3946,8 +3943,8 @@ msgstr ""
|
|
3946 |
#: app/module/scan/behavior/scan.php:198
|
3947 |
msgid ""
|
3948 |
"Scan your website for file changes, vulnerabilities and injected code and "
|
3949 |
-
"get
|
3950 |
-
"
|
3951 |
msgstr ""
|
3952 |
|
3953 |
#: app/module/scan/behavior/scan.php:218 app/module/scan/view/scanning.php:24
|
@@ -4037,7 +4034,7 @@ msgstr[0] ""
|
|
4037 |
msgstr[1] ""
|
4038 |
|
4039 |
#: app/module/scan/controller/main.php:212
|
4040 |
-
msgid "The suspicious
|
4041 |
msgid_plural "The suspicious files have been successfully deleted."
|
4042 |
msgstr[0] ""
|
4043 |
msgstr[1] ""
|
@@ -4047,7 +4044,7 @@ msgid "No item has been deleted"
|
|
4047 |
msgstr ""
|
4048 |
|
4049 |
#: app/module/scan/controller/main.php:235
|
4050 |
-
msgid "The suspicious
|
4051 |
msgid_plural "The suspicious files have been successfully resolved."
|
4052 |
msgstr[0] ""
|
4053 |
msgstr[1] ""
|
@@ -4200,8 +4197,8 @@ msgstr ""
|
|
4200 |
#: app/module/scan/view/new.php:11
|
4201 |
msgid ""
|
4202 |
"Scan your website for file changes, vulnerabilities and injected code and "
|
4203 |
-
"get
|
4204 |
-
"
|
4205 |
msgstr ""
|
4206 |
|
4207 |
#: app/module/scan/view/scanning.php:7
|
@@ -4213,7 +4210,7 @@ msgid ""
|
|
4213 |
"Did you know the Pro version of Defender comes with advanced full code "
|
4214 |
"scanning and automated reporting?\n"
|
4215 |
" Get enhanced security protection as part of a WPMU DEV "
|
4216 |
-
"membership including 100+ plugins
|
4217 |
" support and lots of handy site management tools – <a "
|
4218 |
"target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>"
|
4219 |
msgstr ""
|
@@ -4247,11 +4244,10 @@ msgstr ""
|
|
4247 |
|
4248 |
#: app/module/scan/view/setting-free.php:59
|
4249 |
msgid ""
|
4250 |
-
"
|
4251 |
"anything suspicious. This feature is included when you join WPMU DEV, along "
|
4252 |
-
"with 100+ plugins
|
4253 |
-
"
|
4254 |
-
"all FREE today!\n"
|
4255 |
" </a>"
|
4256 |
msgstr ""
|
4257 |
|
@@ -4544,7 +4540,7 @@ msgstr ""
|
|
4544 |
|
4545 |
#: app/view/settings.php:238
|
4546 |
msgid ""
|
4547 |
-
"We’ll grab the users first name, or display name
|
4548 |
"available"
|
4549 |
msgstr ""
|
4550 |
|
@@ -4572,11 +4568,11 @@ msgid ""
|
|
4572 |
"this email."
|
4573 |
msgstr ""
|
4574 |
|
4575 |
-
#: free/main-activator.php:
|
4576 |
msgid "Get Members!"
|
4577 |
msgstr ""
|
4578 |
|
4579 |
-
#: free/main-activator.php:
|
4580 |
msgid ""
|
4581 |
"We're happy that you've chosen to install Defender! Are you interested in "
|
4582 |
"how to make the most of this plugin? How would you like a quick 5 day email "
|
@@ -4584,18 +4580,18 @@ msgid ""
|
|
4584 |
"bulletproof? Only the info you want, no subscription!"
|
4585 |
msgstr ""
|
4586 |
|
4587 |
-
#: free/main-activator.php:
|
4588 |
msgid ""
|
4589 |
"%s, you now have access to Defender's pro features but you still have the "
|
4590 |
"free version installed. Let's upgrade Defender and unlock all those juicy "
|
4591 |
"features! %s"
|
4592 |
msgstr ""
|
4593 |
|
4594 |
-
#: free/main-activator.php:
|
4595 |
msgid "<br/>Something went wrong. Please try again later!"
|
4596 |
msgstr ""
|
4597 |
|
4598 |
-
#: free/main-activator.php:
|
4599 |
msgid "Docs"
|
4600 |
msgstr ""
|
4601 |
|
@@ -4635,7 +4631,7 @@ msgstr ""
|
|
4635 |
msgid "Rate %s"
|
4636 |
msgstr ""
|
4637 |
|
4638 |
-
#: main-activator.php:
|
4639 |
msgid ""
|
4640 |
"We noticed you have both the free and pro versions of Defender installed, "
|
4641 |
"so we've automatically deactivated the free version for you."
|
2 |
# This file is distributed under the GNU General Public License (Version 2 - GPLv2).
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Defender Pro 1.9.1-beta5\n"
|
6 |
"Report-Msgid-Bugs-To: https://wpmudev.org\n"
|
7 |
+
"POT-Creation-Date: 2018-07-03 16:10:03+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
134 |
msgid ""
|
135 |
" Automated reports are included in a WPMU DEV membership along with 100+ "
|
136 |
"plugins\n"
|
137 |
+
" , 24/7 support and lots of handy site management "
|
138 |
+
"tools – <a target='_blank' href=\"%s\">Try\n"
|
139 |
" it all absolutely FREE</a>"
|
140 |
msgstr ""
|
141 |
|
152 |
msgstr ""
|
153 |
|
154 |
#: app/behavior/report-free.php:129 app/behavior/report.php:224
|
155 |
+
#: app/behavior/utils.php:917 free/utils.php:709
|
156 |
msgid "daily"
|
157 |
msgstr ""
|
158 |
|
159 |
#: app/behavior/report-free.php:132 app/behavior/report.php:227
|
160 |
+
#: app/behavior/utils.php:920 free/utils.php:712
|
161 |
msgid "weekly"
|
162 |
msgstr ""
|
163 |
|
164 |
#: app/behavior/report-free.php:135 app/behavior/report.php:230
|
165 |
+
#: app/behavior/utils.php:923 free/utils.php:715
|
166 |
msgid "monthly"
|
167 |
msgstr ""
|
168 |
|
236 |
msgid "Never"
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: app/behavior/utils.php:900 free/utils.php:692
|
240 |
msgid "Please upgrade to 5.3 or later"
|
241 |
msgstr ""
|
242 |
|
407 |
msgstr ""
|
408 |
|
409 |
#: app/module/advanced-tools/behavior/at-widget.php:79
|
410 |
+
msgid "Change the location of WordPress’s default login area."
|
411 |
msgstr ""
|
412 |
|
413 |
#: app/module/advanced-tools/behavior/at-widget.php:89
|
421 |
msgid "Masking is currently active at <strong>%s</strong>"
|
422 |
msgstr ""
|
423 |
|
424 |
+
#: app/module/advanced-tools/component/mask-api.php:141
|
425 |
msgid "The URL is invalid"
|
426 |
msgstr ""
|
427 |
|
428 |
+
#: app/module/advanced-tools/component/mask-api.php:146
|
429 |
+
#: app/module/advanced-tools/component/mask-api.php:157
|
430 |
msgid ""
|
431 |
"A page already exists at this URL, please pick a unique page for your new "
|
432 |
"login area."
|
433 |
msgstr ""
|
434 |
|
435 |
#: app/module/advanced-tools/controller/main.php:60
|
436 |
+
#: app/module/advanced-tools/controller/mask-login.php:49
|
437 |
msgid ""
|
438 |
"We’ve detected a conflict with Jetpack’s Wordpress.com Log In feature. "
|
439 |
"Please disable it and return to this page to continue setup."
|
440 |
msgstr ""
|
441 |
|
442 |
#: app/module/advanced-tools/controller/main.php:63
|
443 |
+
#: app/module/advanced-tools/controller/mask-login.php:52
|
444 |
msgid ""
|
445 |
"We’ve detected a conflict with Theme my login. Please disable it and return "
|
446 |
"to this page to continue setup."
|
486 |
msgstr ""
|
487 |
|
488 |
#: app/module/advanced-tools/controller/main.php:554
|
489 |
+
#: app/module/advanced-tools/controller/mask-login.php:251
|
490 |
#: app/module/audit/controller/main.php:197
|
491 |
+
#: app/module/ip-lockout/controller/main.php:739
|
492 |
#: app/module/scan/controller/main.php:306
|
493 |
msgid "Your settings have been updated."
|
494 |
msgstr ""
|
510 |
msgid "Test email failed."
|
511 |
msgstr ""
|
512 |
|
513 |
+
#: app/module/advanced-tools/controller/mask-login.php:197
|
514 |
msgid "This feature is disabled"
|
515 |
msgstr ""
|
516 |
|
517 |
+
#: app/module/advanced-tools/controller/mask-login.php:243
|
518 |
msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
|
519 |
msgstr ""
|
520 |
|
544 |
msgstr ""
|
545 |
|
546 |
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:39
|
547 |
+
#: app/module/advanced-tools/view/login/disabled.php:38
|
548 |
#: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
|
549 |
#: app/module/scan/view/setting.php:158
|
550 |
msgid "Cancel"
|
579 |
msgid "Security"
|
580 |
msgstr ""
|
581 |
|
582 |
+
#: app/module/advanced-tools/view/login/disabled.php:29
|
583 |
#: app/module/ip-lockout/view/detect-404/disabled.php:16
|
584 |
#: app/module/ip-lockout/view/login-lockouts/disabled.php:18
|
585 |
msgid "Enable"
|
586 |
msgstr ""
|
587 |
|
588 |
+
#: app/module/advanced-tools/view/login/disabled.php:33
|
589 |
+
#: app/module/advanced-tools/view/login/disabled.php:39
|
590 |
msgid "Use the Google Authenticator app to sign in with a separate passcode."
|
591 |
msgstr ""
|
592 |
|
593 |
+
#: app/module/advanced-tools/view/login/disabled.php:42
|
594 |
msgid "1. Install the Verification app"
|
595 |
msgstr ""
|
596 |
|
597 |
+
#: app/module/advanced-tools/view/login/disabled.php:45
|
598 |
msgid ""
|
599 |
"Download and install the Google Authenticator app on your device using the "
|
600 |
"links below."
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: app/module/advanced-tools/view/login/disabled.php:54
|
604 |
msgid "2. Scan the barcode"
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: app/module/advanced-tools/view/login/disabled.php:55
|
608 |
msgid ""
|
609 |
"Open the Google Authenticator app you just downloaded, tap the “+” symbol "
|
610 |
"and then use your phone’s camera to scan the barcode below."
|
611 |
msgstr ""
|
612 |
|
613 |
+
#: app/module/advanced-tools/view/login/disabled.php:59
|
614 |
msgid "3. Enter passcode"
|
615 |
msgstr ""
|
616 |
|
617 |
+
#: app/module/advanced-tools/view/login/disabled.php:61
|
618 |
msgid ""
|
619 |
"Enter the 6 digit passcode that is shown on your device into the input "
|
620 |
"field below and hit “Verify”."
|
621 |
msgstr ""
|
622 |
|
623 |
+
#: app/module/advanced-tools/view/login/disabled.php:67
|
624 |
msgid "Verify"
|
625 |
msgstr ""
|
626 |
|
853 |
|
854 |
#: app/module/advanced-tools/view/mask-login/disabled.php:10
|
855 |
msgid ""
|
856 |
+
"Change the location of WordPress’s default login area, making it harder for "
|
857 |
+
"automated bots to find and also more convenient for your users."
|
|
|
858 |
msgstr ""
|
859 |
|
860 |
#: app/module/advanced-tools/view/mask-login/enabled.php:9
|
861 |
+
msgid ""
|
862 |
+
"Change your default WordPress login URL to hide your login area from "
|
863 |
+
"hackers and bots."
|
864 |
msgstr ""
|
865 |
|
866 |
#: app/module/advanced-tools/view/mask-login/enabled.php:19
|
875 |
|
876 |
#: app/module/advanced-tools/view/mask-login/enabled.php:35
|
877 |
msgid ""
|
878 |
+
"Choose the new URL slug where users of your website will now navigate to "
|
879 |
+
"log in or register."
|
880 |
msgstr ""
|
881 |
|
882 |
#: app/module/advanced-tools/view/mask-login/enabled.php:39
|
900 |
#: app/module/advanced-tools/view/mask-login/enabled.php:49
|
901 |
msgid ""
|
902 |
"With this feature you can send visitors and bots who try to visit the "
|
903 |
+
"default WordPress login URLs to a separate URL to avoid 404s."
|
904 |
msgstr ""
|
905 |
|
906 |
#: app/module/advanced-tools/view/mask-login/enabled.php:60
|
932 |
#: app/module/audit/behavior/audit-free.php:30
|
933 |
msgid ""
|
934 |
"Audit logging is a pro feature included in a WPMU DEV membership along with "
|
935 |
+
"100+ plugins,\n"
|
936 |
+
" 24/7 support and lots of handy site management "
|
937 |
+
"tools – <a target='_blank' href=\"%s\">Try it all absolutely FREE</a>"
|
|
|
938 |
msgstr ""
|
939 |
|
940 |
#: app/module/audit/behavior/audit.php:31
|
941 |
msgid "Please hold on, Defender will update Audit information soon..."
|
942 |
msgstr ""
|
943 |
|
944 |
+
#: app/module/audit/component/audit-api.php:66
|
945 |
+
#: app/module/audit/component/audit-api.php:133
|
946 |
msgid ""
|
947 |
"Whoops, Defender had trouble loading up your event log. You can try a <a "
|
948 |
"href='%s'class=''>quick refresh</a> of this page or check back again "
|
949 |
"later."
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: app/module/audit/component/audit-api.php:158
|
953 |
msgid "trashed"
|
954 |
msgstr ""
|
955 |
|
956 |
+
#: app/module/audit/component/audit-api.php:159
|
957 |
msgid "updated"
|
958 |
msgstr ""
|
959 |
|
960 |
+
#: app/module/audit/component/audit-api.php:160
|
961 |
msgid "deleted"
|
962 |
msgstr ""
|
963 |
|
964 |
+
#: app/module/audit/component/audit-api.php:161
|
965 |
msgid "created"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: app/module/audit/component/audit-api.php:162
|
969 |
msgid "restored"
|
970 |
msgstr ""
|
971 |
|
972 |
+
#: app/module/audit/component/audit-api.php:205
|
973 |
#: app/module/ip-lockout/component/login-protection-api.php:248
|
974 |
msgid "year"
|
975 |
msgstr ""
|
976 |
|
977 |
+
#: app/module/audit/component/audit-api.php:206
|
978 |
#: app/module/ip-lockout/component/login-protection-api.php:249
|
979 |
msgid "month"
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: app/module/audit/component/audit-api.php:207
|
983 |
#: app/module/ip-lockout/component/login-protection-api.php:250
|
984 |
msgid "week"
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: app/module/audit/component/audit-api.php:208
|
988 |
#: app/module/ip-lockout/component/login-protection-api.php:251
|
989 |
msgid "day"
|
990 |
msgstr ""
|
991 |
|
992 |
+
#: app/module/audit/component/audit-api.php:209
|
993 |
#: app/module/ip-lockout/component/login-protection-api.php:252
|
994 |
msgid "hour"
|
995 |
msgstr ""
|
996 |
|
997 |
+
#: app/module/audit/component/audit-api.php:210
|
998 |
#: app/module/ip-lockout/component/login-protection-api.php:253
|
999 |
msgid "minute"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
+
#: app/module/audit/component/audit-api.php:211
|
1003 |
#: app/module/ip-lockout/component/login-protection-api.php:254
|
1004 |
msgid "second"
|
1005 |
msgstr ""
|
1492 |
#: app/module/scan/view/layouts/layout.php:132
|
1493 |
#: app/module/scan/view/layouts/layout.php:149
|
1494 |
#: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
|
1495 |
+
#: app/view/settings.php:6 free/main-activator.php:161 main-activator.php:102
|
1496 |
msgid "Settings"
|
1497 |
msgstr ""
|
1498 |
|
1759 |
msgid "<a href=\"%s\">Configure reporting preferences</a>"
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: app/module/audit/view/free.php:9 free/main-activator.php:122
|
1763 |
+
#: free/main-activator.php:167
|
1764 |
msgid "Upgrade"
|
1765 |
msgstr ""
|
1766 |
|
1840 |
#: app/module/audit/view/pro-feature.php:3
|
1841 |
#: app/module/ip-lockout/view/pro-feature.php:3
|
1842 |
#: app/module/scan/view/pro-feature.php:3 app/view/pro-feature.php:3
|
1843 |
+
msgid "Here’s what you’ll get by upgrading to Defender Pro:"
|
1844 |
msgstr ""
|
1845 |
|
1846 |
#: app/module/audit/view/pro-feature.php:6
|
1906 |
#: app/module/audit/view/pro-feature.php:36
|
1907 |
#: app/module/ip-lockout/view/pro-feature.php:36
|
1908 |
#: app/module/scan/view/pro-feature.php:36 app/view/pro-feature.php:36
|
1909 |
+
msgid "As part of a WPMU DEV free trial."
|
1910 |
msgstr ""
|
1911 |
|
1912 |
#: app/module/audit/view/report.php:3
|
2022 |
"access."
|
2023 |
msgstr ""
|
2024 |
|
2025 |
+
#: app/module/audit/view/table.php:184
|
2026 |
msgid "There have been no events logged in the selected time period."
|
2027 |
msgstr ""
|
2028 |
|
2113 |
#: app/module/hardener/component/servers/apache-service.php:115
|
2114 |
#: app/module/hardener/component/servers/apache-service.php:169
|
2115 |
#: app/module/hardener/component/servers/apache-service.php:173
|
2116 |
+
#: app/module/hardener/component/servers/apache-service.php:220
|
2117 |
+
#: app/module/hardener/component/servers/apache-service.php:251
|
2118 |
+
#: app/module/hardener/component/servers/apache-service.php:285
|
2119 |
+
msgid "The file %s is not writable"
|
2120 |
msgstr ""
|
2121 |
|
2122 |
#: app/module/hardener/component/db-prefix-service.php:37
|
2271 |
|
2272 |
#: app/module/hardener/rule.php:111
|
2273 |
#: app/module/scan/behavior/core-result.php:189
|
2274 |
+
#: app/module/scan/behavior/pro/content-result.php:107
|
2275 |
#: app/module/scan/behavior/pro/vuln-result.php:156
|
2276 |
#: app/module/scan/component/result-table.php:199
|
2277 |
msgid "Ignore"
|
2797 |
msgstr ""
|
2798 |
|
2799 |
#: app/module/ip-lockout/component/login-protection-api.php:61
|
2800 |
+
#: app/module/ip-lockout/controller/main.php:634
|
2801 |
+
#: app/module/ip-lockout/controller/main.php:643
|
2802 |
msgid ""
|
2803 |
"You have been locked out by the administrator for attempting to login with "
|
2804 |
"a banned username"
|
2902 |
msgstr ""
|
2903 |
|
2904 |
#: app/module/ip-lockout/component/logs-table.php:181
|
2905 |
+
#: app/module/ip-lockout/view/logging/enabled.php:10
|
2906 |
+
msgid "IP Address"
|
2907 |
msgstr ""
|
2908 |
|
2909 |
#: app/module/ip-lockout/component/logs-table.php:184
|
2964 |
msgid "Your logs have been successfully deleted."
|
2965 |
msgstr ""
|
2966 |
|
2967 |
+
#: app/module/ip-lockout/controller/main.php:229
|
2968 |
msgid ""
|
2969 |
"IP %s has been added to your blacklist. You can control your blacklist in "
|
2970 |
"<a href=\"%s\">IP Lockouts.</a>"
|
2971 |
msgstr ""
|
2972 |
|
2973 |
+
#: app/module/ip-lockout/controller/main.php:235
|
2974 |
msgid "No record found"
|
2975 |
msgstr ""
|
2976 |
|
2977 |
+
#: app/module/ip-lockout/controller/main.php:260
|
2978 |
msgid "Demo"
|
2979 |
msgstr ""
|
2980 |
|
2981 |
+
#: app/module/ip-lockout/controller/main.php:448
|
2982 |
msgid "404 lockout alert for %s"
|
2983 |
msgstr ""
|
2984 |
|
2985 |
+
#: app/module/ip-lockout/controller/main.php:475
|
2986 |
msgid "Login lockout alert for %s"
|
2987 |
msgstr ""
|
2988 |
|
2989 |
+
#: app/module/ip-lockout/controller/main.php:573
|
2990 |
msgid "Failed login attempt with username %s"
|
2991 |
msgstr ""
|
2992 |
|
2993 |
+
#: app/module/ip-lockout/controller/main.php:636
|
2994 |
+
#: app/module/ip-lockout/controller/main.php:646
|
2995 |
msgid "%d login attempts remaining"
|
2996 |
msgstr ""
|
2997 |
|
2998 |
+
#: app/module/ip-lockout/controller/main.php:735
|
2999 |
msgid ""
|
3000 |
"Your settings have been updated, however some IPs were removed because "
|
3001 |
"invalid format, or you blacklist yourself"
|
3002 |
msgstr ""
|
3003 |
|
3004 |
+
#: app/module/ip-lockout/controller/main.php:746
|
3005 |
msgid "Login Protection has been activated."
|
3006 |
msgstr ""
|
3007 |
|
3008 |
+
#: app/module/ip-lockout/controller/main.php:748
|
3009 |
msgid "Login Protection has been deactivated."
|
3010 |
msgstr ""
|
3011 |
|
3012 |
+
#: app/module/ip-lockout/controller/main.php:753
|
3013 |
msgid "404 Detection has been activated."
|
3014 |
msgstr ""
|
3015 |
|
3016 |
+
#: app/module/ip-lockout/controller/main.php:755
|
3017 |
msgid "404 Detection has been deactivated."
|
3018 |
msgstr ""
|
3019 |
|
3020 |
+
#: app/module/ip-lockout/controller/main.php:785 app/module/ip-lockout.php:35
|
3021 |
#: app/view/activator-free.php:33 app/view/activator.php:49
|
3022 |
msgid "IP Lockouts"
|
3023 |
msgstr ""
|
3024 |
|
3025 |
+
#: app/module/ip-lockout/controller/main.php:802
|
3026 |
+
#: app/module/ip-lockout/controller/main.php:808
|
3027 |
msgid "Your file is invalid!"
|
3028 |
msgstr ""
|
3029 |
|
3030 |
+
#: app/module/ip-lockout/controller/main.php:814
|
3031 |
msgid "Your file content is invalid!"
|
3032 |
msgstr ""
|
3033 |
|
3034 |
+
#: app/module/ip-lockout/controller/main.php:823
|
3035 |
msgid "Your whitelist/blacklist has been successfully imported."
|
3036 |
msgstr ""
|
3037 |
|
3038 |
+
#: app/module/ip-lockout/controller/main.php:1008
|
3039 |
msgid "Thanks for your patience. All set."
|
3040 |
msgstr ""
|
3041 |
|
3067 |
#: app/module/ip-lockout/view/blacklist/enabled.php:17
|
3068 |
msgid ""
|
3069 |
"Any IP addresses you list here will be completely blocked from accessing "
|
3070 |
+
"your website, including admins."
|
3071 |
msgstr ""
|
3072 |
|
3073 |
#: app/module/ip-lockout/view/blacklist/enabled.php:24
|
3441 |
msgid "Oldest"
|
3442 |
msgstr ""
|
3443 |
|
|
|
|
|
|
|
|
|
3444 |
#: app/module/ip-lockout/view/login-lockouts/disabled.php:10
|
3445 |
msgid ""
|
3446 |
"Watch and protect your login area for attackers trying to randomly guess "
|
3648 |
#: app/module/scan/view/automation-free.php:63
|
3649 |
msgid ""
|
3650 |
"Schedule automated file scanning and email reporting for all your websites. "
|
3651 |
+
"This feature is included in a WPMU DEV membership along with 100+ plugins, "
|
3652 |
+
"24/7 support and lots of handy site management tools – <a target='_blank' "
|
3653 |
+
"href=\"%s\">Try it all FREE today!</a>"
|
3654 |
msgstr ""
|
3655 |
|
3656 |
#: app/module/ip-lockout/view/settings.php:10
|
3759 |
msgstr ""
|
3760 |
|
3761 |
#: app/module/scan/behavior/core-result.php:197
|
3762 |
+
#: app/module/scan/behavior/pro/content-result.php:128
|
3763 |
msgid "Delete"
|
3764 |
msgstr ""
|
3765 |
|
3770 |
msgstr ""
|
3771 |
|
3772 |
#: app/module/scan/behavior/core-result.php:202
|
3773 |
+
#: app/module/scan/behavior/pro/content-result.php:133
|
3774 |
msgid "Yes"
|
3775 |
msgstr ""
|
3776 |
|
3777 |
#: app/module/scan/behavior/core-result.php:205
|
3778 |
+
#: app/module/scan/behavior/pro/content-result.php:136
|
3779 |
msgid "No"
|
3780 |
msgstr ""
|
3781 |
|
3795 |
#: app/module/scan/behavior/core-result.php:281
|
3796 |
#: app/module/scan/behavior/core-result.php:303
|
3797 |
#: app/module/scan/behavior/core-result.php:325
|
3798 |
+
#: app/module/scan/behavior/pro/content-result.php:94
|
3799 |
msgid "Pulling source file..."
|
3800 |
msgstr ""
|
3801 |
|
3827 |
"recommend backing up your website."
|
3828 |
msgstr ""
|
3829 |
|
3830 |
+
#: app/module/scan/behavior/pro/content-result.php:114
|
3831 |
msgid ""
|
3832 |
"This will permanent delete the whole plugin containing this file, do you "
|
3833 |
"want to do this?"
|
3834 |
msgstr ""
|
3835 |
|
3836 |
+
#: app/module/scan/behavior/pro/content-result.php:117
|
3837 |
msgid ""
|
3838 |
"This will permanent delete the whole theme containing this file, do you "
|
3839 |
"want to do this?"
|
3840 |
msgstr ""
|
3841 |
|
3842 |
+
#: app/module/scan/behavior/pro/content-result.php:120
|
3843 |
msgid "This will permanent delete this file, do you want to do this?"
|
3844 |
msgstr ""
|
3845 |
|
3943 |
#: app/module/scan/behavior/scan.php:198
|
3944 |
msgid ""
|
3945 |
"Scan your website for file changes, vulnerabilities and injected code and "
|
3946 |
+
"get\n"
|
3947 |
+
" notified about anything suspicious."
|
3948 |
msgstr ""
|
3949 |
|
3950 |
#: app/module/scan/behavior/scan.php:218 app/module/scan/view/scanning.php:24
|
4034 |
msgstr[1] ""
|
4035 |
|
4036 |
#: app/module/scan/controller/main.php:212
|
4037 |
+
msgid "The suspicious file has been successfully deleted."
|
4038 |
msgid_plural "The suspicious files have been successfully deleted."
|
4039 |
msgstr[0] ""
|
4040 |
msgstr[1] ""
|
4044 |
msgstr ""
|
4045 |
|
4046 |
#: app/module/scan/controller/main.php:235
|
4047 |
+
msgid "The suspicious file has been successfully resolved."
|
4048 |
msgid_plural "The suspicious files have been successfully resolved."
|
4049 |
msgstr[0] ""
|
4050 |
msgstr[1] ""
|
4197 |
#: app/module/scan/view/new.php:11
|
4198 |
msgid ""
|
4199 |
"Scan your website for file changes, vulnerabilities and injected code and "
|
4200 |
+
"get notified about anything suspicious. Defender will keep an eye on your "
|
4201 |
+
"code without you having to worry."
|
4202 |
msgstr ""
|
4203 |
|
4204 |
#: app/module/scan/view/scanning.php:7
|
4210 |
"Did you know the Pro version of Defender comes with advanced full code "
|
4211 |
"scanning and automated reporting?\n"
|
4212 |
" Get enhanced security protection as part of a WPMU DEV "
|
4213 |
+
"membership including 100+ plugins, 24/7\n"
|
4214 |
" support and lots of handy site management tools – <a "
|
4215 |
"target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>"
|
4216 |
msgstr ""
|
4244 |
|
4245 |
#: app/module/scan/view/setting-free.php:59
|
4246 |
msgid ""
|
4247 |
+
"Defender scans through every line of code on your website, searching for "
|
4248 |
"anything suspicious. This feature is included when you join WPMU DEV, along "
|
4249 |
+
"with 100+ plugins, 24/7 support and lots of handy site management tools. – "
|
4250 |
+
"<a href=\"%s\" target='_blank' role='button'>Try it all FREE today!\n"
|
|
|
4251 |
" </a>"
|
4252 |
msgstr ""
|
4253 |
|
4540 |
|
4541 |
#: app/view/settings.php:238
|
4542 |
msgid ""
|
4543 |
+
"We’ll grab the users first name, or display name if first name isn’t "
|
4544 |
"available"
|
4545 |
msgstr ""
|
4546 |
|
4568 |
"this email."
|
4569 |
msgstr ""
|
4570 |
|
4571 |
+
#: free/main-activator.php:70
|
4572 |
msgid "Get Members!"
|
4573 |
msgstr ""
|
4574 |
|
4575 |
+
#: free/main-activator.php:78
|
4576 |
msgid ""
|
4577 |
"We're happy that you've chosen to install Defender! Are you interested in "
|
4578 |
"how to make the most of this plugin? How would you like a quick 5 day email "
|
4580 |
"bulletproof? Only the info you want, no subscription!"
|
4581 |
msgstr ""
|
4582 |
|
4583 |
+
#: free/main-activator.php:120
|
4584 |
msgid ""
|
4585 |
"%s, you now have access to Defender's pro features but you still have the "
|
4586 |
"free version installed. Let's upgrade Defender and unlock all those juicy "
|
4587 |
"features! %s"
|
4588 |
msgstr ""
|
4589 |
|
4590 |
+
#: free/main-activator.php:150
|
4591 |
msgid "<br/>Something went wrong. Please try again later!"
|
4592 |
msgstr ""
|
4593 |
|
4594 |
+
#: free/main-activator.php:166 main-activator.php:107
|
4595 |
msgid "Docs"
|
4596 |
msgstr ""
|
4597 |
|
4631 |
msgid "Rate %s"
|
4632 |
msgstr ""
|
4633 |
|
4634 |
+
#: main-activator.php:91
|
4635 |
msgid ""
|
4636 |
"We noticed you have both the free and pro versions of Defender installed, "
|
4637 |
"so we've automatically deactivated the free version for you."
|
main-activator.php
CHANGED
@@ -44,10 +44,7 @@ class WD_Main_Activator {
|
|
44 |
update_site_option( 'wd_db_version', "1.7.1" );
|
45 |
}
|
46 |
|
47 |
-
add_filter( 'plugin_action_links_' . plugin_basename( wp_defender()->plugin_slug ), array(
|
48 |
-
&$this,
|
49 |
-
'addSettingsLink'
|
50 |
-
) );
|
51 |
add_action( 'admin_enqueue_scripts', array( &$this, 'register_styles' ) );
|
52 |
if ( ! \WP_Defender\Behavior\Utils::instance()->checkRequirement() ) {
|
53 |
} else {
|
@@ -120,7 +117,7 @@ class WD_Main_Activator {
|
|
120 |
}
|
121 |
|
122 |
public function showUpgradeNotification() {
|
123 |
-
$class
|
124 |
$message = sprintf( __( "%s, you now have access to Defender's pro features but you still have the free version installed. Let's upgrade Defender and unlock all those juicy features! %s", "defender-security" ),
|
125 |
\WP_Defender\Behavior\Utils::instance()->getDisplayName(),
|
126 |
'<button id="install-defender-pro" type="button" data-id="1081723" data-nonce="' . wp_create_nonce( 'installDefenderPro' ) . '" class="button button-small">' . __( "Upgrade", "defender-security" ) . '</button>'
|
@@ -168,9 +165,8 @@ class WD_Main_Activator {
|
|
168 |
$mylinks = array_merge( $mylinks, $links );
|
169 |
$mylinks = array_merge( $mylinks, array(
|
170 |
'<a target="_blank" href="https://premium.wpmudev.org/docs/wpmu-dev-plugins/defender/">' . __( "Docs", "defender-security" ) . '</a>',
|
171 |
-
'<a style="color: #1ABC9C" target="_blank" href="'
|
172 |
) );
|
173 |
-
|
174 |
return $mylinks;
|
175 |
}
|
176 |
|
44 |
update_site_option( 'wd_db_version', "1.7.1" );
|
45 |
}
|
46 |
|
47 |
+
add_filter( 'plugin_action_links_' . plugin_basename( wp_defender()->plugin_slug ), array( &$this, 'addSettingsLink' ) );
|
|
|
|
|
|
|
48 |
add_action( 'admin_enqueue_scripts', array( &$this, 'register_styles' ) );
|
49 |
if ( ! \WP_Defender\Behavior\Utils::instance()->checkRequirement() ) {
|
50 |
} else {
|
117 |
}
|
118 |
|
119 |
public function showUpgradeNotification() {
|
120 |
+
$class = 'notice notice-info is-dismissible wp-defender-notice';
|
121 |
$message = sprintf( __( "%s, you now have access to Defender's pro features but you still have the free version installed. Let's upgrade Defender and unlock all those juicy features! %s", "defender-security" ),
|
122 |
\WP_Defender\Behavior\Utils::instance()->getDisplayName(),
|
123 |
'<button id="install-defender-pro" type="button" data-id="1081723" data-nonce="' . wp_create_nonce( 'installDefenderPro' ) . '" class="button button-small">' . __( "Upgrade", "defender-security" ) . '</button>'
|
165 |
$mylinks = array_merge( $mylinks, $links );
|
166 |
$mylinks = array_merge( $mylinks, array(
|
167 |
'<a target="_blank" href="https://premium.wpmudev.org/docs/wpmu-dev-plugins/defender/">' . __( "Docs", "defender-security" ) . '</a>',
|
168 |
+
'<a style="color: #1ABC9C" target="_blank" href="'.\WP_Defender\Behavior\Utils::instance()->campaignURL('defender_wppluginslist_upgrade').'">' . __( "Upgrade", "defender-security" ) . '</a>',
|
169 |
) );
|
|
|
170 |
return $mylinks;
|
171 |
}
|
172 |
|
readme.txt
CHANGED
@@ -7,7 +7,7 @@ Contributors: WPMUDEV
|
|
7 |
Tags: Security, Security Tweaks, Hardening, IP lockout, Monitoring, Blacklist, Site Protection, Hacked, Security Scan
|
8 |
Requires at least: 4.6
|
9 |
Tested up to: 4.9.7
|
10 |
-
Stable tag: 1.9
|
11 |
License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
12 |
|
13 |
Protect WordPress from hackers with security tweaks, code scans, 2-Step Verification, IP lockouts, and monitoring.
|
@@ -122,6 +122,13 @@ Hackers and bot attacks are not the only threat to your site. No matter what se
|
|
122 |
|
123 |
== Changelog ==
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
= 1.9 =
|
126 |
- New: Ability to edit default two-factor authentication email notifications
|
127 |
- New: Added Privacy Policy in privacy guideline page
|
7 |
Tags: Security, Security Tweaks, Hardening, IP lockout, Monitoring, Blacklist, Site Protection, Hacked, Security Scan
|
8 |
Requires at least: 4.6
|
9 |
Tested up to: 4.9.7
|
10 |
+
Stable tag: 1.9.1
|
11 |
License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
12 |
|
13 |
Protect WordPress from hackers with security tweaks, code scans, 2-Step Verification, IP lockouts, and monitoring.
|
122 |
|
123 |
== Changelog ==
|
124 |
|
125 |
+
= 1.9.1 =
|
126 |
+
- Fix: Mask Login Area description text is misleading
|
127 |
+
- Fix: wp-admin link of sub-sites in networks link to wrong admin URL
|
128 |
+
- Fix: Prevent Information Disclosure & Prevent PHP Execution show false error message when first applied
|
129 |
+
- Fix: Dashboard reporting section mis-alignment
|
130 |
+
- Other minor enhancements and fixes
|
131 |
+
|
132 |
= 1.9 =
|
133 |
- New: Ability to edit default two-factor authentication email notifications
|
134 |
- New: Added Privacy Policy in privacy guideline page
|
wp-defender.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
/**
|
4 |
* Plugin Name: Defender
|
5 |
* Plugin URI: https://premium.wpmudev.org/project/wp-defender/
|
6 |
-
* Version: 1.9
|
7 |
* Description: Get regular security scans, vulnerability reports, safety recommendations and customized hardening for your site in just a few clicks. Defender is the analyst and enforcer who never sleeps.
|
8 |
* Author: WPMU DEV
|
9 |
* Author URI: http://premium.wpmudev.org/
|
3 |
/**
|
4 |
* Plugin Name: Defender
|
5 |
* Plugin URI: https://premium.wpmudev.org/project/wp-defender/
|
6 |
+
* Version: 1.9.1
|
7 |
* Description: Get regular security scans, vulnerability reports, safety recommendations and customized hardening for your site in just a few clicks. Defender is the analyst and enforcer who never sleeps.
|
8 |
* Author: WPMU DEV
|
9 |
* Author URI: http://premium.wpmudev.org/
|