Version Description
- Option to email administrator when an IP has been blocked
- Button to whitelist your current IP
- Bugfixes and improvements
Download this release
Release Info
Developer | Jan-Paul Kleemans |
Plugin | Brute Force Login Protection |
Version | 1.4.1 |
Comparing to | |
See all releases |
Code changes from version 1.4 to 1.4.1
- brute-force-login-protection.php +21 -1
- includes/htaccess.php +25 -17
- includes/settings-page.php +19 -1
- languages/brute-force-login-protection-nl_NL.mo +0 -0
- languages/brute-force-login-protection-nl_NL.po +53 -36
- readme.txt +7 -1
brute-force-login-protection.php
CHANGED
@@ -10,7 +10,7 @@ require_once 'includes/htaccess.php';
|
|
10 |
* Text Domain: brute-force-login-protection
|
11 |
* Author: Fresh-Media
|
12 |
* Author URI: http://fresh-media.nl/
|
13 |
-
* Version: 1.4
|
14 |
* License: GPL2
|
15 |
*
|
16 |
* Copyright 2014 Fresh-Media
|
@@ -222,6 +222,9 @@ class BruteForceLoginProtection {
|
|
222 |
update_option('bflp_login_attempts', $attempts);
|
223 |
|
224 |
if ($denyIP) {
|
|
|
|
|
|
|
225 |
$this->__setHtaccessPath();
|
226 |
$this->__htaccess->denyIP($IP);
|
227 |
header('HTTP/1.0 403 Forbidden');
|
@@ -349,6 +352,7 @@ class BruteForceLoginProtection {
|
|
349 |
'reset_time' => 60, //Minutes before resetting login attempts count
|
350 |
'login_failed_delay' => 1, //Delay in seconds when a user login has failed
|
351 |
'inform_user' => true, //Inform user about remaining login attempts on login page
|
|
|
352 |
'403_message' => '', //Message to show to a blocked user
|
353 |
'htaccess_dir' => get_home_path() //.htaccess file location
|
354 |
);
|
@@ -364,6 +368,7 @@ class BruteForceLoginProtection {
|
|
364 |
register_setting('brute-force-login-protection', 'bflp_reset_time', array($this, 'validateResetTime'));
|
365 |
register_setting('brute-force-login-protection', 'bflp_login_failed_delay', array($this, 'validateLoginFailedDelay'));
|
366 |
register_setting('brute-force-login-protection', 'bflp_inform_user');
|
|
|
367 |
register_setting('brute-force-login-protection', 'bflp_403_message', array($this, 'validate403Message'));
|
368 |
register_setting('brute-force-login-protection', 'bflp_htaccess_dir');
|
369 |
}
|
@@ -378,6 +383,7 @@ class BruteForceLoginProtection {
|
|
378 |
delete_option('bflp_reset_time');
|
379 |
delete_option('bflp_login_failed_delay');
|
380 |
delete_option('bflp_inform_user');
|
|
|
381 |
delete_option('bflp_403_message');
|
382 |
delete_option('bflp_htaccess_dir');
|
383 |
}
|
@@ -392,6 +398,7 @@ class BruteForceLoginProtection {
|
|
392 |
$this->__options['reset_time'] = get_option('bflp_reset_time', $this->__options['reset_time']);
|
393 |
$this->__options['login_failed_delay'] = get_option('bflp_login_failed_delay', $this->__options['login_failed_delay']);
|
394 |
$this->__options['inform_user'] = get_option('bflp_inform_user', $this->__options['inform_user']);
|
|
|
395 |
$this->__options['403_message'] = get_option('bflp_403_message', $this->__options['403_message']);
|
396 |
}
|
397 |
|
@@ -480,6 +487,19 @@ class BruteForceLoginProtection {
|
|
480 |
return $_SERVER['REMOTE_ADDR'];
|
481 |
}
|
482 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
483 |
/**
|
484 |
* Echoes message with class 'updated'.
|
485 |
*
|
10 |
* Text Domain: brute-force-login-protection
|
11 |
* Author: Fresh-Media
|
12 |
* Author URI: http://fresh-media.nl/
|
13 |
+
* Version: 1.4.1
|
14 |
* License: GPL2
|
15 |
*
|
16 |
* Copyright 2014 Fresh-Media
|
222 |
update_option('bflp_login_attempts', $attempts);
|
223 |
|
224 |
if ($denyIP) {
|
225 |
+
if ($this->__options['send_email']) {
|
226 |
+
$this->__sendEmail($IP);
|
227 |
+
}
|
228 |
$this->__setHtaccessPath();
|
229 |
$this->__htaccess->denyIP($IP);
|
230 |
header('HTTP/1.0 403 Forbidden');
|
352 |
'reset_time' => 60, //Minutes before resetting login attempts count
|
353 |
'login_failed_delay' => 1, //Delay in seconds when a user login has failed
|
354 |
'inform_user' => true, //Inform user about remaining login attempts on login page
|
355 |
+
'send_email' => false, //Send email to administrator when an IP has been blocked
|
356 |
'403_message' => '', //Message to show to a blocked user
|
357 |
'htaccess_dir' => get_home_path() //.htaccess file location
|
358 |
);
|
368 |
register_setting('brute-force-login-protection', 'bflp_reset_time', array($this, 'validateResetTime'));
|
369 |
register_setting('brute-force-login-protection', 'bflp_login_failed_delay', array($this, 'validateLoginFailedDelay'));
|
370 |
register_setting('brute-force-login-protection', 'bflp_inform_user');
|
371 |
+
register_setting('brute-force-login-protection', 'bflp_send_email');
|
372 |
register_setting('brute-force-login-protection', 'bflp_403_message', array($this, 'validate403Message'));
|
373 |
register_setting('brute-force-login-protection', 'bflp_htaccess_dir');
|
374 |
}
|
383 |
delete_option('bflp_reset_time');
|
384 |
delete_option('bflp_login_failed_delay');
|
385 |
delete_option('bflp_inform_user');
|
386 |
+
delete_option('bflp_send_email');
|
387 |
delete_option('bflp_403_message');
|
388 |
delete_option('bflp_htaccess_dir');
|
389 |
}
|
398 |
$this->__options['reset_time'] = get_option('bflp_reset_time', $this->__options['reset_time']);
|
399 |
$this->__options['login_failed_delay'] = get_option('bflp_login_failed_delay', $this->__options['login_failed_delay']);
|
400 |
$this->__options['inform_user'] = get_option('bflp_inform_user', $this->__options['inform_user']);
|
401 |
+
$this->__options['send_email'] = get_option('bflp_send_email', $this->__options['send_email']);
|
402 |
$this->__options['403_message'] = get_option('bflp_403_message', $this->__options['403_message']);
|
403 |
}
|
404 |
|
487 |
return $_SERVER['REMOTE_ADDR'];
|
488 |
}
|
489 |
|
490 |
+
/**
|
491 |
+
* Sends email to admin with info about blocked IP
|
492 |
+
*
|
493 |
+
* @return mixed
|
494 |
+
*/
|
495 |
+
private function __sendEmail($IP) {
|
496 |
+
$to = get_option('admin_email');
|
497 |
+
$subject = sprintf(__('IP %s has been blocked', 'brute-force-login-protection'), $IP);
|
498 |
+
$message = sprintf(__('Brute Force Login Protection has blocked IP %s from access to %s on %s', 'brute-force-login-protection'), $IP, get_site_url(), date('Y-m-d H:i:s'));
|
499 |
+
|
500 |
+
return wp_mail($to, $subject, $message);
|
501 |
+
}
|
502 |
+
|
503 |
/**
|
504 |
* Echoes message with class 'updated'.
|
505 |
*
|
includes/htaccess.php
CHANGED
@@ -7,7 +7,7 @@ class Htaccess {
|
|
7 |
private $__path;
|
8 |
private $__header = array(
|
9 |
'<Files "*">',
|
10 |
-
'
|
11 |
);
|
12 |
private $__footer = array(
|
13 |
'</Files>'
|
@@ -53,7 +53,13 @@ class Htaccess {
|
|
53 |
* @return array
|
54 |
*/
|
55 |
public function getDeniedIPs() {
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
}
|
58 |
|
59 |
/**
|
@@ -119,7 +125,7 @@ class Htaccess {
|
|
119 |
* @return boolean
|
120 |
*/
|
121 |
public function commentLines() {
|
122 |
-
$currentLines = $this->__getLines();
|
123 |
|
124 |
$insertion = array();
|
125 |
foreach ($currentLines as $line) {
|
@@ -135,13 +141,11 @@ class Htaccess {
|
|
135 |
* @return boolean
|
136 |
*/
|
137 |
public function uncommentLines() {
|
138 |
-
$currentLines = $this->__getLines(
|
139 |
|
140 |
$lines = array();
|
141 |
foreach ($currentLines as $line) {
|
142 |
-
|
143 |
-
$lines[] = substr($line, 1);
|
144 |
-
}
|
145 |
}
|
146 |
|
147 |
$insertion = array_merge($this->__header, $lines, $this->__footer);
|
@@ -156,33 +160,37 @@ class Htaccess {
|
|
156 |
/**
|
157 |
* Returs array of (prefixed) lines from .htaccess.
|
158 |
*
|
159 |
-
* @param string $
|
160 |
* @return array
|
161 |
*/
|
162 |
-
private function __getLines($
|
163 |
$allLines = extract_from_markers($this->__path, 'Brute Force Login Protection');
|
164 |
|
165 |
if ($onlyBody) {
|
166 |
$allLines = array_diff($allLines, $this->__header, $this->__footer);
|
167 |
}
|
168 |
|
169 |
-
if (!$
|
170 |
return $allLines;
|
171 |
}
|
172 |
|
173 |
-
|
|
|
|
|
174 |
|
175 |
$prefixedLines = array();
|
176 |
foreach ($allLines as $line) {
|
177 |
-
|
178 |
-
if (
|
179 |
$prefixedLines[] = $line;
|
180 |
}
|
181 |
-
} elseif (substr($line, 0, $prefixLength) === $prefix) {
|
182 |
-
$prefixedLines[] = substr($line, $prefixLength);
|
183 |
}
|
184 |
}
|
185 |
|
|
|
|
|
|
|
|
|
186 |
return $prefixedLines;
|
187 |
}
|
188 |
|
@@ -193,7 +201,7 @@ class Htaccess {
|
|
193 |
* @return boolean
|
194 |
*/
|
195 |
private function __addLine($line) {
|
196 |
-
$insertion = array_merge($this->__header, $this->__getLines(), array($line), $this->__footer);
|
197 |
|
198 |
return insert_with_markers($this->__path, 'Brute Force Login Protection', array_unique($insertion));
|
199 |
}
|
@@ -206,7 +214,7 @@ class Htaccess {
|
|
206 |
* @return boolean
|
207 |
*/
|
208 |
private function __removeLine($line, $prefix = false) {
|
209 |
-
$insertion = $this->__getLines(
|
210 |
|
211 |
if ($prefix !== false) {
|
212 |
$lineKey = false;
|
7 |
private $__path;
|
8 |
private $__header = array(
|
9 |
'<Files "*">',
|
10 |
+
'order deny,allow'
|
11 |
);
|
12 |
private $__footer = array(
|
13 |
'</Files>'
|
53 |
* @return array
|
54 |
*/
|
55 |
public function getDeniedIPs() {
|
56 |
+
$lines = $this->__getLines('deny from ');
|
57 |
+
|
58 |
+
foreach ($lines as $key => $line) {
|
59 |
+
$lines[$key] = substr($line, 10);
|
60 |
+
}
|
61 |
+
|
62 |
+
return $lines;
|
63 |
}
|
64 |
|
65 |
/**
|
125 |
* @return boolean
|
126 |
*/
|
127 |
public function commentLines() {
|
128 |
+
$currentLines = $this->__getLines(array('deny from ', 'ErrorDocument 403 '));
|
129 |
|
130 |
$insertion = array();
|
131 |
foreach ($currentLines as $line) {
|
141 |
* @return boolean
|
142 |
*/
|
143 |
public function uncommentLines() {
|
144 |
+
$currentLines = $this->__getLines(array('#deny from ', '#ErrorDocument 403 '));
|
145 |
|
146 |
$lines = array();
|
147 |
foreach ($currentLines as $line) {
|
148 |
+
$lines[] = substr($line, 1);
|
|
|
|
|
149 |
}
|
150 |
|
151 |
$insertion = array_merge($this->__header, $lines, $this->__footer);
|
160 |
/**
|
161 |
* Returs array of (prefixed) lines from .htaccess.
|
162 |
*
|
163 |
+
* @param string $prefixes
|
164 |
* @return array
|
165 |
*/
|
166 |
+
private function __getLines($prefixes = false, $onlyBody = false, $exceptPrefix = false) {
|
167 |
$allLines = extract_from_markers($this->__path, 'Brute Force Login Protection');
|
168 |
|
169 |
if ($onlyBody) {
|
170 |
$allLines = array_diff($allLines, $this->__header, $this->__footer);
|
171 |
}
|
172 |
|
173 |
+
if (!$prefixes) {
|
174 |
return $allLines;
|
175 |
}
|
176 |
|
177 |
+
if (!is_array($prefixes)) {
|
178 |
+
$prefixes = array($prefixes);
|
179 |
+
}
|
180 |
|
181 |
$prefixedLines = array();
|
182 |
foreach ($allLines as $line) {
|
183 |
+
foreach ($prefixes as $prefix) {
|
184 |
+
if (strpos($line, $prefix) === 0) {
|
185 |
$prefixedLines[] = $line;
|
186 |
}
|
|
|
|
|
187 |
}
|
188 |
}
|
189 |
|
190 |
+
if ($exceptPrefix) {
|
191 |
+
$prefixedLines = array_diff($allLines, $prefixedLines);
|
192 |
+
}
|
193 |
+
|
194 |
return $prefixedLines;
|
195 |
}
|
196 |
|
201 |
* @return boolean
|
202 |
*/
|
203 |
private function __addLine($line) {
|
204 |
+
$insertion = array_merge($this->__header, $this->__getLines(false, true), array($line), $this->__footer);
|
205 |
|
206 |
return insert_with_markers($this->__path, 'Brute Force Login Protection', array_unique($insertion));
|
207 |
}
|
214 |
* @return boolean
|
215 |
*/
|
216 |
private function __removeLine($line, $prefix = false) {
|
217 |
+
$insertion = $this->__getLines();
|
218 |
|
219 |
if ($prefix !== false) {
|
220 |
$lineKey = false;
|
includes/settings-page.php
CHANGED
@@ -25,6 +25,10 @@
|
|
25 |
document.forms["reset_form"].submit();
|
26 |
}
|
27 |
}
|
|
|
|
|
|
|
|
|
28 |
</script>
|
29 |
|
30 |
<div class="wrap brute-force-login-protection">
|
@@ -79,6 +83,9 @@
|
|
79 |
<p><strong><?php _e('Inform user about remaining login attempts on login page', 'brute-force-login-protection'); ?></strong></p>
|
80 |
<p><input type="checkbox" name="bflp_inform_user" value="true" <?php echo ($this->__options['inform_user']) ? 'checked' : ''; ?> /></p>
|
81 |
|
|
|
|
|
|
|
82 |
<p><strong><?php _e('Message to show to blocked users (leave empty for default message)', 'brute-force-login-protection'); ?></strong></p>
|
83 |
<p><input type="text" size="70" name="bflp_403_message" value="<?php echo $this->__options['403_message']; ?>" /></p>
|
84 |
|
@@ -146,8 +153,11 @@
|
|
146 |
</thead>
|
147 |
<tbody>
|
148 |
<?php
|
|
|
|
|
149 |
$i = 1;
|
150 |
-
|
|
|
151 |
?>
|
152 |
<tr <?php echo ($i % 2 == 0) ? 'class="even"' : ''; ?>>
|
153 |
<td><?php echo $i; ?></td>
|
@@ -171,6 +181,9 @@
|
|
171 |
</td>
|
172 |
<td>
|
173 |
<input type="submit" name="whitelist" value="<?php _e('Add to whitelist', 'brute-force-login-protection'); ?>" class="button button-primary" />
|
|
|
|
|
|
|
174 |
</td>
|
175 |
</form>
|
176 |
</tr>
|
@@ -180,4 +193,9 @@
|
|
180 |
<form id="reset_form" method="post" action="">
|
181 |
<input type="hidden" name="reset" value="true" />
|
182 |
</form>
|
|
|
|
|
|
|
|
|
|
|
183 |
</div>
|
25 |
document.forms["reset_form"].submit();
|
26 |
}
|
27 |
}
|
28 |
+
|
29 |
+
function WhitelistCurrentIP() {
|
30 |
+
document.forms["whitelist_current_ip_form"].submit();
|
31 |
+
}
|
32 |
</script>
|
33 |
|
34 |
<div class="wrap brute-force-login-protection">
|
83 |
<p><strong><?php _e('Inform user about remaining login attempts on login page', 'brute-force-login-protection'); ?></strong></p>
|
84 |
<p><input type="checkbox" name="bflp_inform_user" value="true" <?php echo ($this->__options['inform_user']) ? 'checked' : ''; ?> /></p>
|
85 |
|
86 |
+
<p><strong><?php _e('Send email to administrator when an IP has been blocked', 'brute-force-login-protection'); ?></strong></p>
|
87 |
+
<p><input type="checkbox" name="bflp_send_email" value="true" <?php echo ($this->__options['send_email']) ? 'checked' : ''; ?> /></p>
|
88 |
+
|
89 |
<p><strong><?php _e('Message to show to blocked users (leave empty for default message)', 'brute-force-login-protection'); ?></strong></p>
|
90 |
<p><input type="text" size="70" name="bflp_403_message" value="<?php echo $this->__options['403_message']; ?>" /></p>
|
91 |
|
153 |
</thead>
|
154 |
<tbody>
|
155 |
<?php
|
156 |
+
$currentIP = $this->__getClientIP();
|
157 |
+
|
158 |
$i = 1;
|
159 |
+
$whitelist = $this->__getWhitelist();
|
160 |
+
foreach ($whitelist as $whitelistedIP):
|
161 |
?>
|
162 |
<tr <?php echo ($i % 2 == 0) ? 'class="even"' : ''; ?>>
|
163 |
<td><?php echo $i; ?></td>
|
181 |
</td>
|
182 |
<td>
|
183 |
<input type="submit" name="whitelist" value="<?php _e('Add to whitelist', 'brute-force-login-protection'); ?>" class="button button-primary" />
|
184 |
+
<?php if (!in_array($currentIP, $whitelist)): ?>
|
185 |
+
<a href="javascript:WhitelistCurrentIP()" class="button"><?php printf(__('Whitelist my current IP (%s)', 'brute-force-login-protection'), $currentIP); ?></a>
|
186 |
+
<?php endif; ?>
|
187 |
</td>
|
188 |
</form>
|
189 |
</tr>
|
193 |
<form id="reset_form" method="post" action="">
|
194 |
<input type="hidden" name="reset" value="true" />
|
195 |
</form>
|
196 |
+
|
197 |
+
<form id="whitelist_current_ip_form" method="post" action="">
|
198 |
+
<input type="hidden" name="whitelist" value="true" />
|
199 |
+
<input type="hidden" name="IP" value="<?php echo $currentIP; ?>" />
|
200 |
+
</form>
|
201 |
</div>
|
languages/brute-force-login-protection-nl_NL.mo
CHANGED
Binary file
|
languages/brute-force-login-protection-nl_NL.po
CHANGED
@@ -4,8 +4,8 @@ msgid ""
|
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Brute Force Login Protection 1.4\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/brute-force-login-protection\n"
|
7 |
-
"POT-Creation-Date: 2014-
|
8 |
-
"PO-Revision-Date: 2014-
|
9 |
"Last-Translator: Jan-Paul Kleemans <jpkleemans@gmail.com>\n"
|
10 |
"Language-Team: Jan-Paul Kleemans <jpkleemans@gmail.com>\n"
|
11 |
"Language: nl\n"
|
@@ -15,7 +15,7 @@ msgstr ""
|
|
15 |
"X-Generator: Poedit 1.6.9\n"
|
16 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
17 |
|
18 |
-
#: brute-force-login-protection.php:99 includes/settings-page.php:
|
19 |
msgid "Brute Force Login Protection Settings"
|
20 |
msgstr "Brute Force Login Protection Instellingen"
|
21 |
|
@@ -72,85 +72,94 @@ msgstr ""
|
|
72 |
msgid "The Options have been successfully reset"
|
73 |
msgstr "De opties zijn succesvol gereset"
|
74 |
|
75 |
-
#: brute-force-login-protection.php:
|
76 |
msgid "%d attempt remaining."
|
77 |
msgid_plural "%d attempts remaining."
|
78 |
msgstr[0] "%d resterende loginpoging."
|
79 |
msgstr[1] "%d resterende loginpogingen."
|
80 |
|
81 |
-
#: brute-force-login-protection.php:
|
82 |
msgid "Allowed login attempts must be a number (between 1 and 100)"
|
83 |
msgstr "Toegestane inlogpogingen moet een getal zijn (tussen 1 en 100)"
|
84 |
|
85 |
-
#: brute-force-login-protection.php:
|
86 |
msgid "Minutes before resetting must be a number (higher than 1)"
|
87 |
msgstr ""
|
88 |
"Minuten voordat loginpogingen teller wordt gereset moet een getal zijn "
|
89 |
"(groter dan 1)"
|
90 |
|
91 |
-
#: brute-force-login-protection.php:
|
92 |
msgid "Failed login delay must be a number (between 1 and 10)"
|
93 |
msgstr "Mislukte login vertraging moet een getal zijn (tussen 1 en 10)"
|
94 |
|
95 |
-
#: brute-force-login-protection.php:
|
96 |
msgid "An error occurred while saving the blocked users message"
|
97 |
msgstr ""
|
98 |
"Er is een fout opgetreden bij het opslaan van het geblokkeerde gebruikers "
|
99 |
"bericht"
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
#: includes/settings-page.php:24
|
102 |
msgid "Are you sure you want to reset all options?"
|
103 |
msgstr "Weet u zeker dat u alle opties wilt resetten?"
|
104 |
|
105 |
-
#: includes/settings-page.php:
|
106 |
msgid "Status"
|
107 |
msgstr "Status"
|
108 |
|
109 |
-
#: includes/settings-page.php:
|
110 |
msgid "You are not protected!"
|
111 |
msgstr "U bent niet beschermd"
|
112 |
|
113 |
-
#: includes/settings-page.php:
|
114 |
msgid "You are protected!"
|
115 |
msgstr "U bent beschermd"
|
116 |
|
117 |
-
#: includes/settings-page.php:
|
118 |
msgid ".htaccess file found"
|
119 |
msgstr ".htaccess bestand gevonden"
|
120 |
|
121 |
-
#: includes/settings-page.php:
|
122 |
msgid ".htaccess file not found"
|
123 |
msgstr ".htaccess bestand niet gevonden"
|
124 |
|
125 |
-
#: includes/settings-page.php:
|
126 |
msgid ".htaccess file readable"
|
127 |
msgstr ".htaccess bestand leesbaar"
|
128 |
|
129 |
-
#: includes/settings-page.php:
|
130 |
msgid ".htaccess file not readable"
|
131 |
msgstr ".htaccess niet leesbaar"
|
132 |
|
133 |
-
#: includes/settings-page.php:
|
134 |
msgid ".htaccess file writeable"
|
135 |
msgstr ".htaccess bestand beschrijfbaar"
|
136 |
|
137 |
-
#: includes/settings-page.php:
|
138 |
msgid ".htaccess file not writeable"
|
139 |
msgstr ".htaccess bestand niet beschrijfbaar"
|
140 |
|
141 |
-
#: includes/settings-page.php:
|
142 |
msgid "Options"
|
143 |
msgstr "Opties"
|
144 |
|
145 |
-
#: includes/settings-page.php:
|
146 |
msgid "Allowed login attempts before blocking IP"
|
147 |
msgstr "Toegestane inlogpogingen voordat IP wordt geblokkeerd"
|
148 |
|
149 |
-
#: includes/settings-page.php:
|
150 |
msgid "Minutes before resetting login attempts count"
|
151 |
msgstr "Minuten voordat loginpogingen teller wordt gereset"
|
152 |
|
153 |
-
#: includes/settings-page.php:
|
154 |
msgid ""
|
155 |
"Delay in seconds when a login attempt has failed (to slow down brute force "
|
156 |
"attack)"
|
@@ -158,67 +167,75 @@ msgstr ""
|
|
158 |
"Vertraging in seconden wanneer een loginpoging is mislukt (om brute force "
|
159 |
"aanvallen te vertragen)"
|
160 |
|
161 |
-
#: includes/settings-page.php:
|
162 |
msgid "Inform user about remaining login attempts on login page"
|
163 |
msgstr "Informeer de gebruiker over resterende loginpogingen op de loginpagina"
|
164 |
|
165 |
-
#: includes/settings-page.php:
|
|
|
|
|
|
|
|
|
166 |
msgid "Message to show to blocked users (leave empty for default message)"
|
167 |
msgstr ""
|
168 |
"Bericht voor geblokkeerde gebruikers (laat leeg voor standaard bericht)"
|
169 |
|
170 |
-
#: includes/settings-page.php:
|
171 |
msgid ".htaccess file location"
|
172 |
msgstr ".htaccess bestandslocatie"
|
173 |
|
174 |
-
#: includes/settings-page.php:
|
175 |
msgid "Save"
|
176 |
msgstr "Opslaan"
|
177 |
|
178 |
-
#: includes/settings-page.php:
|
179 |
msgid "Reset"
|
180 |
msgstr "Reset"
|
181 |
|
182 |
-
#: includes/settings-page.php:
|
183 |
msgid "Blocked IPs"
|
184 |
msgstr "Geblokkeerde IPs"
|
185 |
|
186 |
-
#: includes/settings-page.php:
|
187 |
msgid "Address"
|
188 |
msgstr "Adres"
|
189 |
|
190 |
-
#: includes/settings-page.php:
|
191 |
msgid "Actions"
|
192 |
msgstr "Acties"
|
193 |
|
194 |
-
#: includes/settings-page.php:
|
195 |
msgid "Unblock"
|
196 |
msgstr "Deblokkeren"
|
197 |
|
198 |
-
#: includes/settings-page.php:
|
199 |
msgid "IP to block"
|
200 |
msgstr "Te blokkeren IP"
|
201 |
|
202 |
-
#: includes/settings-page.php:
|
203 |
msgid "Manually block IP"
|
204 |
msgstr "Handmatig IP blokkeren"
|
205 |
|
206 |
-
#: includes/settings-page.php:
|
207 |
msgid "Whitelisted IPs"
|
208 |
msgstr "Whitelist (Toegestane IPs)"
|
209 |
|
210 |
-
#: includes/settings-page.php:
|
211 |
msgid "Remove from whitelist"
|
212 |
msgstr "Verwijder van whitelist"
|
213 |
|
214 |
-
#: includes/settings-page.php:
|
215 |
msgid "IP to whitelist"
|
216 |
msgstr "Toe te voegen IP"
|
217 |
|
218 |
-
#: includes/settings-page.php:
|
219 |
msgid "Add to whitelist"
|
220 |
msgstr "Voeg toe aan whitelist"
|
221 |
|
|
|
|
|
|
|
|
|
222 |
#. Plugin Name of the plugin/theme
|
223 |
msgid "Brute Force Login Protection"
|
224 |
msgstr "Brute Force Login Protection"
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Brute Force Login Protection 1.4\n"
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/brute-force-login-protection\n"
|
7 |
+
"POT-Creation-Date: 2014-09-27 13:43:06+00:00\n"
|
8 |
+
"PO-Revision-Date: 2014-09-27 15:44+0100\n"
|
9 |
"Last-Translator: Jan-Paul Kleemans <jpkleemans@gmail.com>\n"
|
10 |
"Language-Team: Jan-Paul Kleemans <jpkleemans@gmail.com>\n"
|
11 |
"Language: nl\n"
|
15 |
"X-Generator: Poedit 1.6.9\n"
|
16 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
17 |
|
18 |
+
#: brute-force-login-protection.php:99 includes/settings-page.php:35
|
19 |
msgid "Brute Force Login Protection Settings"
|
20 |
msgstr "Brute Force Login Protection Instellingen"
|
21 |
|
72 |
msgid "The Options have been successfully reset"
|
73 |
msgstr "De opties zijn succesvol gereset"
|
74 |
|
75 |
+
#: brute-force-login-protection.php:238
|
76 |
msgid "%d attempt remaining."
|
77 |
msgid_plural "%d attempts remaining."
|
78 |
msgstr[0] "%d resterende loginpoging."
|
79 |
msgstr[1] "%d resterende loginpogingen."
|
80 |
|
81 |
+
#: brute-force-login-protection.php:274
|
82 |
msgid "Allowed login attempts must be a number (between 1 and 100)"
|
83 |
msgstr "Toegestane inlogpogingen moet een getal zijn (tussen 1 en 100)"
|
84 |
|
85 |
+
#: brute-force-login-protection.php:290
|
86 |
msgid "Minutes before resetting must be a number (higher than 1)"
|
87 |
msgstr ""
|
88 |
"Minuten voordat loginpogingen teller wordt gereset moet een getal zijn "
|
89 |
"(groter dan 1)"
|
90 |
|
91 |
+
#: brute-force-login-protection.php:306
|
92 |
msgid "Failed login delay must be a number (between 1 and 10)"
|
93 |
msgstr "Mislukte login vertraging moet een getal zijn (tussen 1 en 10)"
|
94 |
|
95 |
+
#: brute-force-login-protection.php:324
|
96 |
msgid "An error occurred while saving the blocked users message"
|
97 |
msgstr ""
|
98 |
"Er is een fout opgetreden bij het opslaan van het geblokkeerde gebruikers "
|
99 |
"bericht"
|
100 |
|
101 |
+
#: brute-force-login-protection.php:497
|
102 |
+
msgid "IP %s has been blocked"
|
103 |
+
msgstr "IP %s geblokkeerd"
|
104 |
+
|
105 |
+
#: brute-force-login-protection.php:498
|
106 |
+
msgid "Brute Force Login Protection has blocked IP %s from access to %s on %s"
|
107 |
+
msgstr ""
|
108 |
+
"Brute Force Login Protection heeft IP %s geblokkeerd van toegang tot %s op %s"
|
109 |
+
|
110 |
#: includes/settings-page.php:24
|
111 |
msgid "Are you sure you want to reset all options?"
|
112 |
msgstr "Weet u zeker dat u alle opties wilt resetten?"
|
113 |
|
114 |
+
#: includes/settings-page.php:41
|
115 |
msgid "Status"
|
116 |
msgstr "Status"
|
117 |
|
118 |
+
#: includes/settings-page.php:43
|
119 |
msgid "You are not protected!"
|
120 |
msgstr "U bent niet beschermd"
|
121 |
|
122 |
+
#: includes/settings-page.php:45
|
123 |
msgid "You are protected!"
|
124 |
msgstr "U bent beschermd"
|
125 |
|
126 |
+
#: includes/settings-page.php:50
|
127 |
msgid ".htaccess file found"
|
128 |
msgstr ".htaccess bestand gevonden"
|
129 |
|
130 |
+
#: includes/settings-page.php:52
|
131 |
msgid ".htaccess file not found"
|
132 |
msgstr ".htaccess bestand niet gevonden"
|
133 |
|
134 |
+
#: includes/settings-page.php:56
|
135 |
msgid ".htaccess file readable"
|
136 |
msgstr ".htaccess bestand leesbaar"
|
137 |
|
138 |
+
#: includes/settings-page.php:58
|
139 |
msgid ".htaccess file not readable"
|
140 |
msgstr ".htaccess niet leesbaar"
|
141 |
|
142 |
+
#: includes/settings-page.php:62
|
143 |
msgid ".htaccess file writeable"
|
144 |
msgstr ".htaccess bestand beschrijfbaar"
|
145 |
|
146 |
+
#: includes/settings-page.php:64
|
147 |
msgid ".htaccess file not writeable"
|
148 |
msgstr ".htaccess bestand niet beschrijfbaar"
|
149 |
|
150 |
+
#: includes/settings-page.php:70
|
151 |
msgid "Options"
|
152 |
msgstr "Opties"
|
153 |
|
154 |
+
#: includes/settings-page.php:74
|
155 |
msgid "Allowed login attempts before blocking IP"
|
156 |
msgstr "Toegestane inlogpogingen voordat IP wordt geblokkeerd"
|
157 |
|
158 |
+
#: includes/settings-page.php:77
|
159 |
msgid "Minutes before resetting login attempts count"
|
160 |
msgstr "Minuten voordat loginpogingen teller wordt gereset"
|
161 |
|
162 |
+
#: includes/settings-page.php:80
|
163 |
msgid ""
|
164 |
"Delay in seconds when a login attempt has failed (to slow down brute force "
|
165 |
"attack)"
|
167 |
"Vertraging in seconden wanneer een loginpoging is mislukt (om brute force "
|
168 |
"aanvallen te vertragen)"
|
169 |
|
170 |
+
#: includes/settings-page.php:83
|
171 |
msgid "Inform user about remaining login attempts on login page"
|
172 |
msgstr "Informeer de gebruiker over resterende loginpogingen op de loginpagina"
|
173 |
|
174 |
+
#: includes/settings-page.php:86
|
175 |
+
msgid "Send email to administrator when an IP has been blocked"
|
176 |
+
msgstr "Stuur e-mail naar beheerder wanneer een IP is geblokkeerd"
|
177 |
+
|
178 |
+
#: includes/settings-page.php:89
|
179 |
msgid "Message to show to blocked users (leave empty for default message)"
|
180 |
msgstr ""
|
181 |
"Bericht voor geblokkeerde gebruikers (laat leeg voor standaard bericht)"
|
182 |
|
183 |
+
#: includes/settings-page.php:92
|
184 |
msgid ".htaccess file location"
|
185 |
msgstr ".htaccess bestandslocatie"
|
186 |
|
187 |
+
#: includes/settings-page.php:96
|
188 |
msgid "Save"
|
189 |
msgstr "Opslaan"
|
190 |
|
191 |
+
#: includes/settings-page.php:97
|
192 |
msgid "Reset"
|
193 |
msgstr "Reset"
|
194 |
|
195 |
+
#: includes/settings-page.php:103
|
196 |
msgid "Blocked IPs"
|
197 |
msgstr "Geblokkeerde IPs"
|
198 |
|
199 |
+
#: includes/settings-page.php:108 includes/settings-page.php:150
|
200 |
msgid "Address"
|
201 |
msgstr "Adres"
|
202 |
|
203 |
+
#: includes/settings-page.php:109 includes/settings-page.php:151
|
204 |
msgid "Actions"
|
205 |
msgstr "Acties"
|
206 |
|
207 |
+
#: includes/settings-page.php:123
|
208 |
msgid "Unblock"
|
209 |
msgstr "Deblokkeren"
|
210 |
|
211 |
+
#: includes/settings-page.php:135
|
212 |
msgid "IP to block"
|
213 |
msgstr "Te blokkeren IP"
|
214 |
|
215 |
+
#: includes/settings-page.php:138
|
216 |
msgid "Manually block IP"
|
217 |
msgstr "Handmatig IP blokkeren"
|
218 |
|
219 |
+
#: includes/settings-page.php:145
|
220 |
msgid "Whitelisted IPs"
|
221 |
msgstr "Whitelist (Toegestane IPs)"
|
222 |
|
223 |
+
#: includes/settings-page.php:168
|
224 |
msgid "Remove from whitelist"
|
225 |
msgstr "Verwijder van whitelist"
|
226 |
|
227 |
+
#: includes/settings-page.php:180
|
228 |
msgid "IP to whitelist"
|
229 |
msgstr "Toe te voegen IP"
|
230 |
|
231 |
+
#: includes/settings-page.php:183
|
232 |
msgid "Add to whitelist"
|
233 |
msgstr "Voeg toe aan whitelist"
|
234 |
|
235 |
+
#: includes/settings-page.php:185
|
236 |
+
msgid "Whitelist my current IP (%s)"
|
237 |
+
msgstr "Whitelist mijn huidige IP (%s)"
|
238 |
+
|
239 |
#. Plugin Name of the plugin/theme
|
240 |
msgid "Brute Force Login Protection"
|
241 |
msgstr "Brute Force Login Protection"
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: Jan-Paul Kleemans
|
|
3 |
Tags: brute force, bruteforce, login, wp-login, protection, shield, security, htaccess, block, ip
|
4 |
Requires at least: 2.7.0
|
5 |
Tested up to: 4.0
|
6 |
-
Stable tag: 1.4
|
7 |
License: GPL2
|
8 |
|
9 |
Protects your website against brute force login attacks using .htaccess
|
@@ -21,6 +21,7 @@ Features
|
|
21 |
* Manually whitelist trusted IP addresses
|
22 |
* Delay execution after a failed login attempt (to slow down brute force attack)
|
23 |
* Option to inform user about remaining attempts on login page
|
|
|
24 |
* Custom message to show to blocked users
|
25 |
|
26 |
Your feedback is highly appreciated!
|
@@ -43,6 +44,11 @@ Brute Force Login Protection will only work if your .htaccess file is writeable
|
|
43 |
1. Plugin settings page
|
44 |
|
45 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
46 |
= 1.4 =
|
47 |
* Ability to whitelist trusted IPs
|
48 |
* Ability to create custom message to show to blocked users
|
3 |
Tags: brute force, bruteforce, login, wp-login, protection, shield, security, htaccess, block, ip
|
4 |
Requires at least: 2.7.0
|
5 |
Tested up to: 4.0
|
6 |
+
Stable tag: 1.4.1
|
7 |
License: GPL2
|
8 |
|
9 |
Protects your website against brute force login attacks using .htaccess
|
21 |
* Manually whitelist trusted IP addresses
|
22 |
* Delay execution after a failed login attempt (to slow down brute force attack)
|
23 |
* Option to inform user about remaining attempts on login page
|
24 |
+
* Option to email administrator when an IP has been blocked
|
25 |
* Custom message to show to blocked users
|
26 |
|
27 |
Your feedback is highly appreciated!
|
44 |
1. Plugin settings page
|
45 |
|
46 |
== Changelog ==
|
47 |
+
= 1.4.1 =
|
48 |
+
* Option to email administrator when an IP has been blocked
|
49 |
+
* Button to whitelist your current IP
|
50 |
+
* Bugfixes and improvements
|
51 |
+
|
52 |
= 1.4 =
|
53 |
* Ability to whitelist trusted IPs
|
54 |
* Ability to create custom message to show to blocked users
|