NinjaFirewall (WP Edition) - Version 4.0

Version Description

  • Improved NinjaFirewall overall interface and pages layout; added some simple toggle switches to replace radio buttons, better handling of error messages, cleaned up useless code etc.
  • All JavaScript code was 100% rewritten from scratch, including all features that rely on it (e.g., "Live Log" etc).
  • The installer was removed: When activating NinjaFirewall for the first time, it will automatically install itself in "WordPress WAF" mode. To upgrade to "Full WAF" mode, simply click on the corresponding link in the Overview page. The process is now very straightforward! A "sandbox" was added too, so that if there were a crash during the process, NinjaFirewall would undo the changes and warn the user.
  • When NinjaFirewall is running in "Full WAF" mode, if the PHP INI file used to load its firewall was deleted by mistake, it would automatically fallback to "WordPress WAF" mode so that the blog will remain protected.
  • Fixed the admin login page bug where some users had to enter their credentials twice.
  • The "Block the DOCUMENT_ROOT server variable in HTTP request" policy will not be enabled by default with new installations of NinjaFirewall.
  • NinjaFirewall will not block users with author and editor role while they are editing a post or page using either the Classic or the new Block Editor.
  • Added Openlitespeed detection to the "Full WAF" mode installer.
  • WP+ Edition (Premium): The "Access Control" pages interface was simplified: it now uses simple textarea elements where you can copy/paste your data (URL, IP, Bot and User Input) very easily. The "Geolocation" page was simplified too.
  • WP+ Edition (Premium): In addition to an IP address or CIDR, you can now also enter an AS number (Autonomous System number). This new feature is very helpful if you want to allow or block all IPs from an ISP or hosting company: just enter their AS number instead of hundreds of IP addresses. Syntax is "AS" + the number, e.g. "AS12345". See "Access Control > IP Access Control".
  • WP+ Edition (Premium): You can now add an IP to the Access Control blacklist or whitelist from the "Firewall Log" page by entering the IP in the input field below the log textarea.
  • WP+ Edition (Premium): When running in "WordPress WAF" mode, NinjaFirewall will automatically disable the shared memory option, because that feature is only useful when used in "Full WAF" mode (there is no benefit at all to run it in "WordPress WAF" mode).
  • WP+ Edition (Premium): Fixed a bug where the ISO 3166 country code was not found when using an external PHP Variable instead of the built-in GeoIP database.
  • WP+ Edition (Premium): Improved malicious SVG files detection.
  • WP+ Edition (Premium): Updated IPv4/IPv6/ASN GeoIP databases.
  • Many fixes and adjustments.
Download this release

Release Info

Developer nintechnet
Plugin Icon 128x128 NinjaFirewall (WP Edition)
Version 4.0
Comparing to
See all releases

Code changes from version 3.9.1 to 4.0

Files changed (69) hide show
  1. images/facebook.png +0 -0
  2. images/glyphicons-error.png +0 -0
  3. images/glyphicons-ok.png +0 -0
  4. images/glyphicons-question.png +0 -0
  5. images/glyphicons-warning.png +0 -0
  6. images/google.png +0 -0
  7. images/screenshots/01_ac_main.png +0 -0
  8. images/screenshots/02_ac_geoip.png +0 -0
  9. images/screenshots/03_ac_ip.png +0 -0
  10. images/screenshots/04_ac_limit.png +0 -0
  11. images/screenshots/05_ac_url.png +0 -0
  12. images/screenshots/06_ac_bots.png +0 -0
  13. images/screenshots/07_webfilter.png +0 -0
  14. images/screenshots/08_antispam.png +0 -0
  15. images/screenshots/09_uploads.png +0 -0
  16. images/screenshots/10_log.png +0 -0
  17. images/screenshots/11_shmop.png +0 -0
  18. images/screenshots/12_centlog.png +0 -0
  19. images/screenshots/13_updates.png +0 -0
  20. images/screenshots/14_ac_input.png +0 -0
  21. images/screenshots/access-control-bot.png +0 -0
  22. images/screenshots/access-control-geolocation.png +0 -0
  23. images/screenshots/access-control-input.png +0 -0
  24. images/screenshots/access-control-ip.png +0 -0
  25. images/screenshots/access-control-url.png +0 -0
  26. images/screenshots/access-control.png +0 -0
  27. images/screenshots/anti-spam.png +0 -0
  28. images/screenshots/centralized-logging.png +0 -0
  29. images/screenshots/file-uploads.png +0 -0
  30. images/screenshots/firewall-log.png +0 -0
  31. images/screenshots/rate-limiting.png +0 -0
  32. images/screenshots/rules-update.png +0 -0
  33. images/screenshots/shared-memory.png +0 -0
  34. images/screenshots/web-filter.png +0 -0
  35. images/twitter.png +0 -0
  36. install.php +0 -489
  37. languages/ninjafirewall-fr_FR.mo +0 -0
  38. languages/ninjafirewall-fr_FR.po +2953 -2158
  39. languages/ninjafirewall.pot +1532 -1854
  40. lib/about.php +9 -30
  41. lib/dashboard_widget.php +2 -2
  42. lib/event_notifications.php +31 -42
  43. lib/file_check.php +60 -132
  44. lib/file_guard.php +10 -39
  45. lib/firewall.php +248 -137
  46. lib/firewall_log.php +19 -45
  47. lib/firewall_options.php +115 -163
  48. lib/firewall_policies.php +264 -474
  49. lib/fw_livelog.php +0 -1
  50. lib/help.php +83 -21
  51. lib/init_update.php +10 -0
  52. lib/install.php +296 -0
  53. lib/install_default.php +74 -15
  54. lib/install_fullwaf.php +0 -648
  55. lib/install_wpwaf.php +0 -243
  56. lib/live_log.php +65 -199
  57. lib/login_protection.php +199 -270
  58. lib/network.php +27 -19
  59. lib/ninjafirewall.php +16 -0
  60. lib/overview.php +122 -83
  61. lib/rules_editor.php +17 -7
  62. lib/rules_update.php +85 -101
  63. lib/statistics.php +68 -47
  64. lib/thickbox.php +275 -0
  65. lib/utils.php +143 -19
  66. lib/wpplus.php +225 -124
  67. ninjafirewall.php +305 -71
  68. readme.txt +34 -13
  69. static/chart.min.js +7 -0
images/facebook.png DELETED
Binary file
images/glyphicons-error.png DELETED
Binary file
images/glyphicons-ok.png DELETED
Binary file
images/glyphicons-question.png DELETED
Binary file
images/glyphicons-warning.png DELETED
Binary file
images/google.png DELETED
Binary file
images/screenshots/01_ac_main.png DELETED
Binary file
images/screenshots/02_ac_geoip.png DELETED
Binary file
images/screenshots/03_ac_ip.png DELETED
Binary file
images/screenshots/04_ac_limit.png DELETED
Binary file
images/screenshots/05_ac_url.png DELETED
Binary file
images/screenshots/06_ac_bots.png DELETED
Binary file
images/screenshots/07_webfilter.png DELETED
Binary file
images/screenshots/08_antispam.png DELETED
Binary file
images/screenshots/09_uploads.png DELETED
Binary file
images/screenshots/10_log.png DELETED
Binary file
images/screenshots/11_shmop.png DELETED
Binary file
images/screenshots/12_centlog.png DELETED
Binary file
images/screenshots/13_updates.png DELETED
Binary file
images/screenshots/14_ac_input.png DELETED
Binary file
images/screenshots/access-control-bot.png ADDED
Binary file
images/screenshots/access-control-geolocation.png ADDED
Binary file
images/screenshots/access-control-input.png ADDED
Binary file
images/screenshots/access-control-ip.png ADDED
Binary file
images/screenshots/access-control-url.png ADDED
Binary file
images/screenshots/access-control.png ADDED
Binary file
images/screenshots/anti-spam.png ADDED
Binary file
images/screenshots/centralized-logging.png ADDED
Binary file
images/screenshots/file-uploads.png ADDED
Binary file
images/screenshots/firewall-log.png ADDED
Binary file
images/screenshots/rate-limiting.png ADDED
Binary file
images/screenshots/rules-update.png ADDED
Binary file
images/screenshots/shared-memory.png ADDED
Binary file
images/screenshots/web-filter.png ADDED
Binary file
images/twitter.png DELETED
Binary file
install.php DELETED
@@ -1,489 +0,0 @@
1
- <?php
2
- /*
3
- +---------------------------------------------------------------------+
4
- | NinjaFirewall (WP Edition) |
5
- | |
6
- | (c) NinTechNet - https://nintechnet.com/ |
7
- +---------------------------------------------------------------------+
8
- | This program is free software: you can redistribute it and/or |
9
- | modify it under the terms of the GNU General Public License as |
10
- | published by the Free Software Foundation, either version 3 of |
11
- | the License, or (at your option) any later version. |
12
- | |
13
- | This program is distributed in the hope that it will be useful, |
14
- | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
- | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
- */
19
-
20
- if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
-
22
- if ( is_multisite() && ! current_user_can( 'manage_network' ) ) {
23
- return;
24
- }
25
-
26
- // Set this to 1 if you don't want to receive a welcome email:
27
- if (! defined('DONOTEMAIL') ) {
28
- define('DONOTEMAIL', 0);
29
- }
30
-
31
- @error_reporting(-1);
32
- @ini_set('display_errors', '1');
33
-
34
-
35
- if ( isset( $_POST["select_mode"] ) ) {
36
- if ( $_POST["select_mode"] == "wpwaf" ) {
37
- $_SESSION['waf_mode'] = "wpwaf";
38
- } elseif ( $_POST["select_mode"] == "fullwaf" ) {
39
- $_SESSION['waf_mode'] = "fullwaf";
40
- }
41
- }
42
- require( __DIR__ . '/lib/install_wpwaf.php' );
43
- require( __DIR__ . '/lib/install_fullwaf.php' );
44
-
45
-
46
- if ( empty( $_REQUEST['nfw_act'] ) ) {
47
- nfw_welcome();
48
- return;
49
- }
50
-
51
- if ( $_REQUEST['nfw_act'] == 'create_log_dir' ) {
52
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'create_log_dir') ) {
53
- wp_nonce_ays('create_log_dir');
54
- }
55
- nfw_create_log_dir();
56
- return;
57
- }
58
-
59
- /* ------------------------------------------------------------------ */
60
- // WordPress WAF mode:
61
-
62
- if ( $_REQUEST['nfw_act'] == 'save_changes_wpwaf' ) {
63
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'save_changes_wpwaf') ) {
64
- wp_nonce_ays('save_changes_wpwaf');
65
- }
66
- nfw_save_changes_wpwaf();
67
- return;
68
- }
69
-
70
- /* ------------------------------------------------------------------ */
71
- // Full WAF mode:
72
-
73
- if ( $_REQUEST['nfw_act'] == 'presave' ) {
74
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'presave') ) {
75
- wp_nonce_ays('presave');
76
- }
77
- nfw_presave();
78
-
79
- } elseif ( $_REQUEST['nfw_act'] == 'integration' ) {
80
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'integration') ) {
81
- wp_nonce_ays('integration');
82
- }
83
- nfw_integration();
84
-
85
- } elseif ( $_REQUEST['nfw_act'] == 'postsave' ) {
86
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'postsave') ) {
87
- wp_nonce_ays('postsave');
88
- }
89
- nfw_postsave();
90
-
91
- }
92
-
93
- return;
94
-
95
- /* ------------------------------------------------------------------ */
96
-
97
- function nfw_welcome() {
98
-
99
- if ( isset($_SESSION['abspath']) ) {
100
- unset($_SESSION['abspath']);
101
- }
102
- if ( isset($_SESSION['http_server']) ) {
103
- unset($_SESSION['http_server']);
104
- }
105
- if ( isset($_SESSION['php_ini_type']) ) {
106
- unset($_SESSION['php_ini_type']);
107
- }
108
- if (isset($_SESSION['email_install']) ) {
109
- unset($_SESSION['email_install']);
110
- }
111
- if (isset($_SESSION['default_conf']) ) {
112
- unset($_SESSION['default_conf']);
113
- }
114
- if (isset($_SESSION['waf_mode']) ) {
115
- unset($_SESSION['waf_mode']);
116
- }
117
- if (isset($_SESSION['wp_config']) ) {
118
- unset($_SESSION['wp_config']);
119
- }
120
- if (isset($_SESSION['temp_admin_email']) ) {
121
- unset($_SESSION['temp_admin_email']);
122
- }
123
-
124
- $_SESSION['nfw_goodguy'] = true;
125
-
126
- ?>
127
- <div class="wrap">
128
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
129
-
130
- <?php
131
- if (file_exists( dirname(plugin_dir_path(__FILE__)) . '/nfwplus') ) {
132
- echo '<br /><div class="error settings-error"><p>' . sprintf( __('Error: You have a copy of NinjaFirewall (%s) installed.<br />Please uninstall it completely before attempting to install NinjaFirewall (WP Edition).', 'ninjafirewall'), '<font color=#21759B>WP+</font> Edition' ) . '</p></div></div></div></div></div></div></body></html>';
133
- exit;
134
- }
135
- ?>
136
- <p><?php _e('Thank you for using NinjaFirewall', 'ninjafirewall') ?> (WP Edition). <?php _e('This installer will help you to make the setup process as quick and easy as possible.', 'ninjafirewall') ?></p>
137
-
138
- <p><?php _e('Although NinjaFirewall looks like a regular security plugin, it is not. It can be installed and configured from the WordPress admin console, but it is a stand-alone Web Application Firewall that sits in front of WordPress.', 'ninjafirewall') ?> <?php _e('It can run in two different modes: <b>Full WAF</b> or <b>WordPress WAF</b> modes.', 'ninjafirewall') ?></p>
139
-
140
- <h3><?php _e('Full WAF mode', 'ninjafirewall') ?></h3>
141
-
142
- <p><?php _e('In <b>Full WAF</b> mode, NinjaFirewall will hook, scan, reject or sanitise any HTTP and HTTPS request sent to a PHP script before it reaches WordPress, its plugins or even the database. All scripts located inside the blog installation directories and sub-directories will be protected, including those that aren\'t part of the WordPress package. Even encoded PHP scripts (e.g., ionCube), potential backdoors and shell scripts (e.g., c99, r57) will be filtered by NinjaFirewall.', 'ninjafirewall') ?>
143
- <br />
144
- <?php printf( __('That makes it a true firewall and gives you the highest possible level of protection: <a href="%s" title="%s">security without compromise</a>.', 'ninjafirewall'), 'https://blog.nintechnet.com/introduction-to-ninjafirewall-filtering-engine/', 'An introduction to NinjaFirewall filtering engine.') ?>
145
- <br />
146
- <?php printf( __('To run NinjaFirewall in <b>Full WAF</b> mode, your server must allow the use of the <code>auto_prepend_file</code> PHP directive. It is required to instruct the PHP interpreter to load the firewall before WordPress or any other script. Most of the time it works right out of the box, or may require <a href="%s" title="%s">some very little tweaks</a>. But in a few cases, mostly because of some shared hosting plans restrictions, it may simply not work at all.','ninjafirewall'), 'https://blog.nintechnet.com/troubleshoot-ninjafirewall-installation-problems/', 'Troubleshoot NinjaFirewall installation problems.') ?></p>
147
-
148
- <h3><?php _e('WordPress WAF mode', 'ninjafirewall') ?></h3>
149
-
150
- <p><?php _e('The <b>WordPress WAF</b> mode requires to load NinjaFirewall via the WordPress wp-config.php script. This process makes it easy to setup and the installation will always be successful, regardless of your hosting plan restrictions.', 'ninjafirewall') ?> <?php _e('NinjaFirewall will still load before WordPress, its plugins and the database and will run as fast as the <b>Full WAF</b> mode.', 'ninjafirewall') ?>
151
- <br />
152
- <?php _e('However, the downside of this mode is that NinjaFirewall will be able to hook and filter HTTP requests sent to WordPress only. A few features such as File Guard, the URL Access Control and Web Filter (WP+ Edition only) will be limited.', 'ninjafirewall') ?>
153
- <br />
154
- <?php _e('Despite being less powerful than the <b>Full WAF</b> mode, it still offers a level of protection and performance higher than any other security plugin.', 'ninjafirewall') ?></p>
155
-
156
- <h3><?php _e('Installation', 'ninjafirewall') ?></h3>
157
-
158
- <p><?php _e('We recommend to select the <b>Full WAF</b> mode option first. If it fails, this installer will let you switch to the <b>WordPress WAF</b> mode easily.', 'ninjafirewall' ) ?></p>
159
-
160
- <form method="post">
161
-
162
- <p><label><input type="radio" name="select_mode" value="fullwaf" checked="checked" /><strong><?php _e('Full WAF mode (recommended)', 'ninjafirewall') ?></strong></label></p>
163
-
164
- <p><label><input type="radio" name="select_mode" value="wpwaf" /><strong><?php _e('WordPress WAF mode', 'ninjafirewall') ?></strong></label></p>
165
-
166
- <p><?php _e('Enter the email address where NinjaFirewall will send notifications and reports:', 'ninjafirewall') ?>&nbsp;<input type="email" name="temp_admin_email" required value="<?php echo htmlspecialchars( get_option('admin_email') ) ?>" /></p>
167
-
168
- <p><input class="button-primary" type="submit" name="nextstep" value="<?php _e('Next Step', 'ninjafirewall') ?> &#187;" /></p>
169
-
170
- <input type="hidden" name="nfw_act" value="create_log_dir" />
171
- <?php wp_nonce_field('create_log_dir', 'nfwnonce', 0); ?>
172
-
173
- </form>
174
-
175
- <h3><?php _e('Privacy policy', 'ninjafirewall') ?></h3>
176
-
177
- <p><?php _e('Your website can run NinjaFirewall and be compliant with the General Data Protection Regulation (GDPR). For more info, please visit our blog:', 'ninjafirewall') ?> <a href="https://blog.nintechnet.com/ninjafirewall-general-data-protection-regulation-compliance/">https://blog.nintechnet.com/ninjafirewall-general-data-protection-regulation-compliance/</a></p>
178
-
179
- </div>
180
- <?php
181
-
182
- }
183
-
184
- /* ------------------------------------------------------------------ */
185
-
186
- function nfw_create_log_dir() {
187
-
188
- if (! empty( $_POST['temp_admin_email'] ) ) {
189
- $temp_admin_email = sanitize_email( $_POST['temp_admin_email'] );
190
- if (! empty( $temp_admin_email ) ) {
191
- $_SESSION['temp_admin_email'] = $temp_admin_email;
192
- } else {
193
- unset( $_SESSION['temp_admin_email'] );
194
- }
195
- }
196
-
197
- if (! is_writable(NFW_LOG_DIR) ) {
198
- $err = sprintf( __('NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; please make sure that the <code>%s</code> directory is writable', 'ninjafirewall'), htmlspecialchars(NFW_LOG_DIR) );
199
- } else {
200
- if (! file_exists(NFW_LOG_DIR . '/nfwlog') ) {
201
- mkdir( NFW_LOG_DIR . '/nfwlog', 0755);
202
- }
203
- if (! file_exists(NFW_LOG_DIR . '/nfwlog/cache') ) {
204
- mkdir( NFW_LOG_DIR . '/nfwlog/cache', 0755);
205
- }
206
-
207
- $deny_rules = "<Files \"*\">
208
- <IfModule mod_version.c>
209
- <IfVersion < 2.4>
210
- Order Deny,Allow
211
- Deny from All
212
- </IfVersion>
213
- <IfVersion >= 2.4>
214
- Require all denied
215
- </IfVersion>
216
- </IfModule>
217
- <IfModule !mod_version.c>
218
- <IfModule !mod_authz_core.c>
219
- Order Deny,Allow
220
- Deny from All
221
- </IfModule>
222
- <IfModule mod_authz_core.c>
223
- Require all denied
224
- </IfModule>
225
- </IfModule>
226
- </Files>";
227
-
228
- touch( NFW_LOG_DIR . '/nfwlog/index.html' );
229
- touch( NFW_LOG_DIR . '/nfwlog/cache/index.html' );
230
- @file_put_contents(NFW_LOG_DIR . '/nfwlog/.htaccess', $deny_rules, LOCK_EX);
231
- @file_put_contents(NFW_LOG_DIR . '/nfwlog/cache/.htaccess', $deny_rules, LOCK_EX);
232
- @file_put_contents(NFW_LOG_DIR . '/nfwlog/readme.txt', __("This is NinjaFirewall's logs, loader and cache directory. DO NOT alter or remove it as long as NinjaFirewall is running!", 'ninjafirewall'), LOCK_EX);
233
-
234
- // Return if we are going to run in "WordPress WAF" mode:
235
- if ( $_SESSION['waf_mode'] == "wpwaf" ) {
236
- nfw_integration_wpwaf();
237
- return;
238
- }
239
-
240
- $loader = "<?php
241
- // ===============================================================//
242
- // NinjaFirewall's loader. //
243
- // DO NOT alter or remove it as long as NinjaFirewall is running! //
244
- // ===============================================================//
245
- if ( file_exists('" . plugin_dir_path(__FILE__) . 'lib/firewall.php' . "') ) {
246
- @include('" . plugin_dir_path(__FILE__) . 'lib/firewall.php' . "');
247
- }
248
- // EOF
249
- ";
250
- file_put_contents(NFW_LOG_DIR . '/nfwlog/ninjafirewall.php', $loader, LOCK_EX);
251
- }
252
- if ( empty($err) ) {
253
- nfw_get_abspath();
254
- return;
255
- }
256
- echo '
257
- <div class="wrap">
258
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Firewall Policies', 'ninjafirewall') . '</h1>
259
-
260
- <br />
261
- <div class="error settings-error"><p>' . $err . '</p></div>
262
-
263
- <br />
264
- <br />
265
- <form method="post">
266
- <p><input class="button-primary" type="submit" name="Save" value="' . __('Try again', 'ninjafirewall') . ' &#187;" /></p>
267
- <input type="hidden" name="nfw_act" value="create_log_dir" />' . wp_nonce_field('create_log_dir', 'nfwnonce', 0) . '
268
- </form>
269
- </div>';
270
-
271
- }
272
-
273
- /* ------------------------------------------------------------------ */
274
-
275
- function welcome_email() {
276
-
277
- if ( empty( $_SESSION['email_install'] ) ) {
278
-
279
- if (! empty( $_SESSION['temp_admin_email'] ) ) {
280
- $recipient = $_SESSION['temp_admin_email'];
281
- } else {
282
- $recipient = get_option('admin_email');
283
- }
284
- $subject = '[NinjaFirewall] ' . __('Quick Start, FAQ & Troubleshooting Guide', 'ninjafirewall');
285
- $message = __('Hi,', 'ninjafirewall') . "\n\n";
286
-
287
- $message.= __('This is NinjaFirewall\'s installer. Below are some helpful info and links you may consider reading before using NinjaFirewall.', 'ninjafirewall') . "\n\n";
288
-
289
- $message.= '1) '. __('Must Read:', 'ninjafirewall') . "\n\n";
290
-
291
- $message.= __('-Securing WordPress with NinjaFirewall. A step by step tutorial:', 'ninjafirewall') . "\n";
292
- $message.= 'https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/ ' . "\n\n";
293
-
294
- $message.= __('-An introduction to NinjaFirewall filtering engine:', 'ninjafirewall') . "\n";
295
- $message.= 'https://blog.nintechnet.com/introduction-to-ninjafirewall-filtering-engine/ ' . "\n\n";
296
-
297
- $message.= __('-Testing NinjaFirewall without blocking your visitors:', 'ninjafirewall') . "\n";
298
- $message.= 'https://blog.nintechnet.com/testing-ninjafirewall-without-blocking-your-visitors/ ' . "\n\n";
299
-
300
- $message.= __('-Add your own code to the firewall: the ".htninja" file:', 'ninjafirewall') . "\n";
301
- $message.= 'https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja ' . "\n\n";
302
-
303
- $message.= __('-Restricting access to NinjaFirewall settings:', 'ninjafirewall') . "\n";
304
- $message.= 'https://blog.nintechnet.com/restricting-access-to-ninjafirewall-wp-edition-settings/ ' . "\n\n";
305
-
306
- $message.= __('-Upgrading to PHP 7 with NinjaFirewall installed:', 'ninjafirewall') . "\n";
307
- $message.= 'https://blog.nintechnet.com/upgrading-to-php-7-with-ninjafirewall-installed/ ' . "\n\n";
308
-
309
- $message.= __('-Keep your blog protected against the latest vulnerabilities:', 'ninjafirewall') . "\n";
310
- $message.= 'https://blog.nintechnet.com/ninjafirewall-wpwp-introduces-automatic-updates-for-security-rules ' . "\n\n";
311
-
312
- $message.= __('-Test your website security with our online scanner:', 'ninjafirewall') . "\n";
313
- $message.= 'https://webscanner.nintechnet.com/ ' . "\n\n";
314
-
315
- $message.= __('-NinjaFirewall Referral Program:', 'ninjafirewall') . "\n";
316
- $message.= 'https://nintechnet.com/referral/ ' . "\n\n";
317
-
318
- $message.= '2) ' . __('Troubleshooting:', 'ninjafirewall') . "\n";
319
- $message.= 'https://nintechnet.com/ninjafirewall/wp-edition/help/?troubleshooting ' . "\n\n";
320
-
321
- $message.= __('-Locked out of your site / Fatal error / WordPress crash?', 'ninjafirewall') . "\n";
322
- $message.= __('-Failed installation ("Error: The firewall is not loaded")?', 'ninjafirewall') . "\n";
323
- $message.= __('-Blank page after INSTALLING NinjaFirewall?', 'ninjafirewall') . "\n";
324
- $message.= __('-Blank page after UNINSTALLING NinjaFirewall?', 'ninjafirewall') . "\n";
325
- $message.= __('-500 Internal Server Error?', 'ninjafirewall') . "\n";
326
- $message.= __('-"Cannot connect to WordPress database" error message?', 'ninjafirewall') . "\n";
327
- $message.= __('-How to disable NinjaFirewall?', 'ninjafirewall') . "\n";
328
- $message.= __('-Lost password (brute-force protection)?', 'ninjafirewall') . "\n";
329
- $message.= __('-Blocked visitors (see below)?', 'ninjafirewall') . "\n";
330
- $message.= __('-Exporting NinjaFirewall\'s configuration', 'ninjafirewall') . "\n\n";
331
-
332
- $message.= '3) ' . __('-NinjaFirewall (WP Edition) troubleshooter script', 'ninjafirewall') . "\n";
333
- $message.= 'https://nintechnet.com/share/wp-check.txt ' . "\n\n";
334
- $message.= __('-Rename this file to "wp-check.php".', 'ninjafirewall') . "\n";
335
- $message.= __('-Upload it into your WordPress root folder.', 'ninjafirewall') . "\n";
336
- $message.= __('-Goto http://YOUR WEBSITE/wp-check.php.', 'ninjafirewall') . "\n";
337
- $message.= __('-Delete it afterwards.', 'ninjafirewall') . "\n\n";
338
-
339
- $message.= '4) '. __('FAQ:', 'ninjafirewall') . "\n";
340
- $message.= 'https://nintechnet.com/ninjafirewall/wp-edition/help/?faq ' . "\n\n";
341
-
342
- $message.= __('-Why is NinjaFirewall different from other security plugins for WordPress?', 'ninjafirewall') . "\n";
343
- $message.= __('-Do I need root privileges to install NinjaFirewall?', 'ninjafirewall') . "\n";
344
- $message.= __('-Does it work with Nginx?', 'ninjafirewall') . "\n";
345
- $message.= __('-Do I need to alter my PHP scripts?', 'ninjafirewall') . "\n";
346
- $message.= __('-Will NinjaFirewall detect the correct IP of my visitors if I am behind a CDN service like Cloudflare or Incapsula?', 'ninjafirewall') . "\n";
347
- $message.= __('-I moved my wp-config.php file to another directory. Will it work with NinjaFirewall?', 'ninjafirewall') . "\n";
348
- $message.= __('-Will it slow down my site?', 'ninjafirewall') . "\n";
349
- $message.= __('-Is there a Microsoft Windows version?', 'ninjafirewall') . "\n";
350
- $message.= __('-Can I add/write my own security rules?', 'ninjafirewall') . "\n";
351
- $message.= __('-Can I migrate my site(s) with NinjaFirewall installed?', 'ninjafirewall') . "\n\n";
352
-
353
- $message.= '5) '. __('Help & Support Links:', 'ninjafirewall') . "\n\n";
354
- $message.= __('-Each page of NinjaFirewall includes a contextual help: click on the "Help" menu tab located in the upper right corner of the corresponding page.', 'ninjafirewall') . "\n";
355
- $message.= __('-Online documentation is also available here:', 'ninjafirewall'). ' https://nintechnet.com/ninjafirewall/wp-edition/doc/ ' . "\n";
356
- $message.= __('-The WordPress support forum:', 'ninjafirewall') .' http://wordpress.org/support/plugin/ninjafirewall ' . "\n";
357
- $message.= __('-Updates info are available via Twitter:', 'ninjafirewall') .' https://twitter.com/nintechnet ' . "\n\n";
358
-
359
- $message.= 'NinjaFirewall (WP Edition) - https://nintechnet.com/ ' . "\n\n";
360
-
361
- if (! DONOTEMAIL ) {
362
- wp_mail( $recipient, $subject, $message );
363
- $_SESSION['email_install'] = $recipient;
364
- }
365
- }
366
- }
367
-
368
- /* ------------------------------------------------------------------ */
369
-
370
- function nfw_firewalltest() {
371
- ?>
372
- <div class="wrap">
373
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
374
-
375
- <?php
376
- if (! defined('NFW_STATUS') || NFW_STATUS != 20 ) {
377
-
378
- echo '<div class="error settings-error"><p>'. __('Error: The firewall is not loaded.', 'ninjafirewall'). '</p></div>
379
- <h3>'. __('Suggestions:', 'ninjafirewall'). '</h3>
380
- <ul>';
381
- if ($_SESSION['http_server'] == 1) {
382
-
383
- echo '<li>&#8729; '. __('You selected <code>Apache + PHP module</code> as your HTTP server and PHP SAPI. Maybe your HTTP server is <code>Apache + CGI/FastCGI</code>?', 'ninjafirewall'). '
384
- <br />
385
- '. __('You can click the "Go Back" button and try to select another HTTP server type.', 'ninjafirewall'). '</li><br /><br />';
386
-
387
-
388
- } elseif( $_SESSION['http_server'] == 4 ) {
389
- echo '<li>&#8729; '. __('You have selected LiteSpeed as your HTTP server. Did you enable the "AllowOverride" directive from its admin panel? Make sure it is enabled, restart LiteSpeed and then, click the "Test Again" button below.', 'ninjafirewall'). '</li>
390
- <form method="POST">
391
- <input type="submit" class="button-secondary" value="'. __('Test Again', 'ninjafirewall'). '" />
392
- <input type="hidden" name="nfw_act" value="postsave" />
393
- <input type="hidden" name="makechange" value="usr" />
394
- <input type="hidden" name="nfw_firstrun" value="1" />'. wp_nonce_field('postsave', 'nfwnonce', 0) .'
395
- </form><br />';
396
-
397
- } else {
398
-
399
- if ($_SESSION['php_ini_type'] == 2) {
400
- echo '<li>&#8729; '. __('You have selected <code>.user.ini</code> as your PHP initialization file. Unlike <code>php.ini</code>, <code>.user.ini</code> files are not reloaded immediately by PHP, but every five minutes. If this is your own server, restart Apache (or PHP-FPM if applicable) to force PHP to reload it, otherwise please <strong>wait up to five minutes</strong> and then, click the "Test Again" button below.', 'ninjafirewall'). '</li>
401
- <form method="POST">
402
- <input type="submit" class="button-secondary" value="'. __('Test Again', 'ninjafirewall'). '" />
403
- <input type="hidden" name="nfw_act" value="postsave" />
404
- <input type="hidden" name="makechange" value="usr" />
405
- <input type="hidden" name="nfw_firstrun" value="1" />'. wp_nonce_field('postsave', 'nfwnonce', 0) .'
406
- </form><br /><br />';
407
- }
408
- if ($_SESSION['http_server'] == 2) {
409
- if ( preg_match('/apache/i', PHP_SAPI) ) {
410
-
411
- echo '<li>&#8729; '. __('You selected <code>Apache + CGI/FastCGI</code> as your HTTP server and PHP SAPI. Maybe your HTTP server is <code>Apache + PHP module</code>?', 'ninjafirewall'). '
412
- <br />
413
- '. __('You can click the "Go Back" button and try to select another HTTP server type.', 'ninjafirewall'). '</li><br />';
414
- }
415
- }
416
- echo '<li>&#8729; '. __('Maybe you did not select the correct PHP INI ?', 'ninjafirewall'). '
417
- <br />
418
- '. __('You can click the "Go Back" button and try to select another one.', 'ninjafirewall'). '</li>';
419
- }
420
-
421
- echo '<form method="POST">
422
- <p><input type="submit" class="button-secondary" value="&#171; '. __('Go Back', 'ninjafirewall'). '" /></p>
423
- <input type="hidden" name="abspath" value="' . $_SESSION['abspath'] . '" />
424
- <input type="hidden" name="nfw_act" value="presave" />
425
- <input type="hidden" name="nfw_firstrun" value="1" />'. wp_nonce_field('presave', 'nfwnonce', 0) .'
426
- </form>
427
- <br />
428
- <li>&#8729; '. sprintf( __('If none of the above suggestions work, you can still install NinjaFirewall in %s mode by clicking the button below. Setup is easy and will always work.', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/">WordPress WAF</a>' ) . '</li>
429
- <form method="post">
430
- <input type="hidden" name="select_mode" value="wpwaf" />
431
- <input type="hidden" name="nfw_act" value="create_log_dir" />
432
- ' . wp_nonce_field('create_log_dir', 'nfwnonce', 0) . '
433
- <p><input class="button-secondary" type="submit" name="nextstep" value="' . __('Switch to the WordPress WAF mode installer &#187;', 'ninjafirewall') . '" /></p>
434
- </form>
435
- </ul>
436
- <br />
437
- <h3>'. __('Need help? Check our blog:', 'ninjafirewall'). ' <a href="https://blog.nintechnet.com/troubleshoot-ninjafirewall-installation-problems/" target="_blank">Troubleshoot NinjaFirewall installation problems</a>.</h3>
438
- </div>';
439
- }
440
- }
441
-
442
- /* ------------------------------------------------------------------ */
443
-
444
- function nfw_ini_data() {
445
-
446
- if (! defined('HTACCESS_BEGIN') ) {
447
- define( 'HTACCESS_BEGIN', '# BEGIN NinjaFirewall' );
448
- define( 'HTACCESS_DATA', '<IfModule mod_php' . PHP_MAJOR_VERSION . '.c>' . "\n" .
449
- ' php_value auto_prepend_file ' . NFW_LOG_DIR . '/nfwlog/ninjafirewall.php' . "\n" .
450
- '</IfModule>');
451
- define( 'LITESPEED_DATA', 'php_value auto_prepend_file ' . NFW_LOG_DIR . '/nfwlog/ninjafirewall.php');
452
- define( 'SUPHP_DATA', '<IfModule mod_suphp.c>' . "\n" .
453
- ' suPHP_ConfigPath ' . rtrim($_SESSION['abspath'], '/') . "\n" .
454
- '</IfModule>');
455
- define( 'HTACCESS_END', '# END NinjaFirewall' );
456
- define( 'PHPINI_BEGIN', '; BEGIN NinjaFirewall' );
457
- define( 'PHPINI_DATA', 'auto_prepend_file = ' . NFW_LOG_DIR . '/nfwlog/ninjafirewall.php' );
458
- define( 'PHPINI_END', '; END NinjaFirewall' );
459
- }
460
- }
461
-
462
- /* ------------------------------------------------------------------ */
463
-
464
- function nfw_wpconfig_data() {
465
-
466
- if (! defined('WP_CONFIG_BEGIN') ) {
467
- define( 'WP_CONFIG_BEGIN', '// BEGIN NinjaFirewall' );
468
- define( 'WP_CONFIG_DATA',
469
- 'if ( file_exists("' . plugin_dir_path( __FILE__ ) . 'lib/firewall.php' . '") && ! defined("NFW_STATUS") ) {' . "\n" .
470
- ' @include_once("' . plugin_dir_path( __FILE__ ) . 'lib/firewall.php' . '");' . "\n" .
471
- ' define("NFW_WPWAF", 1);' . "\n" .
472
- '}' );
473
- define( 'WP_CONFIG_END', '// END NinjaFirewall' );
474
- }
475
-
476
- }
477
-
478
- /* ------------------------------------------------------------------ */
479
-
480
- function nfw_default_conf() {
481
-
482
- // Load and save default config:
483
- require_once __DIR__ .'/lib/install_default.php';
484
- nfw_load_default_conf();
485
-
486
- }
487
-
488
- /* ------------------------------------------------------------------ */
489
- // EOF //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/ninjafirewall-fr_FR.mo CHANGED
Binary file
languages/ninjafirewall-fr_FR.po CHANGED
@@ -4,8 +4,8 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Stable (latest release)\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ninjafirewall\n"
7
- "POT-Creation-Date: 2019-04-20 17:56+0700\n"
8
- "PO-Revision-Date: 2019-04-20 17:59+0700\n"
9
  "Last-Translator: NinTechNet <contact@nintechnet.com>\n"
10
  "Language-Team: NinTechNet <nintechnet.com>\n"
11
  "Language: fr_FR\n"
@@ -16,625 +16,115 @@ msgstr ""
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n > 1);\n"
18
 
19
- #: install.php:128 install.php:373 lib/install_fullwaf.php:301
20
- #: lib/install_fullwaf.php:618 lib/install_wpwaf.php:48
21
- #: lib/install_wpwaf.php:201 lib/overview.php:32
22
- msgid "NinjaFirewall (WP Edition)"
23
- msgstr "NinjaFirewall (WP Edition)"
24
-
25
- #: install.php:132
26
- #, php-format
27
- msgid ""
28
- "Error: You have a copy of NinjaFirewall (%s) installed.<br />Please "
29
- "uninstall it completely before attempting to install NinjaFirewall (WP "
30
- "Edition)."
31
- msgstr ""
32
- "Erreur : Vous avez déjà une copie de NinjaFirewall (%s) installée<br /"
33
- ">Veuillez la désinstaller complètement avant d'installer NinjaFirewall (WP "
34
- "Edition)."
35
-
36
- #: install.php:136
37
- msgid "Thank you for using NinjaFirewall"
38
- msgstr "Merci d'utiliser NinjaFirewall"
39
-
40
- #: install.php:136
41
- msgid ""
42
- "This installer will help you to make the setup process as quick and easy as "
43
- "possible."
44
- msgstr ""
45
- "Cet installateur va vous aider afin de rendre le processus d'installation "
46
- "aussi rapide et facile que possible."
47
-
48
- #: install.php:138
49
- msgid ""
50
- "Although NinjaFirewall looks like a regular security plugin, it is not. It "
51
- "can be installed and configured from the WordPress admin console, but it is "
52
- "a stand-alone Web Application Firewall that sits in front of WordPress."
53
- msgstr ""
54
- "Bien que NinjaFirewall ressemble à toute autre extension pour WordPress, il "
55
- "est très différent. Il peut certes être installé et configuré à partir de "
56
- "votre Tableau de Bord, mais c'est un pare-feu applicatif autonome qui agit "
57
- "en amont de WordPress."
58
-
59
- #: install.php:138
60
- msgid ""
61
- "It can run in two different modes: <b>Full WAF</b> or <b>WordPress WAF</b> "
62
- "modes."
63
- msgstr ""
64
- "Il peut fonctionner en deux modes différents : <b>Full WAF</b> ou "
65
- "<b>WordPress WAF</b>."
66
-
67
- #: install.php:140
68
- msgid "Full WAF mode"
69
- msgstr "Mode Full WAF"
70
-
71
- #: install.php:142
72
- msgid ""
73
- "In <b>Full WAF</b> mode, NinjaFirewall will hook, scan, reject or sanitise "
74
- "any HTTP and HTTPS request sent to a PHP script before it reaches WordPress, "
75
- "its plugins or even the database. All scripts located inside the blog "
76
- "installation directories and sub-directories will be protected, including "
77
- "those that aren't part of the WordPress package. Even encoded PHP scripts (e."
78
- "g., ionCube), potential backdoors and shell scripts (e.g., c99, r57) will be "
79
- "filtered by NinjaFirewall."
80
- msgstr ""
81
- "En mode <b>Full WAF</b>, NinjaFirewall peut intercepter, analyser, nettoyer "
82
- "ou rejeter toute requête HTTP ou HTTPS envoyée à un script PHP avant même "
83
- "que celle-ci n'atteigne WordPress ou l'une de ses extensions. Tous les "
84
- "scripts situés dans le répertoire et sous-répertoires d'installation de "
85
- "votre blog seront protégés, y compris ceux qui ne font pas partie de "
86
- "WordPress. Même un script PHP encodé (par ex. ionCube), une éventuelle porte "
87
- "dérobée ou un script shell (par ex. c99, r57 ) installés par un pirate "
88
- "seront filtrés par NinjaFirewall."
89
-
90
- #: install.php:144
91
- #, php-format
92
- msgid ""
93
- "That makes it a true firewall and gives you the highest possible level of "
94
- "protection: <a href=\"%s\" title=\"%s\">security without compromise</a>."
95
- msgstr ""
96
- "Cela fait de lui un véritable pare-feu applicatif et vous offre le niveau de "
97
- "protection le plus élevé possible : <a href=\"%s\" title=\"%s\">La sécurité "
98
- "sans aucun compromis</a>."
99
-
100
- #: install.php:146
101
- #, php-format
102
- msgid ""
103
- "To run NinjaFirewall in <b>Full WAF</b> mode, your server must allow the use "
104
- "of the <code>auto_prepend_file</code> PHP directive. It is required to "
105
- "instruct the PHP interpreter to load the firewall before WordPress or any "
106
- "other script. Most of the time it works right out of the box, or may require "
107
- "<a href=\"%s\" title=\"%s\">some very little tweaks</a>. But in a few cases, "
108
- "mostly because of some shared hosting plans restrictions, it may simply not "
109
- "work at all."
110
- msgstr ""
111
- "Pour installer NinjaFirewall en mode <b>Full WAF</b>, votre serveur doit "
112
- "autoriser l'utilisation de la directive PHP <code>auto_prepend_file</code>. "
113
- "Celle-ci est nécessaire pour forcer l'interpréteur PHP à charger le pare-feu "
114
- "avant WordPress ou tout autre script. La plupart du temps, l'installation "
115
- "fonctionne sans aucun problème ou, peut nécessiter <a href=\"%s\" title=\"%s"
116
- "\">quelques petits ajustements</a>. Mais dans quelques cas, principalement "
117
- "en raison de certaines restrictions d'hébergement partagé, il se peut que "
118
- "l'installation ne puisse pas fonctionner du tout."
119
-
120
- #: install.php:148 install.php:164
121
- msgid "WordPress WAF mode"
122
- msgstr "Mode WordPress WAF"
123
-
124
- #: install.php:150
125
- msgid ""
126
- "The <b>WordPress WAF</b> mode requires to load NinjaFirewall via the "
127
- "WordPress wp-config.php script. This process makes it easy to setup and the "
128
- "installation will always be successful, regardless of your hosting plan "
129
- "restrictions."
130
- msgstr ""
131
- "Le mode <b>WordPress WAF</b> nécessite de charger NinjaFirewall via le "
132
- "script wp-config.php de WordPress. L'installation est très simple et "
133
- "toujours couronnée de succès et ce, quelles que soient les restrictions de "
134
- "votre plan hébergement."
135
-
136
- #: install.php:150
137
- msgid ""
138
- "NinjaFirewall will still load before WordPress, its plugins and the database "
139
- "and will run as fast as the <b>Full WAF</b> mode."
140
- msgstr ""
141
- "NinjaFirewall se chargera là encore avant WordPress, ses extensions et la "
142
- "base de données, et ses performances seront identiques à celles du mode "
143
- "<b>Full WAF</b>."
144
-
145
- #: install.php:152
146
- msgid ""
147
- "However, the downside of this mode is that NinjaFirewall will be able to "
148
- "hook and filter HTTP requests sent to WordPress only. A few features such as "
149
- "File Guard, the URL Access Control and Web Filter (WP+ Edition only) will be "
150
- "limited."
151
- msgstr ""
152
- "Toutefois, l'inconvénient de ce mode est que NinjaFirewall ne pourra "
153
- "intercepter, analyser, nettoyer ou rejeter que les requêtes HTTP ou HTTPS "
154
- "directement adressées à WordPress uniquement, et non plus à tout autre "
155
- "script PHP ou application tierce. Certaines fonctionnalités telles que File "
156
- "Guard, le contrôle d'accès par URL et Web Filter (WP+ Edition uniquement) "
157
- "seront limitées."
158
-
159
- #: install.php:154
160
- msgid ""
161
- "Despite being less powerful than the <b>Full WAF</b> mode, it still offers a "
162
- "level of protection and performance higher than any other security plugin."
163
- msgstr ""
164
- "Bien que moins puissant que <b>Full WAF</b>, le mode <b>WordPress WAF</b> "
165
- "offre tout de même des performances et un niveau de protection supérieurs "
166
- "aux autres extensions de sécurité pour WordPress disponibles sur le marché."
167
-
168
- #: install.php:156 ninjafirewall.php:464
169
- msgid "Installation"
170
- msgstr "Installation"
171
-
172
- #: install.php:158
173
- msgid ""
174
- "We recommend to select the <b>Full WAF</b> mode option first. If it fails, "
175
- "this installer will let you switch to the <b>WordPress WAF</b> mode easily."
176
- msgstr ""
177
- "Nous vous recommandons de sélectionner d'abord l'option <b>Full WAF</b>. Si "
178
- "elle échoue, ce programme d'installation vous proposera de passer facilement "
179
- "au mode <b>WordPress WAF</b>."
180
-
181
- #: install.php:162
182
- msgid "Full WAF mode (recommended)"
183
- msgstr "Mode Full WAF (recommandé)"
184
-
185
- #: install.php:166
186
- msgid ""
187
- "Enter the email address where NinjaFirewall will send notifications and "
188
- "reports:"
189
- msgstr ""
190
- "Entrez l'adresse e-mail où NinjaFirewall enverra ses notifications et "
191
- "rapports :"
192
-
193
- #: install.php:168 lib/install_fullwaf.php:45 lib/install_fullwaf.php:235
194
- #: lib/install_fullwaf.php:489 lib/install_wpwaf.php:140
195
- msgid "Next Step"
196
- msgstr "Étape suivante"
197
-
198
- #: install.php:175
199
- msgid "Privacy policy"
200
- msgstr "Politique de confidentialité"
201
-
202
- #: install.php:177 lib/about.php:198 lib/help.php:460
203
- msgid ""
204
- "Your website can run NinjaFirewall and be compliant with the General Data "
205
- "Protection Regulation (GDPR). For more info, please visit our blog:"
206
- msgstr ""
207
- "NinjaFirewall est conforme à la réglementation générale sur la protection "
208
- "des données (RGPD). Pour plus d'informations, veuillez visiter notre blog :"
209
-
210
- #: install.php:198
211
- #, php-format
212
- msgid ""
213
- "NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
214
- "please make sure that the <code>%s</code> directory is writable"
215
- msgstr ""
216
- "NinjaFirewall ne peut pas créer le répertoire <code>nfwlog/</code>; veuillez "
217
- "vous assurer que le répertoire <code>%s</code> est accessible en écriture"
218
-
219
- #: install.php:232
220
- msgid ""
221
- "This is NinjaFirewall's logs, loader and cache directory. DO NOT alter or "
222
- "remove it as long as NinjaFirewall is running!"
223
- msgstr ""
224
- "Ce répertoire est utilisé par NinjaFirewall. Veuillez NE PAS le supprimer "
225
- "tant que NinjaFirewall est installé !"
226
-
227
- #: install.php:258 lib/firewall_policies.php:107 lib/help.php:168
228
- #: lib/install_fullwaf.php:33 lib/install_fullwaf.php:141 ninjafirewall.php:489
229
- msgid "Firewall Policies"
230
- msgstr "Politiques du Pare-feu"
231
-
232
- #: install.php:266
233
- msgid "Try again"
234
- msgstr "Essayer à nouveau"
235
-
236
- #: install.php:284
237
- msgid "Quick Start, FAQ & Troubleshooting Guide"
238
- msgstr "Guide d'Utilisation, d'Installation et de Dépannage"
239
-
240
- #: install.php:285
241
- msgid "Hi,"
242
- msgstr "Bonjour,"
243
-
244
- #: install.php:287
245
- msgid ""
246
- "This is NinjaFirewall's installer. Below are some helpful info and links you "
247
- "may consider reading before using NinjaFirewall."
248
- msgstr ""
249
- "Je suis l'installateur de NinjaFirewall. Voici quelques informations et "
250
- "liens qui pourraient vous être utiles (en langue anglaise) :"
251
-
252
- #: install.php:289
253
- msgid "Must Read:"
254
- msgstr "A lire aussi :"
255
-
256
- #: install.php:291
257
- msgid "-Securing WordPress with NinjaFirewall. A step by step tutorial:"
258
- msgstr ""
259
- "-Sécurisation de WordPress avec NinjaFirewall. Un tutoriel étape par étape :"
260
-
261
- #: install.php:294
262
- msgid "-An introduction to NinjaFirewall filtering engine:"
263
- msgstr "-Présentation du moteur de filtrage de NinjaFirewall :"
264
-
265
- #: install.php:297
266
- msgid "-Testing NinjaFirewall without blocking your visitors:"
267
- msgstr "-Tester NinjaFirewall sans bloquer vos visiteurs :"
268
-
269
- #: install.php:300
270
- msgid "-Add your own code to the firewall: the \".htninja\" file:"
271
- msgstr "-Ajoutez votre code au pare-feu: le fichier \".htninja\" :"
272
-
273
- #: install.php:303
274
- msgid "-Restricting access to NinjaFirewall settings:"
275
- msgstr "-Restreindre l'accès à la configuration de NinjaFirewall :"
276
-
277
- #: install.php:306
278
- msgid "-Upgrading to PHP 7 with NinjaFirewall installed:"
279
- msgstr "-Mise à niveau de PHP 5 vers PHP 7 avec NinjaFirewall installé :"
280
-
281
- #: install.php:309
282
- msgid "-Keep your blog protected against the latest vulnerabilities:"
283
- msgstr "-Gardez votre blog protégé contre les dernières vulnérabilités :"
284
-
285
- #: install.php:312
286
- msgid "-Test your website security with our online scanner:"
287
- msgstr "- Testez la sécurité de votre site avec notre scanner en ligne :"
288
-
289
- #: install.php:315
290
- msgid "-NinjaFirewall Referral Program:"
291
- msgstr "-Programme de parrainage de NinjaFirewall :"
292
-
293
- #: install.php:318
294
- msgid "Troubleshooting:"
295
- msgstr "Dépannage :"
296
-
297
- #: install.php:321
298
- msgid "-Locked out of your site / Fatal error / WordPress crash?"
299
- msgstr ""
300
- "-Votre site n'est plus accessible / Erreur fatale / WordPress a planté ?"
301
-
302
- #: install.php:322
303
- msgid "-Failed installation (\"Error: The firewall is not loaded\")?"
304
- msgstr ""
305
- "-Échec de l'installation (\"Erreur : Le pare-feu n'est pas activé.\") ?"
306
-
307
- #: install.php:323
308
- msgid "-Blank page after INSTALLING NinjaFirewall?"
309
- msgstr "-Page blanche après l'INSTALLATION de NinjaFirewall ?"
310
-
311
- #: install.php:324
312
- msgid "-Blank page after UNINSTALLING NinjaFirewall?"
313
- msgstr "-Page blanche après la DÉSINSTALLATION de NinjaFirewall ?"
314
-
315
- #: install.php:325
316
- msgid "-500 Internal Server Error?"
317
- msgstr "-500 Internal Server Error ?"
318
-
319
- #: install.php:326
320
- msgid "-\"Cannot connect to WordPress database\" error message?"
321
- msgstr "-Impossible de se connecter à la base de données WordPress ?"
322
-
323
- #: install.php:327
324
- msgid "-How to disable NinjaFirewall?"
325
- msgstr "-Comment désactiver NinjaFirewall ?"
326
-
327
- #: install.php:328
328
- msgid "-Lost password (brute-force protection)?"
329
- msgstr ""
330
- "-Vous avez perdu le mot de passe de la protection contre les attaques par "
331
- "force brute ?"
332
-
333
- #: install.php:329
334
- msgid "-Blocked visitors (see below)?"
335
- msgstr "-Vos visiteurs sont bloqués par erreur (voir ci-dessous) ?"
336
-
337
- #: install.php:330
338
- msgid "-Exporting NinjaFirewall's configuration"
339
- msgstr "-Exporter la configuration de NinjaFirewall"
340
-
341
- #: install.php:332
342
- msgid "-NinjaFirewall (WP Edition) troubleshooter script"
343
- msgstr "-Script de dépannage NinjaFirewall (WP Edition)"
344
-
345
- #: install.php:334
346
- msgid "-Rename this file to \"wp-check.php\"."
347
- msgstr "-Renommez ce fichier en \"wp-check.php\"."
348
-
349
- #: install.php:335
350
- msgid "-Upload it into your WordPress root folder."
351
- msgstr "-Téléchargez-le dans le repertoire racine de WordPress."
352
-
353
- #: install.php:336
354
- msgid "-Goto http://YOUR WEBSITE/wp-check.php."
355
- msgstr "-Rendez-vous sur http://VOTRE_SITE/wp-check.php."
356
-
357
- #: install.php:337
358
- msgid "-Delete it afterwards."
359
- msgstr "-Supprimez-le lorsque vous avez fini."
360
-
361
- #: install.php:339
362
- msgid "FAQ:"
363
- msgstr "FAQ :"
364
-
365
- #: install.php:342
366
- msgid ""
367
- "-Why is NinjaFirewall different from other security plugins for WordPress?"
368
- msgstr ""
369
- "-En quoi NinjaFirewall est-il différent des autres extensions de sécurité "
370
- "pour WordPress ?"
371
-
372
- #: install.php:343
373
- msgid "-Do I need root privileges to install NinjaFirewall?"
374
- msgstr ""
375
- "-Ai-je besoin d'avoir les privilèges root pour installer NinjaFirewall ?"
376
-
377
- #: install.php:344
378
- msgid "-Does it work with Nginx?"
379
- msgstr "-Est-ce qu'il fonctionne avec Nginx ?"
380
-
381
- #: install.php:345
382
- msgid "-Do I need to alter my PHP scripts?"
383
- msgstr "-Dois-je modifier mes script PHP ?"
384
-
385
- #: install.php:346
386
- msgid ""
387
- "-Will NinjaFirewall detect the correct IP of my visitors if I am behind a "
388
- "CDN service like Cloudflare or Incapsula?"
389
- msgstr ""
390
- "-Est-ce que NinjaFirewall détectera la bonne adresse IP de mes visiteurs si "
391
- "j'utilise un service CDN comme Cloudflare ou Incapsula ?"
392
-
393
- #: install.php:347
394
- msgid ""
395
- "-I moved my wp-config.php file to another directory. Will it work with "
396
- "NinjaFirewall?"
397
- msgstr ""
398
- "-J'ai déplacé mon fichier wp-config.php dans un autre répertoire. "
399
- "NinjaFirewall va-t-il fonctionner ?"
400
-
401
- #: install.php:348
402
- msgid "-Will it slow down my site?"
403
- msgstr "-Est-ce qu'il va ralentir mon site ?"
404
-
405
- #: install.php:349
406
- msgid "-Is there a Microsoft Windows version?"
407
- msgstr "-Existe-t-il une version pour Microsoft Windows ?"
408
-
409
- #: install.php:350
410
- msgid "-Can I add/write my own security rules?"
411
- msgstr "-Puis-je ajouter / écrire mes propres règles de sécurité ?"
412
-
413
- #: install.php:351
414
- msgid "-Can I migrate my site(s) with NinjaFirewall installed?"
415
- msgstr ""
416
- "-Est-ce que je peux migrer mon site lorsque NinjaFirewall est installé ?"
417
-
418
- #: install.php:353
419
- msgid "Help & Support Links:"
420
- msgstr "Aide & Support :"
421
-
422
- #: install.php:354
423
- msgid ""
424
- "-Each page of NinjaFirewall includes a contextual help: click on the \"Help"
425
- "\" menu tab located in the upper right corner of the corresponding page."
426
- msgstr ""
427
- "-Si vous avez besoin d'aide, cliquez sur l'onglet \"Aide\" situé dans le "
428
- "coin supérieur droit de chaque page."
429
-
430
- #: install.php:355
431
- msgid "-Online documentation is also available here:"
432
- msgstr "-Une documentation est aussi disponible en ligne :"
433
-
434
- #: install.php:356
435
- msgid "-The WordPress support forum:"
436
- msgstr "-Le forum de WordPress :"
437
-
438
- #: install.php:357
439
- msgid "-Updates info are available via Twitter:"
440
- msgstr "-Info sur les mises à jour via Twitter&nbsp;:"
441
-
442
- #: install.php:378
443
- msgid "Error: The firewall is not loaded."
444
- msgstr "Erreur&nbsp;: Le pare-feu n'est pas activé."
445
-
446
- #: install.php:379
447
- msgid "Suggestions:"
448
- msgstr "Suggestions&nbsp;:"
449
-
450
- #: install.php:383
451
- msgid ""
452
- "You selected <code>Apache + PHP module</code> as your HTTP server and PHP "
453
- "SAPI. Maybe your HTTP server is <code>Apache + CGI/FastCGI</code>?"
454
- msgstr ""
455
- "Vous avez sélectionné <code>Apache + PHP module</code> comme serveur HTTP et "
456
- "PHP SAPI. Peut-être que votre serveur utilise <code>Apache + CGI/FastCGI</"
457
- "code>&nbsp;?"
458
-
459
- #: install.php:385 install.php:413
460
- msgid ""
461
- "You can click the \"Go Back\" button and try to select another HTTP server "
462
- "type."
463
- msgstr ""
464
- "Vous pouvez cliquer sur le bouton \"Retour\" et essayer de sélectionner un "
465
- "autre type de serveur HTTP."
466
-
467
- #: install.php:389
468
- msgid ""
469
- "You have selected LiteSpeed as your HTTP server. Did you enable the "
470
- "\"AllowOverride\" directive from its admin panel? Make sure it is enabled, "
471
- "restart LiteSpeed and then, click the \"Test Again\" button below."
472
- msgstr ""
473
- "Vous avez sélectionné LiteSpeed comme serveur HTTP. Avez-vous activé la "
474
- "directive \"AllowOverride\" à partir de son panneau d'administration ? "
475
- "Assurez-vous qu'elle est activée, redémarrez LiteSpeed, puis cliquez sur le "
476
- "bouton \"Tester à nouveau\" ci-dessous."
477
-
478
- #: install.php:391 install.php:402
479
- msgid "Test Again"
480
- msgstr "Tester à nouveau"
481
-
482
- #: install.php:400
483
- msgid ""
484
- "You have selected <code>.user.ini</code> as your PHP initialization file. "
485
- "Unlike <code>php.ini</code>, <code>.user.ini</code> files are not reloaded "
486
- "immediately by PHP, but every five minutes. If this is your own server, "
487
- "restart Apache (or PHP-FPM if applicable) to force PHP to reload it, "
488
- "otherwise please <strong>wait up to five minutes</strong> and then, click "
489
- "the \"Test Again\" button below."
490
- msgstr ""
491
- "Vous avez sélectionné <code>.user.ini</code> comme fichier d'initialisation "
492
- "de PHP. Contrairement aux fichiers <code>php.ini</code>, après leur "
493
- "modification les fichiers <code>.user.ini</code> ne sont pas rechargés "
494
- "immédiatement par PHP, mais environ toutes les cinq minutes. Si ceci est "
495
- "votre serveur, redémarrez Apache (ou PHP-FPM le cas échéant) afin de forcer "
496
- "PHP à le recharger, sinon veuillez <strong>patienter jusqu'à cinq minutes</"
497
- "strong> avant de cliquer sur le bouton \"Tester à nouveau\" ci-dessous."
498
-
499
- #: install.php:411
500
- msgid ""
501
- "You selected <code>Apache + CGI/FastCGI</code> as your HTTP server and PHP "
502
- "SAPI. Maybe your HTTP server is <code>Apache + PHP module</code>?"
503
- msgstr ""
504
- "Vous avez sélectionné <code>Apache + CGI/FastCGI</code> comme serveur HTTP "
505
- "et PHP SAPI. Peut-être que votre serveur utilise <code>Apache + PHP module</"
506
- "code>&nbsp;?"
507
-
508
- #: install.php:416
509
- msgid "Maybe you did not select the correct PHP INI ?"
510
- msgstr ""
511
- "Peut-être que vous n'avez pas sélectionné le bon fichier PHP INI&nbsp;?"
512
-
513
- #: install.php:418
514
- msgid "You can click the \"Go Back\" button and try to select another one."
515
- msgstr ""
516
- "Vous pouvez cliquer sur le bouton \"Retour\" et essayer d'en sélectionner un "
517
- "autre."
518
-
519
- #: install.php:422
520
- msgid "Go Back"
521
- msgstr "Retour"
522
-
523
- #: install.php:428
524
- #, php-format
525
- msgid ""
526
- "If none of the above suggestions work, you can still install NinjaFirewall "
527
- "in %s mode by clicking the button below. Setup is easy and will always work."
528
- msgstr ""
529
- "Si aucune des suggestions ci-dessus ne fonctionnent, vous pouvez installer "
530
- "NinjaFirewall en mode %s en cliquant sur le bouton ci-dessous. "
531
- "L'installation est facile et toujours couronnée de succès."
532
-
533
- #: install.php:433
534
- msgid "Switch to the WordPress WAF mode installer &#187;"
535
- msgstr "Passer à l'installateur WordPress WAF &#187;"
536
-
537
- #: install.php:437
538
- msgid "Need help? Check our blog:"
539
- msgstr "Besoin d'aide ? Consultez notre blog :"
540
-
541
  #: lib/about.php:31
542
  msgid "Error : cannot find changelog :("
543
  msgstr "Erreur: impossible de trouver le fichier changelog :("
544
 
545
- #: lib/about.php:53
546
  msgid "About"
547
  msgstr "À Propos"
548
 
549
- #: lib/about.php:74
550
  msgid "A powerful antivirus<br />scanner for WordPress."
551
  msgstr "Un puissant antivirus<br />pour WordPress."
552
 
553
- #: lib/about.php:76
554
  msgid "Free Download"
555
  msgstr "Télécharger"
556
 
557
- #: lib/about.php:80
558
  msgid "Website Monitoring<br />for just $4.99/month."
559
  msgstr "Surveillance de site<br />à partir de $4.99/mois."
560
 
561
- #: lib/about.php:82
562
  msgid "7-Day Free Trial"
563
  msgstr "Essai Gratuit"
564
 
565
- #: lib/about.php:86
566
  msgid "Malware removal<br />and hack recovery."
567
  msgstr "Nettoyage de site<br />piraté ou infecté."
568
 
569
- #: lib/about.php:88
570
  msgid "Clean Your Site!"
571
  msgstr "Nettoyez votre site"
572
 
573
- #: lib/about.php:100
574
  msgid "Changelog"
575
  msgstr "Changelog"
576
 
577
- #: lib/about.php:100
578
  msgid "Spread the word!"
579
  msgstr "Partagez !"
580
 
581
- #: lib/about.php:100
582
  msgid "Referral Program"
583
  msgstr "Programme de parrainage"
584
 
585
- #: lib/about.php:100
586
  msgid "System Info"
587
  msgstr "Info système"
588
 
589
- #: lib/about.php:100 lib/help.php:458
590
  msgid "GDPR Compliance"
591
  msgstr "Conformité RGPD"
592
 
593
- #: lib/about.php:134
 
 
 
 
 
 
 
 
 
 
 
 
594
  msgid "PHP version"
595
  msgstr "Version PHP"
596
 
597
- #: lib/about.php:143
598
  msgid "HTTP server"
599
  msgstr "Serveur HTTP"
600
 
601
- #: lib/about.php:146
602
  msgid "Operating System"
603
  msgstr "Système d'exploitation"
604
 
605
- #: lib/about.php:149
606
  msgid "Load Average"
607
  msgstr "Charge moyenne"
608
 
609
- #: lib/about.php:167
610
  msgid "RAM"
611
  msgstr "RAM"
612
 
613
- #: lib/about.php:167
614
  msgid "MB free"
615
  msgstr "Mo libres"
616
 
617
- #: lib/about.php:167
618
  msgid "MB total"
619
  msgstr "Mo total"
620
 
621
- #: lib/about.php:175
622
  msgid "Processor"
623
  msgid_plural "Processors"
624
  msgstr[0] "Processeur"
625
  msgstr[1] "Processeurs"
626
 
627
- #: lib/about.php:175
628
  msgid "CPU core:"
629
  msgid_plural "CPU cores:"
630
  msgstr[0] "cœur :"
631
  msgstr[1] "cœurs :"
632
 
633
- #: lib/about.php:176
634
  msgid "CPU model"
635
  msgstr "Modèle CPU"
636
 
637
- #: lib/about.php:188
638
  #, php-format
639
  msgid ""
640
  "By joining our NinjaFirewall Referral Program you can earn up to %s for "
@@ -644,7 +134,7 @@ msgstr ""
644
  "gagner jusqu'à %s pour chaque paiement effectué par un utilisateur qui "
645
  "achète une licence en utilisant votre lien de parrainage personnel."
646
 
647
- #: lib/about.php:189
648
  #, php-format
649
  msgid ""
650
  "For more info and subscription, please check our <a href=\"%s\">Referral "
@@ -653,7 +143,15 @@ msgstr ""
653
  "Pour plus d'information, consultez notre page du <a href=\"%s\">Programme de "
654
  "Parrainage</a>."
655
 
656
- #: lib/anti_malware.php:24 ninjafirewall.php:507
 
 
 
 
 
 
 
 
657
  msgid "Anti-Malware"
658
  msgstr "Anti-Malware"
659
 
@@ -694,11 +192,11 @@ msgstr ""
694
  msgid "NinjaFirewall Statistics"
695
  msgstr "Statistiques de NinjaFirewall"
696
 
697
- #: lib/dashboard_widget.php:54 lib/statistics.php:109
698
  msgid "Blocked threats"
699
  msgstr "Menaces bloquées"
700
 
701
- #: lib/dashboard_widget.php:58 lib/statistics.php:113
702
  msgid "Threats level"
703
  msgstr "Niveau des menaces"
704
 
@@ -714,107 +212,111 @@ msgstr "Élevé :"
714
  msgid "Medium:"
715
  msgstr "Moyen :"
716
 
 
 
 
 
717
  #: lib/dashboard_widget.php:86
718
  msgid "View firewall log"
719
  msgstr "Voir le journal du pare-feu"
720
 
721
- #: lib/event_notifications.php:45 lib/help.php:350 ninjafirewall.php:515
722
  msgid "Event Notifications"
723
  msgstr "Notifications d'Événement"
724
 
725
- #: lib/event_notifications.php:53 lib/file_check.php:113 lib/file_guard.php:73
726
- #: lib/firewall_log.php:58 lib/firewall_options.php:83
727
- #: lib/firewall_policies.php:116 lib/live_log.php:223
728
- #: lib/login_protection.php:30 lib/network.php:49 lib/rules_update.php:104
729
  msgid "Your changes have been saved."
730
  msgstr "Les modifications ont été enregistrées."
731
 
732
- #: lib/event_notifications.php:63
733
  msgid "WordPress admin dashboard"
734
  msgstr "Connexion"
735
 
736
- #: lib/event_notifications.php:66 lib/event_notifications.php:135
737
  msgid "Send me an alert whenever"
738
  msgstr "Envoyer une alerte quand"
739
 
740
- #: lib/event_notifications.php:68
741
  msgid "An administrator logs in (default)"
742
  msgstr "Un Administrateur se connecte (défaut)"
743
 
744
- #: lib/event_notifications.php:69
745
  msgid "Someone - user, admin, editor, etc - logs in"
746
  msgstr "Quelqu'un - utilisateur, admin, éditeur etc - se connecte"
747
 
748
- #: lib/event_notifications.php:70
749
  msgid "No, thanks (not recommended)"
750
  msgstr "Non, merci"
751
 
752
- #: lib/event_notifications.php:77
753
  msgid "Plugins"
754
  msgstr "Extensions"
755
 
756
- #: lib/event_notifications.php:80 lib/event_notifications.php:97
757
- #: lib/event_notifications.php:112
758
  msgid "Send me an alert whenever someone"
759
  msgstr "Envoyer une alerte quand quelqu'un"
760
 
761
- #: lib/event_notifications.php:82
762
  msgid "Uploads a plugin (default)"
763
  msgstr "Télécharge une extension (défaut)"
764
 
765
- #: lib/event_notifications.php:83
766
  msgid "Installs a plugin (default)"
767
  msgstr "Installe une extension (défaut)"
768
 
769
- #: lib/event_notifications.php:84
770
  msgid "Activates a plugin"
771
  msgstr "Active une extension"
772
 
773
- #: lib/event_notifications.php:85
774
  msgid "Updates a plugin"
775
  msgstr "Met à jour une extension"
776
 
777
- #: lib/event_notifications.php:86
778
  msgid "Deactivates a plugin (default)"
779
  msgstr "Désactive une extension (défaut)"
780
 
781
- #: lib/event_notifications.php:87
782
  msgid "Deletes a plugin"
783
  msgstr "Supprime une extension"
784
 
785
- #: lib/event_notifications.php:94
786
  msgid "Themes"
787
  msgstr "Thèmes"
788
 
789
- #: lib/event_notifications.php:99
790
  msgid "Uploads a theme (default)"
791
  msgstr "Télécharge un thème (défaut)"
792
 
793
- #: lib/event_notifications.php:100
794
  msgid "Installs a theme (default)"
795
  msgstr "Installe un thème (défaut)"
796
 
797
- #: lib/event_notifications.php:101
798
  msgid "Activates a theme"
799
  msgstr "Active un thème"
800
 
801
- #: lib/event_notifications.php:102
802
  msgid "Deletes a theme"
803
  msgstr "Supprime un thème"
804
 
805
- #: lib/event_notifications.php:109
806
  msgid "Core"
807
  msgstr "WordPress"
808
 
809
- #: lib/event_notifications.php:114
810
  msgid "Updates WordPress (default)"
811
  msgstr "Met à jour WordPress (défaut)"
812
 
813
- #: lib/event_notifications.php:132
814
  msgid "Administrator account"
815
  msgstr "Compte administrateur"
816
 
817
- #: lib/event_notifications.php:137
818
  msgid ""
819
  "An administrator account is created, modified or deleted in the database "
820
  "(default)"
@@ -822,82 +324,85 @@ msgstr ""
822
  "Un compte Administrateur est crée, modifié ou supprimé dans la base de "
823
  "données (défaut)"
824
 
825
- #: lib/event_notifications.php:138
826
  msgid "A user attempts to gain administrative privileges (default)"
827
  msgstr ""
828
  "Un utilisateur a essayé d'élever ses privilèges pour devenir administrateur "
829
  "du blog (défaut)"
830
 
831
- #: lib/event_notifications.php:145
832
  msgid "Daily report"
833
  msgstr "Rapport quotidien"
834
 
835
- #: lib/event_notifications.php:148
836
  msgid "Send me a daily activity report"
837
  msgstr "Envoyer un rapport d'activité quotidien"
838
 
839
- #: lib/event_notifications.php:150 lib/event_notifications.php:162
840
- #: lib/firewall_policies.php:566 lib/firewall_policies.php:609
841
- #: lib/firewall_policies.php:629 lib/firewall_policies.php:679
842
- #: lib/firewall_policies.php:724 lib/firewall_policies.php:734
843
- #: lib/firewall_policies.php:744 lib/firewall_policies.php:787
844
- #: lib/firewall_policies.php:830 lib/firewall_policies.php:850
845
- #: lib/firewall_policies.php:1064 lib/firewall_policies.php:1120
846
- #: lib/firewall_policies.php:1130 lib/firewall_policies.php:1140
847
- #: lib/firewall_policies.php:1150 lib/firewall_policies.php:1197
848
- #: lib/firewall_policies.php:1207 lib/network.php:63 lib/rules_update.php:145
849
- msgid "Yes (default)"
850
- msgstr "Oui (défaut)"
851
-
852
- #: lib/event_notifications.php:157
 
 
 
853
  msgid "Log"
854
  msgstr "Journal"
855
 
856
- #: lib/event_notifications.php:160
857
  msgid "Write all events to the firewall log"
858
  msgstr "Enregistrer les événements dans le journal du pare-feu"
859
 
860
- #: lib/event_notifications.php:174
861
  msgid "PHP backtrace"
862
  msgstr "Pile d'exécution de PHP"
863
 
864
- #: lib/event_notifications.php:177
865
  msgid "Attach a PHP backtrace to important notifications"
866
  msgstr ""
867
  "Ajouter aux notifications importantes la pile d'exécution de PHP en pièce "
868
  "jointe"
869
 
870
- #: lib/event_notifications.php:180
871
  msgid "Disable backtrace"
872
  msgstr "Désactiver la pile d'exécution"
873
 
874
- #: lib/event_notifications.php:181
875
  msgid "Low verbosity"
876
  msgstr "Faible verbosité"
877
 
878
- #: lib/event_notifications.php:182
879
  msgid "Medium verbosity (default)"
880
  msgstr "Verbosité moyenne (par défaut)"
881
 
882
- #: lib/event_notifications.php:183
883
  msgid "High verbosity"
884
  msgstr "Verbosité élevée"
885
 
886
- #: lib/event_notifications.php:185
887
  #, php-format
888
  msgid "<a href=\"%s\">Consult our blog</a> for more info."
889
  msgstr ""
890
  "<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
891
 
892
- #: lib/event_notifications.php:195 lib/event_notifications.php:225
893
  msgid "Contact email"
894
  msgstr "Adresse e-mail du contact"
895
 
896
- #: lib/event_notifications.php:198 lib/event_notifications.php:228
897
  msgid "Alerts should be sent to"
898
  msgstr "Envoyer les alertes à"
899
 
900
- #: lib/event_notifications.php:207 lib/event_notifications.php:233
901
  msgid ""
902
  "Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
903
  "alice@example.org</code>)."
@@ -905,60 +410,60 @@ msgstr ""
905
  "Plusieurs destinataires doivent être séparés par des virgules (par ex. "
906
  "<code>joe@example.org,alice@example.org</code>)."
907
 
908
- #: lib/event_notifications.php:230
909
  msgid "Only to me, the Super Admin"
910
  msgstr "Moi uniquement, le Super Admin"
911
 
912
- #: lib/event_notifications.php:230
913
  msgid "default"
914
  msgstr "défaut"
915
 
916
- #: lib/event_notifications.php:231
917
  msgid "To the administrator of the site where originated the alert"
918
  msgstr "L'Administrateur du site d’où provient l'alerte"
919
 
920
- #: lib/event_notifications.php:232
921
  msgid "Other(s):"
922
  msgstr "Autre(s) :"
923
 
924
- #: lib/event_notifications.php:244
925
  msgid "Save Event Notifications"
926
  msgstr "Sauvegarder les options"
927
 
928
- #: lib/event_notifications.php:472
929
  msgid "[NinjaFirewall] Daily Activity Report"
930
  msgstr "[NinjaFirewall] Rapport d'activité quotidien"
931
 
932
- #: lib/event_notifications.php:482
933
  #, php-format
934
  msgid "Daily activity report for: %s"
935
  msgstr "Rapport d'activité quotidien pour : %s"
936
 
937
- #: lib/event_notifications.php:483
938
  msgid "Date Range Processed: Yesterday"
939
  msgstr "Plage de date traitée : Hier"
940
 
941
- #: lib/event_notifications.php:485
942
  msgid "Blocked threats:"
943
  msgstr "Menaces bloquées :"
944
 
945
- #: lib/event_notifications.php:487
946
  msgid "critical:"
947
  msgstr "Critique :"
948
 
949
- #: lib/event_notifications.php:488
950
  msgid "high:"
951
  msgstr "Élevé :"
952
 
953
- #: lib/event_notifications.php:489
954
  msgid "medium:"
955
  msgstr "Moyen :"
956
 
957
- #: lib/event_notifications.php:491
958
  msgid "Blocked brute-force attacks:"
959
  msgstr "Attaques par force brute bloquées :"
960
 
961
- #: lib/event_notifications.php:492 lib/utils.php:793 lib/utils.php:958
962
  msgid ""
963
  "This notification can be turned off from NinjaFirewall \"Event Notifications"
964
  "\" page."
@@ -966,16 +471,16 @@ msgstr ""
966
  "Cette notification peut être désactivée depuis la page \"Notifications "
967
  "d’Événement\" de NinjaFirewall."
968
 
969
- #: lib/event_notifications.php:496 lib/file_check.php:855
970
- #: lib/file_check.php:876 lib/firewall_options.php:573 lib/rules_update.php:569
971
- #: lib/utils.php:688
972
  msgid "Support forum:"
973
  msgstr "Forum :"
974
 
975
- #: lib/event_notifications.php:499 lib/file_check.php:858
976
- #: lib/file_check.php:879 lib/firewall_options.php:576 lib/rules_update.php:572
977
- #: lib/utils.php:177 lib/utils.php:520 lib/utils.php:691 lib/utils.php:798
978
- #: lib/utils.php:963 lib/utils.php:1298
979
  #, php-format
980
  msgid ""
981
  "Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
@@ -1000,7 +505,7 @@ msgstr "L'instantané a bien été supprimé."
1000
  msgid "You must create a snapshot first."
1001
  msgstr "Vous devez d'abord créer un instantané."
1002
 
1003
- #: lib/file_check.php:104 lib/file_check.php:841
1004
  msgid "NinjaFirewall detected that changes were made to your files."
1005
  msgstr "NinjaFirewall a détecté des changements dans vos fichiers."
1006
 
@@ -1008,7 +513,7 @@ msgstr "NinjaFirewall a détecté des changements dans vos fichiers."
1008
  msgid "No changes detected."
1009
  msgstr "Aucun changement n'a été détecté."
1010
 
1011
- #: lib/file_check.php:129 lib/help.php:317 ninjafirewall.php:497
1012
  msgid "File Check"
1013
  msgstr "File Check"
1014
 
@@ -1022,11 +527,11 @@ msgstr ""
1022
  msgid "Default: %s"
1023
  msgstr "Défaut : %s"
1024
 
1025
- #: lib/file_check.php:158 lib/file_guard.php:119
1026
  msgid "Exclude the following files/folders (optional)"
1027
  msgstr "Exclure les fichiers / dossiers suivants (optionnel)"
1028
 
1029
- #: lib/file_check.php:159 lib/file_guard.php:120 lib/live_log.php:299
1030
  msgid "e.g.,"
1031
  msgstr "par ex."
1032
 
@@ -1038,186 +543,174 @@ msgstr ""
1038
  "Chaîne de caractères complète ou partielle, sensible à la casse. Plusieurs "
1039
  "valeurs doivent être séparées par des virgules"
1040
 
1041
- #: lib/file_check.php:164
1042
  msgid "Do not follow symbolic links (default)"
1043
  msgstr "Ne pas suivre les liens symboliques (défaut)"
1044
 
1045
- #: lib/file_check.php:169
1046
  msgid "Create Snapshot"
1047
  msgstr "Créer un Instantané"
1048
 
1049
- #: lib/file_check.php:297
1050
- msgid "Delete the current snapshot?"
1051
- msgstr "Supprimer l'instantané actuel ?"
1052
-
1053
- #: lib/file_check.php:311
1054
  msgid "Last snapshot"
1055
  msgstr "Dernier instantané"
1056
 
1057
- #: lib/file_check.php:313
1058
  #, php-format
1059
  msgid "Created on: %s"
1060
  msgstr "Créé le : %s"
1061
 
1062
- #: lib/file_check.php:314
1063
  #, php-format
1064
  msgid "Total files: %s "
1065
  msgstr "Nombre de fichiers : %s "
1066
 
1067
- #: lib/file_check.php:316
1068
  msgid "Directory:"
1069
  msgstr "Répertoire&nbsp;:"
1070
 
1071
- #: lib/file_check.php:320
1072
  msgid "Exclusion:"
1073
  msgstr "Exclusion&nbsp;:"
1074
 
1075
- #: lib/file_check.php:326
1076
  msgid "Symlinks:"
1077
  msgstr "Lien symboliques :"
1078
 
1079
- #: lib/file_check.php:328
1080
  msgid "follow"
1081
  msgstr "suivre"
1082
 
1083
- #: lib/file_check.php:330
1084
  msgid "do not follow"
1085
  msgstr "ne pas suivre"
1086
 
1087
- #: lib/file_check.php:334
1088
  #, php-format
1089
  msgid "Processing time: %s seconds"
1090
  msgstr "Temps de traitement : %s secondes"
1091
 
1092
- #: lib/file_check.php:339
1093
  msgid "Download Snapshot"
1094
  msgstr "Télécharger l'instantané"
1095
 
1096
- #: lib/file_check.php:339
1097
  msgid "Delete Snapshot"
1098
  msgstr "Supprimer l'instantané"
1099
 
1100
- #: lib/file_check.php:344
1101
  msgid "Last changes"
1102
  msgstr "Dernières modifications"
1103
 
1104
- #: lib/file_check.php:351 lib/file_check.php:849
1105
  #, php-format
1106
  msgid "New files: %s"
1107
  msgstr "Nouveaux fichiers : %s"
1108
 
1109
- #: lib/file_check.php:352 lib/file_check.php:851
1110
  #, php-format
1111
  msgid "Deleted files: %s"
1112
  msgstr "Fichiers supprimés : %s"
1113
 
1114
- #: lib/file_check.php:353 lib/file_check.php:850
1115
  #, php-format
1116
  msgid "Modified files: %s"
1117
  msgstr "Fichiers modifiés : %s"
1118
 
1119
- #: lib/file_check.php:357
1120
  msgid "View Changes"
1121
  msgstr "Voir les Modifications"
1122
 
1123
- #: lib/file_check.php:361
1124
  msgid "Download Changes"
1125
  msgstr "Télécharger les Modifications"
1126
 
1127
- #: lib/file_check.php:373
1128
  msgid "Click a file to get more info about it."
1129
  msgstr "Cliquez sur un fichier pour obtenir plus d'informations à son sujet."
1130
 
1131
- #: lib/file_check.php:376
1132
  msgid "New files:"
1133
  msgstr "Nouveaux fichiers :"
1134
 
1135
- #: lib/file_check.php:385 lib/file_check.php:438
1136
  msgid "Size"
1137
  msgstr "Taille"
1138
 
1139
- #: lib/file_check.php:389 lib/file_check.php:443
1140
  msgid "Access"
1141
  msgstr "Accès"
1142
 
1143
- #: lib/file_check.php:393 lib/file_check.php:448
1144
  msgid "Uid / Gid"
1145
  msgstr "Uid / Gid"
1146
 
1147
- #: lib/file_check.php:397 lib/file_check.php:453
1148
  msgid "Modify"
1149
  msgstr "Modification"
1150
 
1151
- #: lib/file_check.php:401 lib/file_check.php:458
1152
  msgid "Change"
1153
  msgstr "Changement"
1154
 
1155
- #: lib/file_check.php:411
1156
  msgid "Deleted files:"
1157
  msgstr "Fichiers supprimés :"
1158
 
1159
- #: lib/file_check.php:424
1160
  msgid "Modified files:"
1161
  msgstr "Fichiers modifiés :"
1162
 
1163
- #: lib/file_check.php:434
1164
  msgid "Old"
1165
  msgstr "Ancien"
1166
 
1167
- #: lib/file_check.php:435
1168
  msgid "New"
1169
  msgstr "Nouveau"
1170
 
1171
- #: lib/file_check.php:474 lib/live_log.php:296
1172
  msgid "None"
1173
  msgstr "Aucune"
1174
 
1175
- #: lib/file_check.php:484
1176
  msgid "Scan System For File Changes"
1177
  msgstr "Lancer l'analyse des fichiers"
1178
 
1179
- #: lib/file_check.php:501
1180
  msgid "Options"
1181
  msgstr "Options"
1182
 
1183
- #: lib/file_check.php:508
1184
  #, php-format
1185
  msgid ""
1186
- "It seems that %s is enabled. Ensure you have another way to run WP-Cron, "
1187
  "otherwise NinjaFirewall scheduled scans will not work."
1188
  msgstr ""
1189
  "Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
1190
  "File Check ne pourra pas se lancer automatiquement."
1191
 
1192
- #: lib/file_check.php:514
1193
  msgid "Enable scheduled scans"
1194
  msgstr "Lancer File Check automatiquement"
1195
 
1196
- #: lib/file_check.php:516 lib/firewall_policies.php:464
1197
- #: lib/firewall_policies.php:479 lib/firewall_policies.php:489
1198
- #: lib/firewall_policies.php:499 lib/firewall_policies.php:509
1199
- #: lib/firewall_policies.php:579 lib/firewall_policies.php:622
1200
- #: lib/firewall_policies.php:654 lib/firewall_policies.php:692
1201
- #: lib/firewall_policies.php:780 lib/firewall_policies.php:800
1202
- #: lib/firewall_policies.php:843 lib/firewall_policies.php:973
1203
- #: lib/firewall_policies.php:987 lib/firewall_policies.php:1012
1204
- #: lib/firewall_policies.php:1220 lib/login_protection.php:295
1205
  msgid "No (default)"
1206
  msgstr "Non (défaut)"
1207
 
1208
- #: lib/file_check.php:517 lib/rules_update.php:169
1209
  msgid "Hourly"
1210
  msgstr "Une fois par heure"
1211
 
1212
- #: lib/file_check.php:518 lib/rules_update.php:170
1213
  msgid "Twicedaily"
1214
  msgstr "Deux fois par jour"
1215
 
1216
- #: lib/file_check.php:519 lib/rules_update.php:171
1217
  msgid "Daily"
1218
  msgstr "Tous les jours"
1219
 
1220
- #: lib/file_check.php:526
1221
  #, php-format
1222
  msgid ""
1223
  "Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
@@ -1226,7 +719,7 @@ msgstr ""
1226
  "La prochaine analyse commencera dans %s jour(s), %s heure(s), %s minute(s) "
1227
  "et %s seconde(s)."
1228
 
1229
- #: lib/file_check.php:533
1230
  msgid ""
1231
  "The next scheduled scan date is in the past! WordPress wp-cron may not be "
1232
  "working or may have been disabled."
@@ -1234,119 +727,115 @@ msgstr ""
1234
  "La date de la prochaine analyse est dans le passé&nbsp;! Essayez de "
1235
  "recharger cette page, sinon vérifiez que WP-Cron n'a pas été désactivé."
1236
 
1237
- #: lib/file_check.php:541
1238
  msgid "Scheduled scan report"
1239
  msgstr "Rapport d'analyse"
1240
 
1241
- #: lib/file_check.php:543
1242
  msgid "Send me a report by email only if changes are detected (default)"
1243
  msgstr ""
1244
  "Envoyez-moi un rapport uniquement si des changements ont été détectés "
1245
  "(défaut)"
1246
 
1247
- #: lib/file_check.php:544
1248
  msgid "Always send me a report by email after a scheduled scan"
1249
  msgstr "Envoyez-moi toujours un rapport après une analyse automatique"
1250
 
1251
- #: lib/file_check.php:549
1252
  msgid "Save Scan Options"
1253
  msgstr "Sauvegarder les options"
1254
 
1255
- #: lib/file_check.php:561
1256
  msgid "Enter the full path to the directory to be scanned."
1257
  msgstr "Entrez le chemin complet vers le répertoire à scanner."
1258
 
1259
- #: lib/file_check.php:568
1260
  #, php-format
1261
  msgid "The directory %s does not exist."
1262
  msgstr "Le répertoire %s n'existe pas."
1263
 
1264
- #: lib/file_check.php:571
1265
  #, php-format
1266
  msgid "The directory %s is not readable."
1267
  msgstr "Le répertoire %s n'est pas lisible."
1268
 
1269
- #: lib/file_check.php:612
1270
  #, php-format
1271
  msgid "Cannot write to %s."
1272
  msgstr "Impossible d'écrire dans %s."
1273
 
1274
- #: lib/file_check.php:642
1275
  #, php-format
1276
  msgid "Error : cannot open %s directory."
1277
  msgstr "Erreur : impossible d'ouvrir le répertoire %s."
1278
 
1279
- #: lib/file_check.php:645
1280
  #, php-format
1281
  msgid "Error : %s directory is not readable."
1282
  msgstr "Erreur : le répertoire %s n'est pas lisible."
1283
 
1284
- #: lib/file_check.php:660
1285
  #, php-format
1286
  msgid "Missing options line %s, please try again."
1287
  msgstr "Option manquante (ligne %s). Veuillez essayer à nouveau."
1288
 
1289
- #: lib/file_check.php:670
1290
  #, php-format
1291
  msgid "Cannot create %s."
1292
  msgstr "Impossible de créer %s."
1293
 
1294
- #: lib/file_check.php:687
1295
  msgid "Error reading old snapshot file."
1296
  msgstr "Erreur lors de la lecture du fichier de l'ancien instantané."
1297
 
1298
- #: lib/file_check.php:698
1299
  msgid "Error reading new snapshot file."
1300
  msgstr "Erreur lors de la lecture du fichier du nouvel instantané."
1301
 
1302
- #: lib/file_check.php:814 ninjafirewall.php:270
1303
  msgid "New file"
1304
  msgstr "Nouveau fichier"
1305
 
1306
- #: lib/file_check.php:815 ninjafirewall.php:271
1307
  msgid "Modified file"
1308
  msgstr "Fichier modifié"
1309
 
1310
- #: lib/file_check.php:816 ninjafirewall.php:272
1311
  msgid "Deleted file"
1312
  msgstr "Fichier supprimé"
1313
 
1314
- #: lib/file_check.php:840
1315
  msgid "[NinjaFirewall] Alert: File Check detection"
1316
  msgstr "[NinjaFirewall] Alerte: Détection File Check"
1317
 
1318
- #: lib/file_check.php:843 lib/file_check.php:845 lib/file_check.php:870
1319
- #: lib/file_check.php:872 lib/rules_update.php:561 lib/rules_update.php:563
1320
- #: lib/utils.php:156 lib/utils.php:781 lib/utils.php:941 lib/utils.php:1287
1321
  msgid "Blog:"
1322
  msgstr "Blog :"
1323
 
1324
- #: lib/file_check.php:847 lib/file_check.php:874 lib/rules_update.php:566
1325
  #, php-format
1326
  msgid "Date: %s"
1327
  msgstr "Date : %s"
1328
 
1329
- #: lib/file_check.php:853
1330
  msgid "See attached file for details."
1331
  msgstr "Voir le fichier joint pour plus de détails."
1332
 
1333
- #: lib/file_check.php:867
1334
  msgid "[NinjaFirewall] File Check report"
1335
  msgstr "[NinjaFirewall] Rapport de File Check"
1336
 
1337
- #: lib/file_check.php:868
1338
  msgid "NinjaFirewall did not detect changes in your files."
1339
  msgstr "NinjaFirewall n'a pas détecté de changements dans vos fichiers."
1340
 
1341
- #: lib/file_guard.php:40 lib/file_guard.php:46
1342
- msgid "Please enter a number from 1 to 99."
1343
- msgstr "Veuillez entrer un nombre de 1 à 99."
1344
-
1345
- #: lib/file_guard.php:54 lib/help.php:285 ninjafirewall.php:493
1346
  msgid "File Guard"
1347
  msgstr "File Guard"
1348
 
1349
- #: lib/file_guard.php:58
1350
  #, php-format
1351
  msgid ""
1352
  "You are running NinjaFirewall in <i>WordPress WAF</i> mode. The %s feature "
@@ -1360,7 +849,7 @@ msgstr ""
1360
  "cette option s'applique à tous les fichiers PHP, vous devez installer "
1361
  "NinjaFirewall en mode %s."
1362
 
1363
- #: lib/file_guard.php:64
1364
  #, php-format
1365
  msgid ""
1366
  "The cache directory %s is not writable. Please change its permissions (0777 "
@@ -1369,33 +858,26 @@ msgstr ""
1369
  "Impossible d'écrire dans le répertoire du cache %s. Assurez-vous que ce "
1370
  "répertoire n'est pas en lecture seule."
1371
 
1372
- #: lib/file_guard.php:96
1373
  msgid "Enable File Guard"
1374
  msgstr "Activer File Guard"
1375
 
1376
- #: lib/file_guard.php:98
1377
- msgid "Yes (recommended)"
1378
- msgstr "Oui (recommandé)"
1379
-
1380
- #: lib/file_guard.php:101 lib/firewall_policies.php:27
1381
- #: lib/firewall_policies.php:569 lib/firewall_policies.php:612
1382
- #: lib/firewall_policies.php:632 lib/firewall_policies.php:682
1383
- #: lib/firewall_policies.php:727 lib/firewall_policies.php:737
1384
- #: lib/firewall_policies.php:747 lib/firewall_policies.php:790
1385
- #: lib/firewall_policies.php:833 lib/firewall_policies.php:853
1386
- #: lib/firewall_policies.php:915 lib/firewall_policies.php:1067
1387
- #: lib/firewall_policies.php:1123 lib/firewall_policies.php:1133
1388
- #: lib/firewall_policies.php:1143 lib/firewall_policies.php:1153
1389
- #: lib/firewall_policies.php:1200 lib/firewall_policies.php:1210
1390
- #: lib/network.php:64 lib/rules_update.php:148
1391
- msgid "No"
1392
- msgstr "Non"
1393
 
1394
- #: lib/file_guard.php:111
1395
  msgid "Real-time detection"
1396
  msgstr "Détection en temps réel"
1397
 
1398
- #: lib/file_guard.php:114
1399
  #, php-format
1400
  msgid ""
1401
  "Monitor file activity and send an alert when someone is accessing a PHP "
@@ -1404,11 +886,11 @@ msgstr ""
1404
  "Surveiller et alerter par e-mail lorsqu'un visiteur accède à un script PHP "
1405
  "qui a été modifié ou créé il y a moins de %s heure(s)."
1406
 
1407
- #: lib/file_guard.php:120 lib/live_log.php:299
1408
  msgid "or"
1409
  msgstr "ou"
1410
 
1411
- #: lib/file_guard.php:120
1412
  msgid ""
1413
  "Full or partial case-sensitive string(s), max. 255 characters. Multiple "
1414
  "values must be comma-separated"
@@ -1416,7 +898,7 @@ msgstr ""
1416
  "Chaîne de caractères complète ou partielle, sensible à la casse, 255 "
1417
  "caractères maximum. Plusieurs valeurs doivent être séparées par des virgules"
1418
 
1419
- #: lib/file_guard.php:125
1420
  msgid "Save File Guard options"
1421
  msgstr "Sauvegarder les options"
1422
 
@@ -1444,38 +926,39 @@ msgstr "Votre clé publique a été supprimée"
1444
  msgid "Your public key has been saved"
1445
  msgstr "Votre clé publique a été sauvegardée"
1446
 
1447
- #: lib/firewall_log.php:84 lib/help.php:424 ninjafirewall.php:523
 
1448
  msgid "Firewall Log"
1449
  msgstr "Journal du Pare-feu"
1450
 
1451
- #: lib/firewall_log.php:91
1452
  msgid "Error"
1453
  msgstr "Erreur"
1454
 
1455
- #: lib/firewall_log.php:98
1456
  msgid "Note"
1457
  msgstr "Notice"
1458
 
1459
- #: lib/firewall_log.php:98
1460
  #, php-format
1461
  msgid "your log has %s lines. I will display the last %s lines only."
1462
  msgstr ""
1463
  "votre journal contient %s lignes. Seules les %s dernières lignes vont être "
1464
  "affichées."
1465
 
1466
- #: lib/firewall_log.php:102
1467
  msgid "Viewing:"
1468
  msgstr "Journal :"
1469
 
1470
- #: lib/firewall_log.php:109 lib/firewall_options.php:251
1471
  msgid "bytes"
1472
  msgstr "octets"
1473
 
1474
- #: lib/firewall_log.php:150 lib/firewall_log.php:334
1475
  msgid "The selected log is empty."
1476
  msgstr "Le journal sélectionné est vide."
1477
 
1478
- #: lib/firewall_log.php:156
1479
  msgid ""
1480
  "The log shows all threats that were blocked by the firewall, unless stated "
1481
  "otherwise. It is rotated monthly."
@@ -1483,37 +966,37 @@ msgstr ""
1483
  "Le journal affiche toutes les menaces bloquées par le pare-feu, sauf "
1484
  "indication contraire. La rotation du journal est mensuelle."
1485
 
1486
- #: lib/firewall_log.php:169
1487
  msgid "Log Options"
1488
  msgstr "Options du Journal"
1489
 
1490
- #: lib/firewall_log.php:173 lib/help.php:437
1491
  msgid "Auto-delete log"
1492
  msgstr "Suppression automatique des journaux"
1493
 
1494
- #: lib/firewall_log.php:177
1495
  #, php-format
1496
  msgid "Automatically delete logs older than %s days"
1497
  msgstr "Supprimer automatiquement les journaux vieux de plus de %s jours"
1498
 
1499
- #: lib/firewall_log.php:180
1500
  msgid "Set this option to 0 to disable it."
1501
  msgstr "Entrez \"0\" pour désactiver cette option."
1502
 
1503
- #: lib/firewall_log.php:186
1504
  msgid "Save Log Options"
1505
  msgstr "Sauvegarder les options"
1506
 
1507
- #: lib/firewall_log.php:202 lib/help.php:445 lib/overview.php:198
1508
- #: lib/wpplus.php:98
1509
  msgid "Centralized Logging"
1510
  msgstr "Centralisation des Logs"
1511
 
1512
- #: lib/firewall_log.php:205
1513
  msgid "Enter your public key (optional)"
1514
  msgstr "Entrez votre clé publique (optionnel)"
1515
 
1516
- #: lib/firewall_log.php:208
1517
  #, php-format
1518
  msgid ""
1519
  "<a href=\"%s\">Consult our blog</a> if you want to enable centralized "
@@ -1522,127 +1005,71 @@ msgstr ""
1522
  "Veuillez <a href=\"%s\">consulter notre blog</a> afin d'activer la "
1523
  "Centralisation des Logs."
1524
 
1525
- #: lib/firewall_log.php:215
1526
  msgid "Save Public Key"
1527
  msgstr "Sauvegarder la clé publique"
1528
 
1529
- #: lib/firewall_log.php:217
1530
  msgid "Delete Public Key"
1531
  msgstr "Supprimer la clé publique"
1532
 
1533
- #: lib/firewall_log.php:236
1534
- msgid "Your public key is not valid."
1535
- msgstr "Votre clé publique n\\'est pas valide."
1536
-
1537
- #: lib/firewall_log.php:313
1538
  msgid "The requested log does not exist."
1539
  msgstr "Le journal demandé n'existe pas."
1540
 
1541
- #: lib/firewall_log.php:320
1542
  msgid "Unable to open the log for read operation."
1543
  msgstr "Impossible de lire le journal."
1544
 
1545
- #: lib/firewall_options.php:32
1546
- msgid ""
1547
- "This action will restore the selected configuration file and will override "
1548
- "all your current firewall options, policies and rules. Continue?"
1549
- msgstr ""
1550
- "Cette action va restaurer le fichier de configuration sélectionné et "
1551
- "remplacera toutes les options, politiques et règles de pare-feu actuelles. "
1552
- "Continuer ?"
1553
-
1554
- #: lib/firewall_options.php:52
1555
- msgid "CSS style sheets"
1556
- msgstr "des feuilles de style CSS"
1557
-
1558
- #: lib/firewall_options.php:55
1559
- msgid "Javascript code"
1560
- msgstr "du code Javascript"
1561
-
1562
- #: lib/firewall_options.php:58
1563
- #, php-format
1564
- msgid ""
1565
- "Your message seems to contain %s. For security reasons, it cannot be "
1566
- "previewed from the admin dashboard."
1567
- msgstr ""
1568
- "Votre message semble contenir %s. Pour des raisons de sécurité, il ne peut "
1569
- "pas être prévisualisé à partir du Tableau de Bord d'administration."
1570
-
1571
- #: lib/firewall_options.php:63
1572
- msgid "Refresh preview"
1573
- msgstr "Réactualiser"
1574
-
1575
- #: lib/firewall_options.php:71 ninjafirewall.php:485
1576
  msgid "Firewall Options"
1577
  msgstr "Options du Pare-feu"
1578
 
1579
- #: lib/firewall_options.php:92 lib/help.php:82
1580
  msgid "Firewall protection"
1581
  msgstr "Pare-feu"
1582
 
1583
- #: lib/firewall_options.php:100 lib/firewall_options.php:109
1584
- #: lib/firewall_options.php:124 lib/firewall_options.php:134
1585
- #: lib/overview.php:78 lib/overview.php:210
1586
- msgid "Enabled"
1587
- msgstr "Activé"
1588
-
1589
- #: lib/firewall_options.php:101 lib/firewall_options.php:110
1590
- msgid "Disabled"
1591
- msgstr "Désactivé"
1592
-
1593
- #: lib/firewall_options.php:111 lib/firewall_options.php:126
1594
- msgid "Warning: your site is not protected!"
1595
- msgstr "Attention, votre site n'est pas protégé&nbsp;!"
1596
-
1597
- #: lib/firewall_options.php:117 lib/help.php:90 lib/overview.php:100
1598
  msgid "Debugging mode"
1599
  msgstr "Mode débogage"
1600
 
1601
- #: lib/firewall_options.php:125 lib/firewall_options.php:135
1602
- msgid "Disabled (default)"
1603
- msgstr "Désactivé (défaut)"
1604
-
1605
- #: lib/firewall_options.php:147
1606
  msgid "HTTP error code to return"
1607
  msgstr "Code HTTP à retourner"
1608
 
1609
- #: lib/firewall_options.php:151
1610
  msgid "400 Bad Request"
1611
  msgstr "400 Bad Request"
1612
 
1613
- #: lib/firewall_options.php:152
1614
  msgid "403 Forbidden (default)"
1615
  msgstr "403 Forbidden (défaut)"
1616
 
1617
- #: lib/firewall_options.php:153
1618
  msgid "404 Not Found"
1619
  msgstr "404 Not Found"
1620
 
1621
- #: lib/firewall_options.php:154
1622
  msgid "406 Not Acceptable"
1623
  msgstr "406 Not Acceptable"
1624
 
1625
- #: lib/firewall_options.php:155
1626
  msgid "418 I'm a teapot"
1627
  msgstr "418 I'm a teapot"
1628
 
1629
- #: lib/firewall_options.php:156
1630
  msgid "500 Internal Server Error"
1631
  msgstr "500 Internal Server Error"
1632
 
1633
- #: lib/firewall_options.php:157
1634
  msgid "503 Service Unavailable"
1635
  msgstr "503 Service Unavailable"
1636
 
1637
- #: lib/firewall_options.php:170 lib/help.php:97
1638
  msgid "IP anonymization"
1639
  msgstr "Anonymisation IP"
1640
 
1641
- #: lib/firewall_options.php:173
1642
- msgid "Anonymize IP addresses by removing the last 3 characters."
1643
- msgstr "Anonymiser les adresses IP en supprimant les 3 derniers caractères."
1644
-
1645
- #: lib/firewall_options.php:174
1646
  #, php-format
1647
  msgid ""
1648
  "Does not apply to private IP addresses and the <a href=\"%s\">Login "
@@ -1651,61 +1078,61 @@ msgstr ""
1651
  "Ne s'applique pas aux adresses IP privées, ni à la <a href=\"%s\">Page de "
1652
  "Connexion</a>."
1653
 
1654
- #: lib/firewall_options.php:181
1655
  msgid "Blocked user message"
1656
  msgstr "Message pour les utilisateurs bloqués"
1657
 
1658
- #: lib/firewall_options.php:192
1659
- msgid "Preview message"
1660
- msgstr "Prévisualiser"
1661
 
1662
- #: lib/firewall_options.php:192
1663
  msgid "Default message"
1664
  msgstr "Message par défaut"
1665
 
1666
- #: lib/firewall_options.php:203
1667
  msgid "Firewall configuration"
1668
  msgstr "Configuration du pare-feu"
1669
 
1670
- #: lib/firewall_options.php:207
1671
  msgid "Export configuration"
1672
  msgstr "Exporter la configuration"
1673
 
1674
- #: lib/firewall_options.php:209
1675
  msgid "Download"
1676
  msgstr "Télécharger"
1677
 
1678
- #: lib/firewall_options.php:209
1679
  msgid "File Check configuration will not be exported/imported."
1680
  msgstr ""
1681
  "La configuration de \"File Check\" ne peut pas être importée ou exportée."
1682
 
1683
- #: lib/firewall_options.php:212
1684
  msgid "Import configuration"
1685
  msgstr "Importer la configuration"
1686
 
1687
- #: lib/firewall_options.php:216
1688
  #, php-format
1689
  msgid "Imported configuration must match plugin version %s."
1690
  msgstr "La fichier importé doit être compatible avec la version %s."
1691
 
1692
- #: lib/firewall_options.php:217
1693
  msgid "It will override all your current firewall options and rules."
1694
  msgstr "Il remplacera toutes vos options et règles de pare-feu en vigueur."
1695
 
1696
- #: lib/firewall_options.php:221 lib/help.php:123
1697
  msgid "Configuration backup"
1698
  msgstr "Sauvegarde de la configuration"
1699
 
1700
- #: lib/firewall_options.php:228 lib/firewall_options.php:256
1701
  msgid "Save Firewall Options"
1702
  msgstr "Sauvegarder les options"
1703
 
1704
- #: lib/firewall_options.php:247
1705
  msgid "Available backup files"
1706
  msgstr "Fichiers de sauvegarde disponibles"
1707
 
1708
- #: lib/firewall_options.php:256
1709
  #, php-format
1710
  msgid ""
1711
  "To restore NinjaFirewall's configuration to an earlier date, select it in "
@@ -1714,37 +1141,37 @@ msgstr ""
1714
  "Pour restaurer la configuration de NinjaFirewall à une date antérieure, "
1715
  "sélectionnez-la dans la liste et cliquez sur '%s'."
1716
 
1717
- #: lib/firewall_options.php:260
1718
  msgid "There are no backup available yet, check back later."
1719
  msgstr "Il n'y a pas encore de sauvegarde disponible, revenez plus tard."
1720
 
1721
- #: lib/firewall_options.php:398
1722
  #, php-format
1723
  msgid "Uploaded file is either corrupted or its format is not supported (#%s)"
1724
  msgstr ""
1725
  "Le fichier importé est illisible ou son format n'est pas supporté (#%s)"
1726
 
1727
- #: lib/firewall_options.php:427
1728
  msgid "The imported file is not compatible with that version of NinjaFirewall"
1729
  msgstr ""
1730
  "Le fichier importé n'est pas compatible avec cette version de NinjaFirewall"
1731
 
1732
- #: lib/firewall_options.php:547
1733
  msgid "[NinjaFirewall] Alert: Firewall is disabled"
1734
  msgstr "[NinjaFirewall] Alerte : Le pare-feu a été désactivé"
1735
 
1736
- #: lib/firewall_options.php:549 lib/firewall_options.php:551 lib/utils.php:676
1737
- #: lib/utils.php:678
1738
  msgid "-Blog :"
1739
  msgstr "- Blog :"
1740
 
1741
- #: lib/firewall_options.php:555
1742
  msgid "Someone disabled NinjaFirewall from your WordPress admin dashboard:"
1743
  msgstr ""
1744
  "Quelqu'un a désactivé NinjaFirewall depuis votre Tableau de bord de "
1745
  "WordPress :"
1746
 
1747
- #: lib/firewall_options.php:558
1748
  msgid ""
1749
  "NinjaFirewall is disabled because someone enabled debugging mode from your "
1750
  "WordPress admin dashboard:"
@@ -1752,46 +1179,29 @@ msgstr ""
1752
  "NinjaFirewall est désactivé car quelqu'un activé son \"Mode débogage\" "
1753
  "depuis votre tableau de bord de WordPress :"
1754
 
1755
- #: lib/firewall_options.php:561
1756
  msgid "[NinjaFirewall] Alert: Firewall override settings"
1757
  msgstr "[NinjaFirewall] Alerte : Modification des paramètres du pare-feu"
1758
 
1759
- #: lib/firewall_options.php:562
1760
  msgid ""
1761
  "Someone imported a new configuration which overrode the firewall settings:"
1762
  msgstr ""
1763
  "Quelqu'un a importé une nouvelle configuration qui a modifié tous les "
1764
  "paramètres du pare-feu :"
1765
 
1766
- #: lib/firewall_options.php:568 lib/utils.php:683
1767
  msgid "-User :"
1768
  msgstr "- Nom :"
1769
 
1770
- #: lib/firewall_options.php:569 lib/utils.php:684
1771
  msgid "-IP :"
1772
  msgstr "- IP :"
1773
 
1774
- #: lib/firewall_options.php:570 lib/utils.php:685
1775
  msgid "-Date :"
1776
  msgstr "- Date :"
1777
 
1778
- #: lib/firewall_policies.php:26 lib/firewall_policies.php:461
1779
- #: lib/firewall_policies.php:476 lib/firewall_policies.php:486
1780
- #: lib/firewall_policies.php:496 lib/firewall_policies.php:506
1781
- #: lib/firewall_policies.php:576 lib/firewall_policies.php:619
1782
- #: lib/firewall_policies.php:651 lib/firewall_policies.php:689
1783
- #: lib/firewall_policies.php:777 lib/firewall_policies.php:797
1784
- #: lib/firewall_policies.php:840 lib/firewall_policies.php:972
1785
- #: lib/firewall_policies.php:986 lib/firewall_policies.php:1011
1786
- #: lib/firewall_policies.php:1217
1787
- msgid "Yes"
1788
- msgstr "Oui"
1789
-
1790
- #: lib/firewall_policies.php:28 lib/firewall_policies.php:192
1791
- #: lib/firewall_policies.php:390
1792
- msgid "(default)"
1793
- msgstr "(défaut)"
1794
-
1795
  #: lib/firewall_policies.php:29
1796
  #, php-format
1797
  msgid ""
@@ -1800,98 +1210,80 @@ msgstr ""
1800
  "Cette option ne peut être activée que lorsque NinjaFirewall fonctionne en "
1801
  "mode %s."
1802
 
1803
- #: lib/firewall_policies.php:42
1804
- msgid "All fields will be restored to their default values. Go ahead?"
1805
- msgstr ""
1806
- "Tous les champs vont être réinitialisés avec leur valeur par défaut. "
1807
- "Continuer ?"
1808
-
1809
- #: lib/firewall_policies.php:72
1810
- msgid ""
1811
- "WARNING: ensure that you can access your admin console over HTTPS before "
1812
- "enabling this option, otherwise you will lock yourself out of your site. Go "
1813
- "ahead?"
1814
- msgstr ""
1815
- "AVERTISSEMENT: assurez-vous que vous pouvez accéder à votre Tableau de bord "
1816
- "via HTTPS avant d'activer cette option, sinon vous risquez de bloquer "
1817
- "l’accès à votre site. Continuer ?"
1818
-
1819
- #: lib/firewall_policies.php:81
1820
- msgid ""
1821
- "Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
1822
- "hyphen [-] or an underscore [_] will be removed from the filename and "
1823
- "replaced with the substitution character. Continue?"
1824
- msgstr ""
1825
- "Tout caractère qui n'est pas une lettre [a-zA-Z], un chiffre [0-9], un point "
1826
- "[.], un trait d'union[-] ou un caractère de soulignement[_], sera supprimé "
1827
- "du nom du fichier et remplacé par le caractère de substitution."
1828
 
1829
- #: lib/firewall_policies.php:119
1830
  msgid "Default values were restored."
1831
  msgstr "Les valeurs par défaut ont été restaurées."
1832
 
1833
- #: lib/firewall_policies.php:121
1834
  msgid "No action taken."
1835
  msgstr "Aucune mesure prise."
1836
 
1837
- #: lib/firewall_policies.php:130 lib/help.php:173
1838
  msgid "Basic Policies"
1839
  msgstr "Politiques de base"
1840
 
1841
- #: lib/firewall_policies.php:131 lib/help.php:199
1842
  msgid "Intermediate Policies"
1843
  msgstr "Politiques intermédiaires"
1844
 
1845
- #: lib/firewall_policies.php:132 lib/help.php:230
1846
  msgid "Advanced Policies"
1847
  msgstr "Politiques avancées"
1848
 
1849
- #: lib/firewall_policies.php:156
1850
  msgid "Enable NinjaFirewall for"
1851
  msgstr "Activer NinjaFirewall pour le trafic"
1852
 
1853
- #: lib/firewall_policies.php:159 lib/live_log.php:316
1854
  msgid "HTTP and HTTPS traffic (default)"
1855
  msgstr "Trafic HTTP et HTTPS (défaut)"
1856
 
1857
- #: lib/firewall_policies.php:160 lib/live_log.php:317
1858
  msgid "HTTP traffic only"
1859
  msgstr "Trafic HTTP uniquement"
1860
 
1861
- #: lib/firewall_policies.php:161 lib/live_log.php:318
1862
  msgid "HTTPS traffic only"
1863
  msgstr "Trafic HTTPS uniquement"
1864
 
1865
- #: lib/firewall_policies.php:185 lib/help.php:178
1866
  msgid "Uploads"
1867
  msgstr "Téléchargements"
1868
 
1869
- #: lib/firewall_policies.php:188
1870
  msgid "File Uploads"
1871
  msgstr "Autoriser les téléchargements (uploads)"
1872
 
1873
- #: lib/firewall_policies.php:192
1874
  msgid "Allow uploads"
1875
  msgstr "Autoriser"
1876
 
1877
- #: lib/firewall_policies.php:193
 
 
 
 
1878
  msgid "Disallow uploads"
1879
  msgstr "Interdire"
1880
 
1881
- #: lib/firewall_policies.php:196
1882
  msgid "Sanitise filenames"
1883
  msgstr "Nettoyer le nom des fichiers"
1884
 
1885
- #: lib/firewall_policies.php:196
1886
  msgid "substitution character:"
1887
  msgstr "caractère de substitution&nbsp;:"
1888
 
1889
- #: lib/firewall_policies.php:318
1890
  msgid "Block direct access to any PHP file located in one of these directories"
1891
  msgstr ""
1892
  "Bloquer l'accès direct à un fichier PHP situé dans l'un de ces répertoires"
1893
 
1894
- #: lib/firewall_policies.php:348
1895
  msgid ""
1896
  "NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
1897
  "this option is enabled."
@@ -1899,7 +1291,7 @@ msgstr ""
1899
  "NinjaFirewall ne bloquera pas l'accès à l'éditeur WYSIWYG TinyMCE même si "
1900
  "cette option est activée."
1901
 
1902
- #: lib/firewall_policies.php:363
1903
  msgid ""
1904
  "Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
1905
  "by your visitors, we recommend to enable this option."
@@ -1908,127 +1300,125 @@ msgstr ""
1908
  "pouvant être consultés par vos visiteurs, nous vous recommandons d'activer "
1909
  "cette option."
1910
 
1911
- #: lib/firewall_policies.php:374 lib/firewall_policies.php:379
1912
- #, php-format
1913
- msgid ""
1914
- "If you are using the %s plugin, blocking <code>system.multicall</code> may "
1915
- "prevent it from working correctly."
1916
- msgstr ""
1917
- "Si vous utilisez l'extension %s, bloquer <code>system.multicall</code> "
1918
- "pourrait l’empêcher de fonctionner correctement."
1919
-
1920
- #: lib/firewall_policies.php:387
1921
  msgid "General"
1922
  msgstr "Général"
1923
 
1924
- #: lib/firewall_policies.php:390 lib/help.php:184
1925
  msgid "Block attempts to modify important WordPress settings"
1926
  msgstr ""
1927
  "Bloquer les tentatives de modification des paramètres importants de WordPress"
1928
 
1929
- #: lib/firewall_policies.php:391 lib/help.php:185
1930
  msgid "Block user accounts creation"
1931
  msgstr "Bloquer la création de comptes utilisateur"
1932
 
1933
- #: lib/firewall_policies.php:392
1934
  msgid "Do not enable this policy if you allow user registration."
1935
  msgstr ""
1936
  "N'activez pas cette option si vous autorisez l'inscription des utilisateurs."
1937
 
1938
- #: lib/firewall_policies.php:404 lib/help.php:186
1939
  msgid "WordPress AJAX"
1940
  msgstr "WordPress AJAX"
1941
 
1942
- #: lib/firewall_policies.php:407
1943
  msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
1944
  msgstr ""
1945
  "Proteger <code>admin-ajax.php</code> contre les bots et scanners malveillants"
1946
 
1947
- #: lib/firewall_policies.php:412
 
 
 
 
 
 
 
 
 
1948
  msgid "Protect against username enumeration"
1949
  msgstr "Protéger contre l'énumération des comptes utilisateurs"
1950
 
1951
- #: lib/firewall_policies.php:415
1952
  msgid "Through the author archives"
1953
  msgstr "Via la page d'archive d'un auteur"
1954
 
1955
- #: lib/firewall_policies.php:416
1956
  msgid "Through the login page"
1957
  msgstr "Via la page de connexion"
1958
 
1959
- #: lib/firewall_policies.php:417
1960
  msgid "Through the WordPress REST API"
1961
  msgstr "Via l'API REST de WordPress"
1962
 
1963
- #: lib/firewall_policies.php:425
1964
- msgid "This feature is only available when running WordPress 4.7 or above."
1965
- msgstr "Cette option ne peut être activée qu'avec WordPress 4.7 ou plus."
1966
-
1967
- #: lib/firewall_policies.php:432
1968
  msgid "WordPress REST API"
1969
  msgstr "API REST de WordPress"
1970
 
1971
- #: lib/firewall_policies.php:435 lib/firewall_policies.php:443
1972
  msgid "Block any access to the API"
1973
  msgstr "Bloquer tout accès à l'API"
1974
 
1975
- #: lib/firewall_policies.php:440
1976
  msgid "WordPress XML-RPC API"
1977
  msgstr "API XML-RPC de WordPress"
1978
 
1979
- #: lib/firewall_policies.php:445
1980
  msgid "Block <code>system.multicall</code> method"
1981
  msgstr "Bloquer la méthode <code>system.multicall</code>"
1982
 
1983
- #: lib/firewall_policies.php:447
1984
  msgid "Block Pingbacks"
1985
  msgstr "Bloquer les Pingbacks"
1986
 
1987
- #: lib/firewall_policies.php:454
1988
  msgid ""
1989
  "Disabling access to the REST or XML-RPC API may break some functionality on "
1990
- "your blog, its themes or plugins."
 
1991
  msgstr ""
1992
  "L'activation de ces options peut rompre certaines fonctionnalités de votre "
1993
- "blog, ses thèmes ou ses plugins."
 
1994
 
1995
- #: lib/firewall_policies.php:458
1996
  msgid "Block <code>POST</code> requests in the themes folder"
1997
  msgstr "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes"
1998
 
1999
- #: lib/firewall_policies.php:473
2000
  msgid "Force SSL for admin and logins"
2001
  msgstr "Forcer la connexion sécurisée au Tableau de bord"
2002
 
2003
- #: lib/firewall_policies.php:483
2004
  msgid "Disable the plugin and theme editor"
2005
  msgstr "Désactiver l’éditeur de thème et d'extension"
2006
 
2007
- #: lib/firewall_policies.php:493
2008
  msgid "Disable plugin and theme update/installation"
2009
  msgstr "Désactiver l'installation et mise à jour des thèmes et extensions"
2010
 
2011
- #: lib/firewall_policies.php:503
2012
  msgid "Disable the fatal error handler"
2013
  msgstr "Désactiver le gestionnaire d'erreurs fatales"
2014
 
2015
- #: lib/firewall_policies.php:529 lib/help.php:271
2016
  msgid "Users Whitelist"
2017
  msgstr "Liste Blanche"
2018
 
2019
- #: lib/firewall_policies.php:532
2020
  msgid "Add the Administrator to the whitelist (default)."
2021
  msgstr "Ajouter l'Administrateur à la liste blanche (défaut)."
2022
 
2023
- #: lib/firewall_policies.php:533
2024
  msgid "Add all logged in users to the whitelist."
2025
  msgstr "Ajouter tous les utilisateurs connectés à la liste blanche."
2026
 
2027
- #: lib/firewall_policies.php:534
2028
  msgid "Disable users whitelist."
2029
  msgstr "Désactiver la liste blanche."
2030
 
2031
- #: lib/firewall_policies.php:535
2032
  msgid ""
2033
  "Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
2034
  "<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
@@ -2040,90 +1430,90 @@ msgstr ""
2040
  "<code>WP_DISABLE_FATAL_ERROR_HANDLER</code> qui, si elles sont activées, "
2041
  "seront toujours appliquées."
2042
 
2043
- #: lib/firewall_policies.php:560 lib/help.php:201
2044
  msgid "HTTP GET variable"
2045
  msgstr "Variable HTTP GET"
2046
 
2047
- #: lib/firewall_policies.php:563
2048
  msgid "Scan <code>GET</code> variable"
2049
  msgstr "Filtrer la variable <code>GET</code>"
2050
 
2051
- #: lib/firewall_policies.php:573
2052
  msgid "Sanitise <code>GET</code> variable"
2053
  msgstr "Nettoyer la variable <code>GET</code>"
2054
 
2055
- #: lib/firewall_policies.php:603 lib/help.php:204
2056
  msgid "HTTP POST variable"
2057
  msgstr "Variable HTTP POST"
2058
 
2059
- #: lib/firewall_policies.php:606
2060
  msgid "Scan <code>POST</code> variable"
2061
  msgstr "Filtrer la variable <code>POST</code>"
2062
 
2063
- #: lib/firewall_policies.php:616
2064
  msgid "Sanitise <code>POST</code> variable"
2065
  msgstr "Nettoyer la variable <code>POST</code>"
2066
 
2067
- #: lib/firewall_policies.php:622 lib/firewall_policies.php:654
2068
  msgid "Do not enable this option unless you know what you are doing!"
2069
  msgstr ""
2070
  "N'activez pas cette option si vous n'êtes pas sûr de ce que vous "
2071
  "faites&nbsp;!"
2072
 
2073
- #: lib/firewall_policies.php:626
2074
  msgid "Decode Base64-encoded <code>POST</code> variable"
2075
  msgstr ""
2076
  "Décoder les chaîne encodées en Base64 dans la variable <code>POST</code>"
2077
 
2078
- #: lib/firewall_policies.php:645 lib/help.php:208
2079
  msgid "HTTP REQUEST variable"
2080
  msgstr "Variable HTTP REQUEST"
2081
 
2082
- #: lib/firewall_policies.php:648
2083
  msgid "Sanitise <code>REQUEST</code> variable"
2084
  msgstr "Nettoyer la variable <code>REQUEST</code>"
2085
 
2086
- #: lib/firewall_policies.php:673 lib/help.php:211
2087
  msgid "Cookies"
2088
  msgstr "Cookies"
2089
 
2090
- #: lib/firewall_policies.php:676
2091
  msgid "Scan cookies"
2092
  msgstr "Filtrer les cookies"
2093
 
2094
- #: lib/firewall_policies.php:686
2095
  msgid "Sanitise cookies"
2096
  msgstr "Nettoyer les cookies"
2097
 
2098
- #: lib/firewall_policies.php:718 lib/help.php:214
2099
  msgid "HTTP_USER_AGENT server variable"
2100
  msgstr "Variable HTTP_USER_AGENT"
2101
 
2102
- #: lib/firewall_policies.php:721
2103
  msgid "Scan <code>HTTP_USER_AGENT</code>"
2104
  msgstr "Filtrer <code>HTTP_USER_AGENT</code>"
2105
 
2106
- #: lib/firewall_policies.php:731
2107
  msgid "Sanitise <code>HTTP_USER_AGENT</code>"
2108
  msgstr "Nettoyer <code>HTTP_USER_AGENT</code>"
2109
 
2110
- #: lib/firewall_policies.php:741
2111
  msgid "Block suspicious bots/scanners"
2112
  msgstr "Bloquer les requêtes provenant de bots/scanners malveillants"
2113
 
2114
- #: lib/firewall_policies.php:771 lib/help.php:218
2115
  msgid "HTTP_REFERER server variable"
2116
  msgstr "Variable HTTP_REFERER"
2117
 
2118
- #: lib/firewall_policies.php:774
2119
  msgid "Scan <code>HTTP_REFERER</code>"
2120
  msgstr "Filtrer <code>HTTP_REFERER</code>"
2121
 
2122
- #: lib/firewall_policies.php:784
2123
  msgid "Sanitise <code>HTTP_REFERER</code>"
2124
  msgstr "Nettoyer <code>HTTP_REFERER</code>"
2125
 
2126
- #: lib/firewall_policies.php:794
2127
  msgid ""
2128
  "Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
2129
  "code> header"
@@ -2131,7 +1521,7 @@ msgstr ""
2131
  "Bloquer les requêtes <code>POST</code> qui n'ont pas d'en-tête "
2132
  "<code>HTTP_REFERER</code>"
2133
 
2134
- #: lib/firewall_policies.php:800
2135
  msgid ""
2136
  "Keep this option disabled if you are using scripts like Paypal IPN, "
2137
  "WordPress WP-Cron etc"
@@ -2139,132 +1529,140 @@ msgstr ""
2139
  "N'activez pas cette option si vous utilisez des scripts comme Paypal IPN, "
2140
  "WordPress WP-Cron etc"
2141
 
2142
- #: lib/firewall_policies.php:827
2143
  msgid "Block localhost IP in <code>GET/POST</code> request"
2144
  msgstr "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost"
2145
 
2146
- #: lib/firewall_policies.php:837
2147
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
2148
  msgstr ""
2149
  "Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
2150
  "IP"
2151
 
2152
- #: lib/firewall_policies.php:847
2153
  msgid "Scan traffic coming from localhost and private IP address spaces"
2154
  msgstr "Filtrer les connexions provenant de localhost et d'adresses IP privées"
2155
 
2156
- #: lib/firewall_policies.php:869
2157
  #, php-format
2158
  msgid ""
2159
- "This option is disabled because the %s PHP function is not available on your "
2160
- "server."
2161
  msgstr ""
2162
- "Cette option n'est pas disponible parce que la fonction PHP %s n'est pas "
2163
- "présente sur votre serveur."
2164
 
2165
- #: lib/firewall_policies.php:884 lib/help.php:232
2166
  msgid "HTTP response headers"
2167
  msgstr "En-têtes de réponse HTTP"
2168
 
2169
- #: lib/firewall_policies.php:887
2170
  #, php-format
2171
  msgid "Set %s to protect against MIME type confusion attacks"
2172
  msgstr ""
2173
  "Activer %s pour protéger contre les attaques basées sur la confusion du type "
2174
  "MIME"
2175
 
2176
- #: lib/firewall_policies.php:897
2177
  #, php-format
2178
  msgid "Set %s to protect against clickjacking attempts"
2179
  msgstr ""
2180
  "Activer %s pour protéger contre les attaques de détournement de clic "
2181
  "(clickjacking)"
2182
 
2183
- #: lib/firewall_policies.php:906
 
 
 
 
 
 
 
 
2184
  #, php-format
2185
  msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
2186
  msgstr "Activer %s (IE/Edge, Opera, Chrome et Safari)"
2187
 
2188
- #: lib/firewall_policies.php:910 lib/firewall_policies.php:911
2189
- #: lib/firewall_policies.php:914
2190
  #, php-format
2191
  msgid "Set to %s"
2192
  msgstr "Régler sur %s"
2193
 
2194
- #: lib/firewall_policies.php:919
2195
  #, php-format
2196
  msgid "Force %s flag on all cookies to mitigate XSS attacks"
2197
  msgstr ""
2198
  "Activer la propriété %s pour tous les cookies afin d'atténuer les menaces "
2199
  "XSS qui génèrent des vols de cookies"
2200
 
2201
- #: lib/firewall_policies.php:925
2202
  msgid ""
2203
  "If your PHP scripts use cookies that need to be accessed from JavaScript, "
2204
- "you should disable this option."
2205
  msgstr ""
2206
  "Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
2207
- "partir de JavaScript, vous devez garder cette option désactivée."
2208
 
2209
- #: lib/firewall_policies.php:931
2210
  msgid ""
2211
  "HSTS headers can only be set when you are accessing your site over HTTPS."
2212
  msgstr ""
2213
  "Les en-têtes HSTS ne peuvent être utilisés que lorsque vous vous connectez à "
2214
  "votre site en HTTPS (connexion sécurisée)."
2215
 
2216
- #: lib/firewall_policies.php:938
2217
  #, php-format
2218
  msgid "Set %s (HSTS) to enforce secure connections to the server"
2219
  msgstr ""
2220
  "Activer %s (HSTS) pour forcer les connexions sécurisées vers le serveur"
2221
 
2222
- #: lib/firewall_policies.php:941
 
 
 
 
2223
  msgid "1 month"
2224
  msgstr "1 mois"
2225
 
2226
- #: lib/firewall_policies.php:942
2227
  msgid "6 months"
2228
  msgstr "6 mois"
2229
 
2230
- #: lib/firewall_policies.php:943
2231
  msgid "1 year"
2232
  msgstr "1 année"
2233
 
2234
- #: lib/firewall_policies.php:945
2235
  msgid "Apply to subdomains"
2236
  msgstr "Appliquer aux sous-domaines"
2237
 
2238
- #: lib/firewall_policies.php:949
2239
- msgid "Set <code>max-age</code> to 0"
2240
- msgstr "Régler <code>max-age</code> à 0"
2241
-
2242
- #: lib/firewall_policies.php:969
2243
  #, php-format
2244
  msgid "Set %s for the website frontend"
2245
  msgstr "Activer %s pour le site"
2246
 
2247
- #: lib/firewall_policies.php:977
2248
  msgid "This CSP header will apply to the website frontend only."
2249
  msgstr "Cet en-tête CSP ne s'appliquera qu'au site."
2250
 
2251
- #: lib/firewall_policies.php:983
2252
  #, php-format
2253
  msgid "Set %s for the WordPress admin dashboard"
2254
  msgstr "Activer %s pour la console d'administration de WordPress"
2255
 
2256
- #: lib/firewall_policies.php:991
2257
  msgid "This CSP header will apply to the WordPress admin dashboard only."
2258
  msgstr ""
2259
  "Cet en-tête CSP ne s'appliquera qu'à la console d'administration de "
2260
  "WordPress."
2261
 
2262
- #: lib/firewall_policies.php:1007
2263
  #, php-format
2264
  msgid "Set %s (Chrome, Opera and Firefox browsers)"
2265
  msgstr "Activer %s (Chrome, Opera et Firefox)"
2266
 
2267
- #: lib/firewall_policies.php:1061
2268
  msgid ""
2269
  "Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
2270
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
@@ -2273,97 +1671,279 @@ msgstr ""
2273
  "<code>GET</code>, <code>POST</code>, <code>HTTP_USER_AGENT</code>, "
2274
  "<code>HTTP_REFERER</code> et les cookies"
2275
 
2276
- #: lib/firewall_policies.php:1104
2277
  msgid "Block serialized PHP objects in the following global variables"
2278
  msgstr ""
2279
  "Bloquer les objets PHP sérialisés dans les variables globales suivantes"
2280
 
2281
- #: lib/firewall_policies.php:1117
2282
  msgid "Hide PHP notice and error messages"
2283
  msgstr "Masquer les messages d'erreur de PHP"
2284
 
2285
- #: lib/firewall_policies.php:1127
2286
  msgid "Sanitise <code>PHP_SELF</code>"
2287
  msgstr "Nettoyer <code>PHP_SELF</code>"
2288
 
2289
- #: lib/firewall_policies.php:1137
2290
  msgid "Sanitise <code>PATH_TRANSLATED</code>"
2291
  msgstr "Nettoyer <code>PATH_TRANSLATED</code>"
2292
 
2293
- #: lib/firewall_policies.php:1147
2294
  msgid "Sanitise <code>PATH_INFO</code>"
2295
  msgstr "Nettoyer <code>PATH_INFO</code>"
2296
 
2297
- #: lib/firewall_policies.php:1167
2298
  msgid "This option is not compatible with your actual configuration."
2299
  msgstr ""
2300
  "Cette option n'est pas compatible avec la configuration de votre serveur."
2301
 
2302
- #: lib/firewall_policies.php:1191 lib/help.php:262
2303
  msgid "Various"
2304
  msgstr "Divers"
2305
 
2306
- #: lib/firewall_policies.php:1194
2307
  msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
2308
  msgstr ""
2309
  "Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code>"
2310
 
2311
- #: lib/firewall_policies.php:1204
2312
  msgid "Block ASCII character 0x00 (NULL byte)"
2313
  msgstr "Bloquer le caractère ASCII 0x00 (NULL byte)"
2314
 
2315
- #: lib/firewall_policies.php:1214
2316
  msgid "Block ASCII control characters 1 to 8 and 14 to 31"
2317
  msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31"
2318
 
2319
- #: lib/firewall_policies.php:1230
2320
  msgid "Save Firewall Policies"
2321
  msgstr "Sauvegarder les options"
2322
 
2323
- #: lib/firewall_policies.php:1232
2324
  msgid "Restore Default Values"
2325
  msgstr "Rétablir les valeurs par défaut"
2326
 
2327
- #: lib/help.php:37 ninjafirewall.php:477
2328
  msgid "Overview"
2329
  msgstr "Aperçu"
2330
 
2331
- #: lib/help.php:38
 
 
 
 
2332
  msgid ""
2333
- "This is the Overview page; it shows information about the firewall status. "
2334
- "We recommend you keep an eye on it because, in case of problems, all "
2335
- "possible errors and warnings will be displayed here."
2336
  msgstr ""
2337
- "La page Aperçu affiche toutes les informations relatives au bon "
2338
- "fonctionnement du pare-feu ainsi que les mises à jour; il vous est conseillé "
2339
- "de la consulter fréquemment car, en cas de problèmes, ceux-ci seront "
2340
- "indiqués ici."
2341
-
2342
- #: lib/help.php:41
2343
- msgid "For more information:"
2344
- msgstr "Pour plus d'information&nbsp;:"
2345
 
2346
- #: lib/help.php:43
2347
- msgid "Securing WordPress with NinjaFirewall."
2348
- msgstr "Sécurisation de WordPress avec NinjaFirewall."
2349
 
2350
- #: lib/help.php:45
2351
- msgid "Installation, help and troubleshooting"
2352
- msgstr "Installation, aide et problèmes"
 
2353
 
2354
  #: lib/help.php:47
2355
- msgid "Support Forum"
2356
- msgstr "Forum"
2357
 
2358
  #: lib/help.php:48
2359
- msgid "Updates via Twitter"
2360
- msgstr "Mises à jour via Twitter"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2361
 
2362
- #: lib/help.php:61 lib/statistics.php:105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2363
  msgid "Monthly stats"
2364
  msgstr "Statistiques mensuelles"
2365
 
2366
- #: lib/help.php:63
2367
  msgid ""
2368
  "Statistics are taken from the current log. It is rotated on the first day of "
2369
  "each month."
@@ -2371,7 +1951,7 @@ msgstr ""
2371
  "Les statistiques sont tirées du journal du pare-feu qui est, par défaut, "
2372
  "réinitialisé le 1er jour de chaque mois."
2373
 
2374
- #: lib/help.php:65
2375
  #, php-format
2376
  msgid ""
2377
  "You can view the log by clicking on the <a href=\"%s\">Firewall Log</a> menu."
@@ -2379,11 +1959,11 @@ msgstr ""
2379
  "Vous pouvez consuler ce journal en cliquant sur le menu <a href=\"%s"
2380
  "\">Journal du Pare-feu</a>."
2381
 
2382
- #: lib/help.php:69 lib/statistics.php:135
2383
  msgid "Benchmarks"
2384
  msgstr "Performances"
2385
 
2386
- #: lib/help.php:71
2387
  msgid ""
2388
  "Benchmarks show the time NinjaFirewall took, in seconds, to process each "
2389
  "request it has blocked."
@@ -2391,7 +1971,7 @@ msgstr ""
2391
  "Indique le temps qu'il a fallu à NinjaFirewall pour intercepter, analyser et "
2392
  "bloquer les requêtes dangereuses."
2393
 
2394
- #: lib/help.php:84
2395
  #, php-format
2396
  msgid ""
2397
  "This option allows you to disable NinjaFirewall. It has basically the same "
@@ -2401,12 +1981,12 @@ msgstr ""
2401
  "essentiellement le même effet que la désactivation effectuée depuis la page "
2402
  "<a href=\"%s\">Extensions</a> du Tableau de bord."
2403
 
2404
- #: lib/help.php:86
2405
  msgid "Your site will remain unprotected until you enable it again."
2406
  msgstr ""
2407
  "Votre site ne sera plus protégé par NinjaFirewall durant cette période."
2408
 
2409
- #: lib/help.php:92
2410
  #, php-format
2411
  msgid ""
2412
  "In Debugging mode, NinjaFirewall will not block or sanitise suspicious "
@@ -2418,7 +1998,7 @@ msgstr ""
2418
  "Les lignes correspondantes seront indiquée par la mention <code>DEBUG_ON</"
2419
  "code> dans la colonne LEVEL du journal. "
2420
 
2421
- #: lib/help.php:93
2422
  msgid ""
2423
  "We recommend to run it in Debugging Mode for at least 24 hours after "
2424
  "installing it on a new site and then to keep an eye on the firewall log "
@@ -2432,7 +2012,7 @@ msgstr ""
2432
  "journal du pare-feu pour y voir les éventuels problèmes et, le cas échéant, "
2433
  "désactiver les options ou règles pouvant créer des faux-positifs."
2434
 
2435
- #: lib/help.php:98
2436
  msgid ""
2437
  "This option will anonymize IP addresses in the firewall log by removing "
2438
  "their last 3 characters."
@@ -2440,14 +2020,14 @@ msgstr ""
2440
  "Cette option anonymise les adresses IP dans le journal du pare-feu en "
2441
  "supprimant leurs 3 derniers caractères."
2442
 
2443
- #: lib/help.php:98
2444
  msgid ""
2445
  "It does not apply to private IP addresses and the Login Protection feature."
2446
  msgstr ""
2447
  "Elle ne s'applique pas aux adresses IP privées, ni à l'option Page de "
2448
  "Connexion."
2449
 
2450
- #: lib/help.php:99
2451
  msgid ""
2452
  "Note that it will affect only IP addresses written to the firewall log after "
2453
  "enabling this option."
@@ -2455,7 +2035,7 @@ msgstr ""
2455
  "Notez que seules les adresses IP enregistrées dans le journal du pare-feu "
2456
  "après avoir activé cette option sont concernées."
2457
 
2458
- #: lib/help.php:99
2459
  msgid ""
2460
  "Also, if you are redirecting events to the syslog server (NinjaFirewall "
2461
  "<font color=\"#21759B\">WP+</font> Edition), IP addresses will be anonymized "
@@ -2464,11 +2044,11 @@ msgstr ""
2464
  "En outre, si vous redirigez les événements vers le serveur syslog, les "
2465
  "adresses IP y seront également anonymisées."
2466
 
2467
- #: lib/help.php:103
2468
  msgid "Error code and message to return"
2469
  msgstr "Code HTTP et Message à retourner"
2470
 
2471
- #: lib/help.php:105
2472
  msgid ""
2473
  "Lets you customize the HTTP error code returned by NinjaFirewall when "
2474
  "blocking a dangerous request and the message to display to the user."
@@ -2477,16 +2057,16 @@ msgstr ""
2477
  "retourne lorsqu'il bloque une requête dangereuse ansi que le message à "
2478
  "afficher à l'utilisateur bloqué."
2479
 
2480
- #: lib/help.php:106
2481
  msgid "You can use any HTML tags and 3 built-in variables:"
2482
  msgstr ""
2483
  "Vous pouvez utiliser le language HTML ainsi que les 3 variables suivantes :"
2484
 
2485
- #: lib/help.php:107
2486
  msgid "the blocked user IP."
2487
  msgstr "l'adresse IP de l'utilisateur."
2488
 
2489
- #: lib/help.php:108
2490
  msgid ""
2491
  "the unique incident number as it will appear in the firewall log \"INCIDENT"
2492
  "\" column."
@@ -2494,15 +2074,15 @@ msgstr ""
2494
  "le numéro d'incident, tel qu'il apparaîtra dans la colonne \"INCIDENT\" du "
2495
  "journal du pare-feu."
2496
 
2497
- #: lib/help.php:109
2498
  msgid "NinjaFirewall logo."
2499
  msgstr "le logo de NinjaFirewall."
2500
 
2501
- #: lib/help.php:114
2502
  msgid "Export/import configuration"
2503
  msgstr "Configuration de l'exportation / importation"
2504
 
2505
- #: lib/help.php:116
2506
  #, php-format
2507
  msgid ""
2508
  "This options lets you export you current configuration or import it from "
@@ -2515,12 +2095,12 @@ msgstr ""
2515
  "(%s), sinon il sera rejeté. Notez que l'importation effacera toute votre "
2516
  "configuration (options et règles du pare-feu), sauf votre licence WP+."
2517
 
2518
- #: lib/help.php:118
2519
  msgid "\"File Check\" configuration will not be exported/imported."
2520
  msgstr ""
2521
  "La configuration de \"File Check\" ne peut pas être importée ou exportée."
2522
 
2523
- #: lib/help.php:125
2524
  msgid ""
2525
  "NinjaFirewall will automatically backup its configuration (options, policies "
2526
  "and rules) everyday for the last 5 days. If you want to restore its "
@@ -2531,7 +2111,7 @@ msgstr ""
2531
  "restaurer sa configuration à une date antérieure, sélectionnez le fichier "
2532
  "correspondant dans la liste."
2533
 
2534
- #: lib/help.php:139
2535
  #, php-format
2536
  msgid ""
2537
  "Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
@@ -2542,11 +2122,11 @@ msgstr ""
2542
  "scripts PHP</b> situés à l'intérieur du répertoire %s ainsi que ses sous-"
2543
  "répertoires, et non pas seulement à la page d'index de WordPress."
2544
 
2545
- #: lib/help.php:144
2546
  msgid "Policies overview"
2547
  msgstr "Politiques du pare-feu"
2548
 
2549
- #: lib/help.php:146
2550
  #, php-format
2551
  msgid ""
2552
  "Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
@@ -2565,7 +2145,7 @@ msgstr ""
2565
  "adresses IP, avant que celles-ci n'atteignent votre application, que ce soit "
2566
  "en mode HTTP ou HTTPS."
2567
 
2568
- #: lib/help.php:148
2569
  msgid ""
2570
  "Use the options below to enable, disable or to tweak these rules according "
2571
  "to your needs."
@@ -2573,11 +2153,11 @@ msgstr ""
2573
  "Utilisez les options ci-dessous pour configurer NinjaFirewall suivant vos "
2574
  "besoins."
2575
 
2576
- #: lib/help.php:155
2577
  msgid "Scan and Sanitise"
2578
  msgstr "Filtrer et Nettoyer"
2579
 
2580
- #: lib/help.php:157
2581
  msgid ""
2582
  "You can choose to scan and reject dangerous content but also to sanitise "
2583
  "requests and variables. Those two actions are different and can be combined "
@@ -2587,7 +2167,7 @@ msgstr ""
2587
  "mais aussi de les nettoyer. Ces deux actions sont différentes et peuvent "
2588
  "être combinées pour plus de sécurité."
2589
 
2590
- #: lib/help.php:158
2591
  msgid ""
2592
  "Scan : if anything suspicious is detected, NinjaFirewall will block the "
2593
  "request and return an HTTP error code and message (defined in the \"Firewall "
@@ -2599,7 +2179,7 @@ msgstr ""
2599
  "du Pare-feu\"). La requête ne pourra pas aboutir et la connexion sera fermée "
2600
  "immédiatement."
2601
 
2602
- #: lib/help.php:159
2603
  #, php-format
2604
  msgid ""
2605
  "Sanitise : this option will not block but sanitise the user request by "
@@ -2617,7 +2197,7 @@ msgstr ""
2617
  "HTML correspondantes. S'il s'agit d'une variable et de sa valeur (<code>?"
2618
  "variable=valeur</code>), les deux éléments seront nettoyés."
2619
 
2620
- #: lib/help.php:161
2621
  msgid ""
2622
  "This action will be performed when the filtering process is over, right "
2623
  "before NinjaFirewall forwards the request to your PHP script."
@@ -2626,7 +2206,7 @@ msgstr ""
2626
  "juste avant que NinjaFirewall fasse suivre la requête à votre application "
2627
  "PHP."
2628
 
2629
- #: lib/help.php:164
2630
  msgid ""
2631
  "If you enabled <code>POST</code> requests sanitising, articles and messages "
2632
  "posted by your visitors could be corrupted with excessive backslashes or "
@@ -2636,26 +2216,26 @@ msgstr ""
2636
  "commentaires et messages de vos visiteurs pourraient être endommagés par "
2637
  "cette option."
2638
 
2639
- #: lib/help.php:176
2640
  msgid "Whether to filter HTTP and/or HTTPS traffic"
2641
  msgstr ""
2642
  "Sélectionnez le type de trafic filtré par le pare-feu (HTTP et/ou HTTPS)."
2643
 
2644
- #: lib/help.php:179
2645
  msgid "File Uploads:"
2646
  msgstr "Autoriser les téléchargements&nbsp;:"
2647
 
2648
- #: lib/help.php:179
2649
  msgid "whether to allow/disallow file uploads."
2650
  msgstr ""
2651
  "vous pouvez autoriser ou interdire tout téléchargement de fichiers vers "
2652
  "votre site."
2653
 
2654
- #: lib/help.php:180
2655
  msgid "Sanitise filenames:"
2656
  msgstr "Nettoyer le nom des fichiers&nbsp;:"
2657
 
2658
- #: lib/help.php:180
2659
  msgid ""
2660
  "any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</"
2661
  "code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
@@ -2667,7 +2247,7 @@ msgstr ""
2667
  "d'union <code>-</code> ou un caractère de soulignement <code>_</code>, celui-"
2668
  "si sera remplacé par le caractère de substitution."
2669
 
2670
- #: lib/help.php:183
2671
  msgid ""
2672
  "Whether to block direct access to PHP files located in specific WordPress "
2673
  "directories."
@@ -2675,7 +2255,7 @@ msgstr ""
2675
  "S'il faut bloquer l’accès direct à tout fichier PHP se trouvant dans l'un de "
2676
  "ces répertoires."
2677
 
2678
- #: lib/help.php:184
2679
  msgid ""
2680
  "enabling this policy will block any attempt (e.g., exploiting a "
2681
  "vulnerability, using a backdoor etc) to modify some important WordPress "
@@ -2688,7 +2268,7 @@ msgstr ""
2688
  "enverra également une alerte par e-mail avec tous les détails concernant le "
2689
  "problème. Elle est activée par défaut."
2690
 
2691
- #: lib/help.php:185
2692
  msgid ""
2693
  "enabling this policy will block any attempt (e.g., exploiting a "
2694
  "vulnerability, using a backdoor etc) to create a user account. If you allow "
@@ -2699,7 +2279,7 @@ msgstr ""
2699
  "de création d'un compte d'utilisateur. Si vous autorisez l'inscription des "
2700
  "utilisateurs, vous ne devez pas l'activer."
2701
 
2702
- #: lib/help.php:186
2703
  #, php-format
2704
  msgid ""
2705
  "many vulnerabilities in plugins are exploited via the admin-ajax.php script. "
@@ -2713,11 +2293,11 @@ msgstr ""
2713
  "d’y accéder. L'adresse IP du serveur (%s) et les adresses IP privées ne "
2714
  "seront pas bloquées."
2715
 
2716
- #: lib/help.php:187
2717
  msgid "Protect against username enumeration:"
2718
  msgstr "Protéger contre l'énumération des comptes utilisateurs&nbsp;:"
2719
 
2720
- #: lib/help.php:187
2721
  msgid ""
2722
  "it is possible to enumerate usernames either through the WordPress author "
2723
  "archives, the REST API or the login page. Although this is not a "
@@ -2734,11 +2314,11 @@ msgstr ""
2734
  "WordPress, certains hackers utilisent ces astuces pour récupérer les noms "
2735
  "d'utilisateur afin de lancer des attaques par force brute plus précises."
2736
 
2737
- #: lib/help.php:188
2738
  msgid "WordPress REST API:"
2739
  msgstr "API REST de WordPress :"
2740
 
2741
- #: lib/help.php:188
2742
  msgid ""
2743
  "it allows you to access your WordPress site's data through an easy-to-use "
2744
  "HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
@@ -2748,11 +2328,11 @@ msgstr ""
2748
  "Depuis WordPress 4.7, cette elle est activée par défaut. NinjaFirewall vous "
2749
  "permet de bloquer tout accès a cette API si vous ne l'utilisez pas."
2750
 
2751
- #: lib/help.php:189
2752
  msgid "WordPress XML-RPC API:"
2753
  msgstr "API XML-RPC de WordPress :"
2754
 
2755
- #: lib/help.php:189
2756
  msgid ""
2757
  "XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
2758
  "its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
@@ -2772,7 +2352,7 @@ msgstr ""
2772
  "requêtes qui utilisent la méthode <code>system.multicall</code> ou les "
2773
  "Pingbacks."
2774
 
2775
- #: lib/help.php:190
2776
  msgid ""
2777
  "Block <code>POST</code> requests in the themes folder <code>/wp-content/"
2778
  "themes</code>:"
@@ -2780,7 +2360,7 @@ msgstr ""
2780
  "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes <code>/wp-"
2781
  "content/themes</code>&nbsp;:"
2782
 
2783
- #: lib/help.php:190
2784
  msgid ""
2785
  "this option can be useful to block hackers from installing backdoor in the "
2786
  "PHP theme files. However, because some custom themes may include an HTML "
@@ -2792,13 +2372,13 @@ msgstr ""
2792
  "de recherche ou de contact etc) nécessitant des requêtes <code>POST</code> , "
2793
  "cette option n'est pas activée par défaut."
2794
 
2795
- #: lib/help.php:191
2796
  msgid "Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:"
2797
  msgstr ""
2798
  "Forcer la connexion sécurisée au Tableau de bord <code>FORCE_SSL_ADMIN</"
2799
  "code>&nbsp;:"
2800
 
2801
- #: lib/help.php:191
2802
  msgid ""
2803
  "enable this option when you want to secure logins and the admin area so that "
2804
  "both passwords and cookies are never sent in the clear. Ensure that you can "
@@ -2810,13 +2390,13 @@ msgstr ""
2810
  "connexion via HTTPS avant d'activer cette option, sinon vous risquez de "
2811
  "bloquer l’accès à votre site&nbsp;!"
2812
 
2813
- #: lib/help.php:192
2814
  msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:"
2815
  msgstr ""
2816
  "Désactiver l’éditeur de thème et d'extension <code>DISALLOW_FILE_EDIT</"
2817
  "code>&nbsp;:"
2818
 
2819
- #: lib/help.php:192
2820
  msgid ""
2821
  "disabling the plugin and theme editor provides an additional layer of "
2822
  "security if a hacker gains access to a well-privileged user account."
@@ -2826,14 +2406,14 @@ msgstr ""
2826
  "pourrait pas l'utiliser pour insérer une porte dérobée dans l'un de vos "
2827
  "scripts PHP."
2828
 
2829
- #: lib/help.php:193
2830
  msgid ""
2831
  "Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:"
2832
  msgstr ""
2833
  "Désactiver l'installation et mise à jour des thèmes et extensions "
2834
  "<code>DISALLOW_FILE_MODS</code>&nbsp;:"
2835
 
2836
- #: lib/help.php:193
2837
  msgid ""
2838
  "this option will block users being able to use the plugin and theme "
2839
  "installation/update functionality from the WordPress admin area. Setting "
@@ -2843,33 +2423,34 @@ msgstr ""
2843
  "installation ou mise à jour d'une extension ou d'un thème. Elle désactive "
2844
  "aussi l’éditeur de thème et d'extension."
2845
 
2846
- #: lib/help.php:194
2847
- msgid "Disable the fatal error handler <code>WP_Fatal_Error_Handler</code>:"
 
2848
  msgstr ""
2849
- "Désactiver le gestionnaire d'erreurs fatales <code>WP_Fatal_Error_Handler</"
2850
- "code> :"
2851
 
2852
- #: lib/help.php:194
2853
  msgid ""
2854
  "this option will disable the WSOD protection introduced in WordPress 5.1."
2855
  msgstr ""
2856
  "cette option désactivera la protection WSOD introduite dans WordPress 5.1."
2857
 
2858
- #: lib/help.php:202
2859
  msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
2860
  msgstr "S'il faut filtrer / nettoyer la variable <code>GET</code>."
2861
 
2862
- #: lib/help.php:205
2863
  msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
2864
  msgstr "S'il faut filtrer / nettoyer la variable <code>POST</code>."
2865
 
2866
- #: lib/help.php:206
2867
  msgid "Decode Base64-encoded <code>POST</code> variable:"
2868
  msgstr ""
2869
  "Décoder les chaîne encodées en Base64 dans la variable <code>POST</"
2870
  "code>&nbsp;:"
2871
 
2872
- #: lib/help.php:206
2873
  msgid ""
2874
  "NinjaFirewall will decode and scan base64 encoded values in order to detect "
2875
  "obfuscated malicious code. This option is only available for the <code>POST</"
@@ -2878,41 +2459,41 @@ msgstr ""
2878
  "NinjaFirewall peut décoder et filtrer les chaînes de caractères encodées en "
2879
  "Base64 afin d'y détecter du code malveillant caché."
2880
 
2881
- #: lib/help.php:209
2882
  msgid "Whether to sanitise the <code>REQUEST</code> variable."
2883
  msgstr "S'il faut filtrer / nettoyer la variable <code>REQUEST</code>."
2884
 
2885
- #: lib/help.php:212
2886
  msgid "Whether to scan and/or sanitise cookies."
2887
  msgstr "S'il faut filtrer / nettoyer les cookies."
2888
 
2889
- #: lib/help.php:215
2890
  msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
2891
  msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_USER_AGENT</code>."
2892
 
2893
- #: lib/help.php:216
2894
  msgid "Block suspicious bots/scanners:"
2895
  msgstr "Bloquer les requêtes provenant de bots/scanners malveillants :"
2896
 
2897
- #: lib/help.php:216
2898
  msgid ""
2899
  "rejects some known bots, scanners and various malicious scripts attempting "
2900
  "to access your blog."
2901
  msgstr ""
2902
  "cette option peut bloquer de nombreux crawlers, spambots et autres scrappers."
2903
 
2904
- #: lib/help.php:219
2905
  msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
2906
  msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_REFERER</code>."
2907
 
2908
- #: lib/help.php:220
2909
  msgid ""
2910
  "Block POST requests that do not have an <code>HTTP_REFERER</code> header:"
2911
  msgstr ""
2912
  "Bloquer les requêtes POST qui n'ont pas d'en-tête <code>HTTP_REFERER</"
2913
  "code>&nbsp;:"
2914
 
2915
- #: lib/help.php:220
2916
  msgid ""
2917
  "this option will block any <code>POST</code> request that does not have a "
2918
  "Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
@@ -2929,12 +2510,12 @@ msgstr ""
2929
  "vous utilisez des scripts comme Paypal IPN, WordPress WP-Cron etc, "
2930
  "désactivez cette fonction."
2931
 
2932
- #: lib/help.php:223
2933
  msgid "Block localhost IP in <code>GET/POST</code> requests:"
2934
  msgstr ""
2935
  "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost&nbsp;:"
2936
 
2937
- #: lib/help.php:223
2938
  msgid ""
2939
  "this option will block any <code>GET</code> or <code>POST</code> request "
2940
  "containing the localhost IP (127.0.0.1). It can be useful to block SQL "
@@ -2945,13 +2526,13 @@ msgstr ""
2945
  "les programmes malveillants. Attention toutefois à ne pas bloquer certains "
2946
  "scripts d'installation ou de configuration si vous l'activez. "
2947
 
2948
- #: lib/help.php:224
2949
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
2950
  msgstr ""
2951
  "Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
2952
  "IP&nbsp;:"
2953
 
2954
- #: lib/help.php:224
2955
  #, php-format
2956
  msgid ""
2957
  "this option will reject any request using an IP instead of a domain name in "
@@ -2967,12 +2548,12 @@ msgstr ""
2967
  "application trouvent les sites en scannant les plages d'adresses IP plutôt "
2968
  "que les noms de domaine. "
2969
 
2970
- #: lib/help.php:225
2971
  msgid "Scan traffic coming from localhost and private IP address spaces:"
2972
  msgstr ""
2973
  "Filtrer les connexions provenant de localhost et d'adresses IP privées&nbsp;:"
2974
 
2975
- #: lib/help.php:225
2976
  msgid ""
2977
  "this option will allow the firewall to scan traffic from all non-routable "
2978
  "private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
@@ -2983,7 +2564,7 @@ msgstr ""
2983
  "Nous vous recommandons de le garder activé si vous avez 2 ou plusieurs "
2984
  "serveurs reliés entre eux."
2985
 
2986
- #: lib/help.php:234
2987
  msgid ""
2988
  "In addition to filtering incoming requests, NinjaFirewall can also hook the "
2989
  "HTTP response in order to alter its headers. Those modifications can help to "
@@ -2994,7 +2575,7 @@ msgstr ""
2994
  "peuvent aider à atténuer les menaces telles que les attaques XSS, phishing "
2995
  "et clickjacking."
2996
 
2997
- #: lib/help.php:236
2998
  msgid ""
2999
  "Set <code>X-Content-Type-Options</code> to protect against MIME type "
3000
  "confusion attacks:"
@@ -3002,7 +2583,7 @@ msgstr ""
3002
  "Activer <code>X-Content-Type-Options</code> pour protéger contre les "
3003
  "attaques basées sur la confusion du type MIME&nbsp;:"
3004
 
3005
- #: lib/help.php:236
3006
  msgid ""
3007
  "this header will send the nosniff value to instruct the browser to disable "
3008
  "content or MIME sniffing and to use the content-type returned by the server. "
@@ -3017,14 +2598,14 @@ msgstr ""
3017
  "dans certains cas, peut entraîner des problèmes de sécurité tels que les "
3018
  "attaques basées sur la confusion du type MIME."
3019
 
3020
- #: lib/help.php:237
3021
  msgid ""
3022
  "Set <code>X-Frame-Options</code> to protect against clickjacking attempts:"
3023
  msgstr ""
3024
  "Activer <code>X-Frame-Options</code> pour protéger contre les attaques de "
3025
  "détournement de clic (clickjacking)&nbsp;:"
3026
 
3027
- #: lib/help.php:237
3028
  msgid ""
3029
  "this header indicates a policy whether a browser must not allow to render a "
3030
  "page in a &lt;frame&gt; or &lt;iframe&gt;. Hosts can declare this policy in "
@@ -3038,7 +2619,7 @@ msgstr ""
3038
  "sont pas intégré dans d'autres pages ou cadres, notamment d'un autre site. "
3039
  "NinjaFirewall accepte deux valeurs différentes&nbsp;:"
3040
 
3041
- #: lib/help.php:239
3042
  msgid ""
3043
  "a browser receiving content with this header must not display this content "
3044
  "in any frame from a page of different origin than the content itself."
@@ -3046,7 +2627,7 @@ msgstr ""
3046
  "un navigateur ne doit pas afficher le contenu dans une &lt;frame&gt; ou &lt;"
3047
  "iframe&gt; d'une page d'origine différente que le contenu lui-même."
3048
 
3049
- #: lib/help.php:240
3050
  msgid ""
3051
  "a browser receiving content with this header must not display this content "
3052
  "in any frame."
@@ -3054,13 +2635,13 @@ msgstr ""
3054
  "un navigateur ne doit jamais afficher le contenu dans une &lt;frame&gt; ou "
3055
  "&lt;iframe&gt;"
3056
 
3057
- #: lib/help.php:243
3058
  msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
3059
  msgstr ""
3060
  "La valeur <code>ALLOW-FROM</code> n'est pas prise en charge par "
3061
  "NinjaFirewall."
3062
 
3063
- #: lib/help.php:245
3064
  msgid ""
3065
  "Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
3066
  "administrator and the login page only."
@@ -3068,14 +2649,14 @@ msgstr ""
3068
  "Depuis la version 3.1.3, WordPress active <code>SAMEORIGIN</code> pour "
3069
  "l'administrateur et la page de connexion uniquement."
3070
 
3071
- #: lib/help.php:246
3072
  msgid ""
3073
  "Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
3074
  "browsers):"
3075
  msgstr ""
3076
  "Activer <code>X-XSS-Protection</code> (IE/Edge, Opera, Chrome et Safari)"
3077
 
3078
- #: lib/help.php:246
3079
  msgid ""
3080
  "this header allows browsers to identify and block XSS attacks by preventing "
3081
  "malicious scripts from executing. It is enabled by default on all compatible "
@@ -3085,7 +2666,7 @@ msgstr ""
3085
  "attaques XSS en empêchant un script malveillant de s'exécuter. Notez que "
3086
  "cette option est activée par défaut sur ces navigateurs."
3087
 
3088
- #: lib/help.php:247
3089
  msgid ""
3090
  "If a visitor disabled their browser's XSS filter, you cannot re-enable it "
3091
  "with that option."
@@ -3093,14 +2674,14 @@ msgstr ""
3093
  "Si un visiteur désactive le filtre XSS de son navigateur, vous ne pouvez pas "
3094
  "le réactiver avec cette option."
3095
 
3096
- #: lib/help.php:249
3097
  msgid ""
3098
  "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
3099
  msgstr ""
3100
  "Activer la propriété <code>HttpOnly</code> pour tous les cookies afin "
3101
  "d'atténuer les menaces XSS qui génèrent des vols de cookies&nbsp;:"
3102
 
3103
- #: lib/help.php:249
3104
  msgid ""
3105
  "adding this flag to cookies helps to mitigate the risk of cross-site "
3106
  "scripting by preventing them from being accessed through client-side "
@@ -3117,7 +2698,7 @@ msgstr ""
3117
  "dans la réponse HTTP juste avant que celle-ci ne soit envoyée à vos "
3118
  "visiteurs."
3119
 
3120
- #: lib/help.php:250
3121
  msgid ""
3122
  "If your PHP scripts send cookies that need to be accessed from JavaScript, "
3123
  "you should keep that option disabled."
@@ -3125,7 +2706,7 @@ msgstr ""
3125
  "Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
3126
  "partir de JavaScript, vous devez garder cette option désactivée."
3127
 
3128
- #: lib/help.php:251
3129
  msgid ""
3130
  "Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
3131
  "connections to the server:"
@@ -3133,7 +2714,7 @@ msgstr ""
3133
  "Activer <code>Strict-Transport-Security</code> (HSTS) pour forcer les "
3134
  "connexions sécurisées vers le serveur&nbsp;"
3135
 
3136
- #: lib/help.php:251
3137
  msgid ""
3138
  "this policy enforces secure HTTPS connections to the server. Web browsers "
3139
  "will not allow the user to access the web application over insecure HTTP "
@@ -3146,11 +2727,11 @@ msgstr ""
3146
  "de cookies ou les attaques du type \"Man-in-the-middle\". La plupart des "
3147
  "navigateurs récents sont compatibles avec cette politique."
3148
 
3149
- #: lib/help.php:252
3150
  msgid "Set <code>Content-Security-Policy</code>:"
3151
  msgstr "Activer <code>Content-Security-Policy</code> :"
3152
 
3153
- #: lib/help.php:252
3154
  msgid ""
3155
  "this policy helps to mitigate threats such as XSS, phishing and clickjacking "
3156
  "attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
@@ -3160,7 +2741,7 @@ msgstr ""
3160
  "code JavaScript, les styles CSS, frames/iframes HTML, polices, images, "
3161
  "objets (Java, ActiveX, fichiers audio et video), mais aussi les WebSocket."
3162
 
3163
- #: lib/help.php:252
3164
  msgid ""
3165
  "NinjaFirewall lets you configure the CSP policy separately for the frontend "
3166
  "(blog, website) and the backend (WordPress admin dashboard)."
@@ -3168,11 +2749,11 @@ msgstr ""
3168
  "NinjaFirewall vous permet de configurer CSP séparément pour le site et "
3169
  "l'interface d'administration de WordPress."
3170
 
3171
- #: lib/help.php:253
3172
  msgid "Set <code>Referrer-Policy</code>:"
3173
  msgstr "Activer <code>Referrer-Policy</code> :"
3174
 
3175
- #: lib/help.php:253
3176
  msgid ""
3177
  "this HTTP header governs which referrer information, sent in the Referer "
3178
  "header, should be included with requests made."
@@ -3180,11 +2761,11 @@ msgstr ""
3180
  "cet en-tête HTTP détermine quelles informations de provenance doivent être "
3181
  "incluses dans l'en-tête Referer."
3182
 
3183
- #: lib/help.php:257
3184
  msgid "Block PHP built-in wrappers:"
3185
  msgstr "Bloquer les gestionnaires (wrappers) PHP dangereux&nbsp;:"
3186
 
3187
- #: lib/help.php:257
3188
  msgid ""
3189
  "PHP has several wrappers for use with the filesystem functions. It is "
3190
  "possible for an attacker to use them to bypass firewalls and various IDS to "
@@ -3204,11 +2785,11 @@ msgstr ""
3204
  "requête <code>GET</code> ou <code>POST</code>, des cookies, ou dans les "
3205
  "variables <code>HTTP_REFERER</code> et <code>HTTP_USER_AGENT</code>."
3206
 
3207
- #: lib/help.php:258
3208
  msgid "Block serialized PHP objects:"
3209
  msgstr "Bloquer les objets PHP sérialisés :"
3210
 
3211
- #: lib/help.php:258
3212
  #, php-format
3213
  msgid ""
3214
  "Object Serialization is a PHP feature used by many applications to generate "
@@ -3227,11 +2808,11 @@ msgstr ""
3227
  "<code>POST</code>, les cookies, ou dans les variables <code>HTTP_REFERER</"
3228
  "code> et <code>HTTP_USER_AGENT</code>."
3229
 
3230
- #: lib/help.php:259
3231
  msgid "Hide PHP notice and error messages:"
3232
  msgstr "Masquer les messages d'erreur de PHP&nbsp;:"
3233
 
3234
- #: lib/help.php:259
3235
  msgid ""
3236
  "this option lets you hide errors returned by your scripts. Such errors can "
3237
  "leak sensitive informations which can be exploited by hackers."
@@ -3240,7 +2821,7 @@ msgstr ""
3240
  "afficher des informations sensibles qui peuvent être exploitées "
3241
  "ultérieurement par des pirates."
3242
 
3243
- #: lib/help.php:260
3244
  msgid ""
3245
  "Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
3246
  "<code>PATH_INFO</code>:"
@@ -3248,7 +2829,7 @@ msgstr ""
3248
  "Nettoyer <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
3249
  "<code>PATH_INFO</code>&nbsp;:"
3250
 
3251
- #: lib/help.php:260
3252
  msgid ""
3253
  "this option can sanitise any dangerous characters found in those 3 server "
3254
  "variables to prevent various XSS and database injection attempts."
@@ -3256,7 +2837,7 @@ msgstr ""
3256
  "activez ces options si vous souhaitez que le pare-feu nettoie ces trois "
3257
  "variables."
3258
 
3259
- #: lib/help.php:263
3260
  #, php-format
3261
  msgid ""
3262
  "Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests:"
@@ -3264,7 +2845,7 @@ msgstr ""
3264
  "Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code> "
3265
  "(%s)&nbsp;:"
3266
 
3267
- #: lib/help.php:263
3268
  msgid ""
3269
  "this option will block scripts attempting to pass the <code>DOCUMENT_ROOT</"
3270
  "code> server variable in a <code>GET</code> or <code>POST</code> request. "
@@ -3277,11 +2858,11 @@ msgstr ""
3277
  "cette variable, mais pas la plupart des applications légitimes (hormis "
3278
  "certains scripts d'installation ou de configuration)."
3279
 
3280
- #: lib/help.php:264
3281
  msgid "Block ASCII character 0x00 (NULL byte):"
3282
  msgstr "Bloquer le caractère ASCII 0x00 (NULL byte)&nbsp;:"
3283
 
3284
- #: lib/help.php:264
3285
  msgid ""
3286
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
3287
  "<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
@@ -3295,11 +2876,11 @@ msgstr ""
3295
  "contenant le caractère ASCI 0x00 (NULL byte) sera bloquée immédiatement. Ce "
3296
  "caractère est dangereux et devrait toujours être rejeté."
3297
 
3298
- #: lib/help.php:265
3299
  msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
3300
  msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31&nbsp;:"
3301
 
3302
- #: lib/help.php:265
3303
  msgid ""
3304
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
3305
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
@@ -3309,7 +2890,7 @@ msgstr ""
3309
  "variable <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> contenant "
3310
  "des caractères ASCII 1 à 8 et 14 à 31 sera bloquée."
3311
 
3312
- #: lib/help.php:273
3313
  #, php-format
3314
  msgid ""
3315
  "By default, any logged in WordPress administrator will not be blocked by "
@@ -3329,7 +2910,7 @@ msgstr ""
3329
  "les options de la <a href=\"%s\">Page de Connexion</a> qui, si elle sont "
3330
  "activées, seront toujours appliquées."
3331
 
3332
- #: lib/help.php:287
3333
  msgid ""
3334
  "File Guard can detect, in real-time, any access to a PHP file that was "
3335
  "recently modified or created, and alert you about this."
@@ -3337,7 +2918,7 @@ msgstr ""
3337
  "File Guard peut détecter, en temps réel, tout accès à un fichier PHP qui a "
3338
  "été récemment modifié ou créé, et vous alerter à ce sujet."
3339
 
3340
- #: lib/help.php:289
3341
  msgid ""
3342
  "If a hacker uploaded a shell script to your site (or injected a backdoor "
3343
  "into an already existing file) and tried to directly access that file using "
@@ -3356,7 +2937,7 @@ msgstr ""
3356
  "envoyées à l'adresse e-mail de contact définie dans le menu \"Notifications "
3357
  "d’Événement\"."
3358
 
3359
- #: lib/help.php:290
3360
  msgid ""
3361
  "If you do not want to monitor a folder, you can exclude its full path or a "
3362
  "part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
@@ -3370,7 +2951,7 @@ msgstr ""
3370
  "variable <code>$_SERVER[\"SCRIPT_FILENAME\"]</code> et, si elle correspond, "
3371
  "l'ignorera."
3372
 
3373
- #: lib/help.php:291
3374
  msgid ""
3375
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
3376
  "code>)."
@@ -3378,7 +2959,7 @@ msgstr ""
3378
  "Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
3379
  "bar/,/cache/</code>)."
3380
 
3381
- #: lib/help.php:292
3382
  msgid ""
3383
  "File Guard real-time detection is a totally unique feature, because "
3384
  "NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
@@ -3390,11 +2971,11 @@ msgstr ""
3390
  "intercepter les requêtes HTTP envoyées à tout script PHP, même si ce dernier "
3391
  "ne fait pas partie de WordPress (logiciel tiers, backdoor, etc)."
3392
 
3393
- #: lib/help.php:301 lib/network.php:32 ninjafirewall.php:511
3394
  msgid "Network"
3395
  msgstr "Réseau"
3396
 
3397
- #: lib/help.php:303
3398
  msgid ""
3399
  "Even if NinjaFirewall administration menu is only available to the Super "
3400
  "Admin (from the main site), you can still display its status to all sites in "
@@ -3406,7 +2987,7 @@ msgstr ""
3406
  "du réseau en ajoutant une petite icône à leur barre d'administration. Elle "
3407
  "ne sera visible que par les administrateurs de ces sites."
3408
 
3409
- #: lib/help.php:305
3410
  msgid ""
3411
  "It is recommended to enable this feature as it is the only way to know "
3412
  "whether the sites in your network are protected and if NinjaFirewall "
@@ -3416,7 +2997,7 @@ msgstr ""
3416
  "si les sites de votre réseau sont protégés et si l'installation de "
3417
  "NinjaFirewall a réussi."
3418
 
3419
- #: lib/help.php:307
3420
  msgid ""
3421
  "Note that when it is disabled, the icon still remains visible to you, the "
3422
  "Super Admin."
@@ -3424,7 +3005,7 @@ msgstr ""
3424
  "Notez que même lorsqu'il est désactivé, l'icône reste visible pour vous, le "
3425
  "Super Administrateur."
3426
 
3427
- #: lib/help.php:318
3428
  msgid ""
3429
  "File Check lets you perform file integrity monitoring upon request or on a "
3430
  "specific interval."
@@ -3432,7 +3013,7 @@ msgstr ""
3432
  "File Check vous permet d'effectuer une analyse de l'intégrité de vos "
3433
  "fichiers sur demande ou à un intervalle spécifique défini."
3434
 
3435
- #: lib/help.php:320
3436
  msgid ""
3437
  "You need to create a snapshot of all your files and then, at a later time, "
3438
  "you can scan your system to compare it with the previous snapshot. Any "
@@ -3445,7 +3026,7 @@ msgstr ""
3445
  "permissions et propriétés des fichiers, leur création et suppression ainsi "
3446
  "que l'horodatage."
3447
 
3448
- #: lib/help.php:321
3449
  #, php-format
3450
  msgid ""
3451
  "Create a snapshot of all files stored in that directory: by default, the "
@@ -3455,7 +3036,7 @@ msgstr ""
3455
  "répertoire&nbsp;: par défaut, le repertoire est l'<code>ABSPATH</code> de "
3456
  "WordPress (%s)"
3457
 
3458
- #: lib/help.php:322
3459
  msgid ""
3460
  "Exclude the following files/folders: you can enter a directory or a file "
3461
  "name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
@@ -3466,7 +3047,7 @@ msgstr ""
3466
  "partie de celui-ci (par ex. <code>foo</code>), ou même exclure une extension "
3467
  "de fichier (par ex. <code>.css</code>)."
3468
 
3469
- #: lib/help.php:324
3470
  msgid ""
3471
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
3472
  "code>)."
@@ -3474,7 +3055,7 @@ msgstr ""
3474
  "Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
3475
  "bar/,.css,.png</code>)."
3476
 
3477
- #: lib/help.php:325
3478
  msgid ""
3479
  "Do not follow symbolic links: by default, NinjaFirewall will not follow "
3480
  "symbolic links."
@@ -3482,11 +3063,11 @@ msgstr ""
3482
  "Ne pas suivre les liens symboliques&nbsp;: par défaut, NinjaFirewall ignore "
3483
  "les liens symboliques lors de son analyse des fichiers."
3484
 
3485
- #: lib/help.php:330
3486
  msgid "Scheduled scans"
3487
  msgstr "Analyses planifiées"
3488
 
3489
- #: lib/help.php:331
3490
  msgid ""
3491
  "NinjaFirewall can scan your system on a specific interval (hourly, "
3492
  "twicedaily or daily)."
@@ -3494,7 +3075,7 @@ msgstr ""
3494
  "NinjaFirewall peut scanner votre système à intervalle régulier (une fois par "
3495
  "heure, deux fois par jour ou tous les jours)."
3496
 
3497
- #: lib/help.php:333
3498
  msgid ""
3499
  "It can either send you a scan report only if changes are detected, or always "
3500
  "send you one after each scan."
@@ -3503,7 +3084,7 @@ msgstr ""
3503
  "été détectés, ou bien vous en envoyer un systématiquement après chaque "
3504
  "analyse."
3505
 
3506
- #: lib/help.php:335
3507
  msgid ""
3508
  "Reports will be sent to the contact email address defined in the \"Event "
3509
  "Notifications\" menu."
@@ -3511,7 +3092,7 @@ msgstr ""
3511
  "Les rapports seront envoyés à l'adresse e-mail définie dans la page "
3512
  "\"Notifications d'Événement\"."
3513
 
3514
- #: lib/help.php:337
3515
  #, php-format
3516
  msgid ""
3517
  "Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
@@ -3520,7 +3101,7 @@ msgstr ""
3520
  "Les analyses planifiées utilisent le <a href=\"%s\">pseudo cron de "
3521
  "WordPress</a> qui ne fonctionne que si votre site reçoit un trafic suffisant."
3522
 
3523
- #: lib/help.php:351
3524
  msgid ""
3525
  "NinjaFirewall can alert you by email on specific events triggered within "
3526
  "your blog. They include installations, updates, activations etc, as well as "
@@ -3539,11 +3120,11 @@ msgstr ""
3539
  "après avoir pénétré dans votre Tableau de bord de WordPress, d'y installer "
3540
  "une porte dérobée (backdoor) afin de prendre le contrôle de votre blog."
3541
 
3542
- #: lib/help.php:362 lib/login_protection.php:21 ninjafirewall.php:519
3543
  msgid "Login Protection"
3544
  msgstr "Page de Connexion"
3545
 
3546
- #: lib/help.php:366
3547
  msgid ""
3548
  "By processing incoming HTTP requests before your blog and any of its "
3549
  "plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
@@ -3556,7 +3137,7 @@ msgstr ""
3556
  "compris les attaques distribuées provenant de plusieurs milliers d'adresses "
3557
  "IP différentes."
3558
 
3559
- #: lib/help.php:368
3560
  msgid ""
3561
  "You can choose two different types of protection: a password or a captcha. "
3562
  "You can enable the protection only if an attack is detected or to keep it "
@@ -3566,11 +3147,11 @@ msgstr ""
3566
  "captcha. Vous pouvez choisir d'activer la protection uniquement lorsqu'une "
3567
  "attaque est détectée ou bien l'activer en permanence."
3568
 
3569
- #: lib/help.php:370
3570
  msgid "Yes, if under attack:"
3571
  msgstr "Oui, si attaque en cours :"
3572
 
3573
- #: lib/help.php:372
3574
  msgid ""
3575
  "The protection will be triggered when too many login attempts are detected, "
3576
  "regardless of the offending IP. It blocks the attack instantly and prevents "
@@ -3585,11 +3166,11 @@ msgstr ""
3585
  "utilisant soit une combinaison nom d'utilisateur / mot de passe prédéfinie, "
3586
  "soit un code captcha."
3587
 
3588
- #: lib/help.php:374
3589
  msgid "Always ON:"
3590
  msgstr "Toujours activée :"
3591
 
3592
- #: lib/help.php:376
3593
  msgid ""
3594
  "NinjaFirewall will always enforce the HTTP authentication or captcha "
3595
  "implementation each time you access the login page."
@@ -3597,11 +3178,11 @@ msgstr ""
3597
  "Vous serez toujours invité à saisir votre nom d'utilisateur / mot de passe, "
3598
  "ou le code du captcha, chaque fois que vous accéderez à la page de connexion."
3599
 
3600
- #: lib/help.php:379
3601
  msgid "Type of protection:"
3602
  msgstr "Type de protection :"
3603
 
3604
- #: lib/help.php:380
3605
  msgid ""
3606
  "<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
3607
  "own very fast authentication scheme and it is compatible with any HTTP "
@@ -3611,15 +3192,15 @@ msgstr ""
3611
  "utilise son propre système d'authentification, rapide et compatible avec "
3612
  "n'importe quel serveur HTTP (Apache, Nginx, Lighttpd etc)."
3613
 
3614
- #: lib/help.php:381
3615
  msgid "<b>Captcha:</b> It will display a 5-character captcha code."
3616
  msgstr "<b>Captcha :</b> Affichera un code captcha à 5 caractères."
3617
 
3618
- #: lib/help.php:382
3619
  msgid "Bot protection:"
3620
  msgstr "Protection contre les bots :"
3621
 
3622
- #: lib/help.php:383
3623
  msgid ""
3624
  "NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
3625
  "before they start a brute-force attack."
@@ -3627,11 +3208,11 @@ msgstr ""
3627
  "NinjaFirewall tentera de bloquer les bots et les scripts immédiatement, "
3628
  "c'est-à-dire avant même qu'ils ne commencent une attaque par force brute."
3629
 
3630
- #: lib/help.php:391
3631
  msgid "AUTH log"
3632
  msgstr "Journal d'authentification"
3633
 
3634
- #: lib/help.php:394
3635
  msgid ""
3636
  "NinjaFirewall can write to the server Authentication log when the brute-"
3637
  "force protection is triggered. This can be useful to the system "
@@ -3643,7 +3224,7 @@ msgstr ""
3643
  "surveillance ou pour bloquer l'IP incriminée au niveau du pare-feu du "
3644
  "serveur."
3645
 
3646
- #: lib/help.php:396
3647
  msgid ""
3648
  "If you have a shared hosting account, keep this option disabled as you do "
3649
  "not have any access to the server's logs."
@@ -3651,7 +3232,7 @@ msgstr ""
3651
  "Si vous avez un hébergement mutualisé, laissez cette option désactivée car "
3652
  "vous n'avez pas accès aux journaux du serveur."
3653
 
3654
- #: lib/help.php:398
3655
  msgid ""
3656
  "On Debian-based systems, the log is located in <code>/var/log/auth.log</"
3657
  "code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
@@ -3661,19 +3242,19 @@ msgstr ""
3661
  "sous Red Hat, dans <code>/var/log/secure</code>. Le format utilisé est le "
3662
  "suivant&nbsp;:"
3663
 
3664
- #: lib/help.php:401
3665
  msgid "AA: the process ID (PID)."
3666
  msgstr "AA : l'identifiant de processus (PID)."
3667
 
3668
- #: lib/help.php:402
3669
  msgid "BB: the user IPv4 or IPv6 address."
3670
  msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
3671
 
3672
- #: lib/help.php:403
3673
  msgid "CC: the blog (sub-)domain name."
3674
  msgstr "CC : le nom de (sous-)domaine du blog."
3675
 
3676
- #: lib/help.php:404
3677
  msgid ""
3678
  "DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
3679
  "API</code>."
@@ -3681,16 +3262,16 @@ msgstr ""
3681
  "DD : la cible; il peut s'agir soit de <code>wp-login.php</code>, soit de "
3682
  "<code>XML-RPC API</code>."
3683
 
3684
- #: lib/help.php:405
3685
  msgid "EE: the time, in minutes, the protection will remain active."
3686
  msgstr ""
3687
  "EE : le temps, en minutes, pendant lequel la protection restera active."
3688
 
3689
- #: lib/help.php:407
3690
  msgid "Sample loglines:"
3691
  msgstr "Exemple :"
3692
 
3693
- #: lib/help.php:410
3694
  #, php-format
3695
  msgid ""
3696
  "Be careful if you are behind a load balancer, reverse-proxy or CDN because "
@@ -3710,7 +3291,7 @@ msgstr ""
3710
  "Alternativement, vous pouvez utiliser le fichier <code><a href=\"%s\">."
3711
  "htninja</a></code>."
3712
 
3713
- #: lib/help.php:426
3714
  msgid ""
3715
  "The firewall log displays blocked and sanitised requests as well as some "
3716
  "useful information. It has 6 columns:"
@@ -3718,18 +3299,18 @@ msgstr ""
3718
  "Le journal du pare-feu affiche les requêtes HTTP qui ont été bloquées ou "
3719
  "nettoyées ainsi que d'autres informations utiles. Il a six colonnes&nbsp;:"
3720
 
3721
- #: lib/help.php:427
3722
  msgid "DATE : date and time of the incident."
3723
  msgstr "DATE : date et heure de l'incident."
3724
 
3725
- #: lib/help.php:428
3726
  msgid ""
3727
  "INCIDENT : unique incident number/ID as it was displayed to the blocked user."
3728
  msgstr ""
3729
  "INCIDENT : le numéro d'incident (ID) unique. Par défaut, il sera aussi "
3730
  "affiché à l'utilisateur dont la requête aura été bloquée par le pare-feu."
3731
 
3732
- #: lib/help.php:429
3733
  msgid ""
3734
  "LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
3735
  "<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
@@ -3739,7 +3320,7 @@ msgstr ""
3739
  "<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
3740
  "et mode débogage (<code>DEBUG_ON</code>)."
3741
 
3742
- #: lib/help.php:430
3743
  msgid ""
3744
  "RULE : reference of the NinjaFirewall built-in security rule that triggered "
3745
  "the action. A hyphen (<code>-</code>) instead of a number means it was a "
@@ -3750,11 +3331,11 @@ msgstr ""
3750
  "d'un numéro signifie que la règle provient de votre configuration "
3751
  "personnelle de la page \"Politiques du Pare-feu\"."
3752
 
3753
- #: lib/help.php:431
3754
  msgid "IP : the user IPv4 or IPv6 address."
3755
  msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
3756
 
3757
- #: lib/help.php:432
3758
  msgid ""
3759
  "REQUEST : the HTTP request including offending variables and values as well "
3760
  "as the reason the action was logged."
@@ -3762,7 +3343,7 @@ msgstr ""
3762
  "REQUEST : la requête HTTP avec ses variables et valeurs, ainsi que la raison "
3763
  "qui a déclenché l'incident."
3764
 
3765
- #: lib/help.php:439
3766
  msgid ""
3767
  "This options lets you configure NinjaFirewall to delete its old logs "
3768
  "automatically. By default, logs are never deleted, <b>even when uninstall "
@@ -3775,7 +3356,7 @@ msgstr ""
3775
  "cette valeur à <code>0</code> si vous ne voulez pas supprimer les anciens "
3776
  "journaux."
3777
 
3778
- #: lib/help.php:447
3779
  msgid ""
3780
  "Centralized Logging lets you remotely access the firewall log of all your "
3781
  "NinjaFirewall protected websites from one single installation. You do not "
@@ -3786,13 +3367,13 @@ msgstr ""
3786
  "NinjaFirewall. Vous n'avez plus besoin de vous connecter à chaque site pour "
3787
  "analyser vos journaux."
3788
 
3789
- #: lib/help.php:447
3790
  #, php-format
3791
  msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
3792
  msgstr ""
3793
  "<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
3794
 
3795
- #: lib/help.php:448
3796
  msgid ""
3797
  "Enter your public key (optional): This is the public key that was created "
3798
  "from your main server."
@@ -3800,7 +3381,7 @@ msgstr ""
3800
  "Entrez votre clé publique (optionnel) : Il s'agit de la clé qui a été créée "
3801
  "depuis le serveur principal."
3802
 
3803
- #: lib/help.php:451
3804
  msgid ""
3805
  "Centralized Logging will keep working even if NinjaFirewall is disabled. "
3806
  "Delete your public key below if you want to disable it."
@@ -3809,12 +3390,12 @@ msgstr ""
3809
  "NinjaFirewall. Si vous souhaitez complètement désactiver cette option, "
3810
  "supprimez votre clé publique ci-dessous. "
3811
 
3812
- #: lib/help.php:473 lib/live_log.php:37 lib/live_log.php:216
3813
- #: ninjafirewall.php:527
3814
  msgid "Live Log"
3815
  msgstr "Live Log"
3816
 
3817
- #: lib/help.php:475
3818
  msgid ""
3819
  "Live Log lets you watch your blog traffic in real time, just like the Unix "
3820
  "<code>tail -f</code> command. Note that requests sent to static elements "
@@ -3826,7 +3407,7 @@ msgstr ""
3826
  "statiques comme les fichiers JS/CSS ou les images ne sont pas traitées par "
3827
  "NinjaFirewall."
3828
 
3829
- #: lib/help.php:477
3830
  msgid ""
3831
  "You can enable/disable the monitoring process, change the refresh rate, "
3832
  "clear the screen, enable automatic vertical scrolling, change the log "
@@ -3837,7 +3418,7 @@ msgstr ""
3837
  "effacer l'écran, changer le format d'affichage, le fuseau horaire et choisir "
3838
  "le type de trafic à visualiser (HTTP/HTTPS)."
3839
 
3840
- #: lib/help.php:477
3841
  msgid ""
3842
  "You can also apply filters to include or exclude files and folders "
3843
  "(REQUEST_URI)."
@@ -3845,7 +3426,7 @@ msgstr ""
3845
  "Vous pouvez également appliquer des filtres pour inclure ou exclure des "
3846
  "fichiers et des dossiers (REQUEST_URI)."
3847
 
3848
- #: lib/help.php:480
3849
  msgid ""
3850
  "Live Log does not make use of any WordPress core file (e.g., <code>admin-"
3851
  "ajax.php</code>). It communicates directly with the firewall without loading "
@@ -3859,7 +3440,7 @@ msgstr ""
3859
  "serveur, même si vous ajustez son intervalle de rafraîchissement de la page "
3860
  "sur la fréquence la plus rapide (5 secondes)."
3861
 
3862
- #: lib/help.php:482
3863
  msgid ""
3864
  "If you are using the optional <code>.htninja</code> configuration file to "
3865
  "whitelist your IP, the Live Log feature will not work."
@@ -3868,27 +3449,27 @@ msgstr ""
3868
  "pour toujours accepter les requêtes provenant de votre adresse IP, Live Log "
3869
  "ne fonctionnera pas."
3870
 
3871
- #: lib/help.php:487
3872
  msgid "Log Format"
3873
  msgstr "Format d'affichage"
3874
 
3875
- #: lib/help.php:488
3876
  msgid "You can easily customize the log format. Possible values are:"
3877
  msgstr ""
3878
  "Vous pouvez facilement changer le format d'affichage en combinant une ou "
3879
  "plusieurs des valeurs suivantes&nbsp;:"
3880
 
3881
- #: lib/help.php:489
3882
  msgid "<code>%time</code>: the server date, time and timezone."
3883
  msgstr "<code>%time</code> : la date, heure et fuseau horaire du serveur."
3884
 
3885
- #: lib/help.php:490
3886
  msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
3887
  msgstr ""
3888
  "<code>%name</code> : le nom de l'utilisateur (Authentification HTTP), s'il "
3889
  "existe."
3890
 
3891
- #: lib/help.php:491
3892
  #, php-format
3893
  msgid ""
3894
  "<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
@@ -3898,28 +3479,28 @@ msgstr ""
3898
  "serveur est derrière un CDN ou un proxy, cette variable retournera l'adresse "
3899
  "IP de celui-ci."
3900
 
3901
- #: lib/help.php:492
3902
  msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
3903
  msgstr "<code>%method</code> : la méthode HTTP (ex. GET, POST)."
3904
 
3905
- #: lib/help.php:493
3906
  #, php-format
3907
  msgid ""
3908
  "<code>%uri</code>: the URI which was given in order to access the page "
3909
  "(REQUEST_URI)."
3910
  msgstr "<code>%uri</code> : l'URI donnée pour accéder à la page (REQUEST_URI)."
3911
 
3912
- #: lib/help.php:494
3913
  msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
3914
  msgstr "<code>%referrer</code> : le referrer (HTTP_REFERER), s'il existe."
3915
 
3916
- #: lib/help.php:495
3917
  #, php-format
3918
  msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
3919
  msgstr ""
3920
  "<code>%ua</code> : l'en-tête User-Agent (HTTP_USER_AGENT), s'il existe."
3921
 
3922
- #: lib/help.php:496
3923
  #, php-format
3924
  msgid ""
3925
  "<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
@@ -3929,13 +3510,13 @@ msgstr ""
3929
  "votre serveur est derrière un CDN ou un proxy, cette variable retournera "
3930
  "l'adresse réelle du client."
3931
 
3932
- #: lib/help.php:497
3933
  msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
3934
  msgstr ""
3935
  "<code>%host</code> : l'en-tête Host de la requête courante (HTTP_HOST), si "
3936
  "elle existe."
3937
 
3938
- #: lib/help.php:498
3939
  msgid ""
3940
  "Additionally, you can include any of the following characters: <code>\"</"
3941
  "code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
@@ -3945,11 +3526,11 @@ msgstr ""
3945
  "%</code>, <code>[</code>, <code>]</code>, <code>espace</code> et toute "
3946
  "lettre minuscule <code>a-z</code>."
3947
 
3948
- #: lib/help.php:510 lib/rules_editor.php:17 ninjafirewall.php:531
3949
  msgid "Rules Editor"
3950
  msgstr "Éditeur de Règles"
3951
 
3952
- #: lib/help.php:512
3953
  msgid ""
3954
  "Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
3955
  "of built-in rules used to protect your blog against the most common "
@@ -3966,7 +3547,7 @@ msgstr ""
3966
  "règles, vous pouvez utiliser l’Éditeur de règles ci-dessous pour les "
3967
  "désactiver individuellement&nbsp;:"
3968
 
3969
- #: lib/help.php:514
3970
  msgid ""
3971
  "Check your firewall log and find the rule ID you want to disable (it is "
3972
  "displayed in the <code>RULE</code> column)."
@@ -3974,7 +3555,7 @@ msgstr ""
3974
  "Consultez le journal du pare-feu afin d'y trouver l'ID de la règle que vous "
3975
  "souhaitez désactiver (il est affiché dans la colonne <code>RULE</code>)."
3976
 
3977
- #: lib/help.php:515
3978
  msgid ""
3979
  "Select its ID from the enabled rules list below and click the \"Disable it\" "
3980
  "button."
@@ -3982,7 +3563,7 @@ msgstr ""
3982
  "Sélectionnez son ID dans la liste des règles ci-dessous et cliquez sur le "
3983
  "bouton \"Désactiver\"."
3984
 
3985
- #: lib/help.php:517
3986
  msgid ""
3987
  "Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
3988
  "code> instead of a number, that means that the rule can be changed in the "
@@ -3992,11 +3573,11 @@ msgstr ""
3992
  "d'union <code>-</code> à la place d'un nombre, cela signifie que la règle ne "
3993
  "peut être modifiée quand dans la page \"Politiques du Pare-feu\"."
3994
 
3995
- #: lib/help.php:522
3996
  msgid "Credits"
3997
  msgstr "Crédits"
3998
 
3999
- #: lib/help.php:524
4000
  msgid ""
4001
  "NinjaFirewall security rules protect against many vulnerabilities. Some of "
4002
  "them were reported by the following companies, individuals or mailing lists:"
@@ -4005,11 +3586,11 @@ msgstr ""
4005
  "vulnérabilités. Certaines d'entre elles ont été découvertes par les "
4006
  "entreprises, particuliers ou listes de diffusion suivantes:"
4007
 
4008
- #: lib/help.php:576 lib/overview.php:132
4009
  msgid "Updates"
4010
  msgstr "Mises à Jour"
4011
 
4012
- #: lib/help.php:578
4013
  msgid ""
4014
  "To get the most efficient protection, you can ask NinjaFirewall to "
4015
  "automatically update its security rules."
@@ -4017,7 +3598,7 @@ msgstr ""
4017
  "Pour bénéficier de la protection la plus efficace, vous pouvez demander à "
4018
  "NinjaFirewall de mettre à jour ses règles de sécurité automatiquement."
4019
 
4020
- #: lib/help.php:580
4021
  msgid ""
4022
  "Each time a new vulnerability is found in WordPress or one of its plugins/"
4023
  "themes, a new set of security rules will be made available to protect "
@@ -4027,7 +3608,7 @@ msgstr ""
4027
  "extensions ou ses thèmes, un nouvel ensemble de règles de sécurité est "
4028
  "disponible pour protéger contre cette vulnérabilité si nécessaire."
4029
 
4030
- #: lib/help.php:582
4031
  msgid ""
4032
  "Only security rules will be downloaded. If a new version of NinjaFirewall "
4033
  "(including new files, options and features) was available, it would have to "
@@ -4038,7 +3619,7 @@ msgstr ""
4038
  "jour depuis la page des \"Extensions\" de votre tableau de bord, comme "
4039
  "d'habitude."
4040
 
4041
- #: lib/help.php:584
4042
  msgid ""
4043
  "We recommend to enable this feature, as it is the <strong>best way to keep "
4044
  "your WordPress secure</strong> against new vulnerabilities."
@@ -4047,363 +3628,88 @@ msgstr ""
4047
  "<strong>meilleure façon de garder votre WordPress protégé</strong> contre "
4048
  "les dernières vulnérabilités."
4049
 
4050
- #: lib/install_default.php:170
4051
- msgid ""
4052
- "Error: The installer cannot download the security rules from wordpress.org "
4053
- "website."
4054
- msgstr ""
4055
- "Erreur : Impossible de télécharger les règles de sécurité depuis le site de "
4056
- "wordpress.org."
4057
-
4058
- #: lib/install_default.php:171
4059
- msgid ""
4060
- "The server may be temporarily down or you may have network connectivity "
4061
- "problems? Please try again in a few minutes."
4062
- msgstr ""
4063
- "Le serveur est peut être temporairement en panne ou bien vous avez des "
4064
- "problèmes de connectivité réseau ? Veuillez ré-essayer d'ici quelques "
4065
- "minutes."
4066
-
4067
- #: lib/install_default.php:172
4068
- msgid ""
4069
- "NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
4070
- "your server does not support SSL? You can force NinjaFirewall to use a non-"
4071
- "secure HTTP connection by adding the following directive to your <strong>wp-"
4072
- "config.php</strong> file:"
4073
- msgstr ""
4074
- "NinjaFirewall télécharge ses règles de sécurité en utilisant une connexion "
4075
- "sécurisée (HTTPS). Peut-être que votre serveur ne prend pas en charge "
4076
- "HTTPS ? Dans ce cas, vous pouvez demander à NinjaFirewall d'utiliser une "
4077
- "connexion non-sécurisée (HTTP) en ajoutant la ligne suivante dans votre "
4078
- "fichier <strong>wp-config.php</strong> :"
4079
-
4080
- #: lib/install_fullwaf.php:35 lib/install_fullwaf.php:149
4081
- #: lib/install_fullwaf.php:304 lib/install_wpwaf.php:53
4082
- #: lib/install_wpwaf.php:63 lib/install_wpwaf.php:70
4083
- msgid "Error:"
4084
- msgstr "Erreur :"
4085
-
4086
- #: lib/install_fullwaf.php:39
4087
- #, php-format
4088
- msgid ""
4089
- "Your WordPress directory (%s) is different from your website document root "
4090
- "(%s). Because it is possible to install WordPress into a subdirectory, but "
4091
- "have the blog exist in the site root, NinjaFirewall needs to know the exact "
4092
- "location of the site root."
4093
- msgstr ""
4094
- "Le répertoire de WordPress (%s) est différent du répertoire racine de votre "
4095
- "site Web (%s). Parce qu'il est possible d'installer WordPress dans un sous-"
4096
- "répertoire, tout en ayant le blog à la racine du site, NinjaFirewall a "
4097
- "besoin de connaître l'emplacement de la racine du site."
4098
-
4099
- #: lib/install_fullwaf.php:40
4100
- #, php-format
4101
- msgid ""
4102
- "Please edit the path below only if you have manually modified your WordPress "
4103
- "root directory as described in the <a href=\"%s\">Giving WordPress Its Own "
4104
- "Directory</a> article."
4105
- msgstr ""
4106
- "Veuillez corriger le chemin ci-dessous uniquement si vous avez modifié "
4107
- "manuellement votre répertoire racine de WordPress comme décrit dans "
4108
- "l'article <a href=\"%s\">Giving WordPress Its Own Directory</a>."
4109
-
4110
- #: lib/install_fullwaf.php:41
4111
- msgid "Most users should not change this value."
4112
- msgstr "La plupart des utilisateurs ne devront pas changer cette valeur."
4113
-
4114
- #: lib/install_fullwaf.php:42
4115
- msgid "Path to WordPress site root directory:"
4116
- msgstr "Chemin vers le répertoire racine de WordPress :"
4117
-
4118
- #: lib/install_fullwaf.php:57 lib/install_fullwaf.php:249
4119
- msgid "please enter the full path to WordPress folder."
4120
- msgstr "veuillez entrer le chemin complet vers le répertoire de WordPress."
4121
-
4122
- #: lib/install_fullwaf.php:62
4123
- #, php-format
4124
- msgid ""
4125
- "cannot find the %s directory! Please correct the full path to WordPress site "
4126
- "root directory."
4127
- msgstr ""
4128
- "impossible de trouver le répertoire %s&nbsp;! Veuillez corriger le chemin "
4129
- "complet vers le répertoire racine de WordPress."
4130
-
4131
- #: lib/install_fullwaf.php:75
4132
- msgid "(recommended)"
4133
- msgstr "(recommandé)"
4134
-
4135
- #: lib/install_fullwaf.php:118
4136
- msgid "Please select the PHP initialization file supported by your server."
4137
- msgstr ""
4138
- "Sélectionnez le type de fichier de configuration PHP utilisé par votre "
4139
- "serveur."
4140
-
4141
- #: lib/install_fullwaf.php:144
4142
- #, php-format
4143
- msgid ""
4144
- "Error: NinjaFirewall log directory is not writable (%s). Please chmod it to "
4145
- "0777 and reload this page."
4146
- msgstr ""
4147
- "Erreur : le répertoire du journal et cache de NinjaFirewall (%s) n'est pas "
4148
- "accessible en écriture. Veuillez changer ses permissions (par ex. 0777) et "
4149
- "recharger cette page."
4150
-
4151
- #: lib/install_fullwaf.php:153
4152
- msgid "System configuration"
4153
- msgstr "Configuration du système"
4154
-
4155
- #: lib/install_fullwaf.php:159
4156
  #, php-format
4157
  msgid ""
4158
- "NinjaFirewall detected that the PHP <code>auto_prepend_file</code> directive "
4159
- "seems to be used by another application: %s."
4160
  msgstr ""
4161
- "NinjaFirewall a détecté que <code>auto_prepend_file</code> est déjà utilisé "
4162
- "par une autre application : %s."
4163
-
4164
- #: lib/install_fullwaf.php:159
4165
- msgid "Because NinjaFirewall needs to use that directive, it will override it."
4166
- msgstr ""
4167
- "Parce qu’il a besoin de cette directive, NinjaFirewall va la remplacer par "
4168
- "la sienne."
4169
-
4170
- #: lib/install_fullwaf.php:166 lib/install_wpwaf.php:95
4171
- msgid "Multisite network detected:"
4172
- msgstr "Réseau multi-site détecté&nbsp;:"
4173
-
4174
- #: lib/install_fullwaf.php:166 lib/install_wpwaf.php:95
4175
- msgid ""
4176
- "NinjaFirewall will protect all sites from your network and its configuration "
4177
- "interface will be accessible only to the Super Admin from the network main "
4178
- "site."
4179
- msgstr ""
4180
- "NinjaFirewall protégera tous les sites de votre réseau; son interface de "
4181
- "configuration ne sera accessible qu'au Super Administrateur à partir du site "
4182
- "principal du réseau."
4183
-
4184
- #: lib/install_fullwaf.php:175
4185
- msgid "Select your HTTP server and your PHP server API"
4186
- msgstr "Sélectionnez votre serveur HTTP et PHP SAPI"
4187
-
4188
- #: lib/install_fullwaf.php:182
4189
- msgid "CGI or PHP-FPM"
4190
- msgstr "CGI ou PHP-FPM"
4191
-
4192
- #: lib/install_fullwaf.php:184
4193
- msgid "Other webserver + CGI/FastCGI"
4194
- msgstr "Autre serveur + CGI/FastCGI"
4195
-
4196
- #: lib/install_fullwaf.php:185
4197
- msgid "Other webserver + HHVM"
4198
- msgstr "Autre serveur + HHVM"
4199
 
4200
- #: lib/install_fullwaf.php:186
4201
- msgid "view PHPINFO"
4202
- msgstr "voir PHPINFO"
4203
-
4204
- #: lib/install_fullwaf.php:194
4205
  #, php-format
4206
- msgid ""
4207
- "Please <a href=\"%s\">check our blog</a> if you want to install "
4208
- "NinjaFirewall on HHVM."
4209
- msgstr ""
4210
- "Veuillez consulter <a href=\"%s\">notre blog</a> afin d'installer "
4211
- "NinjaFirewall avec HHVM."
4212
-
4213
- #: lib/install_fullwaf.php:223
4214
- msgid "Select the PHP initialization file supported by your server"
4215
- msgstr ""
4216
- "Sélectionnez le type de fichier de configuration PHP utilisé par votre "
4217
- "serveur"
4218
-
4219
- #: lib/install_fullwaf.php:226
4220
- msgid "Used by most shared hosting accounts."
4221
- msgstr "Utilisé par la plupart des hébergements mutualisés"
4222
-
4223
- #: lib/install_fullwaf.php:228
4224
- msgid "The default PHP INI file since PHP 5.3.0"
4225
- msgstr "Le fichier PHP INI par défaut depuis PHP 5.3.0"
4226
-
4227
- #: lib/install_fullwaf.php:228
4228
- msgid "more info"
4229
- msgstr "plus d'info"
4230
-
4231
- #: lib/install_fullwaf.php:230
4232
- msgid "A few shared hosting accounts. Seldom used."
4233
- msgstr "Quelques hébergements mutualisés. Rarement utilisé."
4234
 
4235
- #: lib/install_fullwaf.php:254 lib/install_fullwaf.php:514
4236
- msgid "select your HTTP server and PHP SAPI."
4237
- msgstr "sélectionnez votre serveur HTTP et PHP SAPI."
4238
-
4239
- #: lib/install_fullwaf.php:260 lib/install_fullwaf.php:520
4240
- msgid "select the PHP initialization file supported by your server."
4241
- msgstr ""
4242
- "sélectionnez le type de fichier de configuration PHP utilisé par votre "
4243
- "serveur."
4244
-
4245
- #: lib/install_fullwaf.php:307 lib/install_wpwaf.php:89
4246
- msgid "Firewall Integration"
4247
- msgstr "Intégration du Pare-feu"
4248
-
4249
- #: lib/install_fullwaf.php:312
4250
  #, php-format
4251
  msgid ""
4252
- "The <code>%s</code> file must be created, and the following lines of code "
4253
- "added to it:"
4254
  msgstr ""
4255
- "Le fichier <code>%s</code> doit être créé, et les lignes suivantes doivent y "
4256
- "être ajoutées&nbsp;:"
4257
 
4258
- #: lib/install_fullwaf.php:313
4259
  #, php-format
4260
  msgid ""
4261
- "The following <font color=\"green\">green lines</font> of code must be added "
4262
- "to your <code>%s</code> file."
4263
- msgstr ""
4264
- "Les lignes de code de <font color=\"green\">couleur verte</font> doivent "
4265
- "être ajoutées à votre fichier <code>%s</code>."
4266
-
4267
- #: lib/install_fullwaf.php:313 lib/install_wpwaf.php:101
4268
- msgid "All other lines, if any, are the actual content of the file:"
4269
- msgstr ""
4270
- "Toutes les autres lignes, le cas échéant, sont le contenu actuel du fichier "
4271
- "et ne doivent pas être modifiées&nbsp;:"
4272
-
4273
- #: lib/install_fullwaf.php:315
4274
- msgid "The file is not writable, I cannot edit it for you."
4275
- msgstr ""
4276
- "Le fichier est protégé en écriture, je ne peux pas faire ces changements "
4277
- "pour vous."
4278
-
4279
- #: lib/install_fullwaf.php:397
4280
- msgid ""
4281
- "Add the following code to your <code>/etc/hhvm/php.ini</code> file, and "
4282
- "restart HHVM afterwards:"
4283
- msgstr ""
4284
- "Veuillez ajouter le code suivant au fichier <code>/etc/hhvm/php.ini</code>, "
4285
- "puis veuillez redémarrer HHVM&nbsp;:"
4286
-
4287
- #: lib/install_fullwaf.php:462 lib/install_wpwaf.php:135
4288
- msgid "Please make those changes, then click on button below."
4289
- msgstr ""
4290
- "Veuillez faire ces modifications, puis cliquez sur le bouton ci-dessous pour "
4291
- "continuer."
4292
-
4293
- #: lib/install_fullwaf.php:467 lib/install_wpwaf.php:127
4294
- msgid "Let NinjaFirewall make the above changes (recommended)."
4295
- msgstr "Laissez NinjaFirewall faire les changements ci-dessus (recommandé)."
4296
-
4297
- #: lib/install_fullwaf.php:470 lib/install_wpwaf.php:131
4298
- msgid ""
4299
- "Ensure that you have FTP access to your website so that, if there were a "
4300
- "problem during the installation of the firewall, you could easily undo the "
4301
- "changes."
4302
- msgstr ""
4303
- "Assurez-vous d'avoir un accès FTP à votre site de sorte que, s'il y avait un "
4304
- "problème pendant l'installation du pare-feu, vous pourriez annuler les "
4305
- "modifications."
4306
-
4307
- #: lib/install_fullwaf.php:475 lib/install_wpwaf.php:134
4308
- msgid "I want to make the changes myself."
4309
- msgstr "Je veux faire les changements moi-même."
4310
-
4311
- #: lib/install_fullwaf.php:484
4312
- msgid "Please check our blog if you want to install NinjaFirewall on HHVM."
4313
- msgstr ""
4314
- "Veuillez consulter notre blog si vous souhaitez installer NinjaFirewall avec "
4315
- "HHVM."
4316
-
4317
- #: lib/install_fullwaf.php:504
4318
- msgid "you must select how to make changes to your files."
4319
  msgstr ""
4320
- "vous devez sélectionner la façon dont vous souhaitez modifier vos fichiers."
 
4321
 
4322
- #: lib/install_fullwaf.php:530
4323
  msgid ""
4324
- "your WordPress root directory is not writable, I cannot make those changes "
4325
- "for you."
4326
- msgstr ""
4327
- "le répertoire racine de WordPress n'est pas accessible en écriture, je ne "
4328
- "peux pas faire ces changements pour vous."
4329
-
4330
- #: lib/install_fullwaf.php:545 lib/install_fullwaf.php:588
4331
- #, php-format
4332
- msgid "cannot write to <code>%s</code>, it is read-only."
4333
  msgstr ""
4334
- "impossible d’écrire dans <code>%s</code>, le fichier est en lecture seule."
 
4335
 
4336
- #: lib/install_fullwaf.php:620 lib/install_wpwaf.php:203
4337
- msgid "Your configuration was saved."
4338
- msgstr "Les modifications ont été enregistrées."
4339
-
4340
- #: lib/install_fullwaf.php:625 lib/install_wpwaf.php:208
4341
  #, php-format
4342
- msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to %s."
4343
- msgstr ""
4344
- "Un e-mail \"Guide d'Utilisation, d'Installation et de Dépannage\" a été "
4345
- "envoyé à %s."
4346
 
4347
- #: lib/install_fullwaf.php:630 lib/install_wpwaf.php:213
4348
- msgid ""
4349
- "Please click the button below to test if the firewall integration was "
4350
- "successful."
4351
- msgstr ""
4352
- "Veuillez cliquer sur le bouton ci-dessous pour vérifier le bon "
4353
- "fonctionnement du pare-feu."
4354
-
4355
- #: lib/install_fullwaf.php:632 lib/install_wpwaf.php:215
4356
- msgid "Test Firewall"
4357
- msgstr "Tester le pare-feu"
4358
-
4359
- #: lib/install_wpwaf.php:54
4360
  #, php-format
4361
- msgid ""
4362
- "Unable to read the wp-config.php file (%s). Make sure it is readable and try "
4363
- "again."
4364
- msgstr ""
4365
- "Impossible de lire le fichier wp-config.php (%s). Veuillez-vous assurer "
4366
- "qu'il est bien accessible en lecture."
4367
 
4368
- #: lib/install_wpwaf.php:71
4369
- #, php-format
4370
- msgid "Unable to find the wp-config.php file in the %s or %s directories."
4371
- msgstr ""
4372
- "Impossible de trouver le fichier wp-config.php dans les répertoires %s ou %s."
4373
 
4374
- #: lib/install_wpwaf.php:101
4375
- #, php-format
4376
  msgid ""
4377
- "The following <font color=\"green\">green lines</font> of code must be added "
4378
- "to your %s file."
4379
  msgstr ""
4380
- "Les lignes de code de <font color=\"green\">couleur verte</font> doivent "
4381
- "être ajoutées à votre fichier %s."
4382
 
4383
- #: lib/install_wpwaf.php:120
4384
  msgid ""
4385
- "The file is not writable, I cannot edit it for you. Please make those "
4386
- "changes, then click on button below."
4387
  msgstr ""
4388
- "Le fichier est protégé en écriture, je ne peux pas le modifier pour vous. "
4389
- "Veuillez effectuer ces changements, puis cliquer sur le bouton ci-dessous."
4390
-
4391
- #: lib/install_wpwaf.php:129
4392
- msgid "Back up the file (wp-config.bak.php) before editing it."
4393
- msgstr "Faire une sauvegarde du fichier (wp-config.bak.php)."
4394
-
4395
- #: lib/install_wpwaf.php:155
4396
- #, php-format
4397
- msgid "Unable to find the wp-config.php file (#%s)."
4398
- msgstr "Impossible de trouver le fichier wp-config.php (#%s)."
4399
 
4400
- #: lib/install_wpwaf.php:236
4401
  msgid ""
4402
- "The firewall is not loaded. Make sure that the required lines of code were "
4403
- "added to your wp-config.php file."
 
 
4404
  msgstr ""
4405
- "Le pare-feu n'est pas activé. Assurez-vous de bien ajouter les lignes de "
4406
- "code nécessaires au fichier wp-config.php."
 
 
 
4407
 
4408
  #: lib/live_log.php:29
4409
  msgid ""
@@ -4424,99 +3730,57 @@ msgstr ""
4424
  "et assurez vous que l'option \"Ajouter l'Administrateur à la liste blanche\" "
4425
  "est activée."
4426
 
4427
- #: lib/live_log.php:94
4428
- msgid "Loading..."
4429
- msgstr "Chargement..."
4430
-
4431
- #: lib/live_log.php:112 lib/live_log.php:141 lib/live_log.php:239
4432
- msgid "No traffic yet, please wait..."
4433
- msgstr "Aucun visiteur actuellement, veuillez patienter..."
4434
-
4435
- #: lib/live_log.php:115
4436
- msgid "Error: Live Log did not receive the expected response from your server:"
4437
- msgstr "Erreur : le serveur distant n\\'a pas retourné la réponse attendue :"
4438
-
4439
- #: lib/live_log.php:134
4440
- msgid "Error: URL does not seem to exist:"
4441
- msgstr "Erreur : l\\'URL ne semble pas valide :"
4442
-
4443
- #: lib/live_log.php:136
4444
- msgid "Error: cannot find your log file. Try to reload this page."
4445
- msgstr ""
4446
- "Erreur : impossible de trouver le fichier log. Essayez de recharger cette "
4447
- "page."
4448
-
4449
- #: lib/live_log.php:138
4450
- msgid "Error: the HTTP server returned the following error code:"
4451
- msgstr "Erreur : le serveur HTTP a retourné le code d\\'erreur suivant :"
4452
-
4453
- #: lib/live_log.php:143 lib/live_log.php:156 lib/live_log.php:176
4454
- msgid "Sleeping"
4455
- msgstr "Rafraîchissement dans"
4456
-
4457
- #: lib/live_log.php:143 lib/live_log.php:156 lib/live_log.php:176
4458
- msgid "seconds"
4459
- msgstr "secondes"
4460
-
4461
- #: lib/live_log.php:243
4462
- msgid "On"
4463
- msgstr "Activer"
4464
-
4465
- #: lib/live_log.php:243
4466
- msgid "Off"
4467
- msgstr "Stopper"
4468
-
4469
- #: lib/live_log.php:243
4470
  msgid "Refresh rate:"
4471
  msgstr "Intervalle :"
4472
 
4473
- #: lib/live_log.php:245
4474
  msgid "5 seconds"
4475
  msgstr "5 secondes"
4476
 
4477
- #: lib/live_log.php:246
4478
  msgid "10 seconds"
4479
  msgstr "10 secondes"
4480
 
4481
- #: lib/live_log.php:247
4482
  msgid "20 seconds"
4483
  msgstr "20 secondes"
4484
 
4485
- #: lib/live_log.php:248
4486
  msgid "45 seconds"
4487
  msgstr "45 secondes"
4488
 
4489
- #: lib/live_log.php:249
4490
  msgid "Clear screen"
4491
  msgstr "Effacer"
4492
 
4493
- #: lib/live_log.php:249
4494
  msgid "Autoscrolling"
4495
  msgstr "Défilement auto."
4496
 
4497
- #: lib/live_log.php:255
4498
  msgid "Live Log will not display whitelisted users and brute-force attacks."
4499
  msgstr ""
4500
  "Live Log n'affiche pas les connexions de l'administrateur, ni les attaques "
4501
  "par force brute."
4502
 
4503
- #: lib/live_log.php:290
4504
- msgid "Live Log options"
4505
- msgstr "Options"
4506
 
4507
- #: lib/live_log.php:293
4508
  msgid "Inclusion and exclusion filters (REQUEST_URI)"
4509
  msgstr "Filtres d'inclusion et d'exclusion (REQUEST_URI)"
4510
 
4511
- #: lib/live_log.php:297
4512
  msgid "Must include"
4513
  msgstr "Doit inclure"
4514
 
4515
- #: lib/live_log.php:298
4516
  msgid "Must not include"
4517
  msgstr "Ne doit pas inclure"
4518
 
4519
- #: lib/live_log.php:301
4520
  msgid ""
4521
  "Full or partial case-sensitive REQUEST_URI string. Multiple values must be "
4522
  "comma-separated."
@@ -4524,79 +3788,54 @@ msgstr ""
4524
  "Chaîne de caractères REQUEST_URI complète ou partielle, sensible à la casse. "
4525
  "Plusieurs valeurs doivent être séparées par des virgules."
4526
 
4527
- #: lib/live_log.php:305
4528
  msgid "Format"
4529
  msgstr "Format d'affichage"
4530
 
4531
- #: lib/live_log.php:308
4532
  msgid "Custom"
4533
  msgstr "Autre"
4534
 
4535
- #: lib/live_log.php:309
4536
  msgid "See contextual help for available log format."
4537
  msgstr ""
4538
  "Consultez l'aide contextuelle pour avoir plus d'information sur les formats "
4539
  "disponibles."
4540
 
4541
- #: lib/live_log.php:313
4542
  msgid "Display"
4543
  msgstr "Afficher"
4544
 
4545
- #: lib/live_log.php:323
4546
  msgid "Timezone"
4547
  msgstr "Fuseau horaire"
4548
 
4549
- #: lib/live_log.php:338
4550
  msgid "Save Live Log Options"
4551
  msgstr "Sauvegarder les options"
4552
 
4553
- #: lib/live_log.php:377
4554
  msgid "Error: please enter the custom log format."
4555
  msgstr "Erreur : veuillez entrer le format d'affichage."
4556
 
4557
- #: lib/login_protection.php:69 lib/login_protection.php:124
4558
- #: lib/login_protection.php:547
4559
  msgid "Access restricted"
4560
  msgstr "Accès limité"
4561
 
4562
- #: lib/login_protection.php:79 lib/login_protection.php:128
4563
- #: lib/login_protection.php:557
4564
  msgid "Type the characters you see in the picture below:"
4565
  msgstr "Entrez le texte de l'image ci-dessous :"
4566
 
4567
- #: lib/login_protection.php:138
4568
- msgid "Please enter a number from 1 to 99 in 'Password-protect' field."
4569
- msgstr ""
4570
- "Veuillez entrer uniquement des nombres de 1 à 99 dans les champs \\'Protéger "
4571
- "par mot de passe\\'."
4572
-
4573
- #: lib/login_protection.php:145
4574
- msgid "Invalid character."
4575
- msgstr "Caractère invalide."
4576
-
4577
- #: lib/login_protection.php:150
4578
- msgid "\"admin\" is not acceptable, please choose another user name."
4579
- msgstr ""
4580
- "\"admin\" n\\'est pas acceptable, merci de bien vouloir choisir un autre "
4581
- "identifiant."
4582
-
4583
- #: lib/login_protection.php:158
4584
- msgid "Please enter max 1024 character only."
4585
- msgstr "Veuillez ne pas entrer plus de 1 024 caractères."
4586
-
4587
- #: lib/login_protection.php:211
4588
  msgid ""
4589
- "Note: Access to the XML-RPC API will be completely disabled when the brute-"
4590
- "force attack protection is set to 'Always ON'."
4591
  msgstr ""
4592
- "L'accès API XML-RPC sera complètement désactivé lorsque la protection est "
4593
- "toujours activée."
4594
-
4595
- #: lib/login_protection.php:271
4596
- msgid "GD Support is not available on your server."
4597
- msgstr "L'extension PHP GD n'est pas disponible sur votre serveur."
4598
 
4599
- #: lib/login_protection.php:277
4600
  msgid ""
4601
  "Error: GD Support is not available on your server, the captcha protection "
4602
  "will not work!"
@@ -4604,90 +3843,94 @@ msgstr ""
4604
  "Erreur : L'extension PHP GD n'est pas disponible sur votre serveur, la "
4605
  "protection par captcha ne peut pas fonctionner."
4606
 
4607
- #: lib/login_protection.php:286
4608
  msgid "Enable brute force attack protection"
4609
  msgstr "Activer la protection contre les attaques par force brute"
4610
 
4611
- #: lib/login_protection.php:289
4612
- msgid "Yes, if under attack"
4613
- msgstr "Oui, si attaque en cours"
4614
-
4615
- #: lib/login_protection.php:292
4616
- msgid "Always ON"
4617
- msgstr "Toujours activer"
4618
-
4619
- #: lib/login_protection.php:305
4620
  msgid "Type of protection"
4621
  msgstr "Type de protection"
4622
 
4623
- #: lib/login_protection.php:308
4624
- msgid "Password"
4625
- msgstr "Mot de passe"
 
 
 
 
4626
 
4627
- #: lib/login_protection.php:311
4628
- msgid "Captcha"
4629
- msgstr "Captcha"
4630
 
4631
- #: lib/login_protection.php:320
 
 
 
 
 
 
 
 
4632
  msgid "Protect the login page against"
4633
  msgstr "Protéger la page de connexion contre"
4634
 
4635
- #: lib/login_protection.php:322
4636
  msgid "<code>GET</code> request attacks"
4637
  msgstr "Les attaques <code>GET</code>"
4638
 
4639
- #: lib/login_protection.php:323
4640
  msgid "<code>POST</code> request attacks (default)"
4641
  msgstr "Les attaques <code>POST</code> (défaut)"
4642
 
4643
- #: lib/login_protection.php:324
4644
  msgid "<code>GET</code> and <code>POST</code> requests attacks"
4645
  msgstr "Les attaques <code>GET</code> et <code>POST</code>"
4646
 
4647
- #: lib/login_protection.php:328
4648
  msgid "Enable protection"
4649
  msgstr "Activer la protection"
4650
 
4651
- #: lib/login_protection.php:331
4652
  #, php-format
4653
  msgid "For %1$s minutes, if more than %2$s %3$s requests within %4$s seconds."
4654
  msgstr ""
4655
  "Pendant %1$s minutes, si plus de %2$s requêtes %3$s détectées en moins de "
4656
  "%4$s secondes."
4657
 
4658
- #: lib/login_protection.php:352
4659
  msgid "HTTP authentication"
4660
  msgstr "Authentification HTTP"
4661
 
4662
- #: lib/login_protection.php:354
4663
  msgid "User:"
4664
  msgstr "Utilisateur&nbsp;:"
4665
 
4666
- #: lib/login_protection.php:354
4667
  msgid "Password:"
4668
  msgstr "Mot de passe&nbsp;:"
4669
 
4670
- #: lib/login_protection.php:355
4671
  msgid "User and Password must be from 6 to 32 characters."
4672
  msgstr "L'utilisateur et mot de passe doivent comporter de 6 à 32 caractères."
4673
 
4674
- #: lib/login_protection.php:356
4675
  msgid "Message (max. 1024 characters, HTML tags allowed)"
4676
  msgstr "Message (1 024 caractères maximum, balises HTML acceptées)"
4677
 
4678
- #: lib/login_protection.php:367
4679
  msgid "Message"
4680
  msgstr "Message"
4681
 
4682
- #: lib/login_protection.php:370
4683
  msgid "This message will be displayed above the captcha. Max. 255 characters."
4684
  msgstr "Ce message sera affiché au-dessus du captcha."
4685
 
4686
- #: lib/login_protection.php:379
4687
  msgid "Various options"
4688
  msgstr "Options diverses"
4689
 
4690
- #: lib/login_protection.php:384
4691
  msgid ""
4692
  "If you are using the Jetpack plugin, blocking access to the XML-RPC API may "
4693
  "prevent it from working correctly."
@@ -4695,100 +3938,77 @@ msgstr ""
4695
  "Si vous utilisez l'extension Jetpack, bloquer l'accès à l'API XML-RPC "
4696
  "pourrait l’empêcher de fonctionner correctement."
4697
 
4698
- #: lib/login_protection.php:390
4699
- msgid "XML-RPC API"
4700
- msgstr "API XML-RPC"
4701
-
4702
- #: lib/login_protection.php:392
4703
- msgid "Apply the protection to the <code>xmlrpc.php</code> script as well."
4704
- msgstr "Activer aussi la protection pour le fichier <code>xmlrpc.php</code>."
4705
 
4706
- #: lib/login_protection.php:397
4707
- msgid "Bot protection"
4708
- msgstr "Protection contre les bots"
4709
 
4710
- #: lib/login_protection.php:399
4711
- msgid "Enable bot protection (applies to <code>wp-login.php</code> only.)"
4712
  msgstr ""
4713
- "Activer la protection contre les bots (ne s'applique qu'à <code>wp-login."
4714
- "php</code>)."
4715
-
4716
- #: lib/login_protection.php:404
4717
- msgid "Authentication log"
4718
- msgstr "Journal d'authentification"
4719
 
4720
- #: lib/login_protection.php:410
4721
  msgid "Your server configuration is not compatible with that option."
4722
  msgstr ""
4723
  "La configuration de votre serveur n'est pas compatible avec cette option."
4724
 
4725
- #: lib/login_protection.php:413
4726
  msgid ""
4727
- "The login protection must be set to \"Yes, if under attack\" in order to use "
4728
  "this option."
4729
  msgstr ""
4730
- "La protection doit être activée sur \"Oui, si attaque en cours\" afin de "
4731
- "pouvoir utiliser cette option."
4732
 
4733
- #: lib/login_protection.php:417
4734
- msgid "Write the incident to the server Authentication log."
4735
- msgstr ""
4736
- "Enregistrer l'incident dans le journal des authentifications du serveur."
4737
-
4738
- #: lib/login_protection.php:423
4739
- msgid "Signature"
4740
- msgstr "Signature"
4741
-
4742
- #. translators: "Brute-force protection by NinjaFirewall" should not be translated.
4743
- #: lib/login_protection.php:427
4744
- msgid ""
4745
- "Disable the <i>Brute-force protection by NinjaFirewall</i> signature on the "
4746
- "protection page."
4747
- msgstr ""
4748
- "Ne pas afficher <i>Brute-force protection by NinjaFirewall</i> sur la page "
4749
- "de connexion."
4750
 
4751
- #: lib/login_protection.php:436
4752
  msgid "Save Login Protection"
4753
  msgstr "Sauvegarder les options"
4754
 
4755
- #: lib/login_protection.php:437
4756
  msgid "See our benchmark and stress-test:"
4757
  msgstr "Consultez nos benchmarks&nbsp;:"
4758
 
4759
- #: lib/login_protection.php:455
4760
  #, php-format
4761
  msgid "Error: %s directory is not writable. Please chmod it to 0777."
4762
  msgstr ""
4763
  "Erreur : impossible d’écrire dans le répertoire %s. Assurez-vous qu'il "
4764
  "n'est pas en lecture seule."
4765
 
4766
- #: lib/login_protection.php:529
4767
  msgid "Error: please enter a user name for HTTP authentication."
4768
  msgstr ""
4769
  "Erreur : veuillez entrer un nom d'utilisateur pour l'authentification HTTP."
4770
 
4771
- #: lib/login_protection.php:531
4772
  msgid "Error: HTTP authentication user name is not valid."
4773
  msgstr ""
4774
  "Erreur : le nom d'utilisateur pour l'authentification HTTP n'est pas valide."
4775
 
4776
- #: lib/login_protection.php:537
4777
  msgid "Error: please enter a user name and password for HTTP authentication."
4778
  msgstr ""
4779
  "Erreur : veuillez entrer un nom d'utilisateur et mot de passe pour "
4780
  "l'authentification HTTP."
4781
 
4782
- #: lib/login_protection.php:540
4783
  msgid "Error: password must be from 6 to 32 characters."
4784
  msgstr "Erreur : le mot de passe doit comporter de 6 à 32 caractères."
4785
 
4786
- #: lib/login_protection.php:575
4787
  #, php-format
4788
  msgid "Error: unable to write to the %s configuration file"
4789
  msgstr "Erreur : impossible d’écrire dans le fichier de configuration %s"
4790
 
4791
- #: lib/network.php:24 ninjafirewall.php:844 ninjafirewall.php:848
4792
  #, php-format
4793
  msgid "You are not allowed to perform this task (%s)."
4794
  msgstr "Vous n'êtes pas autorisé à effectuer cette tâche (%s)."
@@ -4797,11 +4017,11 @@ msgstr "Vous n'êtes pas autorisé à effectuer cette tâche (%s)."
4797
  msgid "You do not have a multisite network."
4798
  msgstr "Vous ne disposez pas d'un réseau multisite."
4799
 
4800
- #: lib/network.php:59
4801
  msgid "NinjaFirewall Status"
4802
  msgstr "Statut de NinjaFirewall"
4803
 
4804
- #: lib/network.php:62
4805
  msgid ""
4806
  "Display NinjaFirewall status icon in the admin bar of all sites in the "
4807
  "network"
@@ -4809,15 +4029,52 @@ msgstr ""
4809
  "Afficher l'icône du statut de NinjaFirewall dans la barre d'administration "
4810
  "de tous les sites du réseau"
4811
 
4812
- #: lib/network.php:70
4813
  msgid "Save Network options"
4814
  msgstr "Sauvegarder les options"
4815
 
4816
- #: lib/overview.php:37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4817
  msgid "Congratulations, NinjaFirewall is up and running!"
4818
  msgstr "Félicitations, NinjaFirewall est bien activé&nbsp;!"
4819
 
4820
- #: lib/overview.php:38
4821
  msgid ""
4822
  "If you need help, click on the contextual \"Help\" menu tab located in the "
4823
  "upper right corner of each page."
@@ -4825,62 +4082,82 @@ msgstr ""
4825
  "Si vous avez besoin d'aide, cliquez sur l'onglet \"Aide\" situé dans le coin "
4826
  "supérieur droit de chaque page."
4827
 
4828
- #: lib/overview.php:40
4829
  msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to"
4830
  msgstr ""
4831
  "Un e-mail \"Guide d'Utilisation, d'Installation et de Dépannage\" a été "
4832
  "envoyé à l'adresse"
4833
 
4834
- #: lib/overview.php:62 lib/utils.php:485
4835
- msgid "unknown error"
4836
- msgstr "erreur inconnue"
4837
 
4838
- #: lib/overview.php:66 lib/overview.php:76
4839
  msgid "Firewall"
4840
  msgstr "Pare-feu"
4841
 
4842
- #: lib/overview.php:85
4843
- msgid "WordPress WAF"
4844
- msgstr "WordPress WAF"
4845
-
4846
- #: lib/overview.php:87
4847
- msgid "Full WAF"
4848
- msgstr "Full WAF"
4849
-
4850
- #: lib/overview.php:91
4851
  msgid "Mode"
4852
  msgstr "Mode"
4853
 
4854
- #: lib/overview.php:93
4855
  #, php-format
4856
  msgid "NinjaFirewall is running in %s mode."
4857
  msgstr "NinjaFirewall fonctionne en mode %s."
4858
 
4859
- #: lib/overview.php:102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4860
  msgid "Enabled."
4861
  msgstr "Activé."
4862
 
4863
- #: lib/overview.php:102
4864
  msgid "Click here to turn Debugging Mode off"
4865
  msgstr "Cliquez ici pour désactiver le mode Débogage"
4866
 
4867
- #: lib/overview.php:108
4868
- msgid "PHP SAPI"
4869
- msgstr "PHP SAPI"
 
 
 
 
4870
 
4871
- #: lib/overview.php:122 lib/utils.php:666
4872
  msgid "Version"
4873
  msgstr "Version"
4874
 
4875
- #: lib/overview.php:124
4876
  msgid "Security rules:"
4877
  msgstr "Règles de sécurité&nbsp;:"
4878
 
4879
- #: lib/overview.php:134
 
 
 
 
4880
  msgid "Security rules updates are disabled."
4881
  msgstr "La mise à jour automatique des règles de sécurité est désactivée."
4882
 
4883
- #: lib/overview.php:134
4884
  msgid ""
4885
  "If you want your blog to be protected against the latest threats, enable "
4886
  "automatic security rules updates."
@@ -4888,11 +4165,11 @@ msgstr ""
4888
  "Pour garder votre WordPress protégé contre les dernières vulnérabilités, "
4889
  "pensez à l'activer."
4890
 
4891
- #: lib/overview.php:142 lib/overview.php:151
4892
  msgid "Admin user"
4893
  msgstr "Administrateur"
4894
 
4895
- #: lib/overview.php:144
4896
  #, php-format
4897
  msgid ""
4898
  "You are not whitelisted. Ensure that the \"Do not block WordPress "
@@ -4905,23 +4182,23 @@ msgstr ""
4905
  "\"%s\">Politiques du Pare-feu</a>, sinon vous pourriez être bloqué par le "
4906
  "pare-feu lorsque vous travaillez depuis votre Tableau de bord."
4907
 
4908
- #: lib/overview.php:153
4909
  msgid "You are whitelisted by the firewall."
4910
  msgstr "Vous êtes dans la liste blanche du pare-feu."
4911
 
4912
- #: lib/overview.php:160
4913
  msgid "Restrictions"
4914
  msgstr "Restrictions"
4915
 
4916
- #: lib/overview.php:162
4917
- msgid "Access to NinjaFirewall is restricted to:"
4918
- msgstr "L'accès à NinjaFirewall est restreint à :"
4919
 
4920
- #: lib/overview.php:173
4921
  msgid "User session"
4922
  msgstr "Session utilisateur"
4923
 
4924
- #: lib/overview.php:175
4925
  msgid ""
4926
  "It seems that the user session set by NinjaFirewall was not found by the "
4927
  "firewall script."
@@ -4929,7 +4206,7 @@ msgstr ""
4929
  "Il semble que la session d'utilisateur définie par NinjaFirewall n'a pas été "
4930
  "trouvé par le script du pare-feu."
4931
 
4932
- #: lib/overview.php:183
4933
  #, php-format
4934
  msgid ""
4935
  "the public key is invalid. Please <a href=\"%s\">check your configuration</"
@@ -4938,18 +4215,18 @@ msgstr ""
4938
  "la clé publique est invalide. Veuillez vérifier <a href=\"%s\">votre "
4939
  "configuration</a>."
4940
 
4941
- #: lib/overview.php:187
4942
  msgid "No IP address restriction."
4943
  msgstr "Aucune restriction d'accès par adresse IP."
4944
 
4945
- #: lib/overview.php:190
4946
  #, php-format
4947
  msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
4948
  msgstr ""
4949
  "L'adresse IP %s est autorisée à accéder au journal du pare-feu de "
4950
  "NinjaFirewall."
4951
 
4952
- #: lib/overview.php:193
4953
  #, php-format
4954
  msgid ""
4955
  "the whitelisted IP is not valid. Please <a href=\"%s\">check your "
@@ -4958,21 +4235,21 @@ msgstr ""
4958
  "l'adresse IP est invalide. Veuillez vérifier <a href=\"%s\">votre "
4959
  "configuration</a>."
4960
 
4961
- #: lib/overview.php:203
4962
  #, php-format
4963
  msgid "Error: %s"
4964
  msgstr "Erreur : %s"
4965
 
4966
- #: lib/overview.php:221
4967
  msgid "Source IP"
4968
  msgstr "IP source"
4969
 
4970
- #: lib/overview.php:223
4971
  #, php-format
4972
  msgid "You have a private IP : %s"
4973
  msgstr "Vous avez l'adresse IP d'un réseau privé : %s"
4974
 
4975
- #: lib/overview.php:223
4976
  #, php-format
4977
  msgid ""
4978
  "If your site is behind a reverse proxy or a load balancer, ensure that you "
@@ -4984,11 +4261,11 @@ msgstr ""
4984
  "la bonne adresse IP, sinon utilisez le fichier de configuration %s de "
4985
  "NinjaFirewall. "
4986
 
4987
- #: lib/overview.php:231 lib/overview.php:242
4988
  msgid "CDN detection"
4989
  msgstr "Détection CDN"
4990
 
4991
- #: lib/overview.php:233
4992
  #, php-format
4993
  msgid ""
4994
  "%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
@@ -4999,7 +4276,7 @@ msgstr ""
4999
  "vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
5000
  "adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
5001
 
5002
- #: lib/overview.php:244
5003
  #, php-format
5004
  msgid ""
5005
  "%s detected: you seem to be using Incapsula CDN services. Ensure that you "
@@ -5010,129 +4287,129 @@ msgstr ""
5010
  "vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
5011
  "adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
5012
 
5013
- #: lib/overview.php:253 lib/overview.php:263
5014
  msgid "Log dir"
5015
  msgstr "Répertoire du Journal"
5016
 
5017
- #: lib/overview.php:255 lib/overview.php:265
5018
  #, php-format
5019
  msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
5020
  msgstr ""
5021
  "Le répertoire %s est en lecture seule ! Veuillez changer ses permissions "
5022
  "(0777 ou équivalent)."
5023
 
5024
- #: lib/overview.php:273
5025
  msgid "Optional configuration file"
5026
  msgstr "Fichier de configuration"
5027
 
5028
- #: lib/overview.php:281
5029
  msgid "MySQLi link identifier"
5030
  msgstr "Identifiant de lien MySQLi"
5031
 
5032
- #: lib/overview.php:283
5033
  msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
5034
  msgstr ""
5035
  "Un identifiant de lien MySQLi a été détecté dans votre fichier <code>."
5036
  "htninja</code>."
5037
 
5038
- #: lib/rules_editor.php:27
5039
  msgid "Error: you did not select a rule to disable."
5040
  msgstr "Erreur : vous devez sélectionner la règle à désactiver."
5041
 
5042
- #: lib/rules_editor.php:29 lib/rules_editor.php:44
5043
  msgid "Error: to change this rule, use the \"Firewall Policies\" menu."
5044
  msgstr ""
5045
  "Erreur : pour modifier cette règle, utilisez le menu \"Politiques du Pare-feu"
5046
  "\"."
5047
 
5048
- #: lib/rules_editor.php:31 lib/rules_editor.php:46
5049
  msgid "Error: this rule does not exist."
5050
  msgstr "Erreur : cette règle n'existe pas."
5051
 
5052
- #: lib/rules_editor.php:35
5053
  #, php-format
5054
  msgid "Rule ID %s has been disabled."
5055
  msgstr "La règle %s a été désactivée."
5056
 
5057
- #: lib/rules_editor.php:42
5058
  msgid "Error: you did not select a rule to enable."
5059
  msgstr "Erreur : vous devez sélectionner la règle à activer."
5060
 
5061
- #: lib/rules_editor.php:50
5062
  #, php-format
5063
  msgid "Rule ID %s has been enabled."
5064
  msgstr "La règle %s a été activée."
5065
 
5066
- #: lib/rules_editor.php:60
5067
  msgid "Error: no rules found."
5068
  msgstr "Erreur : aucune règle de sécurité trouvée."
5069
 
5070
- #: lib/rules_editor.php:82
5071
  msgid "NinjaFirewall built-in security rules"
5072
  msgstr "Éditeur de règles du pare-feu"
5073
 
5074
- #: lib/rules_editor.php:85
5075
  msgid "Select the rule you want to disable or enable"
5076
  msgstr "Sélectionnez la règle à activer ou désactiver"
5077
 
5078
- #: lib/rules_editor.php:89
5079
  msgid "Total rules enabled"
5080
  msgstr "Règles activées"
5081
 
5082
  # Todo ?
5083
- #: lib/rules_editor.php:95 lib/rules_editor.php:124
5084
  msgid "Remote/local file inclusion"
5085
  msgstr "Remote/local file inclusion"
5086
 
5087
  # Todo ?
5088
- #: lib/rules_editor.php:97 lib/rules_editor.php:126
5089
  msgid "Cross-site scripting"
5090
  msgstr "Cross-site scripting"
5091
 
5092
  # Todo ?
5093
- #: lib/rules_editor.php:99 lib/rules_editor.php:128
5094
  msgid "Code injection"
5095
  msgstr "Code injection"
5096
 
5097
  # Todo ?
5098
- #: lib/rules_editor.php:101 lib/rules_editor.php:130
5099
  msgid "SQL injection"
5100
  msgstr "SQL injection"
5101
 
5102
- #: lib/rules_editor.php:103 lib/rules_editor.php:132
5103
  msgid "Various vulnerability"
5104
  msgstr "Vulnérabilité (divers)"
5105
 
5106
  # Todo ?
5107
- #: lib/rules_editor.php:105 lib/rules_editor.php:134
5108
  msgid "Backdoor/shell"
5109
  msgstr "Backdoor/shell"
5110
 
5111
- #: lib/rules_editor.php:107 lib/rules_editor.php:136
5112
  msgid "Application specific"
5113
  msgstr "Application spécifique"
5114
 
5115
- #: lib/rules_editor.php:109 lib/rules_editor.php:138
5116
  msgid "WordPress vulnerability"
5117
  msgstr "Vulnérabilité WordPress"
5118
 
5119
- #: lib/rules_editor.php:111 lib/rules_editor.php:140
5120
  msgid "Rule ID"
5121
  msgstr "Règle"
5122
 
5123
- #: lib/rules_editor.php:114
5124
  msgid "Disable it"
5125
  msgstr "Désactiver"
5126
 
5127
- #: lib/rules_editor.php:119
5128
  msgid "Total rules disabled"
5129
  msgstr "Règles désactivées"
5130
 
5131
- #: lib/rules_editor.php:144
5132
  msgid "Enable it"
5133
  msgstr "Activer"
5134
 
5135
- #: lib/rules_update.php:73 ninjafirewall.php:535
5136
  msgid "Rules Update"
5137
  msgstr "Mise à Jour des Règles"
5138
 
@@ -5146,45 +4423,36 @@ msgstr ""
5146
  msgid "Security rules have been updated."
5147
  msgstr "Les règles de sécurité ont été mises à jour."
5148
 
5149
- #: lib/rules_update.php:94 lib/rules_update.php:445
5150
  msgid "No security rules update available."
5151
  msgstr "Aucune mise à jour des règles de sécurité disponible."
5152
 
5153
- #: lib/rules_update.php:143
5154
- msgid "Automatically update NinjaFirewall security rules"
5155
- msgstr "Activer la mise à jour automatique des règles de sécurité"
5156
-
5157
- #: lib/rules_update.php:157
5158
  #, php-format
5159
  msgid ""
5160
- "It seems that %s is enabled. Ensure you have another way to run WP-Cron, "
5161
  "otherwise NinjaFirewall automatic updates will not work."
5162
  msgstr ""
5163
  "Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
5164
  "les mises à jour automatiques ne pourront pas être effectuées."
5165
 
5166
- #: lib/rules_update.php:164
 
 
 
 
5167
  msgid "Check for updates"
5168
  msgstr "Vérifier les mises à jour"
5169
 
5170
- #: lib/rules_update.php:167
5171
  msgid "Every 15 minutes"
5172
  msgstr "Toutes les 15 minutes"
5173
 
5174
- #: lib/rules_update.php:168
5175
  msgid "Every 30 minutes"
5176
  msgstr "Toutes les 30 minutes"
5177
 
5178
- #: lib/rules_update.php:179
5179
- #, php-format
5180
- msgid ""
5181
- "Next scheduled update will start in approximately %s day, %s hour(s), %s "
5182
- "minute(s) and %s seconds."
5183
- msgstr ""
5184
- "La prochaine vérification des mises à jour aura lieu dans %s jour, %s "
5185
- "heure(s), %s minute(s) et %s secondes."
5186
-
5187
- #: lib/rules_update.php:186
5188
  msgid ""
5189
  "The next scheduled date is in the past! WordPress wp-cron may not be working "
5190
  "or may have been disabled."
@@ -5193,17 +4461,26 @@ msgstr ""
5193
  "passé&nbsp;! Essayez de recharger cette page, sinon vérifiez que WP-Cron n'a "
5194
  "pas été désactivé."
5195
 
5196
- #: lib/rules_update.php:194
 
 
 
 
 
 
 
 
 
5197
  msgid "Notification"
5198
  msgstr "Notification"
5199
 
5200
- #: lib/rules_update.php:196
5201
  msgid "Send me a report by email when security rules have been updated."
5202
  msgstr ""
5203
  "Envoyez-moi un rapport par e-mail lorsque les règles de sécurité ont été "
5204
  "mises à jour."
5205
 
5206
- #: lib/rules_update.php:197
5207
  msgid ""
5208
  "Reports will be sent to the contact email address defined in the Event "
5209
  "Notifications menu."
@@ -5211,52 +4488,52 @@ msgstr ""
5211
  "Les rapports seront envoyés à l'adresse e-mail définie dans la page "
5212
  "\"Notifications d'Événement\"."
5213
 
5214
- #: lib/rules_update.php:204
5215
- msgid "Save Updates Options"
5216
- msgstr "Sauvegarder les options"
5217
-
5218
- #: lib/rules_update.php:204
5219
- msgid "Check For Updates Now!"
5220
- msgstr "Vérifier les mises à jour maintenant ! "
5221
-
5222
- #: lib/rules_update.php:213
5223
  msgid "The updates log is currently empty."
5224
  msgstr "Le journal des mises à jour est vide."
5225
 
5226
- #: lib/rules_update.php:221
5227
  msgid "Updates Log"
5228
  msgstr "Journal des mises à jour"
5229
 
5230
- #: lib/rules_update.php:230
5231
- msgid "Delete Log"
5232
- msgstr "Supprimer le journal"
5233
-
5234
- #: lib/rules_update.php:236
5235
  msgid "Log is flushed automatically."
5236
  msgstr "Le journal est purgé automatiquement."
5237
 
5238
- #: lib/rules_update.php:332
 
 
 
 
 
 
 
 
 
 
 
 
5239
  msgid "Error: Wrong rules format."
5240
  msgstr "Erreur : Le format des règles téléchargées ne correspond pas."
5241
 
5242
- #: lib/rules_update.php:341
5243
  msgid "Error: Unable to unserialize the new rules."
5244
  msgstr ""
5245
  "Erreur : Impossible d'extraire les règles du fichier téléchargé (unable to "
5246
  "unserialize the new rules)."
5247
 
5248
- #: lib/rules_update.php:349
5249
  msgid "Error: Unserialized rules seem corrupted."
5250
  msgstr ""
5251
  "Erreur : Le fichier des règles téléchargé semblent corrompu (unserialized "
5252
  "rules seem corrupted)."
5253
 
5254
- #: lib/rules_update.php:389
5255
  #, php-format
5256
  msgid "Security rules updated to version %s."
5257
  msgstr "Les règles de sécurité ont été mises à jour vers la version %s."
5258
 
5259
- #: lib/rules_update.php:425
5260
  msgid ""
5261
  "Error: Your version of NinjaFirewall is too old and is not compatible with "
5262
  "those rules. Please upgrade it."
@@ -5264,26 +4541,26 @@ msgstr ""
5264
  "Erreur : Votre version de NinjaFirewall est trop ancienne et n'est pas "
5265
  "compatible avec ces règles de sécurité. Mettez à jour NinjaFirewall."
5266
 
5267
- #: lib/rules_update.php:434
5268
  msgid "Error: Unable to retrieve the new rules version."
5269
  msgstr "Erreur : Impossible de récupérer la nouvelle version des règles."
5270
 
5271
- #: lib/rules_update.php:452
5272
  #, php-format
5273
  msgid "Error: Server returned a %s HTTP error code (#1)."
5274
  msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#1)."
5275
 
5276
- #: lib/rules_update.php:459 lib/rules_update.php:525
5277
  msgid "Error: Unable to connect to the remote server"
5278
  msgstr "Erreur : Impossible de se connecter au serveur distant"
5279
 
5280
- #: lib/rules_update.php:489
5281
  #, php-format
5282
  msgid "Error: The new rules versions do not match (%s != %s)."
5283
  msgstr ""
5284
  "Erreur : La versions des nouvelles règles ne correspond pas (%s != %s)."
5285
 
5286
- #: lib/rules_update.php:503
5287
  #, php-format
5288
  msgid ""
5289
  "Error: The new rules %s digital signature is not correct. Aborting update, "
@@ -5292,102 +4569,235 @@ msgstr ""
5292
  "Erreur : La signature numérique des nouvelles règles %s n'est pas correcte. "
5293
  "Annulation de la mise à jour, les règles ont peut-être été altérées."
5294
 
5295
- #: lib/rules_update.php:518
5296
  #, php-format
5297
  msgid "Error: Server returned a %s HTTP error code (#2)."
5298
  msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#2)."
5299
 
5300
- #: lib/rules_update.php:558
5301
  msgid "[NinjaFirewall] Security rules update"
5302
  msgstr "[NinjaFirewall] Mise à jour des règles de sécurité"
5303
 
5304
- #: lib/rules_update.php:559
5305
  msgid "NinjaFirewall security rules have been updated:"
5306
  msgstr "Les règles de sécurité de NinjaFirewall ont été mises à jour :"
5307
 
5308
- #: lib/rules_update.php:565
5309
  msgid "Rules version:"
5310
  msgstr "Version des règles :"
5311
 
5312
- #: lib/rules_update.php:567
5313
  msgid ""
5314
  "This notification can be turned off from NinjaFirewall \"Rules Update\" page."
5315
  msgstr ""
5316
  "Cette notification peut être désactivée depuis la page \"Mise à Jour des "
5317
  "Règles\" de NinjaFirewall."
5318
 
5319
- #: lib/statistics.php:27 ninjafirewall.php:481
5320
  msgid "Statistics"
5321
  msgstr "Statistiques"
5322
 
5323
- #: lib/statistics.php:81
5324
  msgid "You do not have any stats for the selected month yet."
5325
  msgstr "Vous n'avez pas de statistiques pour le mois sélectionné."
5326
 
5327
- #: lib/statistics.php:115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5328
  msgid "Critical"
5329
  msgstr "Critique"
5330
 
5331
- #: lib/statistics.php:121
5332
  msgid "High"
5333
  msgstr "Élevé"
5334
 
5335
- #: lib/statistics.php:127
5336
  msgid "Medium"
5337
  msgstr "Moyen"
5338
 
5339
- #: lib/statistics.php:137
5340
- msgid "Average time per request"
5341
- msgstr "Durée moyenne par requête"
5342
 
5343
- #: lib/statistics.php:141
5344
- msgid "Fastest request"
5345
- msgstr "Requête la plus rapide"
5346
 
5347
- #: lib/statistics.php:145
5348
- msgid "Slowest request"
5349
- msgstr "Requête la plus lente"
 
 
 
 
 
 
 
 
5350
 
5351
- #: lib/statistics.php:171
5352
- msgid "Select monthly stats to view..."
5353
- msgstr "Sélectionnez les statistiques à afficher"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5354
 
5355
- #: lib/utils.php:142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5356
  msgid "Blocked user account creation"
5357
  msgstr "Création de compte d'utilisateur bloquée"
5358
 
5359
- #: lib/utils.php:154
5360
  msgid "NinjaFirewall has blocked an attempt to create a user account:"
5361
  msgstr ""
5362
  "NinjaFirewall a bloqué une tentative de création d'un compte d'utilisateur :"
5363
 
5364
- #: lib/utils.php:157 lib/utils.php:942
5365
  msgid "Username:"
5366
  msgstr "Utilisateur :"
5367
 
5368
- #: lib/utils.php:158 lib/utils.php:943 lib/utils.php:1288
5369
  msgid "User IP:"
5370
  msgstr "IP utilisateur :"
5371
 
5372
- #: lib/utils.php:161 lib/utils.php:782 lib/utils.php:946 lib/utils.php:1291
5373
  msgid "Date:"
5374
  msgstr "Date :"
5375
 
5376
- #: lib/utils.php:170 lib/utils.php:955 lib/utils.php:1283
5377
  msgid "A PHP backtrace has been attached to this message for your convenience."
5378
  msgstr ""
5379
  "La pile d'exécution de PHP est jointe à ce message pour votre commodité."
5380
 
5381
- #: lib/utils.php:193 lib/utils.php:194 lib/utils.php:980 lib/utils.php:981
5382
- #: lib/utils.php:1188 lib/utils.php:1189
5383
  msgid "You are not allowed to perform this task."
5384
  msgstr "Vous n'êtes pas autorisé à effectuer cette tâche."
5385
 
5386
- #: lib/utils.php:461 lib/utils.php:465
5387
  msgid "NinjaFirewall error"
5388
  msgstr "NinjaFirewall Erreur"
5389
 
5390
- #: lib/utils.php:462
5391
  #, php-format
5392
  msgid ""
5393
  "%s directory cannot be created. Please review your installation and ensure "
@@ -5396,7 +4806,7 @@ msgstr ""
5396
  "Le répertoire %s ne peut pas être créé. Vérifiez votre installation et "
5397
  "assurez vous que %s n'est pas en lecture seule."
5398
 
5399
- #: lib/utils.php:466
5400
  #, php-format
5401
  msgid ""
5402
  "%s directory is read-only. Please review your installation and ensure that "
@@ -5405,47 +4815,51 @@ msgstr ""
5405
  "Le répertoire %s est en lecture seule. Vérifiez votre installation et les "
5406
  "permissions de %s."
5407
 
5408
- #: lib/utils.php:487
 
 
 
 
5409
  msgid "NinjaFirewall fatal error:"
5410
  msgstr "NinjaFirewall erreur fatale :"
5411
 
5412
- #: lib/utils.php:488
5413
  msgid "Review your installation, your site is not protected."
5414
  msgstr "Vérifiez votre installation, votre site n'est pas protégé."
5415
 
5416
- #: lib/utils.php:505
5417
  msgid "Alert: WordPress console login"
5418
  msgstr "Alerte : Connexion à WordPress"
5419
 
5420
- #: lib/utils.php:507
5421
  msgid "-Blog:"
5422
  msgstr "- Blog :"
5423
 
5424
- #: lib/utils.php:511
5425
  msgid "Someone just logged in to your WordPress admin console:"
5426
  msgstr "Quelqu'un vient de se connecter à votre Tableau de bord de WordPress:"
5427
 
5428
- #: lib/utils.php:512
5429
  msgid "-User:"
5430
  msgstr "- Nom :"
5431
 
5432
- #: lib/utils.php:513
5433
  msgid "-IP:"
5434
  msgstr "- IP :"
5435
 
5436
- #: lib/utils.php:514
5437
  msgid "-Date:"
5438
  msgstr "- Date :"
5439
 
5440
- #: lib/utils.php:517
5441
  msgid "Support forum"
5442
  msgstr "Forum "
5443
 
5444
- #: lib/utils.php:578 lib/utils.php:605
5445
  msgid "Forbidden access"
5446
  msgstr "Accès interdit"
5447
 
5448
- #: lib/utils.php:624
5449
  #, php-format
5450
  msgid ""
5451
  "<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
@@ -5454,59 +4868,59 @@ msgstr ""
5454
  "<strong>ERREUR</strong>: Identifiant ou mot de passe invalide.<br /><a href="
5455
  "\"%s\">Mot de passe perdu</a> ?"
5456
 
5457
- #: lib/utils.php:658
5458
  msgid "Plugin"
5459
  msgstr "Extension"
5460
 
5461
- #: lib/utils.php:658 lib/utils.php:662
5462
  msgid "uploaded"
5463
  msgstr "téléchargé(e)"
5464
 
5465
- #: lib/utils.php:658 lib/utils.php:662
5466
  msgid "installed"
5467
  msgstr "installé(e)"
5468
 
5469
- #: lib/utils.php:658 lib/utils.php:662
5470
  msgid "activated"
5471
  msgstr "activé(e)"
5472
 
5473
- #: lib/utils.php:659
5474
  msgid "updated"
5475
  msgstr "mis(e) à jour"
5476
 
5477
- #: lib/utils.php:659
5478
  msgid "deactivated"
5479
  msgstr "désactivé(e)"
5480
 
5481
- #: lib/utils.php:659 lib/utils.php:663
5482
  msgid "deleted"
5483
  msgstr "supprimé(e)"
5484
 
5485
- #: lib/utils.php:659 lib/utils.php:663
5486
  msgid "Name"
5487
  msgstr "Nom"
5488
 
5489
- #: lib/utils.php:662
5490
  msgid "Theme"
5491
  msgstr "Thème"
5492
 
5493
- #: lib/utils.php:666
5494
  msgid "upgraded"
5495
  msgstr "mis(e) à jour"
5496
 
5497
- #: lib/utils.php:674
5498
  msgid "[NinjaFirewall] Alert:"
5499
  msgstr "[NinjaFirewall] Alerte :"
5500
 
5501
- #: lib/utils.php:680
5502
  msgid "NinjaFirewall has detected the following activity on your account:"
5503
  msgstr "NinjaFirewall a détecté l'activité suivante sur votre compte :"
5504
 
5505
- #: lib/utils.php:777
5506
  msgid "[NinjaFirewall] Alert: Database changes detected"
5507
  msgstr "[NinjaFirewall] Alerte: Modification dans la base de données"
5508
 
5509
- #: lib/utils.php:778
5510
  msgid ""
5511
  "NinjaFirewall has detected that one or more administrator accounts were "
5512
  "modified in the database:"
@@ -5514,12 +4928,12 @@ msgstr ""
5514
  "NinjaFirewall a détecté que un ou plusieurs comptes d'administrateur ont été "
5515
  "modifiés dans la base de données:"
5516
 
5517
- #: lib/utils.php:783
5518
  #, php-format
5519
  msgid "Total administrators : %s"
5520
  msgstr "Nombre d'administrateurs : %s"
5521
 
5522
- #: lib/utils.php:792
5523
  msgid ""
5524
  "If you cannot see any modifications in the above fields, it is possible that "
5525
  "the administrator password was changed."
@@ -5527,17 +4941,19 @@ msgstr ""
5527
  "Si vous ne voyez pas de modifications dans les données ci-dessus, il est "
5528
  "possible que le mot de passe administrateur ait été changé."
5529
 
5530
- #: lib/utils.php:917
5531
  msgid "Blocked privilege escalation attempt"
5532
  msgstr "Tentatives d'élévation des privilèges"
5533
 
5534
- #: lib/utils.php:939
5535
- msgid "NinjaFirewall has blocked an attempt to gain administrative privileges:"
 
 
5536
  msgstr ""
5537
- "NinjaFirewall a bloqué un utilisateur ayant essayé d'élever ses privilèges "
5538
- "pour devenir administrateur du blog :"
5539
 
5540
- #: lib/utils.php:991
5541
  msgid ""
5542
  "NinjaFirewall brute-force protection is enabled and you are temporarily "
5543
  "whitelisted."
@@ -5545,7 +4961,7 @@ msgstr ""
5545
  "La protection de NinjaFirewall contre les attaques par force brute est "
5546
  "activée. Vous êtes temporairement dans la liste blanche."
5547
 
5548
- #: lib/utils.php:1005
5549
  #, php-format
5550
  msgid ""
5551
  "Hey, it seems that you've been using NinjaFirewall for some time. If you "
@@ -5558,17 +4974,17 @@ msgstr ""
5558
  "a>. Il a fallu des milliers d'heures pour le développer, mais il suffit "
5559
  "seulement de quelques minutes pour le noter. Merci !"
5560
 
5561
- #: lib/utils.php:1255
5562
  msgid ""
5563
  "The attempt was blocked and the option was reversed to its original value."
5564
  msgstr ""
5565
  "La tentative a été bloquée et l'option a été remise à sa valeur d'origine."
5566
 
5567
- #: lib/utils.php:1260
5568
  msgid "Attempt to modify WordPress settings"
5569
  msgstr "Tentative de modification des paramètres de WordPress"
5570
 
5571
- #: lib/utils.php:1261
5572
  msgid ""
5573
  "NinjaFirewall has blocked an attempt to modify some important WordPress "
5574
  "settings by a user that does not have administrative privileges:"
@@ -5577,31 +4993,31 @@ msgstr ""
5577
  "importants de WordPress par un utilisateur ne disposant pas de privilèges "
5578
  "administratifs :"
5579
 
5580
- #: lib/utils.php:1262 lib/utils.php:1271
5581
  #, php-format
5582
  msgid "Option: %s"
5583
  msgstr "Option: %s"
5584
 
5585
- #: lib/utils.php:1263
5586
  #, php-format
5587
  msgid "Original value: %s"
5588
  msgstr "Valeur originale : %s"
5589
 
5590
- #: lib/utils.php:1264
5591
  #, php-format
5592
  msgid "Modified value: %s"
5593
  msgstr "Valeur modifiée : %s"
5594
 
5595
- #: lib/utils.php:1265 lib/utils.php:1273
5596
  #, php-format
5597
  msgid "Action taken: %s"
5598
  msgstr "Action prise : %s"
5599
 
5600
- #: lib/utils.php:1269
5601
  msgid "Code injection attempt in WordPress options table"
5602
  msgstr "Tentative d'injection de code dans la table des options de WordPress"
5603
 
5604
- #: lib/utils.php:1270
5605
  msgid ""
5606
  "NinjaFirewall has blocked an attempt to inject code in the WordPress options "
5607
  "table by a user that does not have administrative privileges:"
@@ -5610,12 +5026,12 @@ msgstr ""
5610
  "options de WordPress par un utilisateur ne disposant pas de privilèges "
5611
  "administratifs :"
5612
 
5613
- #: lib/utils.php:1272
5614
  #, php-format
5615
  msgid "Code: %s"
5616
  msgstr "Code : %s"
5617
 
5618
- #: lib/utils.php:1293
5619
  msgid ""
5620
  "This protection (and notification) can be turned off from NinjaFirewall "
5621
  "\"Firewall Policies\" page."
@@ -5623,95 +5039,138 @@ msgstr ""
5623
  "Cette protection (et notification) peut être désactivée à partir de la page "
5624
  "\"Politiques du Pare-feu\" de NinjaFirewall."
5625
 
5626
- #: lib/wpplus.php:33
5627
- msgid "Need more security? Check out NinjaFirewall"
5628
- msgstr "Besoin de plus de sécurité ? Venez découvrir NinjaFirewall"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5629
 
5630
- #. translators: [NinjaFirewall] is a supercharged Edition...
5631
- #: lib/wpplus.php:37
5632
  msgid ""
5633
- "is a supercharged Edition of our Web Application Firewall. It adds many new "
5634
- "exciting features and blazing fast performances to make it the fastest and "
5635
- "most advanced security plugin for WordPress."
 
5636
  msgstr ""
5637
- "est une version encore plus musclée de notre pare-feu applicatif. Elle offre "
5638
- "de meilleures performances et contient de nouvelles fonctionnalités qui en "
5639
- "font l'extension de sécurité pour WordPress la plus avancée et puissante sur "
5640
- "le marché."
 
 
 
 
 
5641
 
5642
- #: lib/wpplus.php:42
5643
  msgid "Access Control"
5644
  msgstr "Contrôle d'Accès"
5645
 
5646
- #: lib/wpplus.php:43
5647
  msgid ""
5648
- "<b>Access Control</b> is a powerful set of directives that can be used to "
5649
- "allow or restrict access to your blog, depending on the <strong>User Role</"
5650
- "strong>, <strong>IP</strong>, <strong>Geolocation</strong>, "
5651
- "<strong>Requested URL</strong>, <strong>User-agent</strong> visitors "
5652
- "behavior (<strong>Rate Limiting</strong>)and <strong>User Input</strong>. "
5653
- "Those directives will be processed before the Firewall Policies and "
5654
- "NinjaFirewall's built-in security rules."
5655
  msgstr ""
5656
- "Le <b>Contrôle d'Accès</b> est un puissant ensemble de directives qui peut "
5657
- "être utilisé pour autoriser ou restreindre l'accès à votre blog selon de "
5658
- "nombreux critères&nbsp;: <strong>Rôle</strong> de l'utilisateur, "
5659
- "<strong>adresse IP</strong>, <strong>Géolocalisation</strong>, <strong>URL "
5660
- "demandée</strong>, <strong>User-agent</strong>, le comportement des "
5661
- "visiteurs (<strong>Limitation du trafic</strong>) et les <strong>Entrées "
5662
- "utilisateur</strong>."
5663
 
5664
- #: lib/wpplus.php:45
5665
  msgid ""
5666
  "Its main configuration allows you to whitelist WordPress users depending on "
5667
  "their roles, to select the source IP (useful if your site is using a CDN or "
5668
  "behind a reverse-proxy/load balancer), and the HTTP methods all directives "
5669
- "should apply to:"
5670
  msgstr ""
5671
  "Sa configuration principale vous permet de créer une liste blanche des "
5672
  "utilisateurs de WordPress en fonction de leurs rôles, de sélectionner "
5673
  "l'adresse IP source (utile si votre site utilise un CDN ou un équilibreur de "
5674
  "charge), et les méthodes HTTP auxquelles s'appliqueront toutes les "
5675
- "directives&nbsp;:"
 
 
 
 
 
 
 
 
 
 
5676
 
5677
- #: lib/wpplus.php:50
 
 
 
 
5678
  msgid ""
5679
- "<b>Access Control</b> can use geolocation to block visitors from specific "
5680
- "countries. It can apply to the whole blog or only to specific folders or "
5681
- "scripts (e.g., /wp-login.php, /xmlrpc.php etc). If you have a theme or a "
5682
- "plugin that needs to know your visitors location, you can even ask "
5683
- "NinjaFirewall to append the country code to the PHP headers:"
5684
  msgstr ""
5685
- "Le <b>Contrôle d'Accès</b> peut utiliser la géolocalisation pour bloquer les "
5686
- "visiteurs en provenance de pays spécifiques. Il peut s'appliquer à tout le "
5687
- "site ou bien à certains scripts ou répertoires uniquement (ex: /wp-login."
5688
- "php, xmlrpc.php etc). Si vous avez un thème ou une extension qui nécessite "
5689
- "de géolocaliser vos visiteurs, vous pouvez même demander à NinjaFirewall "
5690
- "d’insérer le code à deux lettres du pays dans les en-têtes PHP&nbsp;:"
 
 
 
 
5691
 
5692
- #: lib/wpplus.php:55
5693
  msgid ""
5694
- "<b>Access Control</b> can be used to whitelist/blacklist an IP or any part "
5695
- "of it. NinjaFirewall natively supports IPv4 and IPv6 protocols, for both "
5696
- "public and private addresses:"
5697
  msgstr ""
5698
- "Le <b>Contrôle d'Accès</b> peut immédiatement accepter ou bloquer une "
5699
- "adresse IP ou une partie de celle-ci. NinjaFirewall est compatible avec "
5700
- "l'IPv4 et l'IPv6&nbsp;:"
5701
 
5702
- #: lib/wpplus.php:60
5703
  msgid ""
5704
- "<b>Access Control</b> can slow down aggressive bots, crawlers, web scrapers "
5705
  "or even small HTTP attacks with its <strong>Rate-Limiting</strong> feature."
5706
  msgstr ""
5707
- "Le <b>Contrôle d'Accès</b> vous permet de ralentir les bots, crawlers, web "
5708
  "scrapers ou même de petites attaques HTTP avec son option <strong>Limiter le "
5709
  "trafic</strong>."
5710
 
5711
- #: lib/wpplus.php:62
5712
  msgid ""
5713
  "Because it can block attackers <strong>before WordPress and all its plugins "
5714
- "are loaded</strong> and can handle thousands of HTTP requests per second, "
5715
  "NinjaFirewall will save precious bandwidth and reduce your server load."
5716
  msgstr ""
5717
  "Parce qu'il peut bloquer les attaques <strong>avant que WordPress et ses "
@@ -5719,77 +5178,84 @@ msgstr ""
5719
  "requêtes HTTP par seconde, NinjaFirewall vous fera économiser de la bande "
5720
  "passante et permettra de réduire la charge du serveur."
5721
 
5722
- #: lib/wpplus.php:67
 
 
 
 
5723
  msgid ""
5724
- "<b>URL Access Control</b> lets you permanently allow/block any access to one "
5725
- "or more PHP scripts based on their path or name:"
5726
  msgstr ""
5727
- "Le <b>Contrôle d'accès par URL</b> vous permet d'autoriser / bloquer tout "
5728
- "accès à un ou plusieurs scripts PHP basé sur leur chemin ou leur nom&nbsp;:"
 
5729
 
5730
- #: lib/wpplus.php:72
 
 
 
 
5731
  msgid ""
5732
- "<b>Bots Access Control</b> allows you block bots, scanners and various "
5733
- "annoying crawlers:"
5734
  msgstr ""
5735
- "Avec le <b>Contrôle d'accès par Bot</b> vous pouvez bloquer les robots, "
5736
- "scanners et autres robots ennuyeux&nbsp;:"
5737
 
5738
- #: lib/wpplus.php:77
 
 
 
 
5739
  msgid ""
5740
- "<b>User Input Access Control</b> allows you to to ignore or block some "
5741
- "specific user input:"
5742
  msgstr ""
5743
- "Le <b>Contrôle d'accès d'entrée utilisateur</b> vous permet d’ignorer ou de "
5744
- "bloquer une entrée utilisateur spécifique :"
5745
 
5746
- #: lib/wpplus.php:83
5747
  msgid ""
5748
- "If NinjaFirewall can hook and scan incoming requests, the <b><font color="
5749
- "\"#21759B\">WP+</font> Edition</b> can also hook the response body (i.e., "
5750
- "the output of the HTML page right before it is sent to your visitors "
5751
- "browser) and search it for some specific keywords. Such a filter can be "
5752
- "useful to detect hacking or malware patterns injected into your HTML page "
5753
- "(text strings, spam links, malicious JavaScript code), hackers shell script, "
5754
- "redirections and even errors (PHP/MySQL errors). Some suggested keywords as "
5755
- "well as a default list are included."
5756
  msgstr ""
5757
- "Si NinjaFirewall peut filtrer les requêtes HTTP entrantes, la version "
5758
- "<b><font color=\"#21759B\">WP+</font> Edition</b> peut aussi intercepter les "
5759
- "requêtes sortantes, c'est à dire le contenu de la page HTML juste avant que "
5760
- "celui-ci ne soit envoyé au navigateur de l'utilisateur. Ce type de filtre "
5761
- "est particulièrement intéressant pour détecter du code malveillant injectés "
5762
- "dans vos pages HTML (texte, liens, code JavaScript etc), des scripts "
5763
- "utilisés par les hackers (shell, backdoor) et même des erreurs (PHP, MySQL). "
5764
 
5765
- #: lib/wpplus.php:85
5766
  msgid ""
5767
  "In the case of a positive detection, NinjaFirewall will not block the "
5768
  "response body but will send you an alert by email. It can even attach the "
5769
- "whole HTML source of the page for your review:"
5770
  msgstr ""
5771
  "En cas de détection positive, NinjaFirewall ne bloquera pas la requête mais "
5772
- "vous enverra immédiatement une alerte par e-mail&nbsp;:"
5773
 
5774
- #: lib/wpplus.php:90
5775
  msgid "Antispam"
5776
  msgstr "Antispam"
5777
 
5778
- #: lib/wpplus.php:91
5779
  msgid ""
5780
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) can protect your "
5781
- "blog comment and registration forms against spam. The protection is totally "
5782
- "transparent to your visitors and does not require any interaction: no "
5783
- "CAPTCHA, no math puzzles or trivia questions. Extremely easy to activate, "
5784
- "but powerful enough to make spam bots life as miserable as possible:"
5785
  msgstr ""
5786
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) peut protéger les "
5787
- "formulaires de commentaire et d'inscription de votre blog contre le spam. La "
5788
- "protection est totalement transparente pour vos visiteurs et ne nécessite ni "
5789
- "CAPTCHA ni interaction de leur part. Extrêmement facile à activer, mais "
5790
- "assez puissante pour ne laisser aucune chance aux spammeurs&nbsp;:"
5791
 
5792
- #: lib/wpplus.php:94
5793
  msgid ""
5794
  "NinjaFirewall antispam feature works only with WordPress built-in comment "
5795
  "and registration forms."
@@ -5797,22 +5263,21 @@ msgstr ""
5797
  "L'option anti-spam de NinjaFirewall ne fonctionne qu'avec les formulaires "
5798
  "intégrés à WordPress (commentaire et d'inscription)."
5799
 
5800
- #: lib/wpplus.php:99
5801
  #, php-format
5802
  msgid ""
5803
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) lets you remotely "
5804
- "access the firewall log of all your NinjaFirewall protected websites from "
5805
- "one single installation, using the <a href=\"%s\">Centralized Logging</a> "
5806
- "feature. You do not need any longer to log in to individual servers to "
5807
- "analyse your log data."
5808
  msgstr ""
5809
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) vous permet "
5810
- "d’accéder, depuis votre blog principal, au journal du pare-feu de chacun de "
5811
- "vos sites protégés par NinjaFirewall grâce à la fonction de <a href=\"%s"
5812
- "\">Centralisation des Logs</a>. Vous n'avez plus besoin de vous connecter à "
5813
- "chaque site pour analyser vos journaux."
5814
 
5815
- #: lib/wpplus.php:101
5816
  msgid ""
5817
  "There is no limit to the number of websites you can connect to, and they can "
5818
  "be running any edition of NinjaFirewall: WP, <font color=\"#21759B\">WP+</"
@@ -5822,52 +5287,48 @@ msgstr ""
5822
  "version de NinjaFirewall : WP, <font color=\"#21759B\">WP+</font>, Pro ou "
5823
  "<font color=\"red\">Pro+</font>."
5824
 
5825
- #: lib/wpplus.php:107
5826
  msgid "Improved features"
5827
  msgstr "Fonctionnalités améliorées"
5828
 
5829
- #: lib/wpplus.php:108
5830
- msgid "File uploads:"
5831
- msgstr "Téléchargements&nbsp;:"
5832
 
5833
- #: lib/wpplus.php:109
5834
  msgid ""
5835
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) makes it possible "
5836
- "to allow uploads while rejecting potentially dangerous files: scripts (PHP, "
5837
- "CGI, Ruby, Python, bash/shell), C/C++ source code, binaries (MZ/PE/NE and "
5838
- "ELF formats), system files (.htaccess, .htpasswd and PHP INI) and SVG files "
5839
- "containing Javascript/XML events. You can easily limit the size of each "
5840
- "uploaded file too, without having to modify your PHP configuration:"
5841
  msgstr ""
5842
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) vous permet "
5843
- "d'autoriser ou d'interdire tout téléchargement de fichiers vers votre site, "
5844
- "ou bien de bloquer uniquement les fichiers potentiellement dangereux : "
5845
  "scripts (PHP, CGI, Ruby, Python, bash/shell), code source C/C++, fichiers "
5846
  "exécutables (MZ/PE/NE et ELF), certains fichiers systèmes (.htaccess, ."
5847
- "htpasswd et PHP INI) et les fichiers SVG contenant du Javascript ou des "
5848
  "Événements XML. Vous pouvez aussi sélectionner la taille maximale d'un "
5849
- "fichier téléchargé, sans avoir à modifier la configuration de PHP&nbsp;:"
5850
 
5851
- #: lib/wpplus.php:114
5852
- msgid "Firewall Log:"
5853
- msgstr "Journal du Pare-feu&nbsp;:"
5854
-
5855
- #: lib/wpplus.php:116
5856
  msgid ""
5857
  "The log menu has been revamped too. You can disable the firewall log, delete "
5858
  "the current one, enable its rotation based on the size of the file and, if "
5859
  "any, view each rotated log separately. Quick filtering options are easily "
5860
  "accessible from checkboxes and the log can be exported as a TSV (tab-"
5861
- "separated values) text file."
 
5862
  msgstr ""
5863
  "Le <b>Journal du Pare-feu</b> a été remanié. Vous pouvez maintenant le "
5864
  "désactiver, le supprimer et permettre sa rotation en vous basant sur la "
5865
  "taille du fichier. Des options de filtrage rapides sont facilement "
5866
  "accessibles à partir de cases à cocher et le journal peut également être "
5867
  "exporté dans un fichier au format TSV (valeurs séparées par des "
5868
- "tabulations)&nbsp;:"
 
5869
 
5870
- #: lib/wpplus.php:117
5871
  msgid ""
5872
  "It is also possible to redirect all incidents and events to the Syslog "
5873
  "server:"
@@ -5875,25 +5336,28 @@ msgstr ""
5875
  "Il est également possible de rediriger tous les incidents et les événements "
5876
  "vers le serveur Syslog :"
5877
 
5878
- #: lib/wpplus.php:122
5879
- msgid "Rules Update:"
5880
- msgstr "Mise à Jour des Règles :"
 
 
 
 
 
5881
 
5882
- #: lib/wpplus.php:124
5883
  msgid ""
5884
- "The <b><font color=\"#21759B\">WP+</font> Edition</b> can check for security "
5885
- "rules updates <b>as often as every 15 minutes</b>, versus one hour for the "
5886
- "free WP Edition."
5887
  msgstr ""
5888
- "NinjaFirewall <b><font color=\"#21759B\">WP+</font> Edition</b> peut "
5889
- "vérifier les mises à jour des règles de sécurité <b>toutes les 15 minutes</"
5890
- "b>, contre une heure pour la version gratuite WP Edition."
5891
 
5892
- #: lib/wpplus.php:129
5893
- msgid "Shared Memory use:"
5894
- msgstr "Utilisation de la mémoire partagée&nbsp;:"
5895
 
5896
- #: lib/wpplus.php:131
5897
  #, php-format
5898
  msgid ""
5899
  "Although NinjaFirewall is already <a href=\"%s\">much faster than other "
@@ -5906,7 +5370,7 @@ msgstr ""
5906
  "Edition</b> améliore encore plus ses performances en utilisant la mémoire "
5907
  "partagée."
5908
 
5909
- #: lib/wpplus.php:131
5910
  msgid ""
5911
  "This allows easier and faster inter-process communication between the "
5912
  "firewall and the plugin part of NinjaFirewall and, because its data and "
@@ -5918,29 +5382,21 @@ msgstr ""
5918
  "stockées en mémoire et le pare-feu n'a même plus besoin de se connecter à la "
5919
  "base de données pour y accéder."
5920
 
5921
- #: lib/wpplus.php:131
5922
  msgid ""
5923
  "This dramatically increases the processing speed (there is nothing faster "
5924
  "than RAM), prevents blocking I/O and MySQL slow queries. On a very busy "
5925
  "server like a multi-site network, the firewall processing speed will "
5926
  "increase from 25% to 30%. It can be enabled from the \"Firewall Options\" "
5927
- "menu:"
5928
  msgstr ""
5929
  "Cela augmente considérablement la vitesse de traitement (il n'y a rien de "
5930
  "plus rapide que la mémoire), empêche le blocage des E/S et les requêtes "
5931
  "lentes MySQL. Sur un serveur très sollicité comme un réseau multi-site, la "
5932
  "vitesse de traitement de pare-feu va augmenter de 25% à 30%. Cette option "
5933
- "peut être activé à partir de la page \"Options du pare-feu\"&nbsp;:"
5934
-
5935
- #: lib/wpplus.php:135
5936
- msgid ""
5937
- "This feature requires that PHP was compiled with the <code>--enable-shmop</"
5938
- "code> parameter."
5939
- msgstr ""
5940
- "Cette fonction nécessite que PHP soit compilé avec le paramètre <code>--"
5941
- "enable-shmop</code>."
5942
 
5943
- #: lib/wpplus.php:145
5944
  msgid ""
5945
  "Learn more</a> about the <font color=\"#21759B\">WP+</font> Edition unique "
5946
  "features."
@@ -5948,7 +5404,7 @@ msgstr ""
5948
  "En savoir plus</a> sur les caractéristiques uniques de la version <font "
5949
  "color=\"#21759B\">WP+</font>."
5950
 
5951
- #: lib/wpplus.php:146
5952
  msgid "Compare</a> the WP and <font color=\"#21759B\">WP+</font> Editions."
5953
  msgstr "Comparez</a> les versions WP et <font color=\"#21759B\">WP+</font>."
5954
 
@@ -6056,7 +5512,19 @@ msgstr ""
6056
  msgid "The PHP msqli extension is missing or not loaded."
6057
  msgstr "L'extension PHP mysqli est manquante ou bien n'est pas chargée."
6058
 
6059
- #: ninjafirewall.php:106
 
 
 
 
 
 
 
 
 
 
 
 
6060
  msgid ""
6061
  "You do not have \"unfiltered_html\" capability. Please enable it in order to "
6062
  "run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
@@ -6067,7 +5535,7 @@ msgstr ""
6067
  "la directive \"DISALLOW_UNFILTERED_HTML\" activée dans votre fichier wp-"
6068
  "config.php)."
6069
 
6070
- #: ninjafirewall.php:113
6071
  #, php-format
6072
  msgid ""
6073
  "NinjaFirewall requires WordPress 3.3 or greater but your current version is "
@@ -6076,19 +5544,19 @@ msgstr ""
6076
  "NinjaFirewall nécessite au moins WordPress 3.3 mais votre version de "
6077
  "WordPress est %s."
6078
 
6079
- #: ninjafirewall.php:117
6080
  #, php-format
6081
  msgid ""
6082
  "NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
6083
  msgstr ""
6084
  "NinjaFirewall nécessite au moins PHP 5.3 mais votre version de PHP est %s."
6085
 
6086
- #: ninjafirewall.php:121
6087
  #, php-format
6088
  msgid "NinjaFirewall requires the PHP %s extension."
6089
  msgstr "NinjaFirewall nécessite l'extension PHP %s."
6090
 
6091
- #: ninjafirewall.php:125
6092
  msgid ""
6093
  "You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
6094
  "5.3.0 (see http://php.net/safe-mode)."
@@ -6097,102 +5565,1429 @@ msgstr ""
6097
  "devenue obsolète depuis PHP 5.3 et a été supprimée depuis PHP 5.4 (cf. "
6098
  "http://php.net/safe-mode)."
6099
 
6100
- #: ninjafirewall.php:129
6101
  msgid "You are not allowed to activate NinjaFirewall."
6102
  msgstr "Vous n’êtes pas autorisé à activer NinjaFirewall."
6103
 
6104
- #: ninjafirewall.php:133
6105
  msgid "NinjaFirewall is not compatible with Microsoft Windows."
6106
  msgstr "NinjaFirewall n'est pas compatible avec Microsoft Windows."
6107
 
6108
- #: ninjafirewall.php:477
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6109
  msgid "NinjaFirewall: Overview"
6110
  msgstr "NinjaFirewall : Aperçu"
6111
 
6112
- #: ninjafirewall.php:481
6113
  msgid "NinjaFirewall: Statistics"
6114
  msgstr "NinjaFirewall : Statistiques"
6115
 
6116
- #: ninjafirewall.php:485
6117
  msgid "NinjaFirewall: Firewall Options"
6118
  msgstr "NinjaFirewall : Options du Pare-feu"
6119
 
6120
- #: ninjafirewall.php:489
6121
  msgid "NinjaFirewall: Firewall Policies"
6122
  msgstr "NinjaFirewall : Politiques du Pare-feu"
6123
 
6124
- #: ninjafirewall.php:493
6125
  msgid "NinjaFirewall: File Guard"
6126
  msgstr "NinjaFirewall: File Guard"
6127
 
6128
- #: ninjafirewall.php:497
6129
  msgid "NinjaFirewall: File Check"
6130
  msgstr "NinjaFirewall: File Check"
6131
 
6132
- #: ninjafirewall.php:507
6133
  msgid "NinjaFirewall: Anti-Malware"
6134
  msgstr "NinjaFirewall : Anti-Malware"
6135
 
6136
- #: ninjafirewall.php:511
6137
  msgid "NinjaFirewall: Network"
6138
  msgstr "NinjaFirewall : Réseau"
6139
 
6140
- #: ninjafirewall.php:515
6141
  msgid "NinjaFirewall: Event Notifications"
6142
  msgstr "NinjaFirewall : Notifications d’Événement"
6143
 
6144
- #: ninjafirewall.php:519
6145
  msgid "NinjaFirewall: Log-in Protection"
6146
  msgstr "NinjaFirewall : Page de Connexion"
6147
 
6148
- #: ninjafirewall.php:523
6149
  msgid "NinjaFirewall: Firewall Log"
6150
  msgstr "NinjaFirewall : Journal du Pare-feu"
6151
 
6152
- #: ninjafirewall.php:527
6153
  msgid "NinjaFirewall: Live Log"
6154
  msgstr "NinjaFirewall: Live Log"
6155
 
6156
- #: ninjafirewall.php:531
6157
  msgid "NinjaFirewall: Rules Editor"
6158
  msgstr "NinjaFirewall : Éditeur de Règles"
6159
 
6160
- #: ninjafirewall.php:535
6161
  msgid "NinjaFirewall: Rules Update"
6162
  msgstr "NinjaFirewall: Mise à Jour des Règles"
6163
 
6164
- #: ninjafirewall.php:542
6165
  msgid "NinjaFirewall: About"
6166
  msgstr "NinjaFirewall : À Propos"
6167
 
6168
- #: ninjafirewall.php:542
6169
  msgid "About..."
6170
  msgstr "À Propos..."
6171
 
6172
- #: ninjafirewall.php:582
6173
  msgid "NinjaFirewall Settings"
6174
  msgstr "Réglages de NinjaFirewall"
6175
 
6176
- #: ninjafirewall.php:590
6177
  msgid "NinjaFirewall is enabled"
6178
  msgstr "NinjaFirewall est activé"
6179
 
6180
- #: ninjafirewall.php:779
6181
  msgid "Access Restricted"
6182
  msgstr "Accès limité"
6183
 
6184
- #: ninjafirewall.php:785
6185
  msgid "Settings"
6186
  msgstr "Réglages"
6187
 
6188
- #: ninjafirewall.php:786
6189
  msgid "Upgrade to Premium"
6190
  msgstr "Passez Premium !"
6191
 
6192
- #: ninjafirewall.php:787
6193
  msgid "Rate it!"
6194
  msgstr "Notez-le !"
6195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6196
  #~ msgid ""
6197
  #~ "Benchmarks show the time NinjaFirewall took, in seconds, to proceed each "
6198
  #~ "request it has blocked."
4
  msgstr ""
5
  "Project-Id-Version: Stable (latest release)\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ninjafirewall\n"
7
+ "POT-Creation-Date: 2019-06-24 18:07+0700\n"
8
+ "PO-Revision-Date: 2019-06-24 18:12+0700\n"
9
  "Last-Translator: NinTechNet <contact@nintechnet.com>\n"
10
  "Language-Team: NinTechNet <nintechnet.com>\n"
11
  "Language: fr_FR\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n > 1);\n"
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  #: lib/about.php:31
20
  msgid "Error : cannot find changelog :("
21
  msgstr "Erreur: impossible de trouver le fichier changelog :("
22
 
23
+ #: lib/about.php:36
24
  msgid "About"
25
  msgstr "À Propos"
26
 
27
+ #: lib/about.php:56
28
  msgid "A powerful antivirus<br />scanner for WordPress."
29
  msgstr "Un puissant antivirus<br />pour WordPress."
30
 
31
+ #: lib/about.php:58
32
  msgid "Free Download"
33
  msgstr "Télécharger"
34
 
35
+ #: lib/about.php:62
36
  msgid "Website Monitoring<br />for just $4.99/month."
37
  msgstr "Surveillance de site<br />à partir de $4.99/mois."
38
 
39
+ #: lib/about.php:64
40
  msgid "7-Day Free Trial"
41
  msgstr "Essai Gratuit"
42
 
43
+ #: lib/about.php:68
44
  msgid "Malware removal<br />and hack recovery."
45
  msgstr "Nettoyage de site<br />piraté ou infecté."
46
 
47
+ #: lib/about.php:70
48
  msgid "Clean Your Site!"
49
  msgstr "Nettoyez votre site"
50
 
51
+ #: lib/about.php:82
52
  msgid "Changelog"
53
  msgstr "Changelog"
54
 
55
+ #: lib/about.php:82
56
  msgid "Spread the word!"
57
  msgstr "Partagez !"
58
 
59
+ #: lib/about.php:82
60
  msgid "Referral Program"
61
  msgstr "Programme de parrainage"
62
 
63
+ #: lib/about.php:82
64
  msgid "System Info"
65
  msgstr "Info système"
66
 
67
+ #: lib/about.php:82 lib/help.php:521
68
  msgid "GDPR Compliance"
69
  msgstr "Conformité RGPD"
70
 
71
+ #: lib/about.php:88 lib/help.php:56
72
+ msgid ""
73
+ "Stay informed about the latest vulnerabilities in WordPress plugins and "
74
+ "themes."
75
+ msgstr ""
76
+ "Soyez informé des dernières vulnérabilités dans les extensions et thèmes de "
77
+ "WordPress."
78
+
79
+ #: lib/about.php:89
80
+ msgid "Rate it on WordPress.org!"
81
+ msgstr "Notez-le sur WordPress.org !"
82
+
83
+ #: lib/about.php:113
84
  msgid "PHP version"
85
  msgstr "Version PHP"
86
 
87
+ #: lib/about.php:122
88
  msgid "HTTP server"
89
  msgstr "Serveur HTTP"
90
 
91
+ #: lib/about.php:125
92
  msgid "Operating System"
93
  msgstr "Système d'exploitation"
94
 
95
+ #: lib/about.php:128
96
  msgid "Load Average"
97
  msgstr "Charge moyenne"
98
 
99
+ #: lib/about.php:146
100
  msgid "RAM"
101
  msgstr "RAM"
102
 
103
+ #: lib/about.php:146
104
  msgid "MB free"
105
  msgstr "Mo libres"
106
 
107
+ #: lib/about.php:146
108
  msgid "MB total"
109
  msgstr "Mo total"
110
 
111
+ #: lib/about.php:154
112
  msgid "Processor"
113
  msgid_plural "Processors"
114
  msgstr[0] "Processeur"
115
  msgstr[1] "Processeurs"
116
 
117
+ #: lib/about.php:154
118
  msgid "CPU core:"
119
  msgid_plural "CPU cores:"
120
  msgstr[0] "cœur :"
121
  msgstr[1] "cœurs :"
122
 
123
+ #: lib/about.php:155
124
  msgid "CPU model"
125
  msgstr "Modèle CPU"
126
 
127
+ #: lib/about.php:167
128
  #, php-format
129
  msgid ""
130
  "By joining our NinjaFirewall Referral Program you can earn up to %s for "
134
  "gagner jusqu'à %s pour chaque paiement effectué par un utilisateur qui "
135
  "achète une licence en utilisant votre lien de parrainage personnel."
136
 
137
+ #: lib/about.php:168
138
  #, php-format
139
  msgid ""
140
  "For more info and subscription, please check our <a href=\"%s\">Referral "
143
  "Pour plus d'information, consultez notre page du <a href=\"%s\">Programme de "
144
  "Parrainage</a>."
145
 
146
+ #: lib/about.php:177 lib/help.php:523
147
+ msgid ""
148
+ "Your website can run NinjaFirewall and be compliant with the General Data "
149
+ "Protection Regulation (GDPR). For more info, please visit our blog:"
150
+ msgstr ""
151
+ "NinjaFirewall est conforme à la réglementation générale sur la protection "
152
+ "des données (RGPD). Pour plus d'informations, veuillez visiter notre blog :"
153
+
154
+ #: lib/anti_malware.php:24 ninjafirewall.php:747
155
  msgid "Anti-Malware"
156
  msgstr "Anti-Malware"
157
 
192
  msgid "NinjaFirewall Statistics"
193
  msgstr "Statistiques de NinjaFirewall"
194
 
195
+ #: lib/dashboard_widget.php:54 lib/statistics.php:105 lib/statistics.php:138
196
  msgid "Blocked threats"
197
  msgstr "Menaces bloquées"
198
 
199
+ #: lib/dashboard_widget.php:58 lib/statistics.php:109
200
  msgid "Threats level"
201
  msgstr "Niveau des menaces"
202
 
212
  msgid "Medium:"
213
  msgstr "Moyen :"
214
 
215
+ #: lib/dashboard_widget.php:86
216
+ msgid "View statistics"
217
+ msgstr "Afficher les statistiques"
218
+
219
  #: lib/dashboard_widget.php:86
220
  msgid "View firewall log"
221
  msgstr "Voir le journal du pare-feu"
222
 
223
+ #: lib/event_notifications.php:34 lib/help.php:413 ninjafirewall.php:755
224
  msgid "Event Notifications"
225
  msgstr "Notifications d'Événement"
226
 
227
+ #: lib/event_notifications.php:42 lib/file_check.php:113 lib/file_guard.php:47
228
+ #: lib/firewall_log.php:58 lib/firewall_options.php:42
229
+ #: lib/firewall_policies.php:71 lib/live_log.php:82 lib/login_protection.php:30
230
+ #: lib/network.php:52 lib/rules_update.php:104
231
  msgid "Your changes have been saved."
232
  msgstr "Les modifications ont été enregistrées."
233
 
234
+ #: lib/event_notifications.php:52
235
  msgid "WordPress admin dashboard"
236
  msgstr "Connexion"
237
 
238
+ #: lib/event_notifications.php:55 lib/event_notifications.php:124
239
  msgid "Send me an alert whenever"
240
  msgstr "Envoyer une alerte quand"
241
 
242
+ #: lib/event_notifications.php:57
243
  msgid "An administrator logs in (default)"
244
  msgstr "Un Administrateur se connecte (défaut)"
245
 
246
+ #: lib/event_notifications.php:58
247
  msgid "Someone - user, admin, editor, etc - logs in"
248
  msgstr "Quelqu'un - utilisateur, admin, éditeur etc - se connecte"
249
 
250
+ #: lib/event_notifications.php:59
251
  msgid "No, thanks (not recommended)"
252
  msgstr "Non, merci"
253
 
254
+ #: lib/event_notifications.php:66
255
  msgid "Plugins"
256
  msgstr "Extensions"
257
 
258
+ #: lib/event_notifications.php:69 lib/event_notifications.php:86
259
+ #: lib/event_notifications.php:101
260
  msgid "Send me an alert whenever someone"
261
  msgstr "Envoyer une alerte quand quelqu'un"
262
 
263
+ #: lib/event_notifications.php:71
264
  msgid "Uploads a plugin (default)"
265
  msgstr "Télécharge une extension (défaut)"
266
 
267
+ #: lib/event_notifications.php:72
268
  msgid "Installs a plugin (default)"
269
  msgstr "Installe une extension (défaut)"
270
 
271
+ #: lib/event_notifications.php:73
272
  msgid "Activates a plugin"
273
  msgstr "Active une extension"
274
 
275
+ #: lib/event_notifications.php:74
276
  msgid "Updates a plugin"
277
  msgstr "Met à jour une extension"
278
 
279
+ #: lib/event_notifications.php:75
280
  msgid "Deactivates a plugin (default)"
281
  msgstr "Désactive une extension (défaut)"
282
 
283
+ #: lib/event_notifications.php:76
284
  msgid "Deletes a plugin"
285
  msgstr "Supprime une extension"
286
 
287
+ #: lib/event_notifications.php:83
288
  msgid "Themes"
289
  msgstr "Thèmes"
290
 
291
+ #: lib/event_notifications.php:88
292
  msgid "Uploads a theme (default)"
293
  msgstr "Télécharge un thème (défaut)"
294
 
295
+ #: lib/event_notifications.php:89
296
  msgid "Installs a theme (default)"
297
  msgstr "Installe un thème (défaut)"
298
 
299
+ #: lib/event_notifications.php:90
300
  msgid "Activates a theme"
301
  msgstr "Active un thème"
302
 
303
+ #: lib/event_notifications.php:91
304
  msgid "Deletes a theme"
305
  msgstr "Supprime un thème"
306
 
307
+ #: lib/event_notifications.php:98
308
  msgid "Core"
309
  msgstr "WordPress"
310
 
311
+ #: lib/event_notifications.php:103
312
  msgid "Updates WordPress (default)"
313
  msgstr "Met à jour WordPress (défaut)"
314
 
315
+ #: lib/event_notifications.php:121
316
  msgid "Administrator account"
317
  msgstr "Compte administrateur"
318
 
319
+ #: lib/event_notifications.php:126
320
  msgid ""
321
  "An administrator account is created, modified or deleted in the database "
322
  "(default)"
324
  "Un compte Administrateur est crée, modifié ou supprimé dans la base de "
325
  "données (défaut)"
326
 
327
+ #: lib/event_notifications.php:127
328
  msgid "A user attempts to gain administrative privileges (default)"
329
  msgstr ""
330
  "Un utilisateur a essayé d'élever ses privilèges pour devenir administrateur "
331
  "du blog (défaut)"
332
 
333
+ #: lib/event_notifications.php:134
334
  msgid "Daily report"
335
  msgstr "Rapport quotidien"
336
 
337
+ #: lib/event_notifications.php:137
338
  msgid "Send me a daily activity report"
339
  msgstr "Envoyer un rapport d'activité quotidien"
340
 
341
+ #: lib/event_notifications.php:139 lib/event_notifications.php:151
342
+ #: lib/firewall_options.php:78 lib/firewall_options.php:113
343
+ #: lib/firewall_policies.php:25 lib/login_protection.php:309
344
+ #: lib/login_protection.php:324 lib/login_protection.php:345
345
+ #: lib/login_protection.php:352 lib/network.php:70
346
+ msgid "Yes"
347
+ msgstr "Oui"
348
+
349
+ #: lib/event_notifications.php:139 lib/event_notifications.php:151
350
+ #: lib/firewall_options.php:78 lib/firewall_options.php:113
351
+ #: lib/firewall_policies.php:26 lib/login_protection.php:309
352
+ #: lib/login_protection.php:324 lib/login_protection.php:345
353
+ #: lib/login_protection.php:352 lib/network.php:70
354
+ msgid "No"
355
+ msgstr "Non"
356
+
357
+ #: lib/event_notifications.php:146
358
  msgid "Log"
359
  msgstr "Journal"
360
 
361
+ #: lib/event_notifications.php:149
362
  msgid "Write all events to the firewall log"
363
  msgstr "Enregistrer les événements dans le journal du pare-feu"
364
 
365
+ #: lib/event_notifications.php:163
366
  msgid "PHP backtrace"
367
  msgstr "Pile d'exécution de PHP"
368
 
369
+ #: lib/event_notifications.php:166
370
  msgid "Attach a PHP backtrace to important notifications"
371
  msgstr ""
372
  "Ajouter aux notifications importantes la pile d'exécution de PHP en pièce "
373
  "jointe"
374
 
375
+ #: lib/event_notifications.php:169
376
  msgid "Disable backtrace"
377
  msgstr "Désactiver la pile d'exécution"
378
 
379
+ #: lib/event_notifications.php:170
380
  msgid "Low verbosity"
381
  msgstr "Faible verbosité"
382
 
383
+ #: lib/event_notifications.php:171
384
  msgid "Medium verbosity (default)"
385
  msgstr "Verbosité moyenne (par défaut)"
386
 
387
+ #: lib/event_notifications.php:172
388
  msgid "High verbosity"
389
  msgstr "Verbosité élevée"
390
 
391
+ #: lib/event_notifications.php:174
392
  #, php-format
393
  msgid "<a href=\"%s\">Consult our blog</a> for more info."
394
  msgstr ""
395
  "<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
396
 
397
+ #: lib/event_notifications.php:184 lib/event_notifications.php:214
398
  msgid "Contact email"
399
  msgstr "Adresse e-mail du contact"
400
 
401
+ #: lib/event_notifications.php:187 lib/event_notifications.php:217
402
  msgid "Alerts should be sent to"
403
  msgstr "Envoyer les alertes à"
404
 
405
+ #: lib/event_notifications.php:196 lib/event_notifications.php:222
406
  msgid ""
407
  "Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
408
  "alice@example.org</code>)."
410
  "Plusieurs destinataires doivent être séparés par des virgules (par ex. "
411
  "<code>joe@example.org,alice@example.org</code>)."
412
 
413
+ #: lib/event_notifications.php:219
414
  msgid "Only to me, the Super Admin"
415
  msgstr "Moi uniquement, le Super Admin"
416
 
417
+ #: lib/event_notifications.php:219
418
  msgid "default"
419
  msgstr "défaut"
420
 
421
+ #: lib/event_notifications.php:220
422
  msgid "To the administrator of the site where originated the alert"
423
  msgstr "L'Administrateur du site d’où provient l'alerte"
424
 
425
+ #: lib/event_notifications.php:221
426
  msgid "Other(s):"
427
  msgstr "Autre(s) :"
428
 
429
+ #: lib/event_notifications.php:233
430
  msgid "Save Event Notifications"
431
  msgstr "Sauvegarder les options"
432
 
433
+ #: lib/event_notifications.php:461
434
  msgid "[NinjaFirewall] Daily Activity Report"
435
  msgstr "[NinjaFirewall] Rapport d'activité quotidien"
436
 
437
+ #: lib/event_notifications.php:471
438
  #, php-format
439
  msgid "Daily activity report for: %s"
440
  msgstr "Rapport d'activité quotidien pour : %s"
441
 
442
+ #: lib/event_notifications.php:472
443
  msgid "Date Range Processed: Yesterday"
444
  msgstr "Plage de date traitée : Hier"
445
 
446
+ #: lib/event_notifications.php:474
447
  msgid "Blocked threats:"
448
  msgstr "Menaces bloquées :"
449
 
450
+ #: lib/event_notifications.php:476
451
  msgid "critical:"
452
  msgstr "Critique :"
453
 
454
+ #: lib/event_notifications.php:477
455
  msgid "high:"
456
  msgstr "Élevé :"
457
 
458
+ #: lib/event_notifications.php:478
459
  msgid "medium:"
460
  msgstr "Moyen :"
461
 
462
+ #: lib/event_notifications.php:480
463
  msgid "Blocked brute-force attacks:"
464
  msgstr "Attaques par force brute bloquées :"
465
 
466
+ #: lib/event_notifications.php:481 lib/utils.php:851 lib/utils.php:1030
467
  msgid ""
468
  "This notification can be turned off from NinjaFirewall \"Event Notifications"
469
  "\" page."
471
  "Cette notification peut être désactivée depuis la page \"Notifications "
472
  "d’Événement\" de NinjaFirewall."
473
 
474
+ #: lib/event_notifications.php:485 lib/file_check.php:783
475
+ #: lib/file_check.php:804 lib/firewall_options.php:515 lib/rules_update.php:553
476
+ #: lib/utils.php:746
477
  msgid "Support forum:"
478
  msgstr "Forum :"
479
 
480
+ #: lib/event_notifications.php:488 lib/file_check.php:786
481
+ #: lib/file_check.php:807 lib/firewall_options.php:518 lib/rules_update.php:556
482
+ #: lib/utils.php:235 lib/utils.php:578 lib/utils.php:749 lib/utils.php:856
483
+ #: lib/utils.php:1035 lib/utils.php:1389
484
  #, php-format
485
  msgid ""
486
  "Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
505
  msgid "You must create a snapshot first."
506
  msgstr "Vous devez d'abord créer un instantané."
507
 
508
+ #: lib/file_check.php:104 lib/file_check.php:769
509
  msgid "NinjaFirewall detected that changes were made to your files."
510
  msgstr "NinjaFirewall a détecté des changements dans vos fichiers."
511
 
513
  msgid "No changes detected."
514
  msgstr "Aucun changement n'a été détecté."
515
 
516
+ #: lib/file_check.php:129 lib/help.php:380 ninjafirewall.php:737
517
  msgid "File Check"
518
  msgstr "File Check"
519
 
527
  msgid "Default: %s"
528
  msgstr "Défaut : %s"
529
 
530
+ #: lib/file_check.php:158 lib/file_guard.php:90
531
  msgid "Exclude the following files/folders (optional)"
532
  msgstr "Exclure les fichiers / dossiers suivants (optionnel)"
533
 
534
+ #: lib/file_check.php:159 lib/file_guard.php:91 lib/live_log.php:165
535
  msgid "e.g.,"
536
  msgstr "par ex."
537
 
543
  "Chaîne de caractères complète ou partielle, sensible à la casse. Plusieurs "
544
  "valeurs doivent être séparées par des virgules"
545
 
546
+ #: lib/file_check.php:165
547
  msgid "Do not follow symbolic links (default)"
548
  msgstr "Ne pas suivre les liens symboliques (défaut)"
549
 
550
+ #: lib/file_check.php:171
551
  msgid "Create Snapshot"
552
  msgstr "Créer un Instantané"
553
 
554
+ #: lib/file_check.php:239
 
 
 
 
555
  msgid "Last snapshot"
556
  msgstr "Dernier instantané"
557
 
558
+ #: lib/file_check.php:241
559
  #, php-format
560
  msgid "Created on: %s"
561
  msgstr "Créé le : %s"
562
 
563
+ #: lib/file_check.php:242
564
  #, php-format
565
  msgid "Total files: %s "
566
  msgstr "Nombre de fichiers : %s "
567
 
568
+ #: lib/file_check.php:244
569
  msgid "Directory:"
570
  msgstr "Répertoire&nbsp;:"
571
 
572
+ #: lib/file_check.php:248
573
  msgid "Exclusion:"
574
  msgstr "Exclusion&nbsp;:"
575
 
576
+ #: lib/file_check.php:254
577
  msgid "Symlinks:"
578
  msgstr "Lien symboliques :"
579
 
580
+ #: lib/file_check.php:256
581
  msgid "follow"
582
  msgstr "suivre"
583
 
584
+ #: lib/file_check.php:258
585
  msgid "do not follow"
586
  msgstr "ne pas suivre"
587
 
588
+ #: lib/file_check.php:262
589
  #, php-format
590
  msgid "Processing time: %s seconds"
591
  msgstr "Temps de traitement : %s secondes"
592
 
593
+ #: lib/file_check.php:267
594
  msgid "Download Snapshot"
595
  msgstr "Télécharger l'instantané"
596
 
597
+ #: lib/file_check.php:267
598
  msgid "Delete Snapshot"
599
  msgstr "Supprimer l'instantané"
600
 
601
+ #: lib/file_check.php:272
602
  msgid "Last changes"
603
  msgstr "Dernières modifications"
604
 
605
+ #: lib/file_check.php:279 lib/file_check.php:777
606
  #, php-format
607
  msgid "New files: %s"
608
  msgstr "Nouveaux fichiers : %s"
609
 
610
+ #: lib/file_check.php:280 lib/file_check.php:779
611
  #, php-format
612
  msgid "Deleted files: %s"
613
  msgstr "Fichiers supprimés : %s"
614
 
615
+ #: lib/file_check.php:281 lib/file_check.php:778
616
  #, php-format
617
  msgid "Modified files: %s"
618
  msgstr "Fichiers modifiés : %s"
619
 
620
+ #: lib/file_check.php:285
621
  msgid "View Changes"
622
  msgstr "Voir les Modifications"
623
 
624
+ #: lib/file_check.php:289
625
  msgid "Download Changes"
626
  msgstr "Télécharger les Modifications"
627
 
628
+ #: lib/file_check.php:301
629
  msgid "Click a file to get more info about it."
630
  msgstr "Cliquez sur un fichier pour obtenir plus d'informations à son sujet."
631
 
632
+ #: lib/file_check.php:304
633
  msgid "New files:"
634
  msgstr "Nouveaux fichiers :"
635
 
636
+ #: lib/file_check.php:313 lib/file_check.php:366
637
  msgid "Size"
638
  msgstr "Taille"
639
 
640
+ #: lib/file_check.php:317 lib/file_check.php:371
641
  msgid "Access"
642
  msgstr "Accès"
643
 
644
+ #: lib/file_check.php:321 lib/file_check.php:376
645
  msgid "Uid / Gid"
646
  msgstr "Uid / Gid"
647
 
648
+ #: lib/file_check.php:325 lib/file_check.php:381
649
  msgid "Modify"
650
  msgstr "Modification"
651
 
652
+ #: lib/file_check.php:329 lib/file_check.php:386
653
  msgid "Change"
654
  msgstr "Changement"
655
 
656
+ #: lib/file_check.php:339
657
  msgid "Deleted files:"
658
  msgstr "Fichiers supprimés :"
659
 
660
+ #: lib/file_check.php:352
661
  msgid "Modified files:"
662
  msgstr "Fichiers modifiés :"
663
 
664
+ #: lib/file_check.php:362
665
  msgid "Old"
666
  msgstr "Ancien"
667
 
668
+ #: lib/file_check.php:363
669
  msgid "New"
670
  msgstr "Nouveau"
671
 
672
+ #: lib/file_check.php:402 lib/live_log.php:161
673
  msgid "None"
674
  msgstr "Aucune"
675
 
676
+ #: lib/file_check.php:412
677
  msgid "Scan System For File Changes"
678
  msgstr "Lancer l'analyse des fichiers"
679
 
680
+ #: lib/file_check.php:429
681
  msgid "Options"
682
  msgstr "Options"
683
 
684
+ #: lib/file_check.php:436
685
  #, php-format
686
  msgid ""
687
+ "It seems that %s is set. Ensure you have another way to run WP-Cron, "
688
  "otherwise NinjaFirewall scheduled scans will not work."
689
  msgstr ""
690
  "Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
691
  "File Check ne pourra pas se lancer automatiquement."
692
 
693
+ #: lib/file_check.php:442
694
  msgid "Enable scheduled scans"
695
  msgstr "Lancer File Check automatiquement"
696
 
697
+ #: lib/file_check.php:444
 
 
 
 
 
 
 
 
698
  msgid "No (default)"
699
  msgstr "Non (défaut)"
700
 
701
+ #: lib/file_check.php:445 lib/rules_update.php:156
702
  msgid "Hourly"
703
  msgstr "Une fois par heure"
704
 
705
+ #: lib/file_check.php:446 lib/rules_update.php:157
706
  msgid "Twicedaily"
707
  msgstr "Deux fois par jour"
708
 
709
+ #: lib/file_check.php:447 lib/rules_update.php:158
710
  msgid "Daily"
711
  msgstr "Tous les jours"
712
 
713
+ #: lib/file_check.php:454
714
  #, php-format
715
  msgid ""
716
  "Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
719
  "La prochaine analyse commencera dans %s jour(s), %s heure(s), %s minute(s) "
720
  "et %s seconde(s)."
721
 
722
+ #: lib/file_check.php:461
723
  msgid ""
724
  "The next scheduled scan date is in the past! WordPress wp-cron may not be "
725
  "working or may have been disabled."
727
  "La date de la prochaine analyse est dans le passé&nbsp;! Essayez de "
728
  "recharger cette page, sinon vérifiez que WP-Cron n'a pas été désactivé."
729
 
730
+ #: lib/file_check.php:469
731
  msgid "Scheduled scan report"
732
  msgstr "Rapport d'analyse"
733
 
734
+ #: lib/file_check.php:471
735
  msgid "Send me a report by email only if changes are detected (default)"
736
  msgstr ""
737
  "Envoyez-moi un rapport uniquement si des changements ont été détectés "
738
  "(défaut)"
739
 
740
+ #: lib/file_check.php:472
741
  msgid "Always send me a report by email after a scheduled scan"
742
  msgstr "Envoyez-moi toujours un rapport après une analyse automatique"
743
 
744
+ #: lib/file_check.php:477
745
  msgid "Save Scan Options"
746
  msgstr "Sauvegarder les options"
747
 
748
+ #: lib/file_check.php:489
749
  msgid "Enter the full path to the directory to be scanned."
750
  msgstr "Entrez le chemin complet vers le répertoire à scanner."
751
 
752
+ #: lib/file_check.php:496
753
  #, php-format
754
  msgid "The directory %s does not exist."
755
  msgstr "Le répertoire %s n'existe pas."
756
 
757
+ #: lib/file_check.php:499
758
  #, php-format
759
  msgid "The directory %s is not readable."
760
  msgstr "Le répertoire %s n'est pas lisible."
761
 
762
+ #: lib/file_check.php:540
763
  #, php-format
764
  msgid "Cannot write to %s."
765
  msgstr "Impossible d'écrire dans %s."
766
 
767
+ #: lib/file_check.php:570
768
  #, php-format
769
  msgid "Error : cannot open %s directory."
770
  msgstr "Erreur : impossible d'ouvrir le répertoire %s."
771
 
772
+ #: lib/file_check.php:573
773
  #, php-format
774
  msgid "Error : %s directory is not readable."
775
  msgstr "Erreur : le répertoire %s n'est pas lisible."
776
 
777
+ #: lib/file_check.php:588
778
  #, php-format
779
  msgid "Missing options line %s, please try again."
780
  msgstr "Option manquante (ligne %s). Veuillez essayer à nouveau."
781
 
782
+ #: lib/file_check.php:598
783
  #, php-format
784
  msgid "Cannot create %s."
785
  msgstr "Impossible de créer %s."
786
 
787
+ #: lib/file_check.php:615
788
  msgid "Error reading old snapshot file."
789
  msgstr "Erreur lors de la lecture du fichier de l'ancien instantané."
790
 
791
+ #: lib/file_check.php:626
792
  msgid "Error reading new snapshot file."
793
  msgstr "Erreur lors de la lecture du fichier du nouvel instantané."
794
 
795
+ #: lib/file_check.php:742 ninjafirewall.php:407
796
  msgid "New file"
797
  msgstr "Nouveau fichier"
798
 
799
+ #: lib/file_check.php:743 ninjafirewall.php:408
800
  msgid "Modified file"
801
  msgstr "Fichier modifié"
802
 
803
+ #: lib/file_check.php:744 ninjafirewall.php:409
804
  msgid "Deleted file"
805
  msgstr "Fichier supprimé"
806
 
807
+ #: lib/file_check.php:768
808
  msgid "[NinjaFirewall] Alert: File Check detection"
809
  msgstr "[NinjaFirewall] Alerte: Détection File Check"
810
 
811
+ #: lib/file_check.php:771 lib/file_check.php:773 lib/file_check.php:798
812
+ #: lib/file_check.php:800 lib/rules_update.php:545 lib/rules_update.php:547
813
+ #: lib/utils.php:214 lib/utils.php:839 lib/utils.php:1005 lib/utils.php:1378
814
  msgid "Blog:"
815
  msgstr "Blog :"
816
 
817
+ #: lib/file_check.php:775 lib/file_check.php:802 lib/rules_update.php:550
818
  #, php-format
819
  msgid "Date: %s"
820
  msgstr "Date : %s"
821
 
822
+ #: lib/file_check.php:781
823
  msgid "See attached file for details."
824
  msgstr "Voir le fichier joint pour plus de détails."
825
 
826
+ #: lib/file_check.php:795
827
  msgid "[NinjaFirewall] File Check report"
828
  msgstr "[NinjaFirewall] Rapport de File Check"
829
 
830
+ #: lib/file_check.php:796
831
  msgid "NinjaFirewall did not detect changes in your files."
832
  msgstr "NinjaFirewall n'a pas détecté de changements dans vos fichiers."
833
 
834
+ #: lib/file_guard.php:28 lib/help.php:348 ninjafirewall.php:733
 
 
 
 
835
  msgid "File Guard"
836
  msgstr "File Guard"
837
 
838
+ #: lib/file_guard.php:32
839
  #, php-format
840
  msgid ""
841
  "You are running NinjaFirewall in <i>WordPress WAF</i> mode. The %s feature "
849
  "cette option s'applique à tous les fichiers PHP, vous devez installer "
850
  "NinjaFirewall en mode %s."
851
 
852
+ #: lib/file_guard.php:38
853
  #, php-format
854
  msgid ""
855
  "The cache directory %s is not writable. Please change its permissions (0777 "
858
  "Impossible d'écrire dans le répertoire du cache %s. Assurez-vous que ce "
859
  "répertoire n'est pas en lecture seule."
860
 
861
+ #: lib/file_guard.php:70
862
  msgid "Enable File Guard"
863
  msgstr "Activer File Guard"
864
 
865
+ #: lib/file_guard.php:72 lib/firewall_options.php:64 lib/live_log.php:102
866
+ #: lib/login_protection.php:203 lib/overview.php:123 lib/overview.php:257
867
+ #: lib/rules_update.php:141
868
+ msgid "Enabled"
869
+ msgstr "Activé"
870
+
871
+ #: lib/file_guard.php:72 lib/firewall_options.php:64 lib/live_log.php:102
872
+ #: lib/login_protection.php:203 lib/rules_update.php:141
873
+ msgid "Disabled"
874
+ msgstr "Désactivé"
 
 
 
 
 
 
 
875
 
876
+ #: lib/file_guard.php:82
877
  msgid "Real-time detection"
878
  msgstr "Détection en temps réel"
879
 
880
+ #: lib/file_guard.php:85
881
  #, php-format
882
  msgid ""
883
  "Monitor file activity and send an alert when someone is accessing a PHP "
886
  "Surveiller et alerter par e-mail lorsqu'un visiteur accède à un script PHP "
887
  "qui a été modifié ou créé il y a moins de %s heure(s)."
888
 
889
+ #: lib/file_guard.php:91 lib/live_log.php:165
890
  msgid "or"
891
  msgstr "ou"
892
 
893
+ #: lib/file_guard.php:91
894
  msgid ""
895
  "Full or partial case-sensitive string(s), max. 255 characters. Multiple "
896
  "values must be comma-separated"
898
  "Chaîne de caractères complète ou partielle, sensible à la casse, 255 "
899
  "caractères maximum. Plusieurs valeurs doivent être séparées par des virgules"
900
 
901
+ #: lib/file_guard.php:96
902
  msgid "Save File Guard options"
903
  msgstr "Sauvegarder les options"
904
 
926
  msgid "Your public key has been saved"
927
  msgstr "Votre clé publique a été sauvegardée"
928
 
929
+ #: lib/firewall_log.php:81 lib/help.php:487 lib/wpplus.php:206
930
+ #: ninjafirewall.php:763
931
  msgid "Firewall Log"
932
  msgstr "Journal du Pare-feu"
933
 
934
+ #: lib/firewall_log.php:88
935
  msgid "Error"
936
  msgstr "Erreur"
937
 
938
+ #: lib/firewall_log.php:95
939
  msgid "Note"
940
  msgstr "Notice"
941
 
942
+ #: lib/firewall_log.php:95
943
  #, php-format
944
  msgid "your log has %s lines. I will display the last %s lines only."
945
  msgstr ""
946
  "votre journal contient %s lignes. Seules les %s dernières lignes vont être "
947
  "affichées."
948
 
949
+ #: lib/firewall_log.php:99
950
  msgid "Viewing:"
951
  msgstr "Journal :"
952
 
953
+ #: lib/firewall_log.php:106 lib/firewall_options.php:193
954
  msgid "bytes"
955
  msgstr "octets"
956
 
957
+ #: lib/firewall_log.php:147 lib/firewall_log.php:308
958
  msgid "The selected log is empty."
959
  msgstr "Le journal sélectionné est vide."
960
 
961
+ #: lib/firewall_log.php:152
962
  msgid ""
963
  "The log shows all threats that were blocked by the firewall, unless stated "
964
  "otherwise. It is rotated monthly."
966
  "Le journal affiche toutes les menaces bloquées par le pare-feu, sauf "
967
  "indication contraire. La rotation du journal est mensuelle."
968
 
969
+ #: lib/firewall_log.php:165
970
  msgid "Log Options"
971
  msgstr "Options du Journal"
972
 
973
+ #: lib/firewall_log.php:169 lib/help.php:500
974
  msgid "Auto-delete log"
975
  msgstr "Suppression automatique des journaux"
976
 
977
+ #: lib/firewall_log.php:173
978
  #, php-format
979
  msgid "Automatically delete logs older than %s days"
980
  msgstr "Supprimer automatiquement les journaux vieux de plus de %s jours"
981
 
982
+ #: lib/firewall_log.php:175
983
  msgid "Set this option to 0 to disable it."
984
  msgstr "Entrez \"0\" pour désactiver cette option."
985
 
986
+ #: lib/firewall_log.php:181
987
  msgid "Save Log Options"
988
  msgstr "Sauvegarder les options"
989
 
990
+ #: lib/firewall_log.php:197 lib/help.php:508 lib/overview.php:247
991
+ #: lib/wpplus.php:170
992
  msgid "Centralized Logging"
993
  msgstr "Centralisation des Logs"
994
 
995
+ #: lib/firewall_log.php:200
996
  msgid "Enter your public key (optional)"
997
  msgstr "Entrez votre clé publique (optionnel)"
998
 
999
+ #: lib/firewall_log.php:203
1000
  #, php-format
1001
  msgid ""
1002
  "<a href=\"%s\">Consult our blog</a> if you want to enable centralized "
1005
  "Veuillez <a href=\"%s\">consulter notre blog</a> afin d'activer la "
1006
  "Centralisation des Logs."
1007
 
1008
+ #: lib/firewall_log.php:210
1009
  msgid "Save Public Key"
1010
  msgstr "Sauvegarder la clé publique"
1011
 
1012
+ #: lib/firewall_log.php:212
1013
  msgid "Delete Public Key"
1014
  msgstr "Supprimer la clé publique"
1015
 
1016
+ #: lib/firewall_log.php:287
 
 
 
 
1017
  msgid "The requested log does not exist."
1018
  msgstr "Le journal demandé n'existe pas."
1019
 
1020
+ #: lib/firewall_log.php:294
1021
  msgid "Unable to open the log for read operation."
1022
  msgstr "Impossible de lire le journal."
1023
 
1024
+ #: lib/firewall_options.php:29 ninjafirewall.php:725
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1025
  msgid "Firewall Options"
1026
  msgstr "Options du Pare-feu"
1027
 
1028
+ #: lib/firewall_options.php:62 lib/help.php:145
1029
  msgid "Firewall protection"
1030
  msgstr "Pare-feu"
1031
 
1032
+ #: lib/firewall_options.php:76 lib/help.php:153 lib/overview.php:152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1033
  msgid "Debugging mode"
1034
  msgstr "Mode débogage"
1035
 
1036
+ #: lib/firewall_options.php:89
 
 
 
 
1037
  msgid "HTTP error code to return"
1038
  msgstr "Code HTTP à retourner"
1039
 
1040
+ #: lib/firewall_options.php:92
1041
  msgid "400 Bad Request"
1042
  msgstr "400 Bad Request"
1043
 
1044
+ #: lib/firewall_options.php:93
1045
  msgid "403 Forbidden (default)"
1046
  msgstr "403 Forbidden (défaut)"
1047
 
1048
+ #: lib/firewall_options.php:94
1049
  msgid "404 Not Found"
1050
  msgstr "404 Not Found"
1051
 
1052
+ #: lib/firewall_options.php:95
1053
  msgid "406 Not Acceptable"
1054
  msgstr "406 Not Acceptable"
1055
 
1056
+ #: lib/firewall_options.php:96
1057
  msgid "418 I'm a teapot"
1058
  msgstr "418 I'm a teapot"
1059
 
1060
+ #: lib/firewall_options.php:97
1061
  msgid "500 Internal Server Error"
1062
  msgstr "500 Internal Server Error"
1063
 
1064
+ #: lib/firewall_options.php:98
1065
  msgid "503 Service Unavailable"
1066
  msgstr "503 Service Unavailable"
1067
 
1068
+ #: lib/firewall_options.php:111 lib/help.php:160
1069
  msgid "IP anonymization"
1070
  msgstr "Anonymisation IP"
1071
 
1072
+ #: lib/firewall_options.php:114
 
 
 
 
1073
  #, php-format
1074
  msgid ""
1075
  "Does not apply to private IP addresses and the <a href=\"%s\">Login "
1078
  "Ne s'applique pas aux adresses IP privées, ni à la <a href=\"%s\">Page de "
1079
  "Connexion</a>."
1080
 
1081
+ #: lib/firewall_options.php:128
1082
  msgid "Blocked user message"
1083
  msgstr "Message pour les utilisateurs bloqués"
1084
 
1085
+ #: lib/firewall_options.php:131
1086
+ msgid "HTML code, including CSS and JS, is allowed."
1087
+ msgstr "Le code HTML, y compris CSS et JS, est autorisé."
1088
 
1089
+ #: lib/firewall_options.php:133
1090
  msgid "Default message"
1091
  msgstr "Message par défaut"
1092
 
1093
+ #: lib/firewall_options.php:141
1094
  msgid "Firewall configuration"
1095
  msgstr "Configuration du pare-feu"
1096
 
1097
+ #: lib/firewall_options.php:145
1098
  msgid "Export configuration"
1099
  msgstr "Exporter la configuration"
1100
 
1101
+ #: lib/firewall_options.php:147
1102
  msgid "Download"
1103
  msgstr "Télécharger"
1104
 
1105
+ #: lib/firewall_options.php:148
1106
  msgid "File Check configuration will not be exported/imported."
1107
  msgstr ""
1108
  "La configuration de \"File Check\" ne peut pas être importée ou exportée."
1109
 
1110
+ #: lib/firewall_options.php:152
1111
  msgid "Import configuration"
1112
  msgstr "Importer la configuration"
1113
 
1114
+ #: lib/firewall_options.php:157
1115
  #, php-format
1116
  msgid "Imported configuration must match plugin version %s."
1117
  msgstr "La fichier importé doit être compatible avec la version %s."
1118
 
1119
+ #: lib/firewall_options.php:158
1120
  msgid "It will override all your current firewall options and rules."
1121
  msgstr "Il remplacera toutes vos options et règles de pare-feu en vigueur."
1122
 
1123
+ #: lib/firewall_options.php:163 lib/help.php:186
1124
  msgid "Configuration backup"
1125
  msgstr "Sauvegarde de la configuration"
1126
 
1127
+ #: lib/firewall_options.php:169 lib/firewall_options.php:198
1128
  msgid "Save Firewall Options"
1129
  msgstr "Sauvegarder les options"
1130
 
1131
+ #: lib/firewall_options.php:189
1132
  msgid "Available backup files"
1133
  msgstr "Fichiers de sauvegarde disponibles"
1134
 
1135
+ #: lib/firewall_options.php:198
1136
  #, php-format
1137
  msgid ""
1138
  "To restore NinjaFirewall's configuration to an earlier date, select it in "
1141
  "Pour restaurer la configuration de NinjaFirewall à une date antérieure, "
1142
  "sélectionnez-la dans la liste et cliquez sur '%s'."
1143
 
1144
+ #: lib/firewall_options.php:202
1145
  msgid "There are no backup available yet, check back later."
1146
  msgstr "Il n'y a pas encore de sauvegarde disponible, revenez plus tard."
1147
 
1148
+ #: lib/firewall_options.php:340
1149
  #, php-format
1150
  msgid "Uploaded file is either corrupted or its format is not supported (#%s)"
1151
  msgstr ""
1152
  "Le fichier importé est illisible ou son format n'est pas supporté (#%s)"
1153
 
1154
+ #: lib/firewall_options.php:369
1155
  msgid "The imported file is not compatible with that version of NinjaFirewall"
1156
  msgstr ""
1157
  "Le fichier importé n'est pas compatible avec cette version de NinjaFirewall"
1158
 
1159
+ #: lib/firewall_options.php:489
1160
  msgid "[NinjaFirewall] Alert: Firewall is disabled"
1161
  msgstr "[NinjaFirewall] Alerte : Le pare-feu a été désactivé"
1162
 
1163
+ #: lib/firewall_options.php:491 lib/firewall_options.php:493 lib/utils.php:734
1164
+ #: lib/utils.php:736
1165
  msgid "-Blog :"
1166
  msgstr "- Blog :"
1167
 
1168
+ #: lib/firewall_options.php:497
1169
  msgid "Someone disabled NinjaFirewall from your WordPress admin dashboard:"
1170
  msgstr ""
1171
  "Quelqu'un a désactivé NinjaFirewall depuis votre Tableau de bord de "
1172
  "WordPress :"
1173
 
1174
+ #: lib/firewall_options.php:500
1175
  msgid ""
1176
  "NinjaFirewall is disabled because someone enabled debugging mode from your "
1177
  "WordPress admin dashboard:"
1179
  "NinjaFirewall est désactivé car quelqu'un activé son \"Mode débogage\" "
1180
  "depuis votre tableau de bord de WordPress :"
1181
 
1182
+ #: lib/firewall_options.php:503
1183
  msgid "[NinjaFirewall] Alert: Firewall override settings"
1184
  msgstr "[NinjaFirewall] Alerte : Modification des paramètres du pare-feu"
1185
 
1186
+ #: lib/firewall_options.php:504
1187
  msgid ""
1188
  "Someone imported a new configuration which overrode the firewall settings:"
1189
  msgstr ""
1190
  "Quelqu'un a importé une nouvelle configuration qui a modifié tous les "
1191
  "paramètres du pare-feu :"
1192
 
1193
+ #: lib/firewall_options.php:510 lib/utils.php:741
1194
  msgid "-User :"
1195
  msgstr "- Nom :"
1196
 
1197
+ #: lib/firewall_options.php:511 lib/utils.php:742
1198
  msgid "-IP :"
1199
  msgstr "- IP :"
1200
 
1201
+ #: lib/firewall_options.php:512 lib/utils.php:743
1202
  msgid "-Date :"
1203
  msgstr "- Date :"
1204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1205
  #: lib/firewall_policies.php:29
1206
  #, php-format
1207
  msgid ""
1210
  "Cette option ne peut être activée que lorsque NinjaFirewall fonctionne en "
1211
  "mode %s."
1212
 
1213
+ #: lib/firewall_policies.php:62 lib/help.php:231 ninjafirewall.php:729
1214
+ msgid "Firewall Policies"
1215
+ msgstr "Politiques du Pare-feu"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1216
 
1217
+ #: lib/firewall_policies.php:74
1218
  msgid "Default values were restored."
1219
  msgstr "Les valeurs par défaut ont été restaurées."
1220
 
1221
+ #: lib/firewall_policies.php:76
1222
  msgid "No action taken."
1223
  msgstr "Aucune mesure prise."
1224
 
1225
+ #: lib/firewall_policies.php:85 lib/help.php:236
1226
  msgid "Basic Policies"
1227
  msgstr "Politiques de base"
1228
 
1229
+ #: lib/firewall_policies.php:86 lib/help.php:262
1230
  msgid "Intermediate Policies"
1231
  msgstr "Politiques intermédiaires"
1232
 
1233
+ #: lib/firewall_policies.php:87 lib/help.php:293
1234
  msgid "Advanced Policies"
1235
  msgstr "Politiques avancées"
1236
 
1237
+ #: lib/firewall_policies.php:111
1238
  msgid "Enable NinjaFirewall for"
1239
  msgstr "Activer NinjaFirewall pour le trafic"
1240
 
1241
+ #: lib/firewall_policies.php:113 lib/live_log.php:182
1242
  msgid "HTTP and HTTPS traffic (default)"
1243
  msgstr "Trafic HTTP et HTTPS (défaut)"
1244
 
1245
+ #: lib/firewall_policies.php:114 lib/live_log.php:183
1246
  msgid "HTTP traffic only"
1247
  msgstr "Trafic HTTP uniquement"
1248
 
1249
+ #: lib/firewall_policies.php:115 lib/live_log.php:184
1250
  msgid "HTTPS traffic only"
1251
  msgstr "Trafic HTTPS uniquement"
1252
 
1253
+ #: lib/firewall_policies.php:141 lib/help.php:241
1254
  msgid "Uploads"
1255
  msgstr "Téléchargements"
1256
 
1257
+ #: lib/firewall_policies.php:144
1258
  msgid "File Uploads"
1259
  msgstr "Autoriser les téléchargements (uploads)"
1260
 
1261
+ #: lib/firewall_policies.php:147
1262
  msgid "Allow uploads"
1263
  msgstr "Autoriser"
1264
 
1265
+ #: lib/firewall_policies.php:147
1266
+ msgid "(default)"
1267
+ msgstr "(défaut)"
1268
+
1269
+ #: lib/firewall_policies.php:148
1270
  msgid "Disallow uploads"
1271
  msgstr "Interdire"
1272
 
1273
+ #: lib/firewall_policies.php:152
1274
  msgid "Sanitise filenames"
1275
  msgstr "Nettoyer le nom des fichiers"
1276
 
1277
+ #: lib/firewall_policies.php:152
1278
  msgid "substitution character:"
1279
  msgstr "caractère de substitution&nbsp;:"
1280
 
1281
+ #: lib/firewall_policies.php:276
1282
  msgid "Block direct access to any PHP file located in one of these directories"
1283
  msgstr ""
1284
  "Bloquer l'accès direct à un fichier PHP situé dans l'un de ces répertoires"
1285
 
1286
+ #: lib/firewall_policies.php:306
1287
  msgid ""
1288
  "NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
1289
  "this option is enabled."
1291
  "NinjaFirewall ne bloquera pas l'accès à l'éditeur WYSIWYG TinyMCE même si "
1292
  "cette option est activée."
1293
 
1294
+ #: lib/firewall_policies.php:321
1295
  msgid ""
1296
  "Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
1297
  "by your visitors, we recommend to enable this option."
1300
  "pouvant être consultés par vos visiteurs, nous vous recommandons d'activer "
1301
  "cette option."
1302
 
1303
+ #: lib/firewall_policies.php:330
 
 
 
 
 
 
 
 
 
1304
  msgid "General"
1305
  msgstr "Général"
1306
 
1307
+ #: lib/firewall_policies.php:332 lib/help.php:247
1308
  msgid "Block attempts to modify important WordPress settings"
1309
  msgstr ""
1310
  "Bloquer les tentatives de modification des paramètres importants de WordPress"
1311
 
1312
+ #: lib/firewall_policies.php:333 lib/help.php:248
1313
  msgid "Block user accounts creation"
1314
  msgstr "Bloquer la création de comptes utilisateur"
1315
 
1316
+ #: lib/firewall_policies.php:334
1317
  msgid "Do not enable this policy if you allow user registration."
1318
  msgstr ""
1319
  "N'activez pas cette option si vous autorisez l'inscription des utilisateurs."
1320
 
1321
+ #: lib/firewall_policies.php:346 lib/help.php:249
1322
  msgid "WordPress AJAX"
1323
  msgstr "WordPress AJAX"
1324
 
1325
+ #: lib/firewall_policies.php:348
1326
  msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
1327
  msgstr ""
1328
  "Proteger <code>admin-ajax.php</code> contre les bots et scanners malveillants"
1329
 
1330
+ #: lib/firewall_policies.php:349
1331
+ #, php-format
1332
+ msgid ""
1333
+ "Your server IP (%s), localhost and private IP addresses will not be affected "
1334
+ "by this policy."
1335
+ msgstr ""
1336
+ "L'adresse IP de votre serveur (%s), localhost et toute adresse IP privée ne "
1337
+ "seront pas affectées par cette politique."
1338
+
1339
+ #: lib/firewall_policies.php:354
1340
  msgid "Protect against username enumeration"
1341
  msgstr "Protéger contre l'énumération des comptes utilisateurs"
1342
 
1343
+ #: lib/firewall_policies.php:356
1344
  msgid "Through the author archives"
1345
  msgstr "Via la page d'archive d'un auteur"
1346
 
1347
+ #: lib/firewall_policies.php:357
1348
  msgid "Through the login page"
1349
  msgstr "Via la page de connexion"
1350
 
1351
+ #: lib/firewall_policies.php:358
1352
  msgid "Through the WordPress REST API"
1353
  msgstr "Via l'API REST de WordPress"
1354
 
1355
+ #: lib/firewall_policies.php:363
 
 
 
 
1356
  msgid "WordPress REST API"
1357
  msgstr "API REST de WordPress"
1358
 
1359
+ #: lib/firewall_policies.php:365 lib/firewall_policies.php:371
1360
  msgid "Block any access to the API"
1361
  msgstr "Bloquer tout accès à l'API"
1362
 
1363
+ #: lib/firewall_policies.php:369
1364
  msgid "WordPress XML-RPC API"
1365
  msgstr "API XML-RPC de WordPress"
1366
 
1367
+ #: lib/firewall_policies.php:372
1368
  msgid "Block <code>system.multicall</code> method"
1369
  msgstr "Bloquer la méthode <code>system.multicall</code>"
1370
 
1371
+ #: lib/firewall_policies.php:373
1372
  msgid "Block Pingbacks"
1373
  msgstr "Bloquer les Pingbacks"
1374
 
1375
+ #: lib/firewall_policies.php:375
1376
  msgid ""
1377
  "Disabling access to the REST or XML-RPC API may break some functionality on "
1378
+ "your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact "
1379
+ "Form 7 etc)."
1380
  msgstr ""
1381
  "L'activation de ces options peut rompre certaines fonctionnalités de votre "
1382
+ "blog, ses thèmes ou ses extensions (ex.: Éditeur Gutenberg, Jetpack, Contact "
1383
+ "Form 7 etc)."
1384
 
1385
+ #: lib/firewall_policies.php:380
1386
  msgid "Block <code>POST</code> requests in the themes folder"
1387
  msgstr "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes"
1388
 
1389
+ #: lib/firewall_policies.php:390
1390
  msgid "Force SSL for admin and logins"
1391
  msgstr "Forcer la connexion sécurisée au Tableau de bord"
1392
 
1393
+ #: lib/firewall_policies.php:396
1394
  msgid "Disable the plugin and theme editor"
1395
  msgstr "Désactiver l’éditeur de thème et d'extension"
1396
 
1397
+ #: lib/firewall_policies.php:402
1398
  msgid "Disable plugin and theme update/installation"
1399
  msgstr "Désactiver l'installation et mise à jour des thèmes et extensions"
1400
 
1401
+ #: lib/firewall_policies.php:408
1402
  msgid "Disable the fatal error handler"
1403
  msgstr "Désactiver le gestionnaire d'erreurs fatales"
1404
 
1405
+ #: lib/firewall_policies.php:430 lib/help.php:334
1406
  msgid "Users Whitelist"
1407
  msgstr "Liste Blanche"
1408
 
1409
+ #: lib/firewall_policies.php:432
1410
  msgid "Add the Administrator to the whitelist (default)."
1411
  msgstr "Ajouter l'Administrateur à la liste blanche (défaut)."
1412
 
1413
+ #: lib/firewall_policies.php:433
1414
  msgid "Add all logged in users to the whitelist."
1415
  msgstr "Ajouter tous les utilisateurs connectés à la liste blanche."
1416
 
1417
+ #: lib/firewall_policies.php:434
1418
  msgid "Disable users whitelist."
1419
  msgstr "Désactiver la liste blanche."
1420
 
1421
+ #: lib/firewall_policies.php:435
1422
  msgid ""
1423
  "Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
1424
  "<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
1430
  "<code>WP_DISABLE_FATAL_ERROR_HANDLER</code> qui, si elles sont activées, "
1431
  "seront toujours appliquées."
1432
 
1433
+ #: lib/firewall_policies.php:460 lib/help.php:264
1434
  msgid "HTTP GET variable"
1435
  msgstr "Variable HTTP GET"
1436
 
1437
+ #: lib/firewall_policies.php:463
1438
  msgid "Scan <code>GET</code> variable"
1439
  msgstr "Filtrer la variable <code>GET</code>"
1440
 
1441
+ #: lib/firewall_policies.php:469
1442
  msgid "Sanitise <code>GET</code> variable"
1443
  msgstr "Nettoyer la variable <code>GET</code>"
1444
 
1445
+ #: lib/firewall_policies.php:495 lib/help.php:267
1446
  msgid "HTTP POST variable"
1447
  msgstr "Variable HTTP POST"
1448
 
1449
+ #: lib/firewall_policies.php:498
1450
  msgid "Scan <code>POST</code> variable"
1451
  msgstr "Filtrer la variable <code>POST</code>"
1452
 
1453
+ #: lib/firewall_policies.php:504
1454
  msgid "Sanitise <code>POST</code> variable"
1455
  msgstr "Nettoyer la variable <code>POST</code>"
1456
 
1457
+ #: lib/firewall_policies.php:507 lib/firewall_policies.php:532
1458
  msgid "Do not enable this option unless you know what you are doing!"
1459
  msgstr ""
1460
  "N'activez pas cette option si vous n'êtes pas sûr de ce que vous "
1461
  "faites&nbsp;!"
1462
 
1463
+ #: lib/firewall_policies.php:511
1464
  msgid "Decode Base64-encoded <code>POST</code> variable"
1465
  msgstr ""
1466
  "Décoder les chaîne encodées en Base64 dans la variable <code>POST</code>"
1467
 
1468
+ #: lib/firewall_policies.php:526 lib/help.php:271
1469
  msgid "HTTP REQUEST variable"
1470
  msgstr "Variable HTTP REQUEST"
1471
 
1472
+ #: lib/firewall_policies.php:529
1473
  msgid "Sanitise <code>REQUEST</code> variable"
1474
  msgstr "Nettoyer la variable <code>REQUEST</code>"
1475
 
1476
+ #: lib/firewall_policies.php:551 lib/help.php:274
1477
  msgid "Cookies"
1478
  msgstr "Cookies"
1479
 
1480
+ #: lib/firewall_policies.php:554
1481
  msgid "Scan cookies"
1482
  msgstr "Filtrer les cookies"
1483
 
1484
+ #: lib/firewall_policies.php:560
1485
  msgid "Sanitise cookies"
1486
  msgstr "Nettoyer les cookies"
1487
 
1488
+ #: lib/firewall_policies.php:586 lib/help.php:277
1489
  msgid "HTTP_USER_AGENT server variable"
1490
  msgstr "Variable HTTP_USER_AGENT"
1491
 
1492
+ #: lib/firewall_policies.php:589
1493
  msgid "Scan <code>HTTP_USER_AGENT</code>"
1494
  msgstr "Filtrer <code>HTTP_USER_AGENT</code>"
1495
 
1496
+ #: lib/firewall_policies.php:595
1497
  msgid "Sanitise <code>HTTP_USER_AGENT</code>"
1498
  msgstr "Nettoyer <code>HTTP_USER_AGENT</code>"
1499
 
1500
+ #: lib/firewall_policies.php:601
1501
  msgid "Block suspicious bots/scanners"
1502
  msgstr "Bloquer les requêtes provenant de bots/scanners malveillants"
1503
 
1504
+ #: lib/firewall_policies.php:627 lib/help.php:281
1505
  msgid "HTTP_REFERER server variable"
1506
  msgstr "Variable HTTP_REFERER"
1507
 
1508
+ #: lib/firewall_policies.php:630
1509
  msgid "Scan <code>HTTP_REFERER</code>"
1510
  msgstr "Filtrer <code>HTTP_REFERER</code>"
1511
 
1512
+ #: lib/firewall_policies.php:636
1513
  msgid "Sanitise <code>HTTP_REFERER</code>"
1514
  msgstr "Nettoyer <code>HTTP_REFERER</code>"
1515
 
1516
+ #: lib/firewall_policies.php:642
1517
  msgid ""
1518
  "Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
1519
  "code> header"
1521
  "Bloquer les requêtes <code>POST</code> qui n'ont pas d'en-tête "
1522
  "<code>HTTP_REFERER</code>"
1523
 
1524
+ #: lib/firewall_policies.php:645
1525
  msgid ""
1526
  "Keep this option disabled if you are using scripts like Paypal IPN, "
1527
  "WordPress WP-Cron etc"
1529
  "N'activez pas cette option si vous utilisez des scripts comme Paypal IPN, "
1530
  "WordPress WP-Cron etc"
1531
 
1532
+ #: lib/firewall_policies.php:672
1533
  msgid "Block localhost IP in <code>GET/POST</code> request"
1534
  msgstr "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost"
1535
 
1536
+ #: lib/firewall_policies.php:678
1537
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
1538
  msgstr ""
1539
  "Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
1540
  "IP"
1541
 
1542
+ #: lib/firewall_policies.php:684
1543
  msgid "Scan traffic coming from localhost and private IP address spaces"
1544
  msgstr "Filtrer les connexions provenant de localhost et d'adresses IP privées"
1545
 
1546
+ #: lib/firewall_policies.php:703
1547
  #, php-format
1548
  msgid ""
1549
+ "The \"HTTP response headers\" options below are disabled because the %s PHP "
1550
+ "function is not available on your server."
1551
  msgstr ""
1552
+ "Les politiques \"En-têtes de réponse HTTP\" ci-dessous sont désactivées car "
1553
+ "la fonction PHP %s n'est pas disponible sur votre serveur."
1554
 
1555
+ #: lib/firewall_policies.php:723 lib/help.php:295
1556
  msgid "HTTP response headers"
1557
  msgstr "En-têtes de réponse HTTP"
1558
 
1559
+ #: lib/firewall_policies.php:731
1560
  #, php-format
1561
  msgid "Set %s to protect against MIME type confusion attacks"
1562
  msgstr ""
1563
  "Activer %s pour protéger contre les attaques basées sur la confusion du type "
1564
  "MIME"
1565
 
1566
+ #: lib/firewall_policies.php:737
1567
  #, php-format
1568
  msgid "Set %s to protect against clickjacking attempts"
1569
  msgstr ""
1570
  "Activer %s pour protéger contre les attaques de détournement de clic "
1571
  "(clickjacking)"
1572
 
1573
+ #: lib/firewall_policies.php:744
1574
+ msgid ""
1575
+ "Setting this option to <code>DENY</code> may break some functionality on "
1576
+ "your blog, its themes or plugins."
1577
+ msgstr ""
1578
+ "Activer cette fonction avec <code>DENY</code> pourrait bloquer certaines "
1579
+ "fonctionnalités de votre blog, ses thèmes ou ses extensions."
1580
+
1581
+ #: lib/firewall_policies.php:749
1582
  #, php-format
1583
  msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
1584
  msgstr "Activer %s (IE/Edge, Opera, Chrome et Safari)"
1585
 
1586
+ #: lib/firewall_policies.php:753 lib/firewall_policies.php:754
1587
+ #: lib/firewall_policies.php:755
1588
  #, php-format
1589
  msgid "Set to %s"
1590
  msgstr "Régler sur %s"
1591
 
1592
+ #: lib/firewall_policies.php:760
1593
  #, php-format
1594
  msgid "Force %s flag on all cookies to mitigate XSS attacks"
1595
  msgstr ""
1596
  "Activer la propriété %s pour tous les cookies afin d'atténuer les menaces "
1597
  "XSS qui génèrent des vols de cookies"
1598
 
1599
+ #: lib/firewall_policies.php:763
1600
  msgid ""
1601
  "If your PHP scripts use cookies that need to be accessed from JavaScript, "
1602
+ "you should not enable this option."
1603
  msgstr ""
1604
  "Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
1605
+ "partir de JavaScript, vous ne devriez pas activer cette option."
1606
 
1607
+ #: lib/firewall_policies.php:772
1608
  msgid ""
1609
  "HSTS headers can only be set when you are accessing your site over HTTPS."
1610
  msgstr ""
1611
  "Les en-têtes HSTS ne peuvent être utilisés que lorsque vous vous connectez à "
1612
  "votre site en HTTPS (connexion sécurisée)."
1613
 
1614
+ #: lib/firewall_policies.php:780
1615
  #, php-format
1616
  msgid "Set %s (HSTS) to enforce secure connections to the server"
1617
  msgstr ""
1618
  "Activer %s (HSTS) pour forcer les connexions sécurisées vers le serveur"
1619
 
1620
+ #: lib/firewall_policies.php:784
1621
+ msgid "Set \"max-age\" to 0"
1622
+ msgstr "Régler \"max-age\" à 0"
1623
+
1624
+ #: lib/firewall_policies.php:785
1625
  msgid "1 month"
1626
  msgstr "1 mois"
1627
 
1628
+ #: lib/firewall_policies.php:786
1629
  msgid "6 months"
1630
  msgstr "6 mois"
1631
 
1632
+ #: lib/firewall_policies.php:787
1633
  msgid "1 year"
1634
  msgstr "1 année"
1635
 
1636
+ #: lib/firewall_policies.php:789
1637
  msgid "Apply to subdomains"
1638
  msgstr "Appliquer aux sous-domaines"
1639
 
1640
+ #: lib/firewall_policies.php:813
 
 
 
 
1641
  #, php-format
1642
  msgid "Set %s for the website frontend"
1643
  msgstr "Activer %s pour le site"
1644
 
1645
+ #: lib/firewall_policies.php:818
1646
  msgid "This CSP header will apply to the website frontend only."
1647
  msgstr "Cet en-tête CSP ne s'appliquera qu'au site."
1648
 
1649
+ #: lib/firewall_policies.php:822
1650
  #, php-format
1651
  msgid "Set %s for the WordPress admin dashboard"
1652
  msgstr "Activer %s pour la console d'administration de WordPress"
1653
 
1654
+ #: lib/firewall_policies.php:827
1655
  msgid "This CSP header will apply to the WordPress admin dashboard only."
1656
  msgstr ""
1657
  "Cet en-tête CSP ne s'appliquera qu'à la console d'administration de "
1658
  "WordPress."
1659
 
1660
+ #: lib/firewall_policies.php:843
1661
  #, php-format
1662
  msgid "Set %s (Chrome, Opera and Firefox browsers)"
1663
  msgstr "Activer %s (Chrome, Opera et Firefox)"
1664
 
1665
+ #: lib/firewall_policies.php:893
1666
  msgid ""
1667
  "Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
1668
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
1671
  "<code>GET</code>, <code>POST</code>, <code>HTTP_USER_AGENT</code>, "
1672
  "<code>HTTP_REFERER</code> et les cookies"
1673
 
1674
+ #: lib/firewall_policies.php:932
1675
  msgid "Block serialized PHP objects in the following global variables"
1676
  msgstr ""
1677
  "Bloquer les objets PHP sérialisés dans les variables globales suivantes"
1678
 
1679
+ #: lib/firewall_policies.php:942
1680
  msgid "Hide PHP notice and error messages"
1681
  msgstr "Masquer les messages d'erreur de PHP"
1682
 
1683
+ #: lib/firewall_policies.php:948
1684
  msgid "Sanitise <code>PHP_SELF</code>"
1685
  msgstr "Nettoyer <code>PHP_SELF</code>"
1686
 
1687
+ #: lib/firewall_policies.php:954
1688
  msgid "Sanitise <code>PATH_TRANSLATED</code>"
1689
  msgstr "Nettoyer <code>PATH_TRANSLATED</code>"
1690
 
1691
+ #: lib/firewall_policies.php:960
1692
  msgid "Sanitise <code>PATH_INFO</code>"
1693
  msgstr "Nettoyer <code>PATH_INFO</code>"
1694
 
1695
+ #: lib/firewall_policies.php:974
1696
  msgid "This option is not compatible with your actual configuration."
1697
  msgstr ""
1698
  "Cette option n'est pas compatible avec la configuration de votre serveur."
1699
 
1700
+ #: lib/firewall_policies.php:996 lib/help.php:325
1701
  msgid "Various"
1702
  msgstr "Divers"
1703
 
1704
+ #: lib/firewall_policies.php:999
1705
  msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
1706
  msgstr ""
1707
  "Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code>"
1708
 
1709
+ #: lib/firewall_policies.php:1006
1710
  msgid "Block ASCII character 0x00 (NULL byte)"
1711
  msgstr "Bloquer le caractère ASCII 0x00 (NULL byte)"
1712
 
1713
+ #: lib/firewall_policies.php:1012
1714
  msgid "Block ASCII control characters 1 to 8 and 14 to 31"
1715
  msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31"
1716
 
1717
+ #: lib/firewall_policies.php:1025
1718
  msgid "Save Firewall Policies"
1719
  msgstr "Sauvegarder les options"
1720
 
1721
+ #: lib/firewall_policies.php:1027
1722
  msgid "Restore Default Values"
1723
  msgstr "Rétablir les valeurs par défaut"
1724
 
1725
+ #: lib/help.php:37 ninjafirewall.php:715
1726
  msgid "Overview"
1727
  msgstr "Aperçu"
1728
 
1729
+ #: lib/help.php:41
1730
+ msgid "Quick Start, FAQ, Support and Troubleshooting Guide."
1731
+ msgstr "Guide d'Utilisation, d'Installation et de Dépannage."
1732
+
1733
+ #: lib/help.php:42
1734
  msgid ""
1735
+ "Below are some helpful info and links you may consider reading before using "
1736
+ "NinjaFirewall:"
 
1737
  msgstr ""
1738
+ "Voici quelques informations et liens qui pourraient vous être utiles (en "
1739
+ "langue anglaise) :"
 
 
 
 
 
 
1740
 
1741
+ #: lib/help.php:44
1742
+ msgid "Must Read"
1743
+ msgstr "A lire"
1744
 
1745
+ #: lib/help.php:46
1746
+ msgid "Securing WordPress with NinjaFirewall: A step by step tutorial."
1747
+ msgstr ""
1748
+ "Sécurisation de WordPress avec NinjaFirewall. Un tutoriel étape par étape."
1749
 
1750
  #: lib/help.php:47
1751
+ msgid "An introduction to NinjaFirewall filtering engine."
1752
+ msgstr "Présentation du moteur de filtrage de NinjaFirewall."
1753
 
1754
  #: lib/help.php:48
1755
+ msgid "NinjaFirewall Full WAF vs WordPress WAF mode."
1756
+ msgstr "Différences entre les modes Full WAF et WordPress WAF."
1757
+
1758
+ #: lib/help.php:49
1759
+ msgid "Testing NinjaFirewall without blocking your visitors."
1760
+ msgstr "Tester NinjaFirewall sans bloquer vos visiteurs."
1761
+
1762
+ #: lib/help.php:50
1763
+ msgid "Add your own code to the firewall: the \".htninja\" file."
1764
+ msgstr "Ajoutez votre code au pare-feu: le fichier \".htninja\"."
1765
+
1766
+ #: lib/help.php:51
1767
+ msgid "Restricting access to NinjaFirewall settings."
1768
+ msgstr "Restreindre l'accès à la configuration de NinjaFirewall."
1769
+
1770
+ #: lib/help.php:52
1771
+ msgid "Upgrading to PHP 7 with NinjaFirewall installed."
1772
+ msgstr "Mise à niveau de PHP 5 vers PHP 7 avec NinjaFirewall installé."
1773
+
1774
+ #: lib/help.php:53
1775
+ msgid "Keep your blog protected against the latest vulnerabilities."
1776
+ msgstr "Gardez votre blog protégé contre les dernières vulnérabilités."
1777
+
1778
+ #: lib/help.php:54
1779
+ msgid "Test your website security with our online scanner."
1780
+ msgstr "Testez la sécurité de votre site avec notre scanner en ligne."
1781
+
1782
+ #: lib/help.php:55
1783
+ msgid "NinjaFirewall Referral Program."
1784
+ msgstr "Programme de parrainage de NinjaFirewall."
1785
+
1786
+ #: lib/help.php:57
1787
+ msgid "Our blog."
1788
+ msgstr "Consultez notre blog."
1789
+
1790
+ #: lib/help.php:60
1791
+ msgid "Troubleshooting"
1792
+ msgstr "Dépannage"
1793
+
1794
+ #: lib/help.php:62
1795
+ msgid "Locked out of your site / Fatal error / WordPress crash?"
1796
+ msgstr ""
1797
+ "Votre site n'est plus accessible / Erreur fatale / WordPress a planté ?"
1798
+
1799
+ #: lib/help.php:63
1800
+ msgid "Failed installation (\"Error: The firewall is not loaded\")?"
1801
+ msgstr "Échec de l'installation (\"Erreur : le pare-feu n'est pas activé.\") ?"
1802
+
1803
+ #: lib/help.php:64
1804
+ msgid "Blank page after INSTALLING NinjaFirewall?"
1805
+ msgstr "Page blanche après l'INSTALLATION de NinjaFirewall ?"
1806
+
1807
+ #: lib/help.php:65
1808
+ msgid "Blank page after UNINSTALLING NinjaFirewall?"
1809
+ msgstr "Page blanche après la DÉSINSTALLATION de NinjaFirewall ?"
1810
+
1811
+ #: lib/help.php:66
1812
+ msgid "500 Internal Server Error?"
1813
+ msgstr "500 Internal Server Error ?"
1814
+
1815
+ #: lib/help.php:67
1816
+ msgid "\"Cannot connect to WordPress database\" error message?"
1817
+ msgstr "Impossible de se connecter à la base de données WordPress ?"
1818
+
1819
+ #: lib/help.php:68
1820
+ msgid "How to disable NinjaFirewall?"
1821
+ msgstr "Comment désactiver NinjaFirewall?"
1822
+
1823
+ #: lib/help.php:69
1824
+ msgid "Lost password (brute-force protection)?"
1825
+ msgstr ""
1826
+ "Vous avez perdu le mot de passe de la protection contre les attaques par "
1827
+ "force brute ?"
1828
+
1829
+ #: lib/help.php:70
1830
+ msgid "Blocked visitors?"
1831
+ msgstr "Vos visiteurs sont bloqués par erreur ?"
1832
+
1833
+ #: lib/help.php:71
1834
+ msgid "Exporting NinjaFirewall's configuration"
1835
+ msgstr "Exporter la configuration de NinjaFirewall"
1836
+
1837
+ #: lib/help.php:72 lib/help.php:96
1838
+ msgid "Click here."
1839
+ msgstr "Cliquez ici."
1840
+
1841
+ #: lib/help.php:75
1842
+ msgid "NinjaFirewall troubleshooter script"
1843
+ msgstr "Script de dépannage NinjaFirewall"
1844
+
1845
+ #: lib/help.php:77
1846
+ msgid "Click to download."
1847
+ msgstr "Cliquez ici pour télécharger."
1848
+
1849
+ #: lib/help.php:78
1850
+ msgid "Rename this file to \"wp-check.php\"."
1851
+ msgstr "Renommez ce fichier en \"wp-check.php\"."
1852
+
1853
+ #: lib/help.php:79
1854
+ msgid "Upload it into your WordPress root folder."
1855
+ msgstr "Téléchargez-le dans le répertoire racine WordPress."
1856
+
1857
+ #: lib/help.php:80
1858
+ msgid "Goto http://YOUR WEBSITE/wp-check.php."
1859
+ msgstr "Rendez-vous sur http://VOTRE_SITE/wp-check.php."
1860
+
1861
+ #: lib/help.php:81
1862
+ msgid "Delete it afterwards."
1863
+ msgstr "Supprimez-le après son utilisation."
1864
+
1865
+ #: lib/help.php:84
1866
+ msgid "FAQ"
1867
+ msgstr "FAQ"
1868
+
1869
+ #: lib/help.php:86
1870
+ msgid ""
1871
+ "Why is NinjaFirewall different from other security plugins for WordPress?"
1872
+ msgstr ""
1873
+ "En quoi NinjaFirewall est-il différent des autres extensions de sécurité "
1874
+ "pour WordPress ?"
1875
+
1876
+ #: lib/help.php:87
1877
+ msgid "Do I need root privileges to install NinjaFirewall?"
1878
+ msgstr ""
1879
+ "Ai-je besoin d'avoir les privilèges root pour installer NinjaFirewall ?"
1880
+
1881
+ #: lib/help.php:88
1882
+ msgid "Does it work with Nginx?"
1883
+ msgstr "Est-ce qu'il fonctionne avec Nginx ?"
1884
+
1885
+ #: lib/help.php:89
1886
+ msgid "Do I need to alter my PHP scripts?"
1887
+ msgstr "Ai-je besoin de modifier mes scripts PHP ?"
1888
+
1889
+ #: lib/help.php:90
1890
+ msgid ""
1891
+ "Will NinjaFirewall detect the correct IP of my visitors if I am behind a CDN "
1892
+ "service like Cloudflare or Incapsula?"
1893
+ msgstr ""
1894
+ "Est-ce que NinjaFirewall détectera correctement l'adresse IP de mes "
1895
+ "visiteurs si j'utilise un service CDN comme Cloudflare ou Incapsula ?"
1896
+
1897
+ #: lib/help.php:91
1898
+ msgid ""
1899
+ "I moved my wp-config.php file to another directory. Will it work with "
1900
+ "NinjaFirewall?"
1901
+ msgstr ""
1902
+ "-J'ai déplacé mon fichier wp-config.php dans un autre répertoire. "
1903
+ "NinjaFirewall va-t-il fonctionner ?"
1904
+
1905
+ #: lib/help.php:92
1906
+ msgid "Will it slow down my site?"
1907
+ msgstr "Est-ce qu'il risque de ralentir mon site ?"
1908
+
1909
+ #: lib/help.php:93
1910
+ msgid "Is there a Microsoft Windows version?"
1911
+ msgstr "Existe-t-il une version pour Microsoft Windows ?"
1912
+
1913
+ #: lib/help.php:94
1914
+ msgid "Can I add/write my own security rules?"
1915
+ msgstr "Puis-je ajouter / écrire mes propres règles de sécurité ?"
1916
+
1917
+ #: lib/help.php:95
1918
+ msgid "Can I migrate my site(s) with NinjaFirewall installed?"
1919
+ msgstr ""
1920
+ "Est-ce que je peux migrer mon site lorsque NinjaFirewall est installé ?"
1921
+
1922
+ #: lib/help.php:99
1923
+ msgid "Help and Support"
1924
+ msgstr "Aide et Support"
1925
 
1926
+ #: lib/help.php:101
1927
+ msgid "WordPress forum: "
1928
+ msgstr "Forum WordPress :"
1929
+
1930
+ #: lib/help.php:102
1931
+ msgid "Online support (Premium customers only): "
1932
+ msgstr "Support technique (clients Premium uniquement) :"
1933
+
1934
+ #: lib/help.php:110
1935
+ msgid "For more information:"
1936
+ msgstr "Pour plus d'information&nbsp;:"
1937
+
1938
+ #: lib/help.php:111
1939
+ msgid "NinTechNet's updates and security announcements:"
1940
+ msgstr "Les mises à jour et annonces de sécurité de NinTechNet :"
1941
+
1942
+ #: lib/help.php:124 lib/statistics.php:101
1943
  msgid "Monthly stats"
1944
  msgstr "Statistiques mensuelles"
1945
 
1946
+ #: lib/help.php:126
1947
  msgid ""
1948
  "Statistics are taken from the current log. It is rotated on the first day of "
1949
  "each month."
1951
  "Les statistiques sont tirées du journal du pare-feu qui est, par défaut, "
1952
  "réinitialisé le 1er jour de chaque mois."
1953
 
1954
+ #: lib/help.php:128
1955
  #, php-format
1956
  msgid ""
1957
  "You can view the log by clicking on the <a href=\"%s\">Firewall Log</a> menu."
1959
  "Vous pouvez consuler ce journal en cliquant sur le menu <a href=\"%s"
1960
  "\">Journal du Pare-feu</a>."
1961
 
1962
+ #: lib/help.php:132 lib/statistics.php:113
1963
  msgid "Benchmarks"
1964
  msgstr "Performances"
1965
 
1966
+ #: lib/help.php:134
1967
  msgid ""
1968
  "Benchmarks show the time NinjaFirewall took, in seconds, to process each "
1969
  "request it has blocked."
1971
  "Indique le temps qu'il a fallu à NinjaFirewall pour intercepter, analyser et "
1972
  "bloquer les requêtes dangereuses."
1973
 
1974
+ #: lib/help.php:147
1975
  #, php-format
1976
  msgid ""
1977
  "This option allows you to disable NinjaFirewall. It has basically the same "
1981
  "essentiellement le même effet que la désactivation effectuée depuis la page "
1982
  "<a href=\"%s\">Extensions</a> du Tableau de bord."
1983
 
1984
+ #: lib/help.php:149
1985
  msgid "Your site will remain unprotected until you enable it again."
1986
  msgstr ""
1987
  "Votre site ne sera plus protégé par NinjaFirewall durant cette période."
1988
 
1989
+ #: lib/help.php:155
1990
  #, php-format
1991
  msgid ""
1992
  "In Debugging mode, NinjaFirewall will not block or sanitise suspicious "
1998
  "Les lignes correspondantes seront indiquée par la mention <code>DEBUG_ON</"
1999
  "code> dans la colonne LEVEL du journal. "
2000
 
2001
+ #: lib/help.php:156
2002
  msgid ""
2003
  "We recommend to run it in Debugging Mode for at least 24 hours after "
2004
  "installing it on a new site and then to keep an eye on the firewall log "
2012
  "journal du pare-feu pour y voir les éventuels problèmes et, le cas échéant, "
2013
  "désactiver les options ou règles pouvant créer des faux-positifs."
2014
 
2015
+ #: lib/help.php:161
2016
  msgid ""
2017
  "This option will anonymize IP addresses in the firewall log by removing "
2018
  "their last 3 characters."
2020
  "Cette option anonymise les adresses IP dans le journal du pare-feu en "
2021
  "supprimant leurs 3 derniers caractères."
2022
 
2023
+ #: lib/help.php:161
2024
  msgid ""
2025
  "It does not apply to private IP addresses and the Login Protection feature."
2026
  msgstr ""
2027
  "Elle ne s'applique pas aux adresses IP privées, ni à l'option Page de "
2028
  "Connexion."
2029
 
2030
+ #: lib/help.php:162
2031
  msgid ""
2032
  "Note that it will affect only IP addresses written to the firewall log after "
2033
  "enabling this option."
2035
  "Notez que seules les adresses IP enregistrées dans le journal du pare-feu "
2036
  "après avoir activé cette option sont concernées."
2037
 
2038
+ #: lib/help.php:162
2039
  msgid ""
2040
  "Also, if you are redirecting events to the syslog server (NinjaFirewall "
2041
  "<font color=\"#21759B\">WP+</font> Edition), IP addresses will be anonymized "
2044
  "En outre, si vous redirigez les événements vers le serveur syslog, les "
2045
  "adresses IP y seront également anonymisées."
2046
 
2047
+ #: lib/help.php:166
2048
  msgid "Error code and message to return"
2049
  msgstr "Code HTTP et Message à retourner"
2050
 
2051
+ #: lib/help.php:168
2052
  msgid ""
2053
  "Lets you customize the HTTP error code returned by NinjaFirewall when "
2054
  "blocking a dangerous request and the message to display to the user."
2057
  "retourne lorsqu'il bloque une requête dangereuse ansi que le message à "
2058
  "afficher à l'utilisateur bloqué."
2059
 
2060
+ #: lib/help.php:169
2061
  msgid "You can use any HTML tags and 3 built-in variables:"
2062
  msgstr ""
2063
  "Vous pouvez utiliser le language HTML ainsi que les 3 variables suivantes :"
2064
 
2065
+ #: lib/help.php:170
2066
  msgid "the blocked user IP."
2067
  msgstr "l'adresse IP de l'utilisateur."
2068
 
2069
+ #: lib/help.php:171
2070
  msgid ""
2071
  "the unique incident number as it will appear in the firewall log \"INCIDENT"
2072
  "\" column."
2074
  "le numéro d'incident, tel qu'il apparaîtra dans la colonne \"INCIDENT\" du "
2075
  "journal du pare-feu."
2076
 
2077
+ #: lib/help.php:172
2078
  msgid "NinjaFirewall logo."
2079
  msgstr "le logo de NinjaFirewall."
2080
 
2081
+ #: lib/help.php:177
2082
  msgid "Export/import configuration"
2083
  msgstr "Configuration de l'exportation / importation"
2084
 
2085
+ #: lib/help.php:179
2086
  #, php-format
2087
  msgid ""
2088
  "This options lets you export you current configuration or import it from "
2095
  "(%s), sinon il sera rejeté. Notez que l'importation effacera toute votre "
2096
  "configuration (options et règles du pare-feu), sauf votre licence WP+."
2097
 
2098
+ #: lib/help.php:181
2099
  msgid "\"File Check\" configuration will not be exported/imported."
2100
  msgstr ""
2101
  "La configuration de \"File Check\" ne peut pas être importée ou exportée."
2102
 
2103
+ #: lib/help.php:188
2104
  msgid ""
2105
  "NinjaFirewall will automatically backup its configuration (options, policies "
2106
  "and rules) everyday for the last 5 days. If you want to restore its "
2111
  "restaurer sa configuration à une date antérieure, sélectionnez le fichier "
2112
  "correspondant dans la liste."
2113
 
2114
+ #: lib/help.php:202
2115
  #, php-format
2116
  msgid ""
2117
  "Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
2122
  "scripts PHP</b> situés à l'intérieur du répertoire %s ainsi que ses sous-"
2123
  "répertoires, et non pas seulement à la page d'index de WordPress."
2124
 
2125
+ #: lib/help.php:207
2126
  msgid "Policies overview"
2127
  msgstr "Politiques du pare-feu"
2128
 
2129
+ #: lib/help.php:209
2130
  #, php-format
2131
  msgid ""
2132
  "Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
2145
  "adresses IP, avant que celles-ci n'atteignent votre application, que ce soit "
2146
  "en mode HTTP ou HTTPS."
2147
 
2148
+ #: lib/help.php:211
2149
  msgid ""
2150
  "Use the options below to enable, disable or to tweak these rules according "
2151
  "to your needs."
2153
  "Utilisez les options ci-dessous pour configurer NinjaFirewall suivant vos "
2154
  "besoins."
2155
 
2156
+ #: lib/help.php:218
2157
  msgid "Scan and Sanitise"
2158
  msgstr "Filtrer et Nettoyer"
2159
 
2160
+ #: lib/help.php:220
2161
  msgid ""
2162
  "You can choose to scan and reject dangerous content but also to sanitise "
2163
  "requests and variables. Those two actions are different and can be combined "
2167
  "mais aussi de les nettoyer. Ces deux actions sont différentes et peuvent "
2168
  "être combinées pour plus de sécurité."
2169
 
2170
+ #: lib/help.php:221
2171
  msgid ""
2172
  "Scan : if anything suspicious is detected, NinjaFirewall will block the "
2173
  "request and return an HTTP error code and message (defined in the \"Firewall "
2179
  "du Pare-feu\"). La requête ne pourra pas aboutir et la connexion sera fermée "
2180
  "immédiatement."
2181
 
2182
+ #: lib/help.php:222
2183
  #, php-format
2184
  msgid ""
2185
  "Sanitise : this option will not block but sanitise the user request by "
2197
  "HTML correspondantes. S'il s'agit d'une variable et de sa valeur (<code>?"
2198
  "variable=valeur</code>), les deux éléments seront nettoyés."
2199
 
2200
+ #: lib/help.php:224
2201
  msgid ""
2202
  "This action will be performed when the filtering process is over, right "
2203
  "before NinjaFirewall forwards the request to your PHP script."
2206
  "juste avant que NinjaFirewall fasse suivre la requête à votre application "
2207
  "PHP."
2208
 
2209
+ #: lib/help.php:227
2210
  msgid ""
2211
  "If you enabled <code>POST</code> requests sanitising, articles and messages "
2212
  "posted by your visitors could be corrupted with excessive backslashes or "
2216
  "commentaires et messages de vos visiteurs pourraient être endommagés par "
2217
  "cette option."
2218
 
2219
+ #: lib/help.php:239
2220
  msgid "Whether to filter HTTP and/or HTTPS traffic"
2221
  msgstr ""
2222
  "Sélectionnez le type de trafic filtré par le pare-feu (HTTP et/ou HTTPS)."
2223
 
2224
+ #: lib/help.php:242
2225
  msgid "File Uploads:"
2226
  msgstr "Autoriser les téléchargements&nbsp;:"
2227
 
2228
+ #: lib/help.php:242
2229
  msgid "whether to allow/disallow file uploads."
2230
  msgstr ""
2231
  "vous pouvez autoriser ou interdire tout téléchargement de fichiers vers "
2232
  "votre site."
2233
 
2234
+ #: lib/help.php:243
2235
  msgid "Sanitise filenames:"
2236
  msgstr "Nettoyer le nom des fichiers&nbsp;:"
2237
 
2238
+ #: lib/help.php:243
2239
  msgid ""
2240
  "any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</"
2241
  "code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
2247
  "d'union <code>-</code> ou un caractère de soulignement <code>_</code>, celui-"
2248
  "si sera remplacé par le caractère de substitution."
2249
 
2250
+ #: lib/help.php:246
2251
  msgid ""
2252
  "Whether to block direct access to PHP files located in specific WordPress "
2253
  "directories."
2255
  "S'il faut bloquer l’accès direct à tout fichier PHP se trouvant dans l'un de "
2256
  "ces répertoires."
2257
 
2258
+ #: lib/help.php:247
2259
  msgid ""
2260
  "enabling this policy will block any attempt (e.g., exploiting a "
2261
  "vulnerability, using a backdoor etc) to modify some important WordPress "
2268
  "enverra également une alerte par e-mail avec tous les détails concernant le "
2269
  "problème. Elle est activée par défaut."
2270
 
2271
+ #: lib/help.php:248
2272
  msgid ""
2273
  "enabling this policy will block any attempt (e.g., exploiting a "
2274
  "vulnerability, using a backdoor etc) to create a user account. If you allow "
2279
  "de création d'un compte d'utilisateur. Si vous autorisez l'inscription des "
2280
  "utilisateurs, vous ne devez pas l'activer."
2281
 
2282
+ #: lib/help.php:249
2283
  #, php-format
2284
  msgid ""
2285
  "many vulnerabilities in plugins are exploited via the admin-ajax.php script. "
2293
  "d’y accéder. L'adresse IP du serveur (%s) et les adresses IP privées ne "
2294
  "seront pas bloquées."
2295
 
2296
+ #: lib/help.php:250
2297
  msgid "Protect against username enumeration:"
2298
  msgstr "Protéger contre l'énumération des comptes utilisateurs&nbsp;:"
2299
 
2300
+ #: lib/help.php:250
2301
  msgid ""
2302
  "it is possible to enumerate usernames either through the WordPress author "
2303
  "archives, the REST API or the login page. Although this is not a "
2314
  "WordPress, certains hackers utilisent ces astuces pour récupérer les noms "
2315
  "d'utilisateur afin de lancer des attaques par force brute plus précises."
2316
 
2317
+ #: lib/help.php:251
2318
  msgid "WordPress REST API:"
2319
  msgstr "API REST de WordPress :"
2320
 
2321
+ #: lib/help.php:251
2322
  msgid ""
2323
  "it allows you to access your WordPress site's data through an easy-to-use "
2324
  "HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
2328
  "Depuis WordPress 4.7, cette elle est activée par défaut. NinjaFirewall vous "
2329
  "permet de bloquer tout accès a cette API si vous ne l'utilisez pas."
2330
 
2331
+ #: lib/help.php:252
2332
  msgid "WordPress XML-RPC API:"
2333
  msgstr "API XML-RPC de WordPress :"
2334
 
2335
+ #: lib/help.php:252
2336
  msgid ""
2337
  "XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
2338
  "its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
2352
  "requêtes qui utilisent la méthode <code>system.multicall</code> ou les "
2353
  "Pingbacks."
2354
 
2355
+ #: lib/help.php:253
2356
  msgid ""
2357
  "Block <code>POST</code> requests in the themes folder <code>/wp-content/"
2358
  "themes</code>:"
2360
  "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes <code>/wp-"
2361
  "content/themes</code>&nbsp;:"
2362
 
2363
+ #: lib/help.php:253
2364
  msgid ""
2365
  "this option can be useful to block hackers from installing backdoor in the "
2366
  "PHP theme files. However, because some custom themes may include an HTML "
2372
  "de recherche ou de contact etc) nécessitant des requêtes <code>POST</code> , "
2373
  "cette option n'est pas activée par défaut."
2374
 
2375
+ #: lib/help.php:254
2376
  msgid "Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:"
2377
  msgstr ""
2378
  "Forcer la connexion sécurisée au Tableau de bord <code>FORCE_SSL_ADMIN</"
2379
  "code>&nbsp;:"
2380
 
2381
+ #: lib/help.php:254
2382
  msgid ""
2383
  "enable this option when you want to secure logins and the admin area so that "
2384
  "both passwords and cookies are never sent in the clear. Ensure that you can "
2390
  "connexion via HTTPS avant d'activer cette option, sinon vous risquez de "
2391
  "bloquer l’accès à votre site&nbsp;!"
2392
 
2393
+ #: lib/help.php:255
2394
  msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:"
2395
  msgstr ""
2396
  "Désactiver l’éditeur de thème et d'extension <code>DISALLOW_FILE_EDIT</"
2397
  "code>&nbsp;:"
2398
 
2399
+ #: lib/help.php:255
2400
  msgid ""
2401
  "disabling the plugin and theme editor provides an additional layer of "
2402
  "security if a hacker gains access to a well-privileged user account."
2406
  "pourrait pas l'utiliser pour insérer une porte dérobée dans l'un de vos "
2407
  "scripts PHP."
2408
 
2409
+ #: lib/help.php:256
2410
  msgid ""
2411
  "Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:"
2412
  msgstr ""
2413
  "Désactiver l'installation et mise à jour des thèmes et extensions "
2414
  "<code>DISALLOW_FILE_MODS</code>&nbsp;:"
2415
 
2416
+ #: lib/help.php:256
2417
  msgid ""
2418
  "this option will block users being able to use the plugin and theme "
2419
  "installation/update functionality from the WordPress admin area. Setting "
2423
  "installation ou mise à jour d'une extension ou d'un thème. Elle désactive "
2424
  "aussi l’éditeur de thème et d'extension."
2425
 
2426
+ #: lib/help.php:257
2427
+ msgid ""
2428
+ "Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>:"
2429
  msgstr ""
2430
+ "Désactiver le gestionnaire d'erreurs fatales "
2431
+ "<code>WP_DISABLE_FATAL_ERROR_HANDLER</code> :"
2432
 
2433
+ #: lib/help.php:257
2434
  msgid ""
2435
  "this option will disable the WSOD protection introduced in WordPress 5.1."
2436
  msgstr ""
2437
  "cette option désactivera la protection WSOD introduite dans WordPress 5.1."
2438
 
2439
+ #: lib/help.php:265
2440
  msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
2441
  msgstr "S'il faut filtrer / nettoyer la variable <code>GET</code>."
2442
 
2443
+ #: lib/help.php:268
2444
  msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
2445
  msgstr "S'il faut filtrer / nettoyer la variable <code>POST</code>."
2446
 
2447
+ #: lib/help.php:269
2448
  msgid "Decode Base64-encoded <code>POST</code> variable:"
2449
  msgstr ""
2450
  "Décoder les chaîne encodées en Base64 dans la variable <code>POST</"
2451
  "code>&nbsp;:"
2452
 
2453
+ #: lib/help.php:269
2454
  msgid ""
2455
  "NinjaFirewall will decode and scan base64 encoded values in order to detect "
2456
  "obfuscated malicious code. This option is only available for the <code>POST</"
2459
  "NinjaFirewall peut décoder et filtrer les chaînes de caractères encodées en "
2460
  "Base64 afin d'y détecter du code malveillant caché."
2461
 
2462
+ #: lib/help.php:272
2463
  msgid "Whether to sanitise the <code>REQUEST</code> variable."
2464
  msgstr "S'il faut filtrer / nettoyer la variable <code>REQUEST</code>."
2465
 
2466
+ #: lib/help.php:275
2467
  msgid "Whether to scan and/or sanitise cookies."
2468
  msgstr "S'il faut filtrer / nettoyer les cookies."
2469
 
2470
+ #: lib/help.php:278
2471
  msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
2472
  msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_USER_AGENT</code>."
2473
 
2474
+ #: lib/help.php:279
2475
  msgid "Block suspicious bots/scanners:"
2476
  msgstr "Bloquer les requêtes provenant de bots/scanners malveillants :"
2477
 
2478
+ #: lib/help.php:279
2479
  msgid ""
2480
  "rejects some known bots, scanners and various malicious scripts attempting "
2481
  "to access your blog."
2482
  msgstr ""
2483
  "cette option peut bloquer de nombreux crawlers, spambots et autres scrappers."
2484
 
2485
+ #: lib/help.php:282
2486
  msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
2487
  msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_REFERER</code>."
2488
 
2489
+ #: lib/help.php:283
2490
  msgid ""
2491
  "Block POST requests that do not have an <code>HTTP_REFERER</code> header:"
2492
  msgstr ""
2493
  "Bloquer les requêtes POST qui n'ont pas d'en-tête <code>HTTP_REFERER</"
2494
  "code>&nbsp;:"
2495
 
2496
+ #: lib/help.php:283
2497
  msgid ""
2498
  "this option will block any <code>POST</code> request that does not have a "
2499
  "Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
2510
  "vous utilisez des scripts comme Paypal IPN, WordPress WP-Cron etc, "
2511
  "désactivez cette fonction."
2512
 
2513
+ #: lib/help.php:286
2514
  msgid "Block localhost IP in <code>GET/POST</code> requests:"
2515
  msgstr ""
2516
  "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost&nbsp;:"
2517
 
2518
+ #: lib/help.php:286
2519
  msgid ""
2520
  "this option will block any <code>GET</code> or <code>POST</code> request "
2521
  "containing the localhost IP (127.0.0.1). It can be useful to block SQL "
2526
  "les programmes malveillants. Attention toutefois à ne pas bloquer certains "
2527
  "scripts d'installation ou de configuration si vous l'activez. "
2528
 
2529
+ #: lib/help.php:287
2530
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
2531
  msgstr ""
2532
  "Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
2533
  "IP&nbsp;:"
2534
 
2535
+ #: lib/help.php:287
2536
  #, php-format
2537
  msgid ""
2538
  "this option will reject any request using an IP instead of a domain name in "
2548
  "application trouvent les sites en scannant les plages d'adresses IP plutôt "
2549
  "que les noms de domaine. "
2550
 
2551
+ #: lib/help.php:288
2552
  msgid "Scan traffic coming from localhost and private IP address spaces:"
2553
  msgstr ""
2554
  "Filtrer les connexions provenant de localhost et d'adresses IP privées&nbsp;:"
2555
 
2556
+ #: lib/help.php:288
2557
  msgid ""
2558
  "this option will allow the firewall to scan traffic from all non-routable "
2559
  "private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
2564
  "Nous vous recommandons de le garder activé si vous avez 2 ou plusieurs "
2565
  "serveurs reliés entre eux."
2566
 
2567
+ #: lib/help.php:297
2568
  msgid ""
2569
  "In addition to filtering incoming requests, NinjaFirewall can also hook the "
2570
  "HTTP response in order to alter its headers. Those modifications can help to "
2575
  "peuvent aider à atténuer les menaces telles que les attaques XSS, phishing "
2576
  "et clickjacking."
2577
 
2578
+ #: lib/help.php:299
2579
  msgid ""
2580
  "Set <code>X-Content-Type-Options</code> to protect against MIME type "
2581
  "confusion attacks:"
2583
  "Activer <code>X-Content-Type-Options</code> pour protéger contre les "
2584
  "attaques basées sur la confusion du type MIME&nbsp;:"
2585
 
2586
+ #: lib/help.php:299
2587
  msgid ""
2588
  "this header will send the nosniff value to instruct the browser to disable "
2589
  "content or MIME sniffing and to use the content-type returned by the server. "
2598
  "dans certains cas, peut entraîner des problèmes de sécurité tels que les "
2599
  "attaques basées sur la confusion du type MIME."
2600
 
2601
+ #: lib/help.php:300
2602
  msgid ""
2603
  "Set <code>X-Frame-Options</code> to protect against clickjacking attempts:"
2604
  msgstr ""
2605
  "Activer <code>X-Frame-Options</code> pour protéger contre les attaques de "
2606
  "détournement de clic (clickjacking)&nbsp;:"
2607
 
2608
+ #: lib/help.php:300
2609
  msgid ""
2610
  "this header indicates a policy whether a browser must not allow to render a "
2611
  "page in a &lt;frame&gt; or &lt;iframe&gt;. Hosts can declare this policy in "
2619
  "sont pas intégré dans d'autres pages ou cadres, notamment d'un autre site. "
2620
  "NinjaFirewall accepte deux valeurs différentes&nbsp;:"
2621
 
2622
+ #: lib/help.php:302
2623
  msgid ""
2624
  "a browser receiving content with this header must not display this content "
2625
  "in any frame from a page of different origin than the content itself."
2627
  "un navigateur ne doit pas afficher le contenu dans une &lt;frame&gt; ou &lt;"
2628
  "iframe&gt; d'une page d'origine différente que le contenu lui-même."
2629
 
2630
+ #: lib/help.php:303
2631
  msgid ""
2632
  "a browser receiving content with this header must not display this content "
2633
  "in any frame."
2635
  "un navigateur ne doit jamais afficher le contenu dans une &lt;frame&gt; ou "
2636
  "&lt;iframe&gt;"
2637
 
2638
+ #: lib/help.php:306
2639
  msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
2640
  msgstr ""
2641
  "La valeur <code>ALLOW-FROM</code> n'est pas prise en charge par "
2642
  "NinjaFirewall."
2643
 
2644
+ #: lib/help.php:308
2645
  msgid ""
2646
  "Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
2647
  "administrator and the login page only."
2649
  "Depuis la version 3.1.3, WordPress active <code>SAMEORIGIN</code> pour "
2650
  "l'administrateur et la page de connexion uniquement."
2651
 
2652
+ #: lib/help.php:309
2653
  msgid ""
2654
  "Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
2655
  "browsers):"
2656
  msgstr ""
2657
  "Activer <code>X-XSS-Protection</code> (IE/Edge, Opera, Chrome et Safari)"
2658
 
2659
+ #: lib/help.php:309
2660
  msgid ""
2661
  "this header allows browsers to identify and block XSS attacks by preventing "
2662
  "malicious scripts from executing. It is enabled by default on all compatible "
2666
  "attaques XSS en empêchant un script malveillant de s'exécuter. Notez que "
2667
  "cette option est activée par défaut sur ces navigateurs."
2668
 
2669
+ #: lib/help.php:310
2670
  msgid ""
2671
  "If a visitor disabled their browser's XSS filter, you cannot re-enable it "
2672
  "with that option."
2674
  "Si un visiteur désactive le filtre XSS de son navigateur, vous ne pouvez pas "
2675
  "le réactiver avec cette option."
2676
 
2677
+ #: lib/help.php:312
2678
  msgid ""
2679
  "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
2680
  msgstr ""
2681
  "Activer la propriété <code>HttpOnly</code> pour tous les cookies afin "
2682
  "d'atténuer les menaces XSS qui génèrent des vols de cookies&nbsp;:"
2683
 
2684
+ #: lib/help.php:312
2685
  msgid ""
2686
  "adding this flag to cookies helps to mitigate the risk of cross-site "
2687
  "scripting by preventing them from being accessed through client-side "
2698
  "dans la réponse HTTP juste avant que celle-ci ne soit envoyée à vos "
2699
  "visiteurs."
2700
 
2701
+ #: lib/help.php:313
2702
  msgid ""
2703
  "If your PHP scripts send cookies that need to be accessed from JavaScript, "
2704
  "you should keep that option disabled."
2706
  "Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
2707
  "partir de JavaScript, vous devez garder cette option désactivée."
2708
 
2709
+ #: lib/help.php:314
2710
  msgid ""
2711
  "Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
2712
  "connections to the server:"
2714
  "Activer <code>Strict-Transport-Security</code> (HSTS) pour forcer les "
2715
  "connexions sécurisées vers le serveur&nbsp;"
2716
 
2717
+ #: lib/help.php:314
2718
  msgid ""
2719
  "this policy enforces secure HTTPS connections to the server. Web browsers "
2720
  "will not allow the user to access the web application over insecure HTTP "
2727
  "de cookies ou les attaques du type \"Man-in-the-middle\". La plupart des "
2728
  "navigateurs récents sont compatibles avec cette politique."
2729
 
2730
+ #: lib/help.php:315
2731
  msgid "Set <code>Content-Security-Policy</code>:"
2732
  msgstr "Activer <code>Content-Security-Policy</code> :"
2733
 
2734
+ #: lib/help.php:315
2735
  msgid ""
2736
  "this policy helps to mitigate threats such as XSS, phishing and clickjacking "
2737
  "attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
2741
  "code JavaScript, les styles CSS, frames/iframes HTML, polices, images, "
2742
  "objets (Java, ActiveX, fichiers audio et video), mais aussi les WebSocket."
2743
 
2744
+ #: lib/help.php:315
2745
  msgid ""
2746
  "NinjaFirewall lets you configure the CSP policy separately for the frontend "
2747
  "(blog, website) and the backend (WordPress admin dashboard)."
2749
  "NinjaFirewall vous permet de configurer CSP séparément pour le site et "
2750
  "l'interface d'administration de WordPress."
2751
 
2752
+ #: lib/help.php:316
2753
  msgid "Set <code>Referrer-Policy</code>:"
2754
  msgstr "Activer <code>Referrer-Policy</code> :"
2755
 
2756
+ #: lib/help.php:316
2757
  msgid ""
2758
  "this HTTP header governs which referrer information, sent in the Referer "
2759
  "header, should be included with requests made."
2761
  "cet en-tête HTTP détermine quelles informations de provenance doivent être "
2762
  "incluses dans l'en-tête Referer."
2763
 
2764
+ #: lib/help.php:320
2765
  msgid "Block PHP built-in wrappers:"
2766
  msgstr "Bloquer les gestionnaires (wrappers) PHP dangereux&nbsp;:"
2767
 
2768
+ #: lib/help.php:320
2769
  msgid ""
2770
  "PHP has several wrappers for use with the filesystem functions. It is "
2771
  "possible for an attacker to use them to bypass firewalls and various IDS to "
2785
  "requête <code>GET</code> ou <code>POST</code>, des cookies, ou dans les "
2786
  "variables <code>HTTP_REFERER</code> et <code>HTTP_USER_AGENT</code>."
2787
 
2788
+ #: lib/help.php:321
2789
  msgid "Block serialized PHP objects:"
2790
  msgstr "Bloquer les objets PHP sérialisés :"
2791
 
2792
+ #: lib/help.php:321
2793
  #, php-format
2794
  msgid ""
2795
  "Object Serialization is a PHP feature used by many applications to generate "
2808
  "<code>POST</code>, les cookies, ou dans les variables <code>HTTP_REFERER</"
2809
  "code> et <code>HTTP_USER_AGENT</code>."
2810
 
2811
+ #: lib/help.php:322
2812
  msgid "Hide PHP notice and error messages:"
2813
  msgstr "Masquer les messages d'erreur de PHP&nbsp;:"
2814
 
2815
+ #: lib/help.php:322
2816
  msgid ""
2817
  "this option lets you hide errors returned by your scripts. Such errors can "
2818
  "leak sensitive informations which can be exploited by hackers."
2821
  "afficher des informations sensibles qui peuvent être exploitées "
2822
  "ultérieurement par des pirates."
2823
 
2824
+ #: lib/help.php:323
2825
  msgid ""
2826
  "Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
2827
  "<code>PATH_INFO</code>:"
2829
  "Nettoyer <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
2830
  "<code>PATH_INFO</code>&nbsp;:"
2831
 
2832
+ #: lib/help.php:323
2833
  msgid ""
2834
  "this option can sanitise any dangerous characters found in those 3 server "
2835
  "variables to prevent various XSS and database injection attempts."
2837
  "activez ces options si vous souhaitez que le pare-feu nettoie ces trois "
2838
  "variables."
2839
 
2840
+ #: lib/help.php:326
2841
  #, php-format
2842
  msgid ""
2843
  "Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests:"
2845
  "Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code> "
2846
  "(%s)&nbsp;:"
2847
 
2848
+ #: lib/help.php:326
2849
  msgid ""
2850
  "this option will block scripts attempting to pass the <code>DOCUMENT_ROOT</"
2851
  "code> server variable in a <code>GET</code> or <code>POST</code> request. "
2858
  "cette variable, mais pas la plupart des applications légitimes (hormis "
2859
  "certains scripts d'installation ou de configuration)."
2860
 
2861
+ #: lib/help.php:327
2862
  msgid "Block ASCII character 0x00 (NULL byte):"
2863
  msgstr "Bloquer le caractère ASCII 0x00 (NULL byte)&nbsp;:"
2864
 
2865
+ #: lib/help.php:327
2866
  msgid ""
2867
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
2868
  "<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
2876
  "contenant le caractère ASCI 0x00 (NULL byte) sera bloquée immédiatement. Ce "
2877
  "caractère est dangereux et devrait toujours être rejeté."
2878
 
2879
+ #: lib/help.php:328
2880
  msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
2881
  msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31&nbsp;:"
2882
 
2883
+ #: lib/help.php:328
2884
  msgid ""
2885
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
2886
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
2890
  "variable <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> contenant "
2891
  "des caractères ASCII 1 à 8 et 14 à 31 sera bloquée."
2892
 
2893
+ #: lib/help.php:336
2894
  #, php-format
2895
  msgid ""
2896
  "By default, any logged in WordPress administrator will not be blocked by "
2910
  "les options de la <a href=\"%s\">Page de Connexion</a> qui, si elle sont "
2911
  "activées, seront toujours appliquées."
2912
 
2913
+ #: lib/help.php:350
2914
  msgid ""
2915
  "File Guard can detect, in real-time, any access to a PHP file that was "
2916
  "recently modified or created, and alert you about this."
2918
  "File Guard peut détecter, en temps réel, tout accès à un fichier PHP qui a "
2919
  "été récemment modifié ou créé, et vous alerter à ce sujet."
2920
 
2921
+ #: lib/help.php:352
2922
  msgid ""
2923
  "If a hacker uploaded a shell script to your site (or injected a backdoor "
2924
  "into an already existing file) and tried to directly access that file using "
2937
  "envoyées à l'adresse e-mail de contact définie dans le menu \"Notifications "
2938
  "d’Événement\"."
2939
 
2940
+ #: lib/help.php:353
2941
  msgid ""
2942
  "If you do not want to monitor a folder, you can exclude its full path or a "
2943
  "part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
2951
  "variable <code>$_SERVER[\"SCRIPT_FILENAME\"]</code> et, si elle correspond, "
2952
  "l'ignorera."
2953
 
2954
+ #: lib/help.php:354
2955
  msgid ""
2956
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
2957
  "code>)."
2959
  "Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
2960
  "bar/,/cache/</code>)."
2961
 
2962
+ #: lib/help.php:355
2963
  msgid ""
2964
  "File Guard real-time detection is a totally unique feature, because "
2965
  "NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
2971
  "intercepter les requêtes HTTP envoyées à tout script PHP, même si ce dernier "
2972
  "ne fait pas partie de WordPress (logiciel tiers, backdoor, etc)."
2973
 
2974
+ #: lib/help.php:364 lib/network.php:32 ninjafirewall.php:751
2975
  msgid "Network"
2976
  msgstr "Réseau"
2977
 
2978
+ #: lib/help.php:366
2979
  msgid ""
2980
  "Even if NinjaFirewall administration menu is only available to the Super "
2981
  "Admin (from the main site), you can still display its status to all sites in "
2987
  "du réseau en ajoutant une petite icône à leur barre d'administration. Elle "
2988
  "ne sera visible que par les administrateurs de ces sites."
2989
 
2990
+ #: lib/help.php:368
2991
  msgid ""
2992
  "It is recommended to enable this feature as it is the only way to know "
2993
  "whether the sites in your network are protected and if NinjaFirewall "
2997
  "si les sites de votre réseau sont protégés et si l'installation de "
2998
  "NinjaFirewall a réussi."
2999
 
3000
+ #: lib/help.php:370
3001
  msgid ""
3002
  "Note that when it is disabled, the icon still remains visible to you, the "
3003
  "Super Admin."
3005
  "Notez que même lorsqu'il est désactivé, l'icône reste visible pour vous, le "
3006
  "Super Administrateur."
3007
 
3008
+ #: lib/help.php:381
3009
  msgid ""
3010
  "File Check lets you perform file integrity monitoring upon request or on a "
3011
  "specific interval."
3013
  "File Check vous permet d'effectuer une analyse de l'intégrité de vos "
3014
  "fichiers sur demande ou à un intervalle spécifique défini."
3015
 
3016
+ #: lib/help.php:383
3017
  msgid ""
3018
  "You need to create a snapshot of all your files and then, at a later time, "
3019
  "you can scan your system to compare it with the previous snapshot. Any "
3026
  "permissions et propriétés des fichiers, leur création et suppression ainsi "
3027
  "que l'horodatage."
3028
 
3029
+ #: lib/help.php:384
3030
  #, php-format
3031
  msgid ""
3032
  "Create a snapshot of all files stored in that directory: by default, the "
3036
  "répertoire&nbsp;: par défaut, le repertoire est l'<code>ABSPATH</code> de "
3037
  "WordPress (%s)"
3038
 
3039
+ #: lib/help.php:385
3040
  msgid ""
3041
  "Exclude the following files/folders: you can enter a directory or a file "
3042
  "name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
3047
  "partie de celui-ci (par ex. <code>foo</code>), ou même exclure une extension "
3048
  "de fichier (par ex. <code>.css</code>)."
3049
 
3050
+ #: lib/help.php:387
3051
  msgid ""
3052
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
3053
  "code>)."
3055
  "Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
3056
  "bar/,.css,.png</code>)."
3057
 
3058
+ #: lib/help.php:388
3059
  msgid ""
3060
  "Do not follow symbolic links: by default, NinjaFirewall will not follow "
3061
  "symbolic links."
3063
  "Ne pas suivre les liens symboliques&nbsp;: par défaut, NinjaFirewall ignore "
3064
  "les liens symboliques lors de son analyse des fichiers."
3065
 
3066
+ #: lib/help.php:393
3067
  msgid "Scheduled scans"
3068
  msgstr "Analyses planifiées"
3069
 
3070
+ #: lib/help.php:394
3071
  msgid ""
3072
  "NinjaFirewall can scan your system on a specific interval (hourly, "
3073
  "twicedaily or daily)."
3075
  "NinjaFirewall peut scanner votre système à intervalle régulier (une fois par "
3076
  "heure, deux fois par jour ou tous les jours)."
3077
 
3078
+ #: lib/help.php:396
3079
  msgid ""
3080
  "It can either send you a scan report only if changes are detected, or always "
3081
  "send you one after each scan."
3084
  "été détectés, ou bien vous en envoyer un systématiquement après chaque "
3085
  "analyse."
3086
 
3087
+ #: lib/help.php:398
3088
  msgid ""
3089
  "Reports will be sent to the contact email address defined in the \"Event "
3090
  "Notifications\" menu."
3092
  "Les rapports seront envoyés à l'adresse e-mail définie dans la page "
3093
  "\"Notifications d'Événement\"."
3094
 
3095
+ #: lib/help.php:400
3096
  #, php-format
3097
  msgid ""
3098
  "Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
3101
  "Les analyses planifiées utilisent le <a href=\"%s\">pseudo cron de "
3102
  "WordPress</a> qui ne fonctionne que si votre site reçoit un trafic suffisant."
3103
 
3104
+ #: lib/help.php:414
3105
  msgid ""
3106
  "NinjaFirewall can alert you by email on specific events triggered within "
3107
  "your blog. They include installations, updates, activations etc, as well as "
3120
  "après avoir pénétré dans votre Tableau de bord de WordPress, d'y installer "
3121
  "une porte dérobée (backdoor) afin de prendre le contrôle de votre blog."
3122
 
3123
+ #: lib/help.php:425 lib/login_protection.php:21 ninjafirewall.php:759
3124
  msgid "Login Protection"
3125
  msgstr "Page de Connexion"
3126
 
3127
+ #: lib/help.php:429
3128
  msgid ""
3129
  "By processing incoming HTTP requests before your blog and any of its "
3130
  "plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
3137
  "compris les attaques distribuées provenant de plusieurs milliers d'adresses "
3138
  "IP différentes."
3139
 
3140
+ #: lib/help.php:431
3141
  msgid ""
3142
  "You can choose two different types of protection: a password or a captcha. "
3143
  "You can enable the protection only if an attack is detected or to keep it "
3147
  "captcha. Vous pouvez choisir d'activer la protection uniquement lorsqu'une "
3148
  "attaque est détectée ou bien l'activer en permanence."
3149
 
3150
+ #: lib/help.php:433
3151
  msgid "Yes, if under attack:"
3152
  msgstr "Oui, si attaque en cours :"
3153
 
3154
+ #: lib/help.php:435
3155
  msgid ""
3156
  "The protection will be triggered when too many login attempts are detected, "
3157
  "regardless of the offending IP. It blocks the attack instantly and prevents "
3166
  "utilisant soit une combinaison nom d'utilisateur / mot de passe prédéfinie, "
3167
  "soit un code captcha."
3168
 
3169
+ #: lib/help.php:437
3170
  msgid "Always ON:"
3171
  msgstr "Toujours activée :"
3172
 
3173
+ #: lib/help.php:439
3174
  msgid ""
3175
  "NinjaFirewall will always enforce the HTTP authentication or captcha "
3176
  "implementation each time you access the login page."
3178
  "Vous serez toujours invité à saisir votre nom d'utilisateur / mot de passe, "
3179
  "ou le code du captcha, chaque fois que vous accéderez à la page de connexion."
3180
 
3181
+ #: lib/help.php:442
3182
  msgid "Type of protection:"
3183
  msgstr "Type de protection :"
3184
 
3185
+ #: lib/help.php:443
3186
  msgid ""
3187
  "<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
3188
  "own very fast authentication scheme and it is compatible with any HTTP "
3192
  "utilise son propre système d'authentification, rapide et compatible avec "
3193
  "n'importe quel serveur HTTP (Apache, Nginx, Lighttpd etc)."
3194
 
3195
+ #: lib/help.php:444
3196
  msgid "<b>Captcha:</b> It will display a 5-character captcha code."
3197
  msgstr "<b>Captcha :</b> Affichera un code captcha à 5 caractères."
3198
 
3199
+ #: lib/help.php:445
3200
  msgid "Bot protection:"
3201
  msgstr "Protection contre les bots :"
3202
 
3203
+ #: lib/help.php:446
3204
  msgid ""
3205
  "NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
3206
  "before they start a brute-force attack."
3208
  "NinjaFirewall tentera de bloquer les bots et les scripts immédiatement, "
3209
  "c'est-à-dire avant même qu'ils ne commencent une attaque par force brute."
3210
 
3211
+ #: lib/help.php:454
3212
  msgid "AUTH log"
3213
  msgstr "Journal d'authentification"
3214
 
3215
+ #: lib/help.php:457
3216
  msgid ""
3217
  "NinjaFirewall can write to the server Authentication log when the brute-"
3218
  "force protection is triggered. This can be useful to the system "
3224
  "surveillance ou pour bloquer l'IP incriminée au niveau du pare-feu du "
3225
  "serveur."
3226
 
3227
+ #: lib/help.php:459
3228
  msgid ""
3229
  "If you have a shared hosting account, keep this option disabled as you do "
3230
  "not have any access to the server's logs."
3232
  "Si vous avez un hébergement mutualisé, laissez cette option désactivée car "
3233
  "vous n'avez pas accès aux journaux du serveur."
3234
 
3235
+ #: lib/help.php:461
3236
  msgid ""
3237
  "On Debian-based systems, the log is located in <code>/var/log/auth.log</"
3238
  "code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
3242
  "sous Red Hat, dans <code>/var/log/secure</code>. Le format utilisé est le "
3243
  "suivant&nbsp;:"
3244
 
3245
+ #: lib/help.php:464
3246
  msgid "AA: the process ID (PID)."
3247
  msgstr "AA : l'identifiant de processus (PID)."
3248
 
3249
+ #: lib/help.php:465
3250
  msgid "BB: the user IPv4 or IPv6 address."
3251
  msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
3252
 
3253
+ #: lib/help.php:466
3254
  msgid "CC: the blog (sub-)domain name."
3255
  msgstr "CC : le nom de (sous-)domaine du blog."
3256
 
3257
+ #: lib/help.php:467
3258
  msgid ""
3259
  "DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
3260
  "API</code>."
3262
  "DD : la cible; il peut s'agir soit de <code>wp-login.php</code>, soit de "
3263
  "<code>XML-RPC API</code>."
3264
 
3265
+ #: lib/help.php:468
3266
  msgid "EE: the time, in minutes, the protection will remain active."
3267
  msgstr ""
3268
  "EE : le temps, en minutes, pendant lequel la protection restera active."
3269
 
3270
+ #: lib/help.php:470
3271
  msgid "Sample loglines:"
3272
  msgstr "Exemple :"
3273
 
3274
+ #: lib/help.php:473
3275
  #, php-format
3276
  msgid ""
3277
  "Be careful if you are behind a load balancer, reverse-proxy or CDN because "
3291
  "Alternativement, vous pouvez utiliser le fichier <code><a href=\"%s\">."
3292
  "htninja</a></code>."
3293
 
3294
+ #: lib/help.php:489
3295
  msgid ""
3296
  "The firewall log displays blocked and sanitised requests as well as some "
3297
  "useful information. It has 6 columns:"
3299
  "Le journal du pare-feu affiche les requêtes HTTP qui ont été bloquées ou "
3300
  "nettoyées ainsi que d'autres informations utiles. Il a six colonnes&nbsp;:"
3301
 
3302
+ #: lib/help.php:490
3303
  msgid "DATE : date and time of the incident."
3304
  msgstr "DATE : date et heure de l'incident."
3305
 
3306
+ #: lib/help.php:491
3307
  msgid ""
3308
  "INCIDENT : unique incident number/ID as it was displayed to the blocked user."
3309
  msgstr ""
3310
  "INCIDENT : le numéro d'incident (ID) unique. Par défaut, il sera aussi "
3311
  "affiché à l'utilisateur dont la requête aura été bloquée par le pare-feu."
3312
 
3313
+ #: lib/help.php:492
3314
  msgid ""
3315
  "LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
3316
  "<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
3320
  "<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
3321
  "et mode débogage (<code>DEBUG_ON</code>)."
3322
 
3323
+ #: lib/help.php:493
3324
  msgid ""
3325
  "RULE : reference of the NinjaFirewall built-in security rule that triggered "
3326
  "the action. A hyphen (<code>-</code>) instead of a number means it was a "
3331
  "d'un numéro signifie que la règle provient de votre configuration "
3332
  "personnelle de la page \"Politiques du Pare-feu\"."
3333
 
3334
+ #: lib/help.php:494
3335
  msgid "IP : the user IPv4 or IPv6 address."
3336
  msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
3337
 
3338
+ #: lib/help.php:495
3339
  msgid ""
3340
  "REQUEST : the HTTP request including offending variables and values as well "
3341
  "as the reason the action was logged."
3343
  "REQUEST : la requête HTTP avec ses variables et valeurs, ainsi que la raison "
3344
  "qui a déclenché l'incident."
3345
 
3346
+ #: lib/help.php:502
3347
  msgid ""
3348
  "This options lets you configure NinjaFirewall to delete its old logs "
3349
  "automatically. By default, logs are never deleted, <b>even when uninstall "
3356
  "cette valeur à <code>0</code> si vous ne voulez pas supprimer les anciens "
3357
  "journaux."
3358
 
3359
+ #: lib/help.php:510
3360
  msgid ""
3361
  "Centralized Logging lets you remotely access the firewall log of all your "
3362
  "NinjaFirewall protected websites from one single installation. You do not "
3367
  "NinjaFirewall. Vous n'avez plus besoin de vous connecter à chaque site pour "
3368
  "analyser vos journaux."
3369
 
3370
+ #: lib/help.php:510
3371
  #, php-format
3372
  msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
3373
  msgstr ""
3374
  "<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
3375
 
3376
+ #: lib/help.php:511
3377
  msgid ""
3378
  "Enter your public key (optional): This is the public key that was created "
3379
  "from your main server."
3381
  "Entrez votre clé publique (optionnel) : Il s'agit de la clé qui a été créée "
3382
  "depuis le serveur principal."
3383
 
3384
+ #: lib/help.php:514
3385
  msgid ""
3386
  "Centralized Logging will keep working even if NinjaFirewall is disabled. "
3387
  "Delete your public key below if you want to disable it."
3390
  "NinjaFirewall. Si vous souhaitez complètement désactiver cette option, "
3391
  "supprimez votre clé publique ci-dessous. "
3392
 
3393
+ #: lib/help.php:536 lib/live_log.php:37 lib/live_log.php:75
3394
+ #: ninjafirewall.php:767
3395
  msgid "Live Log"
3396
  msgstr "Live Log"
3397
 
3398
+ #: lib/help.php:538
3399
  msgid ""
3400
  "Live Log lets you watch your blog traffic in real time, just like the Unix "
3401
  "<code>tail -f</code> command. Note that requests sent to static elements "
3407
  "statiques comme les fichiers JS/CSS ou les images ne sont pas traitées par "
3408
  "NinjaFirewall."
3409
 
3410
+ #: lib/help.php:540
3411
  msgid ""
3412
  "You can enable/disable the monitoring process, change the refresh rate, "
3413
  "clear the screen, enable automatic vertical scrolling, change the log "
3418
  "effacer l'écran, changer le format d'affichage, le fuseau horaire et choisir "
3419
  "le type de trafic à visualiser (HTTP/HTTPS)."
3420
 
3421
+ #: lib/help.php:540
3422
  msgid ""
3423
  "You can also apply filters to include or exclude files and folders "
3424
  "(REQUEST_URI)."
3426
  "Vous pouvez également appliquer des filtres pour inclure ou exclure des "
3427
  "fichiers et des dossiers (REQUEST_URI)."
3428
 
3429
+ #: lib/help.php:543
3430
  msgid ""
3431
  "Live Log does not make use of any WordPress core file (e.g., <code>admin-"
3432
  "ajax.php</code>). It communicates directly with the firewall without loading "
3440
  "serveur, même si vous ajustez son intervalle de rafraîchissement de la page "
3441
  "sur la fréquence la plus rapide (5 secondes)."
3442
 
3443
+ #: lib/help.php:545
3444
  msgid ""
3445
  "If you are using the optional <code>.htninja</code> configuration file to "
3446
  "whitelist your IP, the Live Log feature will not work."
3449
  "pour toujours accepter les requêtes provenant de votre adresse IP, Live Log "
3450
  "ne fonctionnera pas."
3451
 
3452
+ #: lib/help.php:550
3453
  msgid "Log Format"
3454
  msgstr "Format d'affichage"
3455
 
3456
+ #: lib/help.php:551
3457
  msgid "You can easily customize the log format. Possible values are:"
3458
  msgstr ""
3459
  "Vous pouvez facilement changer le format d'affichage en combinant une ou "
3460
  "plusieurs des valeurs suivantes&nbsp;:"
3461
 
3462
+ #: lib/help.php:552
3463
  msgid "<code>%time</code>: the server date, time and timezone."
3464
  msgstr "<code>%time</code> : la date, heure et fuseau horaire du serveur."
3465
 
3466
+ #: lib/help.php:553
3467
  msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
3468
  msgstr ""
3469
  "<code>%name</code> : le nom de l'utilisateur (Authentification HTTP), s'il "
3470
  "existe."
3471
 
3472
+ #: lib/help.php:554
3473
  #, php-format
3474
  msgid ""
3475
  "<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
3479
  "serveur est derrière un CDN ou un proxy, cette variable retournera l'adresse "
3480
  "IP de celui-ci."
3481
 
3482
+ #: lib/help.php:555
3483
  msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
3484
  msgstr "<code>%method</code> : la méthode HTTP (ex. GET, POST)."
3485
 
3486
+ #: lib/help.php:556
3487
  #, php-format
3488
  msgid ""
3489
  "<code>%uri</code>: the URI which was given in order to access the page "
3490
  "(REQUEST_URI)."
3491
  msgstr "<code>%uri</code> : l'URI donnée pour accéder à la page (REQUEST_URI)."
3492
 
3493
+ #: lib/help.php:557
3494
  msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
3495
  msgstr "<code>%referrer</code> : le referrer (HTTP_REFERER), s'il existe."
3496
 
3497
+ #: lib/help.php:558
3498
  #, php-format
3499
  msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
3500
  msgstr ""
3501
  "<code>%ua</code> : l'en-tête User-Agent (HTTP_USER_AGENT), s'il existe."
3502
 
3503
+ #: lib/help.php:559
3504
  #, php-format
3505
  msgid ""
3506
  "<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
3510
  "votre serveur est derrière un CDN ou un proxy, cette variable retournera "
3511
  "l'adresse réelle du client."
3512
 
3513
+ #: lib/help.php:560
3514
  msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
3515
  msgstr ""
3516
  "<code>%host</code> : l'en-tête Host de la requête courante (HTTP_HOST), si "
3517
  "elle existe."
3518
 
3519
+ #: lib/help.php:561
3520
  msgid ""
3521
  "Additionally, you can include any of the following characters: <code>\"</"
3522
  "code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
3526
  "%</code>, <code>[</code>, <code>]</code>, <code>espace</code> et toute "
3527
  "lettre minuscule <code>a-z</code>."
3528
 
3529
+ #: lib/help.php:573 lib/rules_editor.php:27 ninjafirewall.php:771
3530
  msgid "Rules Editor"
3531
  msgstr "Éditeur de Règles"
3532
 
3533
+ #: lib/help.php:575
3534
  msgid ""
3535
  "Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
3536
  "of built-in rules used to protect your blog against the most common "
3547
  "règles, vous pouvez utiliser l’Éditeur de règles ci-dessous pour les "
3548
  "désactiver individuellement&nbsp;:"
3549
 
3550
+ #: lib/help.php:577
3551
  msgid ""
3552
  "Check your firewall log and find the rule ID you want to disable (it is "
3553
  "displayed in the <code>RULE</code> column)."
3555
  "Consultez le journal du pare-feu afin d'y trouver l'ID de la règle que vous "
3556
  "souhaitez désactiver (il est affiché dans la colonne <code>RULE</code>)."
3557
 
3558
+ #: lib/help.php:578
3559
  msgid ""
3560
  "Select its ID from the enabled rules list below and click the \"Disable it\" "
3561
  "button."
3563
  "Sélectionnez son ID dans la liste des règles ci-dessous et cliquez sur le "
3564
  "bouton \"Désactiver\"."
3565
 
3566
+ #: lib/help.php:580
3567
  msgid ""
3568
  "Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
3569
  "code> instead of a number, that means that the rule can be changed in the "
3573
  "d'union <code>-</code> à la place d'un nombre, cela signifie que la règle ne "
3574
  "peut être modifiée quand dans la page \"Politiques du Pare-feu\"."
3575
 
3576
+ #: lib/help.php:585
3577
  msgid "Credits"
3578
  msgstr "Crédits"
3579
 
3580
+ #: lib/help.php:587
3581
  msgid ""
3582
  "NinjaFirewall security rules protect against many vulnerabilities. Some of "
3583
  "them were reported by the following companies, individuals or mailing lists:"
3586
  "vulnérabilités. Certaines d'entre elles ont été découvertes par les "
3587
  "entreprises, particuliers ou listes de diffusion suivantes:"
3588
 
3589
+ #: lib/help.php:638 lib/overview.php:186
3590
  msgid "Updates"
3591
  msgstr "Mises à Jour"
3592
 
3593
+ #: lib/help.php:640
3594
  msgid ""
3595
  "To get the most efficient protection, you can ask NinjaFirewall to "
3596
  "automatically update its security rules."
3598
  "Pour bénéficier de la protection la plus efficace, vous pouvez demander à "
3599
  "NinjaFirewall de mettre à jour ses règles de sécurité automatiquement."
3600
 
3601
+ #: lib/help.php:642
3602
  msgid ""
3603
  "Each time a new vulnerability is found in WordPress or one of its plugins/"
3604
  "themes, a new set of security rules will be made available to protect "
3608
  "extensions ou ses thèmes, un nouvel ensemble de règles de sécurité est "
3609
  "disponible pour protéger contre cette vulnérabilité si nécessaire."
3610
 
3611
+ #: lib/help.php:644
3612
  msgid ""
3613
  "Only security rules will be downloaded. If a new version of NinjaFirewall "
3614
  "(including new files, options and features) was available, it would have to "
3619
  "jour depuis la page des \"Extensions\" de votre tableau de bord, comme "
3620
  "d'habitude."
3621
 
3622
+ #: lib/help.php:646
3623
  msgid ""
3624
  "We recommend to enable this feature, as it is the <strong>best way to keep "
3625
  "your WordPress secure</strong> against new vulnerabilities."
3628
  "<strong>meilleure façon de garder votre WordPress protégé</strong> contre "
3629
  "les dernières vulnérabilités."
3630
 
3631
+ #: lib/install.php:60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3632
  #, php-format
3633
  msgid ""
3634
+ "Error: Your .htaccess file is not writable, please change its permissions: %s"
 
3635
  msgstr ""
3636
+ "Erreur : Votre fichier .htaccess n'est pas accessible en écriture. Veuillez "
3637
+ "modifier ses autorisations : %s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3638
 
3639
+ #: lib/install.php:85 ninjafirewall.php:576 ninjafirewall.php:580
 
 
 
 
3640
  #, php-format
3641
+ msgid "Error: wrong parameter value (%s)."
3642
+ msgstr "Erreur : Mauvais paramètre (%s)."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3643
 
3644
+ #: lib/install.php:92 lib/install.php:168 lib/install.php:189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3645
  #, php-format
3646
  msgid ""
3647
+ "Error: The following file is not writable, please change its permissions: %s"
 
3648
  msgstr ""
3649
+ "Erreur : Le fichier suivant n'est pas accessible en écriture. Veuillez "
3650
+ "modifier ses autorisations : %s"
3651
 
3652
+ #: lib/install.php:115
3653
  #, php-format
3654
  msgid ""
3655
+ "NinjaFirewall detected that the requested changes seemed to crash your blog. "
3656
+ "%s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3657
  msgstr ""
3658
+ "NinjaFirewall a détecté que les modifications demandées semblaient planter "
3659
+ "votre blog. %s"
3660
 
3661
+ #: lib/install.php:116
3662
  msgid ""
3663
+ "Changes have been undone. You may need to modify your selection and try "
3664
+ "again."
 
 
 
 
 
 
 
3665
  msgstr ""
3666
+ "Les modifications ont été annulées. Vous devriez peut-être modifier votre "
3667
+ "sélection et réessayer."
3668
 
3669
+ #: lib/install.php:126
 
 
 
 
3670
  #, php-format
3671
+ msgid "The website front-end returned: HTTP %s %s."
3672
+ msgstr "La page d'accueil du site a retourné : HTTP %s %s."
 
 
3673
 
3674
+ #: lib/install.php:138
 
 
 
 
 
 
 
 
 
 
 
 
3675
  #, php-format
3676
+ msgid "The website front-end returned a fatal error: %s."
3677
+ msgstr "La page d'accueil du site a retourné une erreur fatale : %s."
 
 
 
 
3678
 
3679
+ #: lib/install.php:218 lib/install.php:243 lib/install.php:268
3680
+ #: lib/install.php:289
3681
+ msgid "File is not writable"
3682
+ msgstr "Le fichier n'est pas accessible en écriture"
 
3683
 
3684
+ #: lib/install_default.php:164
 
3685
  msgid ""
3686
+ "Error: The installer cannot download the security rules from wordpress.org "
3687
+ "website."
3688
  msgstr ""
3689
+ "Erreur : Impossible de télécharger les règles de sécurité depuis le site de "
3690
+ "wordpress.org."
3691
 
3692
+ #: lib/install_default.php:165
3693
  msgid ""
3694
+ "The server may be temporarily down or you may have network connectivity "
3695
+ "problems? Please try again in a few minutes."
3696
  msgstr ""
3697
+ "Le serveur est peut être temporairement en panne ou bien vous avez des "
3698
+ "problèmes de connectivité réseau ? Veuillez ré-essayer d'ici quelques "
3699
+ "minutes."
 
 
 
 
 
 
 
 
3700
 
3701
+ #: lib/install_default.php:166
3702
  msgid ""
3703
+ "NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
3704
+ "your server does not support SSL? You can force NinjaFirewall to use a non-"
3705
+ "secure HTTP connection by adding the following directive to your <strong>wp-"
3706
+ "config.php</strong> file:"
3707
  msgstr ""
3708
+ "NinjaFirewall télécharge ses règles de sécurité en utilisant une connexion "
3709
+ "sécurisée (HTTPS). Peut-être que votre serveur ne prend pas en charge "
3710
+ "HTTPS ? Dans ce cas, vous pouvez demander à NinjaFirewall d'utiliser une "
3711
+ "connexion non-sécurisée (HTTP) en ajoutant la ligne suivante dans votre "
3712
+ "fichier <strong>wp-config.php</strong> :"
3713
 
3714
  #: lib/live_log.php:29
3715
  msgid ""
3730
  "et assurez vous que l'option \"Ajouter l'Administrateur à la liste blanche\" "
3731
  "est activée."
3732
 
3733
+ #: lib/live_log.php:105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3734
  msgid "Refresh rate:"
3735
  msgstr "Intervalle :"
3736
 
3737
+ #: lib/live_log.php:107
3738
  msgid "5 seconds"
3739
  msgstr "5 secondes"
3740
 
3741
+ #: lib/live_log.php:108
3742
  msgid "10 seconds"
3743
  msgstr "10 secondes"
3744
 
3745
+ #: lib/live_log.php:109
3746
  msgid "20 seconds"
3747
  msgstr "20 secondes"
3748
 
3749
+ #: lib/live_log.php:110
3750
  msgid "45 seconds"
3751
  msgstr "45 secondes"
3752
 
3753
+ #: lib/live_log.php:112
3754
  msgid "Clear screen"
3755
  msgstr "Effacer"
3756
 
3757
+ #: lib/live_log.php:113
3758
  msgid "Autoscrolling"
3759
  msgstr "Défilement auto."
3760
 
3761
+ #: lib/live_log.php:118
3762
  msgid "Live Log will not display whitelisted users and brute-force attacks."
3763
  msgstr ""
3764
  "Live Log n'affiche pas les connexions de l'administrateur, ni les attaques "
3765
  "par force brute."
3766
 
3767
+ #: lib/live_log.php:155
3768
+ msgid "Live Log Options"
3769
+ msgstr "Options de Live Log"
3770
 
3771
+ #: lib/live_log.php:158
3772
  msgid "Inclusion and exclusion filters (REQUEST_URI)"
3773
  msgstr "Filtres d'inclusion et d'exclusion (REQUEST_URI)"
3774
 
3775
+ #: lib/live_log.php:162
3776
  msgid "Must include"
3777
  msgstr "Doit inclure"
3778
 
3779
+ #: lib/live_log.php:163
3780
  msgid "Must not include"
3781
  msgstr "Ne doit pas inclure"
3782
 
3783
+ #: lib/live_log.php:167
3784
  msgid ""
3785
  "Full or partial case-sensitive REQUEST_URI string. Multiple values must be "
3786
  "comma-separated."
3788
  "Chaîne de caractères REQUEST_URI complète ou partielle, sensible à la casse. "
3789
  "Plusieurs valeurs doivent être séparées par des virgules."
3790
 
3791
+ #: lib/live_log.php:171
3792
  msgid "Format"
3793
  msgstr "Format d'affichage"
3794
 
3795
+ #: lib/live_log.php:174
3796
  msgid "Custom"
3797
  msgstr "Autre"
3798
 
3799
+ #: lib/live_log.php:175
3800
  msgid "See contextual help for available log format."
3801
  msgstr ""
3802
  "Consultez l'aide contextuelle pour avoir plus d'information sur les formats "
3803
  "disponibles."
3804
 
3805
+ #: lib/live_log.php:179
3806
  msgid "Display"
3807
  msgstr "Afficher"
3808
 
3809
+ #: lib/live_log.php:189
3810
  msgid "Timezone"
3811
  msgstr "Fuseau horaire"
3812
 
3813
+ #: lib/live_log.php:204
3814
  msgid "Save Live Log Options"
3815
  msgstr "Sauvegarder les options"
3816
 
3817
+ #: lib/live_log.php:243
3818
  msgid "Error: please enter the custom log format."
3819
  msgstr "Erreur : veuillez entrer le format d'affichage."
3820
 
3821
+ #: lib/login_protection.php:72 lib/login_protection.php:126
3822
+ #: lib/login_protection.php:476
3823
  msgid "Access restricted"
3824
  msgstr "Accès limité"
3825
 
3826
+ #: lib/login_protection.php:81 lib/login_protection.php:130
3827
+ #: lib/login_protection.php:486
3828
  msgid "Type the characters you see in the picture below:"
3829
  msgstr "Entrez le texte de l'image ci-dessous :"
3830
 
3831
+ #: lib/login_protection.php:186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3832
  msgid ""
3833
+ "GD Support is not available on your server, the CAPTCHA option is disabled."
 
3834
  msgstr ""
3835
+ "L'extension PHP GD n'est pas disponible sur votre serveur, la protection par "
3836
+ "CAPTCHA ne peut pas fonctionner."
 
 
 
 
3837
 
3838
+ #: lib/login_protection.php:191
3839
  msgid ""
3840
  "Error: GD Support is not available on your server, the captcha protection "
3841
  "will not work!"
3843
  "Erreur : L'extension PHP GD n'est pas disponible sur votre serveur, la "
3844
  "protection par captcha ne peut pas fonctionner."
3845
 
3846
+ #: lib/login_protection.php:201
3847
  msgid "Enable brute force attack protection"
3848
  msgstr "Activer la protection contre les attaques par force brute"
3849
 
3850
+ #: lib/login_protection.php:214
 
 
 
 
 
 
 
 
3851
  msgid "Type of protection"
3852
  msgstr "Type de protection"
3853
 
3854
+ #: lib/login_protection.php:216
3855
+ msgid "Username + Password"
3856
+ msgstr "Nom d'utilisateur + mot de passe"
3857
+
3858
+ #: lib/login_protection.php:217
3859
+ msgid "Captcha image"
3860
+ msgstr "Image CAPTCHA"
3861
 
3862
+ #: lib/login_protection.php:222
3863
+ msgid "When to enable the protection"
3864
+ msgstr "Quand activer la protection"
3865
 
3866
+ #: lib/login_protection.php:224
3867
+ msgid "Always enabled"
3868
+ msgstr "Toujours activer"
3869
+
3870
+ #: lib/login_protection.php:225
3871
+ msgid "When under attack"
3872
+ msgstr "Si attaque en cours"
3873
+
3874
+ #: lib/login_protection.php:235
3875
  msgid "Protect the login page against"
3876
  msgstr "Protéger la page de connexion contre"
3877
 
3878
+ #: lib/login_protection.php:237
3879
  msgid "<code>GET</code> request attacks"
3880
  msgstr "Les attaques <code>GET</code>"
3881
 
3882
+ #: lib/login_protection.php:238
3883
  msgid "<code>POST</code> request attacks (default)"
3884
  msgstr "Les attaques <code>POST</code> (défaut)"
3885
 
3886
+ #: lib/login_protection.php:239
3887
  msgid "<code>GET</code> and <code>POST</code> requests attacks"
3888
  msgstr "Les attaques <code>GET</code> et <code>POST</code>"
3889
 
3890
+ #: lib/login_protection.php:243
3891
  msgid "Enable protection"
3892
  msgstr "Activer la protection"
3893
 
3894
+ #: lib/login_protection.php:246
3895
  #, php-format
3896
  msgid "For %1$s minutes, if more than %2$s %3$s requests within %4$s seconds."
3897
  msgstr ""
3898
  "Pendant %1$s minutes, si plus de %2$s requêtes %3$s détectées en moins de "
3899
  "%4$s secondes."
3900
 
3901
+ #: lib/login_protection.php:267
3902
  msgid "HTTP authentication"
3903
  msgstr "Authentification HTTP"
3904
 
3905
+ #: lib/login_protection.php:269
3906
  msgid "User:"
3907
  msgstr "Utilisateur&nbsp;:"
3908
 
3909
+ #: lib/login_protection.php:269
3910
  msgid "Password:"
3911
  msgstr "Mot de passe&nbsp;:"
3912
 
3913
+ #: lib/login_protection.php:270
3914
  msgid "User and Password must be from 6 to 32 characters."
3915
  msgstr "L'utilisateur et mot de passe doivent comporter de 6 à 32 caractères."
3916
 
3917
+ #: lib/login_protection.php:271
3918
  msgid "Message (max. 1024 characters, HTML tags allowed)"
3919
  msgstr "Message (1 024 caractères maximum, balises HTML acceptées)"
3920
 
3921
+ #: lib/login_protection.php:282
3922
  msgid "Message"
3923
  msgstr "Message"
3924
 
3925
+ #: lib/login_protection.php:285
3926
  msgid "This message will be displayed above the captcha. Max. 255 characters."
3927
  msgstr "Ce message sera affiché au-dessus du captcha."
3928
 
3929
+ #: lib/login_protection.php:296
3930
  msgid "Various options"
3931
  msgstr "Options diverses"
3932
 
3933
+ #: lib/login_protection.php:301
3934
  msgid ""
3935
  "If you are using the Jetpack plugin, blocking access to the XML-RPC API may "
3936
  "prevent it from working correctly."
3938
  "Si vous utilisez l'extension Jetpack, bloquer l'accès à l'API XML-RPC "
3939
  "pourrait l’empêcher de fonctionner correctement."
3940
 
3941
+ #: lib/login_protection.php:307
3942
+ msgid "Apply the protection to the <code>xmlrpc.php</code> script as well"
3943
+ msgstr "Activer aussi la protection pour le fichier <code>xmlrpc.php</code>"
 
 
 
 
3944
 
3945
+ #: lib/login_protection.php:315
3946
+ msgid "Enable bot protection"
3947
+ msgstr "Activer la protection contre les bots"
3948
 
3949
+ #: lib/login_protection.php:329
3950
+ msgid "Write the incident to the server Authentication log"
3951
  msgstr ""
3952
+ "Enregistrer l'incident dans le journal des authentifications du serveur"
 
 
 
 
 
3953
 
3954
+ #: lib/login_protection.php:335
3955
  msgid "Your server configuration is not compatible with that option."
3956
  msgstr ""
3957
  "La configuration de votre serveur n'est pas compatible avec cette option."
3958
 
3959
+ #: lib/login_protection.php:338
3960
  msgid ""
3961
+ "The login protection must be set to \"When under attack\" in order to use "
3962
  "this option."
3963
  msgstr ""
3964
+ "La protection doit être activée sur \"Si attaque en cours\" afin de pouvoir "
3965
+ "utiliser cette option."
3966
 
3967
+ #: lib/login_protection.php:350
3968
+ msgid "Disable NinjaFirewall's signature on the login protection page"
3969
+ msgstr "Désactiver la signature de NinjaFirewall sur la page de connexion"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3970
 
3971
+ #: lib/login_protection.php:362
3972
  msgid "Save Login Protection"
3973
  msgstr "Sauvegarder les options"
3974
 
3975
+ #: lib/login_protection.php:365
3976
  msgid "See our benchmark and stress-test:"
3977
  msgstr "Consultez nos benchmarks&nbsp;:"
3978
 
3979
+ #: lib/login_protection.php:384
3980
  #, php-format
3981
  msgid "Error: %s directory is not writable. Please chmod it to 0777."
3982
  msgstr ""
3983
  "Erreur : impossible d’écrire dans le répertoire %s. Assurez-vous qu'il "
3984
  "n'est pas en lecture seule."
3985
 
3986
+ #: lib/login_protection.php:458
3987
  msgid "Error: please enter a user name for HTTP authentication."
3988
  msgstr ""
3989
  "Erreur : veuillez entrer un nom d'utilisateur pour l'authentification HTTP."
3990
 
3991
+ #: lib/login_protection.php:460
3992
  msgid "Error: HTTP authentication user name is not valid."
3993
  msgstr ""
3994
  "Erreur : le nom d'utilisateur pour l'authentification HTTP n'est pas valide."
3995
 
3996
+ #: lib/login_protection.php:466
3997
  msgid "Error: please enter a user name and password for HTTP authentication."
3998
  msgstr ""
3999
  "Erreur : veuillez entrer un nom d'utilisateur et mot de passe pour "
4000
  "l'authentification HTTP."
4001
 
4002
+ #: lib/login_protection.php:469
4003
  msgid "Error: password must be from 6 to 32 characters."
4004
  msgstr "Erreur : le mot de passe doit comporter de 6 à 32 caractères."
4005
 
4006
+ #: lib/login_protection.php:504
4007
  #, php-format
4008
  msgid "Error: unable to write to the %s configuration file"
4009
  msgstr "Erreur : impossible d’écrire dans le fichier de configuration %s"
4010
 
4011
+ #: lib/network.php:24 ninjafirewall.php:1075 ninjafirewall.php:1079
4012
  #, php-format
4013
  msgid "You are not allowed to perform this task (%s)."
4014
  msgstr "Vous n'êtes pas autorisé à effectuer cette tâche (%s)."
4017
  msgid "You do not have a multisite network."
4018
  msgstr "Vous ne disposez pas d'un réseau multisite."
4019
 
4020
+ #: lib/network.php:65
4021
  msgid "NinjaFirewall Status"
4022
  msgstr "Statut de NinjaFirewall"
4023
 
4024
+ #: lib/network.php:68
4025
  msgid ""
4026
  "Display NinjaFirewall status icon in the admin bar of all sites in the "
4027
  "network"
4029
  "Afficher l'icône du statut de NinjaFirewall dans la barre d'administration "
4030
  "de tous les sites du réseau"
4031
 
4032
+ #: lib/network.php:77
4033
  msgid "Save Network options"
4034
  msgstr "Sauvegarder les options"
4035
 
4036
+ #: lib/overview.php:49
4037
+ msgid "Make sure you followed the instructions and restarted Openlitespeed."
4038
+ msgstr ""
4039
+ "Assurez-vous de bien suivre les instructions et de redémarrer Openlitespeed."
4040
+
4041
+ #: lib/overview.php:53
4042
+ #, php-format
4043
+ msgid ""
4044
+ "Make sure your HTTP server support the %s directive in .htaccess files. Or "
4045
+ "maybe you need to restart your HTTP server to apply the changes?"
4046
+ msgstr ""
4047
+ "Assurez-vous que votre serveur HTTP prend en charge la directive %s dans les "
4048
+ "fichiers .htaccess. Ou peut-être devez-vous redémarrer votre serveur HTTP "
4049
+ "pour appliquer les changements ?"
4050
+
4051
+ #: lib/overview.php:61
4052
+ #, php-format
4053
+ msgid ""
4054
+ "Because PHP caches INI files, you may need to wait up to five minutes before "
4055
+ "the changes are reloaded by the PHP interpreter. <strong>Please wait for "
4056
+ "<font id=\"nfw-waf-count\">%d</font> seconds</strong> before trying again "
4057
+ "(you can navigate away from this page and come back in a few minutes)."
4058
+ msgstr ""
4059
+ "Parce que PHP met en cache les fichiers INI, vous devez attendre jusqu'à "
4060
+ "cinq minutes avant qu'il prenne en compte les modifications effectuées. "
4061
+ "<strong>Veuillez patienter pendant <font id=\"nfw-waf-count\">%d</font> "
4062
+ "secondes</strong> avant de réessayer (vous pouvez quitter cette page et "
4063
+ "revenir dans quelques minutes)."
4064
+
4065
+ #: lib/overview.php:69
4066
+ msgid "Oops! Full WAF mode is not enabled yet."
4067
+ msgstr "Oops! Le mode Full WAF n'est pas encore activé."
4068
+
4069
+ #: lib/overview.php:80
4070
+ msgid "NinjaFirewall (WP Edition)"
4071
+ msgstr "NinjaFirewall (WP Edition)"
4072
+
4073
+ #: lib/overview.php:85
4074
  msgid "Congratulations, NinjaFirewall is up and running!"
4075
  msgstr "Félicitations, NinjaFirewall est bien activé&nbsp;!"
4076
 
4077
+ #: lib/overview.php:86
4078
  msgid ""
4079
  "If you need help, click on the contextual \"Help\" menu tab located in the "
4080
  "upper right corner of each page."
4082
  "Si vous avez besoin d'aide, cliquez sur l'onglet \"Aide\" situé dans le coin "
4083
  "supérieur droit de chaque page."
4084
 
4085
+ #: lib/overview.php:88
4086
  msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to"
4087
  msgstr ""
4088
  "Un e-mail \"Guide d'Utilisation, d'Installation et de Dépannage\" a été "
4089
  "envoyé à l'adresse"
4090
 
4091
+ #: lib/overview.php:110
4092
+ msgid "Unknown error"
4093
+ msgstr "Erreur inconnue"
4094
 
4095
+ #: lib/overview.php:114 lib/overview.php:122
4096
  msgid "Firewall"
4097
  msgstr "Pare-feu"
4098
 
4099
+ #: lib/overview.php:130
 
 
 
 
 
 
 
 
4100
  msgid "Mode"
4101
  msgstr "Mode"
4102
 
4103
+ #: lib/overview.php:135 lib/overview.php:141
4104
  #, php-format
4105
  msgid "NinjaFirewall is running in %s mode."
4106
  msgstr "NinjaFirewall fonctionne en mode %s."
4107
 
4108
+ #: lib/overview.php:135
4109
+ msgid "WordPress WAF"
4110
+ msgstr "WordPress WAF"
4111
+
4112
+ #: lib/overview.php:137
4113
+ #, php-format
4114
+ msgid ""
4115
+ "For better protection, <a %s>click here</a> to enable its Full WAF mode."
4116
+ msgstr ""
4117
+ "Pour une meilleure protection, <a %s>cliquez ici</a> pour activer son mode "
4118
+ "Full WAF."
4119
+
4120
+ #: lib/overview.php:137
4121
+ msgid "Click to install NinjaFirewall in Full WAF mode."
4122
+ msgstr "Cliquez pour installer NinjaFirewall en mode Full WAF."
4123
+
4124
+ #: lib/overview.php:141
4125
+ msgid "Full WAF"
4126
+ msgstr "Full WAF"
4127
+
4128
+ #: lib/overview.php:153
4129
  msgid "Enabled."
4130
  msgstr "Activé."
4131
 
4132
+ #: lib/overview.php:153
4133
  msgid "Click here to turn Debugging Mode off"
4134
  msgstr "Cliquez ici pour désactiver le mode Débogage"
4135
 
4136
+ #: lib/overview.php:159
4137
+ msgid "Edition"
4138
+ msgstr "Édition"
4139
+
4140
+ #: lib/overview.php:160
4141
+ msgid "Need more security? Get Premium!"
4142
+ msgstr "Besoin de plus de sécurité ? Découvrez NinjaFirewall WP+ Edition !"
4143
 
4144
+ #: lib/overview.php:163 lib/utils.php:724
4145
  msgid "Version"
4146
  msgstr "Version"
4147
 
4148
+ #: lib/overview.php:164
4149
  msgid "Security rules:"
4150
  msgstr "Règles de sécurité&nbsp;:"
4151
 
4152
+ #: lib/overview.php:168
4153
+ msgid "PHP SAPI"
4154
+ msgstr "PHP SAPI"
4155
+
4156
+ #: lib/overview.php:187
4157
  msgid "Security rules updates are disabled."
4158
  msgstr "La mise à jour automatique des règles de sécurité est désactivée."
4159
 
4160
+ #: lib/overview.php:187
4161
  msgid ""
4162
  "If you want your blog to be protected against the latest threats, enable "
4163
  "automatic security rules updates."
4165
  "Pour garder votre WordPress protégé contre les dernières vulnérabilités, "
4166
  "pensez à l'activer."
4167
 
4168
+ #: lib/overview.php:195 lib/overview.php:203
4169
  msgid "Admin user"
4170
  msgstr "Administrateur"
4171
 
4172
+ #: lib/overview.php:196
4173
  #, php-format
4174
  msgid ""
4175
  "You are not whitelisted. Ensure that the \"Do not block WordPress "
4182
  "\"%s\">Politiques du Pare-feu</a>, sinon vous pourriez être bloqué par le "
4183
  "pare-feu lorsque vous travaillez depuis votre Tableau de bord."
4184
 
4185
+ #: lib/overview.php:204
4186
  msgid "You are whitelisted by the firewall."
4187
  msgstr "Vous êtes dans la liste blanche du pare-feu."
4188
 
4189
+ #: lib/overview.php:211
4190
  msgid "Restrictions"
4191
  msgstr "Restrictions"
4192
 
4193
+ #: lib/overview.php:212
4194
+ msgid "Access to NinjaFirewall is restricted to specific users."
4195
+ msgstr "L'accès à NinjaFirewall est restreint à certains utilisateurs."
4196
 
4197
+ #: lib/overview.php:223
4198
  msgid "User session"
4199
  msgstr "Session utilisateur"
4200
 
4201
+ #: lib/overview.php:224
4202
  msgid ""
4203
  "It seems that the user session set by NinjaFirewall was not found by the "
4204
  "firewall script."
4206
  "Il semble que la session d'utilisateur définie par NinjaFirewall n'a pas été "
4207
  "trouvé par le script du pare-feu."
4208
 
4209
+ #: lib/overview.php:232
4210
  #, php-format
4211
  msgid ""
4212
  "the public key is invalid. Please <a href=\"%s\">check your configuration</"
4215
  "la clé publique est invalide. Veuillez vérifier <a href=\"%s\">votre "
4216
  "configuration</a>."
4217
 
4218
+ #: lib/overview.php:236
4219
  msgid "No IP address restriction."
4220
  msgstr "Aucune restriction d'accès par adresse IP."
4221
 
4222
+ #: lib/overview.php:239
4223
  #, php-format
4224
  msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
4225
  msgstr ""
4226
  "L'adresse IP %s est autorisée à accéder au journal du pare-feu de "
4227
  "NinjaFirewall."
4228
 
4229
+ #: lib/overview.php:242
4230
  #, php-format
4231
  msgid ""
4232
  "the whitelisted IP is not valid. Please <a href=\"%s\">check your "
4235
  "l'adresse IP est invalide. Veuillez vérifier <a href=\"%s\">votre "
4236
  "configuration</a>."
4237
 
4238
+ #: lib/overview.php:251
4239
  #, php-format
4240
  msgid "Error: %s"
4241
  msgstr "Erreur : %s"
4242
 
4243
+ #: lib/overview.php:266
4244
  msgid "Source IP"
4245
  msgstr "IP source"
4246
 
4247
+ #: lib/overview.php:267
4248
  #, php-format
4249
  msgid "You have a private IP : %s"
4250
  msgstr "Vous avez l'adresse IP d'un réseau privé : %s"
4251
 
4252
+ #: lib/overview.php:267
4253
  #, php-format
4254
  msgid ""
4255
  "If your site is behind a reverse proxy or a load balancer, ensure that you "
4261
  "la bonne adresse IP, sinon utilisez le fichier de configuration %s de "
4262
  "NinjaFirewall. "
4263
 
4264
+ #: lib/overview.php:275 lib/overview.php:285
4265
  msgid "CDN detection"
4266
  msgstr "Détection CDN"
4267
 
4268
+ #: lib/overview.php:276
4269
  #, php-format
4270
  msgid ""
4271
  "%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
4276
  "vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
4277
  "adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
4278
 
4279
+ #: lib/overview.php:286
4280
  #, php-format
4281
  msgid ""
4282
  "%s detected: you seem to be using Incapsula CDN services. Ensure that you "
4287
  "vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
4288
  "adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
4289
 
4290
+ #: lib/overview.php:295 lib/overview.php:304
4291
  msgid "Log dir"
4292
  msgstr "Répertoire du Journal"
4293
 
4294
+ #: lib/overview.php:296 lib/overview.php:305
4295
  #, php-format
4296
  msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
4297
  msgstr ""
4298
  "Le répertoire %s est en lecture seule ! Veuillez changer ses permissions "
4299
  "(0777 ou équivalent)."
4300
 
4301
+ #: lib/overview.php:313
4302
  msgid "Optional configuration file"
4303
  msgstr "Fichier de configuration"
4304
 
4305
+ #: lib/overview.php:320
4306
  msgid "MySQLi link identifier"
4307
  msgstr "Identifiant de lien MySQLi"
4308
 
4309
+ #: lib/overview.php:321
4310
  msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
4311
  msgstr ""
4312
  "Un identifiant de lien MySQLi a été détecté dans votre fichier <code>."
4313
  "htninja</code>."
4314
 
4315
+ #: lib/rules_editor.php:37
4316
  msgid "Error: you did not select a rule to disable."
4317
  msgstr "Erreur : vous devez sélectionner la règle à désactiver."
4318
 
4319
+ #: lib/rules_editor.php:39 lib/rules_editor.php:54
4320
  msgid "Error: to change this rule, use the \"Firewall Policies\" menu."
4321
  msgstr ""
4322
  "Erreur : pour modifier cette règle, utilisez le menu \"Politiques du Pare-feu"
4323
  "\"."
4324
 
4325
+ #: lib/rules_editor.php:41 lib/rules_editor.php:56
4326
  msgid "Error: this rule does not exist."
4327
  msgstr "Erreur : cette règle n'existe pas."
4328
 
4329
+ #: lib/rules_editor.php:45
4330
  #, php-format
4331
  msgid "Rule ID %s has been disabled."
4332
  msgstr "La règle %s a été désactivée."
4333
 
4334
+ #: lib/rules_editor.php:52
4335
  msgid "Error: you did not select a rule to enable."
4336
  msgstr "Erreur : vous devez sélectionner la règle à activer."
4337
 
4338
+ #: lib/rules_editor.php:60
4339
  #, php-format
4340
  msgid "Rule ID %s has been enabled."
4341
  msgstr "La règle %s a été activée."
4342
 
4343
+ #: lib/rules_editor.php:70
4344
  msgid "Error: no rules found."
4345
  msgstr "Erreur : aucune règle de sécurité trouvée."
4346
 
4347
+ #: lib/rules_editor.php:92
4348
  msgid "NinjaFirewall built-in security rules"
4349
  msgstr "Éditeur de règles du pare-feu"
4350
 
4351
+ #: lib/rules_editor.php:95
4352
  msgid "Select the rule you want to disable or enable"
4353
  msgstr "Sélectionnez la règle à activer ou désactiver"
4354
 
4355
+ #: lib/rules_editor.php:99
4356
  msgid "Total rules enabled"
4357
  msgstr "Règles activées"
4358
 
4359
  # Todo ?
4360
+ #: lib/rules_editor.php:105 lib/rules_editor.php:134
4361
  msgid "Remote/local file inclusion"
4362
  msgstr "Remote/local file inclusion"
4363
 
4364
  # Todo ?
4365
+ #: lib/rules_editor.php:107 lib/rules_editor.php:136
4366
  msgid "Cross-site scripting"
4367
  msgstr "Cross-site scripting"
4368
 
4369
  # Todo ?
4370
+ #: lib/rules_editor.php:109 lib/rules_editor.php:138
4371
  msgid "Code injection"
4372
  msgstr "Code injection"
4373
 
4374
  # Todo ?
4375
+ #: lib/rules_editor.php:111 lib/rules_editor.php:140
4376
  msgid "SQL injection"
4377
  msgstr "SQL injection"
4378
 
4379
+ #: lib/rules_editor.php:113 lib/rules_editor.php:142
4380
  msgid "Various vulnerability"
4381
  msgstr "Vulnérabilité (divers)"
4382
 
4383
  # Todo ?
4384
+ #: lib/rules_editor.php:115 lib/rules_editor.php:144
4385
  msgid "Backdoor/shell"
4386
  msgstr "Backdoor/shell"
4387
 
4388
+ #: lib/rules_editor.php:117 lib/rules_editor.php:146
4389
  msgid "Application specific"
4390
  msgstr "Application spécifique"
4391
 
4392
+ #: lib/rules_editor.php:119 lib/rules_editor.php:148
4393
  msgid "WordPress vulnerability"
4394
  msgstr "Vulnérabilité WordPress"
4395
 
4396
+ #: lib/rules_editor.php:121 lib/rules_editor.php:150
4397
  msgid "Rule ID"
4398
  msgstr "Règle"
4399
 
4400
+ #: lib/rules_editor.php:124
4401
  msgid "Disable it"
4402
  msgstr "Désactiver"
4403
 
4404
+ #: lib/rules_editor.php:129
4405
  msgid "Total rules disabled"
4406
  msgstr "Règles désactivées"
4407
 
4408
+ #: lib/rules_editor.php:154
4409
  msgid "Enable it"
4410
  msgstr "Activer"
4411
 
4412
+ #: lib/rules_update.php:73 lib/wpplus.php:217 ninjafirewall.php:775
4413
  msgid "Rules Update"
4414
  msgstr "Mise à Jour des Règles"
4415
 
4423
  msgid "Security rules have been updated."
4424
  msgstr "Les règles de sécurité ont été mises à jour."
4425
 
4426
+ #: lib/rules_update.php:94 lib/rules_update.php:429
4427
  msgid "No security rules update available."
4428
  msgstr "Aucune mise à jour des règles de sécurité disponible."
4429
 
4430
+ #: lib/rules_update.php:112
 
 
 
 
4431
  #, php-format
4432
  msgid ""
4433
+ "It seems that %s is set. Ensure you have another way to run WP-Cron, "
4434
  "otherwise NinjaFirewall automatic updates will not work."
4435
  msgstr ""
4436
  "Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
4437
  "les mises à jour automatiques ne pourront pas être effectuées."
4438
 
4439
+ #: lib/rules_update.php:139
4440
+ msgid "Automatically update NinjaFirewall security rules"
4441
+ msgstr "Activer la mise à jour automatique des règles de sécurité"
4442
+
4443
+ #: lib/rules_update.php:151
4444
  msgid "Check for updates"
4445
  msgstr "Vérifier les mises à jour"
4446
 
4447
+ #: lib/rules_update.php:154
4448
  msgid "Every 15 minutes"
4449
  msgstr "Toutes les 15 minutes"
4450
 
4451
+ #: lib/rules_update.php:155
4452
  msgid "Every 30 minutes"
4453
  msgstr "Toutes les 30 minutes"
4454
 
4455
+ #: lib/rules_update.php:170
 
 
 
 
 
 
 
 
 
4456
  msgid ""
4457
  "The next scheduled date is in the past! WordPress wp-cron may not be working "
4458
  "or may have been disabled."
4461
  "passé&nbsp;! Essayez de recharger cette page, sinon vérifiez que WP-Cron n'a "
4462
  "pas été désactivé."
4463
 
4464
+ #: lib/rules_update.php:174
4465
+ #, php-format
4466
+ msgid ""
4467
+ "Next scheduled update will start in approximately %s day, %s hour(s), %s "
4468
+ "minute(s) and %s seconds."
4469
+ msgstr ""
4470
+ "La prochaine vérification des mises à jour aura lieu dans %s jour, %s "
4471
+ "heure(s), %s minute(s) et %s secondes."
4472
+
4473
+ #: lib/rules_update.php:182
4474
  msgid "Notification"
4475
  msgstr "Notification"
4476
 
4477
+ #: lib/rules_update.php:184
4478
  msgid "Send me a report by email when security rules have been updated."
4479
  msgstr ""
4480
  "Envoyez-moi un rapport par e-mail lorsque les règles de sécurité ont été "
4481
  "mises à jour."
4482
 
4483
+ #: lib/rules_update.php:185
4484
  msgid ""
4485
  "Reports will be sent to the contact email address defined in the Event "
4486
  "Notifications menu."
4488
  "Les rapports seront envoyés à l'adresse e-mail définie dans la page "
4489
  "\"Notifications d'Événement\"."
4490
 
4491
+ #: lib/rules_update.php:195
 
 
 
 
 
 
 
 
4492
  msgid "The updates log is currently empty."
4493
  msgstr "Le journal des mises à jour est vide."
4494
 
4495
+ #: lib/rules_update.php:199
4496
  msgid "Updates Log"
4497
  msgstr "Journal des mises à jour"
4498
 
4499
+ #: lib/rules_update.php:206
 
 
 
 
4500
  msgid "Log is flushed automatically."
4501
  msgstr "Le journal est purgé automatiquement."
4502
 
4503
+ #: lib/rules_update.php:217
4504
+ msgid "Save Updates Options"
4505
+ msgstr "Sauvegarder les options"
4506
+
4507
+ #: lib/rules_update.php:218
4508
+ msgid "Check For Updates Now!"
4509
+ msgstr "Vérifier les mises à jour maintenant ! "
4510
+
4511
+ #: lib/rules_update.php:226
4512
+ msgid "Delete Log"
4513
+ msgstr "Supprimer le journal"
4514
+
4515
+ #: lib/rules_update.php:316
4516
  msgid "Error: Wrong rules format."
4517
  msgstr "Erreur : Le format des règles téléchargées ne correspond pas."
4518
 
4519
+ #: lib/rules_update.php:325
4520
  msgid "Error: Unable to unserialize the new rules."
4521
  msgstr ""
4522
  "Erreur : Impossible d'extraire les règles du fichier téléchargé (unable to "
4523
  "unserialize the new rules)."
4524
 
4525
+ #: lib/rules_update.php:333
4526
  msgid "Error: Unserialized rules seem corrupted."
4527
  msgstr ""
4528
  "Erreur : Le fichier des règles téléchargé semblent corrompu (unserialized "
4529
  "rules seem corrupted)."
4530
 
4531
+ #: lib/rules_update.php:373
4532
  #, php-format
4533
  msgid "Security rules updated to version %s."
4534
  msgstr "Les règles de sécurité ont été mises à jour vers la version %s."
4535
 
4536
+ #: lib/rules_update.php:409
4537
  msgid ""
4538
  "Error: Your version of NinjaFirewall is too old and is not compatible with "
4539
  "those rules. Please upgrade it."
4541
  "Erreur : Votre version de NinjaFirewall est trop ancienne et n'est pas "
4542
  "compatible avec ces règles de sécurité. Mettez à jour NinjaFirewall."
4543
 
4544
+ #: lib/rules_update.php:418
4545
  msgid "Error: Unable to retrieve the new rules version."
4546
  msgstr "Erreur : Impossible de récupérer la nouvelle version des règles."
4547
 
4548
+ #: lib/rules_update.php:436
4549
  #, php-format
4550
  msgid "Error: Server returned a %s HTTP error code (#1)."
4551
  msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#1)."
4552
 
4553
+ #: lib/rules_update.php:443 lib/rules_update.php:509
4554
  msgid "Error: Unable to connect to the remote server"
4555
  msgstr "Erreur : Impossible de se connecter au serveur distant"
4556
 
4557
+ #: lib/rules_update.php:473
4558
  #, php-format
4559
  msgid "Error: The new rules versions do not match (%s != %s)."
4560
  msgstr ""
4561
  "Erreur : La versions des nouvelles règles ne correspond pas (%s != %s)."
4562
 
4563
+ #: lib/rules_update.php:487
4564
  #, php-format
4565
  msgid ""
4566
  "Error: The new rules %s digital signature is not correct. Aborting update, "
4569
  "Erreur : La signature numérique des nouvelles règles %s n'est pas correcte. "
4570
  "Annulation de la mise à jour, les règles ont peut-être été altérées."
4571
 
4572
+ #: lib/rules_update.php:502
4573
  #, php-format
4574
  msgid "Error: Server returned a %s HTTP error code (#2)."
4575
  msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#2)."
4576
 
4577
+ #: lib/rules_update.php:542
4578
  msgid "[NinjaFirewall] Security rules update"
4579
  msgstr "[NinjaFirewall] Mise à jour des règles de sécurité"
4580
 
4581
+ #: lib/rules_update.php:543
4582
  msgid "NinjaFirewall security rules have been updated:"
4583
  msgstr "Les règles de sécurité de NinjaFirewall ont été mises à jour :"
4584
 
4585
+ #: lib/rules_update.php:549
4586
  msgid "Rules version:"
4587
  msgstr "Version des règles :"
4588
 
4589
+ #: lib/rules_update.php:551
4590
  msgid ""
4591
  "This notification can be turned off from NinjaFirewall \"Rules Update\" page."
4592
  msgstr ""
4593
  "Cette notification peut être désactivée depuis la page \"Mise à Jour des "
4594
  "Règles\" de NinjaFirewall."
4595
 
4596
+ #: lib/statistics.php:27 ninjafirewall.php:720
4597
  msgid "Statistics"
4598
  msgstr "Statistiques"
4599
 
4600
+ #: lib/statistics.php:83
4601
  msgid "You do not have any stats for the selected month yet."
4602
  msgstr "Vous n'avez pas de statistiques pour le mois sélectionné."
4603
 
4604
+ #: lib/statistics.php:117
4605
+ msgid "Average time per request"
4606
+ msgstr "Durée moyenne par requête"
4607
+
4608
+ #: lib/statistics.php:118 lib/statistics.php:122 lib/statistics.php:126
4609
+ msgid "seconds"
4610
+ msgstr "secondes"
4611
+
4612
+ #: lib/statistics.php:121
4613
+ msgid "Fastest request"
4614
+ msgstr "Requête la plus rapide"
4615
+
4616
+ #: lib/statistics.php:125
4617
+ msgid "Slowest request"
4618
+ msgstr "Requête la plus lente"
4619
+
4620
+ #: lib/statistics.php:133
4621
  msgid "Critical"
4622
  msgstr "Critique"
4623
 
4624
+ #: lib/statistics.php:134
4625
  msgid "High"
4626
  msgstr "Élevé"
4627
 
4628
+ #: lib/statistics.php:135
4629
  msgid "Medium"
4630
  msgstr "Moyen"
4631
 
4632
+ #: lib/statistics.php:192
4633
+ msgid "Select monthly stats to view..."
4634
+ msgstr "Sélectionnez les statistiques à afficher"
4635
 
4636
+ #: lib/thickbox.php:37
4637
+ msgid "Upgrade to Full WAF mode"
4638
+ msgstr "Passer en mode Full WAF"
4639
 
4640
+ #: lib/thickbox.php:42
4641
+ msgid ""
4642
+ "In <strong>Full WAF</strong> mode, all scripts located inside the blog "
4643
+ "installation directories and sub-directories are protected by NinjaFirewall, "
4644
+ "including those that aren't part of the WordPress package. It gives you the "
4645
+ "highest possible level of protection: security without compromise."
4646
+ msgstr ""
4647
+ "En mode <strong>Full WAF</strong>, tous les scripts situés dans le "
4648
+ "répertoire et sous-répertoires d'installation de votre blog sont protégés, y "
4649
+ "compris ceux qui ne font pas partie de WordPress. Cela vous offre le niveau "
4650
+ "de protection le plus élevé possible : La sécurité sans aucun compromis."
4651
 
4652
+ #: lib/thickbox.php:44
4653
+ #, php-format
4654
+ msgid ""
4655
+ "It works on most websites right out of the box, or may require <a href=\"%s"
4656
+ "\" title=\"%s\">some very little tweaks</a>. But in a few cases, mostly "
4657
+ "because of some shared hosting plans restrictions, it may simply not work at "
4658
+ "all."
4659
+ msgstr ""
4660
+ "La plupart du temps, l'installation fonctionne sans aucun problème, ou peut "
4661
+ "nécessiter <a href=\"%s\" title=\"%s\">quelques petits ajustements</a>. Mais "
4662
+ "dans quelques cas, principalement en raison de certaines restrictions "
4663
+ "d'hébergement partagé, il se peut que l'installation ne puisse pas "
4664
+ "fonctionner du tout."
4665
+
4666
+ #: lib/thickbox.php:46
4667
+ msgid ""
4668
+ "If this happened to you, don't worry: you could still run it in "
4669
+ "<strong>WordPress WAF</strong> mode. Despite being less powerful than the "
4670
+ "<b>Full WAF</b> mode, it offers a level of protection and performance much "
4671
+ "higher than other security plugins."
4672
+ msgstr ""
4673
+ "Si cela se produisait, ne vous inquiétez pas : vous pourrez l'utiliser en "
4674
+ "mode <strong>WordPress WAF</strong>. Bien que moins puissant que le mode "
4675
+ "<strong>Full WAF</strong>, il offre tout de même des performances et un "
4676
+ "niveau de protection très supérieur aux autres extensions de sécurité pour "
4677
+ "WordPress disponibles sur le marché."
4678
+
4679
+ #: lib/thickbox.php:52
4680
+ msgid "(recommended)"
4681
+ msgstr "(recommandé)"
4682
+
4683
+ #: lib/thickbox.php:112
4684
+ msgid "Select your HTTP server and your PHP server API"
4685
+ msgstr "Sélectionnez votre serveur HTTP et PHP SAPI"
4686
+
4687
+ #: lib/thickbox.php:122
4688
+ msgid "Other webserver + CGI/FastCGI or PHP-FPM"
4689
+ msgstr "Autre serveur + CGI/FastCGI ou PHP-FPM"
4690
+
4691
+ #: lib/thickbox.php:124
4692
+ msgid "View PHPINFO"
4693
+ msgstr "Voir PHPINFO"
4694
+
4695
+ #: lib/thickbox.php:153
4696
+ msgid "Select the PHP initialization file supported by your server"
4697
+ msgstr ""
4698
+ "Sélectionnez le type de fichier de configuration PHP utilisé par votre "
4699
+ "serveur"
4700
+
4701
+ #: lib/thickbox.php:165
4702
+ msgid "Let NinjaFirewall make the necessary changes (recommended)."
4703
+ msgstr "Laissez NinjaFirewall faire les changements (recommandé)."
4704
+
4705
+ #: lib/thickbox.php:166
4706
+ msgid "I want to make the changes myself."
4707
+ msgstr "Je veux faire les changements moi-même."
4708
+
4709
+ #: lib/thickbox.php:168
4710
+ msgid ""
4711
+ "Ensure that you have FTP access to your website so that, if there were a "
4712
+ "problem during the installation of the firewall, you could easily undo the "
4713
+ "changes."
4714
+ msgstr ""
4715
+ "Assurez-vous d'avoir un accès FTP à votre site de sorte que, s'il y avait un "
4716
+ "problème pendant l'installation du pare-feu, vous pourriez annuler les "
4717
+ "modifications."
4718
+
4719
+ #: lib/thickbox.php:171
4720
+ msgid "Please make the changes below, then click on the \"Finish\" button."
4721
+ msgstr ""
4722
+ "Veuillez faire les modifications ci-dessous, puis cliquer sur le bouton "
4723
+ "\"Finaliser\"."
4724
 
4725
+ #: lib/thickbox.php:178
4726
+ #, php-format
4727
+ msgid ""
4728
+ "The %s file must be created, and the following lines of code added to it:"
4729
+ msgstr ""
4730
+ "Le fichier %s doit être créé, et les lignes suivantes doivent y être "
4731
+ "ajoutées :"
4732
+
4733
+ #: lib/thickbox.php:179
4734
+ #, php-format
4735
+ msgid "The following lines of code must be added to your existing %s file:"
4736
+ msgstr "Les lignes suivantes doivent être ajoutées à votre fichier %s :"
4737
+
4738
+ #: lib/thickbox.php:239
4739
+ msgid ""
4740
+ "Log in to your Openlitespeed admin dashboard, click on \"Virtual Host\", "
4741
+ "select your domain, add the following instructions to the \"php.ini Override"
4742
+ "\" section in the \"General\" tab, and restart Openlitespeed:"
4743
+ msgstr ""
4744
+ "Connectez-vous à votre tableau de bord Openlitespeed, cliquez sur \"Virtual "
4745
+ "Host\", sélectionnez votre domaine, ajoutez les instructions suivantes à la "
4746
+ "section \"php.ini Override\" de l'onglet \"Général\", puis redémarrez "
4747
+ "Openlitespeed:"
4748
+
4749
+ #: lib/thickbox.php:246
4750
+ msgid ""
4751
+ "Important: if one day you wanted to uninstall NinjaFirewall, do not forget "
4752
+ "to remove these instructions from your Openlitespeed admin dashboard "
4753
+ "<strong>before</strong> uninstalling NinjaFirewall because this installer "
4754
+ "could not do it for you."
4755
+ msgstr ""
4756
+ "Important : si vous souhaitez un jour désinstaller NinjaFirewall, n’oubliez "
4757
+ "pas de supprimer ces instructions de votre tableau de bord Openlitespeed "
4758
+ "<strong>avant</strong> de désinstaller NinjaFirewall, car cet installateur "
4759
+ "ne pourra pas le faire à votre place."
4760
+
4761
+ #: lib/thickbox.php:264
4762
+ msgid "Finish"
4763
+ msgstr "Finaliser"
4764
+
4765
+ #: lib/utils.php:200
4766
  msgid "Blocked user account creation"
4767
  msgstr "Création de compte d'utilisateur bloquée"
4768
 
4769
+ #: lib/utils.php:212
4770
  msgid "NinjaFirewall has blocked an attempt to create a user account:"
4771
  msgstr ""
4772
  "NinjaFirewall a bloqué une tentative de création d'un compte d'utilisateur :"
4773
 
4774
+ #: lib/utils.php:215 lib/utils.php:1010
4775
  msgid "Username:"
4776
  msgstr "Utilisateur :"
4777
 
4778
+ #: lib/utils.php:216 lib/utils.php:1015 lib/utils.php:1379
4779
  msgid "User IP:"
4780
  msgstr "IP utilisateur :"
4781
 
4782
+ #: lib/utils.php:219 lib/utils.php:840 lib/utils.php:1018 lib/utils.php:1382
4783
  msgid "Date:"
4784
  msgstr "Date :"
4785
 
4786
+ #: lib/utils.php:228 lib/utils.php:1027 lib/utils.php:1374
4787
  msgid "A PHP backtrace has been attached to this message for your convenience."
4788
  msgstr ""
4789
  "La pile d'exécution de PHP est jointe à ce message pour votre commodité."
4790
 
4791
+ #: lib/utils.php:251 lib/utils.php:252 lib/utils.php:1052 lib/utils.php:1053
4792
+ #: lib/utils.php:1279 lib/utils.php:1280
4793
  msgid "You are not allowed to perform this task."
4794
  msgstr "Vous n'êtes pas autorisé à effectuer cette tâche."
4795
 
4796
+ #: lib/utils.php:519 lib/utils.php:523
4797
  msgid "NinjaFirewall error"
4798
  msgstr "NinjaFirewall Erreur"
4799
 
4800
+ #: lib/utils.php:520
4801
  #, php-format
4802
  msgid ""
4803
  "%s directory cannot be created. Please review your installation and ensure "
4806
  "Le répertoire %s ne peut pas être créé. Vérifiez votre installation et "
4807
  "assurez vous que %s n'est pas en lecture seule."
4808
 
4809
+ #: lib/utils.php:524
4810
  #, php-format
4811
  msgid ""
4812
  "%s directory is read-only. Please review your installation and ensure that "
4815
  "Le répertoire %s est en lecture seule. Vérifiez votre installation et les "
4816
  "permissions de %s."
4817
 
4818
+ #: lib/utils.php:543
4819
+ msgid "unknown error"
4820
+ msgstr "erreur inconnue"
4821
+
4822
+ #: lib/utils.php:545
4823
  msgid "NinjaFirewall fatal error:"
4824
  msgstr "NinjaFirewall erreur fatale :"
4825
 
4826
+ #: lib/utils.php:546
4827
  msgid "Review your installation, your site is not protected."
4828
  msgstr "Vérifiez votre installation, votre site n'est pas protégé."
4829
 
4830
+ #: lib/utils.php:563
4831
  msgid "Alert: WordPress console login"
4832
  msgstr "Alerte : Connexion à WordPress"
4833
 
4834
+ #: lib/utils.php:565
4835
  msgid "-Blog:"
4836
  msgstr "- Blog :"
4837
 
4838
+ #: lib/utils.php:569
4839
  msgid "Someone just logged in to your WordPress admin console:"
4840
  msgstr "Quelqu'un vient de se connecter à votre Tableau de bord de WordPress:"
4841
 
4842
+ #: lib/utils.php:570
4843
  msgid "-User:"
4844
  msgstr "- Nom :"
4845
 
4846
+ #: lib/utils.php:571
4847
  msgid "-IP:"
4848
  msgstr "- IP :"
4849
 
4850
+ #: lib/utils.php:572
4851
  msgid "-Date:"
4852
  msgstr "- Date :"
4853
 
4854
+ #: lib/utils.php:575
4855
  msgid "Support forum"
4856
  msgstr "Forum "
4857
 
4858
+ #: lib/utils.php:636 lib/utils.php:663
4859
  msgid "Forbidden access"
4860
  msgstr "Accès interdit"
4861
 
4862
+ #: lib/utils.php:682
4863
  #, php-format
4864
  msgid ""
4865
  "<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
4868
  "<strong>ERREUR</strong>: Identifiant ou mot de passe invalide.<br /><a href="
4869
  "\"%s\">Mot de passe perdu</a> ?"
4870
 
4871
+ #: lib/utils.php:716
4872
  msgid "Plugin"
4873
  msgstr "Extension"
4874
 
4875
+ #: lib/utils.php:716 lib/utils.php:720
4876
  msgid "uploaded"
4877
  msgstr "téléchargé(e)"
4878
 
4879
+ #: lib/utils.php:716 lib/utils.php:720
4880
  msgid "installed"
4881
  msgstr "installé(e)"
4882
 
4883
+ #: lib/utils.php:716 lib/utils.php:720
4884
  msgid "activated"
4885
  msgstr "activé(e)"
4886
 
4887
+ #: lib/utils.php:717
4888
  msgid "updated"
4889
  msgstr "mis(e) à jour"
4890
 
4891
+ #: lib/utils.php:717
4892
  msgid "deactivated"
4893
  msgstr "désactivé(e)"
4894
 
4895
+ #: lib/utils.php:717 lib/utils.php:721
4896
  msgid "deleted"
4897
  msgstr "supprimé(e)"
4898
 
4899
+ #: lib/utils.php:717 lib/utils.php:721
4900
  msgid "Name"
4901
  msgstr "Nom"
4902
 
4903
+ #: lib/utils.php:720
4904
  msgid "Theme"
4905
  msgstr "Thème"
4906
 
4907
+ #: lib/utils.php:724
4908
  msgid "upgraded"
4909
  msgstr "mis(e) à jour"
4910
 
4911
+ #: lib/utils.php:732
4912
  msgid "[NinjaFirewall] Alert:"
4913
  msgstr "[NinjaFirewall] Alerte :"
4914
 
4915
+ #: lib/utils.php:738
4916
  msgid "NinjaFirewall has detected the following activity on your account:"
4917
  msgstr "NinjaFirewall a détecté l'activité suivante sur votre compte :"
4918
 
4919
+ #: lib/utils.php:835
4920
  msgid "[NinjaFirewall] Alert: Database changes detected"
4921
  msgstr "[NinjaFirewall] Alerte: Modification dans la base de données"
4922
 
4923
+ #: lib/utils.php:836
4924
  msgid ""
4925
  "NinjaFirewall has detected that one or more administrator accounts were "
4926
  "modified in the database:"
4928
  "NinjaFirewall a détecté que un ou plusieurs comptes d'administrateur ont été "
4929
  "modifiés dans la base de données:"
4930
 
4931
+ #: lib/utils.php:841
4932
  #, php-format
4933
  msgid "Total administrators : %s"
4934
  msgstr "Nombre d'administrateurs : %s"
4935
 
4936
+ #: lib/utils.php:850
4937
  msgid ""
4938
  "If you cannot see any modifications in the above fields, it is possible that "
4939
  "the administrator password was changed."
4941
  "Si vous ne voyez pas de modifications dans les données ci-dessus, il est "
4942
  "possible que le mot de passe administrateur ait été changé."
4943
 
4944
+ #: lib/utils.php:986
4945
  msgid "Blocked privilege escalation attempt"
4946
  msgstr "Tentatives d'élévation des privilèges"
4947
 
4948
+ #: lib/utils.php:1003
4949
+ msgid ""
4950
+ "NinjaFirewall has blocked an attempt to modify a user capability by someone "
4951
+ "who does not have administrative privileges:"
4952
  msgstr ""
4953
+ "NinjaFirewall a bloqué une tentative de modification de certaines Capacités "
4954
+ "par un utilisateur ne disposant pas de privilèges administratifs :"
4955
 
4956
+ #: lib/utils.php:1064
4957
  msgid ""
4958
  "NinjaFirewall brute-force protection is enabled and you are temporarily "
4959
  "whitelisted."
4961
  "La protection de NinjaFirewall contre les attaques par force brute est "
4962
  "activée. Vous êtes temporairement dans la liste blanche."
4963
 
4964
+ #: lib/utils.php:1079
4965
  #, php-format
4966
  msgid ""
4967
  "Hey, it seems that you've been using NinjaFirewall for some time. If you "
4974
  "a>. Il a fallu des milliers d'heures pour le développer, mais il suffit "
4975
  "seulement de quelques minutes pour le noter. Merci !"
4976
 
4977
+ #: lib/utils.php:1346
4978
  msgid ""
4979
  "The attempt was blocked and the option was reversed to its original value."
4980
  msgstr ""
4981
  "La tentative a été bloquée et l'option a été remise à sa valeur d'origine."
4982
 
4983
+ #: lib/utils.php:1351
4984
  msgid "Attempt to modify WordPress settings"
4985
  msgstr "Tentative de modification des paramètres de WordPress"
4986
 
4987
+ #: lib/utils.php:1352
4988
  msgid ""
4989
  "NinjaFirewall has blocked an attempt to modify some important WordPress "
4990
  "settings by a user that does not have administrative privileges:"
4993
  "importants de WordPress par un utilisateur ne disposant pas de privilèges "
4994
  "administratifs :"
4995
 
4996
+ #: lib/utils.php:1353 lib/utils.php:1362
4997
  #, php-format
4998
  msgid "Option: %s"
4999
  msgstr "Option: %s"
5000
 
5001
+ #: lib/utils.php:1354
5002
  #, php-format
5003
  msgid "Original value: %s"
5004
  msgstr "Valeur originale : %s"
5005
 
5006
+ #: lib/utils.php:1355
5007
  #, php-format
5008
  msgid "Modified value: %s"
5009
  msgstr "Valeur modifiée : %s"
5010
 
5011
+ #: lib/utils.php:1356 lib/utils.php:1364
5012
  #, php-format
5013
  msgid "Action taken: %s"
5014
  msgstr "Action prise : %s"
5015
 
5016
+ #: lib/utils.php:1360
5017
  msgid "Code injection attempt in WordPress options table"
5018
  msgstr "Tentative d'injection de code dans la table des options de WordPress"
5019
 
5020
+ #: lib/utils.php:1361
5021
  msgid ""
5022
  "NinjaFirewall has blocked an attempt to inject code in the WordPress options "
5023
  "table by a user that does not have administrative privileges:"
5026
  "options de WordPress par un utilisateur ne disposant pas de privilèges "
5027
  "administratifs :"
5028
 
5029
+ #: lib/utils.php:1363
5030
  #, php-format
5031
  msgid "Code: %s"
5032
  msgstr "Code : %s"
5033
 
5034
+ #: lib/utils.php:1384
5035
  msgid ""
5036
  "This protection (and notification) can be turned off from NinjaFirewall "
5037
  "\"Firewall Policies\" page."
5039
  "Cette protection (et notification) peut être désactivée à partir de la page "
5040
  "\"Politiques du Pare-feu\" de NinjaFirewall."
5041
 
5042
+ #: lib/utils.php:1418
5043
+ #, php-format
5044
+ msgid "Error, cannot create the %s folder."
5045
+ msgstr "Erreur, impossible de créer le répertoire %s."
5046
+
5047
+ #: lib/utils.php:1418 lib/utils.php:1426 lib/utils.php:1434
5048
+ msgid "Check your server permissions and try again."
5049
+ msgstr "Vérifiez les autorisations de votre serveur et réessayez."
5050
+
5051
+ #: lib/utils.php:1426
5052
+ #, php-format
5053
+ msgid "Error, the %s folder is not writable."
5054
+ msgstr "Erreur, le répertoire %s est en lecture seule."
5055
+
5056
+ #: lib/utils.php:1434
5057
+ #, php-format
5058
+ msgid "Error, cannot write %s."
5059
+ msgstr "Erreur, impossible d'écrire dans %s."
5060
+
5061
+ #: lib/wpplus.php:29
5062
+ msgid "Need more security?"
5063
+ msgstr "Besoin de plus de sécurité ?"
5064
 
5065
+ #: lib/wpplus.php:34
5066
+ #, php-format
5067
  msgid ""
5068
+ "Take the time to explore NinjaFirewall %s, a supercharged Edition of our Web "
5069
+ "Application Firewall. It adds many new exciting features and blazing fast "
5070
+ "performances to make it the fastest and most powerful security plugin for "
5071
+ "WordPress, no less!"
5072
  msgstr ""
5073
+ "Prenez le temps d'explorer NinjaFirewall %s, une version encore plus musclée "
5074
+ "de notre pare-feu applicatif. Elle offre de meilleures performances et "
5075
+ "contient de nouvelles fonctionnalités et options qui en font l'extension de "
5076
+ "sécurité pour WordPress la plus avancée et la plus puissante sur le marché, "
5077
+ "rien de moins !"
5078
+
5079
+ #: lib/wpplus.php:44
5080
+ msgid "New Features"
5081
+ msgstr "Nouvelles options et fonctionnalités"
5082
 
5083
+ #: lib/wpplus.php:49
5084
  msgid "Access Control"
5085
  msgstr "Contrôle d'Accès"
5086
 
5087
+ #: lib/wpplus.php:50
5088
  msgid ""
5089
+ "Access Control is a powerful set of directives that can be used to allow or "
5090
+ "restrict access to your blog, depending on the <strong>User Role</strong>, "
5091
+ "<strong>IP</strong>, <strong>Geolocation</strong>, <strong>Requested URL</"
5092
+ "strong>, <strong>User-agent</strong> visitors behavior (<strong>Rate "
5093
+ "Limiting</strong>) and <strong>User Input</strong>. Those directives will be "
5094
+ "processed before the Firewall Policies and NinjaFirewall's built-in security "
5095
+ "rules."
5096
  msgstr ""
5097
+ "Le Contrôle d'Accès est un puissant ensemble de directives qui peut être "
5098
+ "utilisé pour autoriser ou restreindre l'accès à votre blog selon de nombreux "
5099
+ "critères&nbsp;: <strong>Rôle</strong> de l'utilisateur, <strong>adresse IP</"
5100
+ "strong>, <strong>Géolocalisation</strong>, <strong>URL demandée</strong>, "
5101
+ "<strong>User-agent</strong>, le comportement des visiteurs "
5102
+ "(<strong>Limitation du trafic</strong>) et les <strong>Entrées utilisateur</"
5103
+ "strong>."
5104
 
5105
+ #: lib/wpplus.php:51
5106
  msgid ""
5107
  "Its main configuration allows you to whitelist WordPress users depending on "
5108
  "their roles, to select the source IP (useful if your site is using a CDN or "
5109
  "behind a reverse-proxy/load balancer), and the HTTP methods all directives "
5110
+ "should apply to."
5111
  msgstr ""
5112
  "Sa configuration principale vous permet de créer une liste blanche des "
5113
  "utilisateurs de WordPress en fonction de leurs rôles, de sélectionner "
5114
  "l'adresse IP source (utile si votre site utilise un CDN ou un équilibreur de "
5115
  "charge), et les méthodes HTTP auxquelles s'appliqueront toutes les "
5116
+ "directives."
5117
+
5118
+ #: lib/wpplus.php:54 lib/wpplus.php:55 lib/wpplus.php:63 lib/wpplus.php:64
5119
+ #: lib/wpplus.php:81 lib/wpplus.php:82 lib/wpplus.php:93 lib/wpplus.php:94
5120
+ #: lib/wpplus.php:102 lib/wpplus.php:103 lib/wpplus.php:120 lib/wpplus.php:121
5121
+ #: lib/wpplus.php:129 lib/wpplus.php:130 lib/wpplus.php:147 lib/wpplus.php:148
5122
+ #: lib/wpplus.php:156 lib/wpplus.php:157 lib/wpplus.php:176 lib/wpplus.php:177
5123
+ #: lib/wpplus.php:193 lib/wpplus.php:194 lib/wpplus.php:202 lib/wpplus.php:203
5124
+ #: lib/wpplus.php:222 lib/wpplus.php:223 lib/wpplus.php:231 lib/wpplus.php:232
5125
+ msgid "Click to enlarge image."
5126
+ msgstr "Cliquez pour agrandir l'image."
5127
 
5128
+ #: lib/wpplus.php:67
5129
+ msgid "Geolocation Access Control"
5130
+ msgstr "Contrôle d'accès par Géolocalisation"
5131
+
5132
+ #: lib/wpplus.php:68
5133
  msgid ""
5134
+ "Geolocation can be used to block visitors from specific countries. It can "
5135
+ "apply to the whole blog or only to specific folders or scripts (e.g., /wp-"
5136
+ "login.php, /xmlrpc.php etc). If you have a theme or a plugin that needs to "
5137
+ "know your visitors location, you can even ask NinjaFirewall to append the "
5138
+ "country code to the PHP headers."
5139
  msgstr ""
5140
+ "La géolocalisation peut être utilisée pour bloquer les visiteurs en "
5141
+ "provenance de pays spécifiques. Il peut s'appliquer à tout le site ou bien à "
5142
+ "certains scripts ou répertoires uniquement (ex: /wp-login.php, xmlrpc.php "
5143
+ "etc). Si vous avez un thème ou une extension qui nécessite de géolocaliser "
5144
+ "vos visiteurs, vous pouvez même demander à NinjaFirewall d’insérer le code à "
5145
+ "deux lettres du pays dans les en-têtes PHP"
5146
+
5147
+ #: lib/wpplus.php:77
5148
+ msgid "IP Access Control"
5149
+ msgstr "Contrôle d'Accès par IP"
5150
 
5151
+ #: lib/wpplus.php:78
5152
  msgid ""
5153
+ "The IP Access Control allows you to permanently allow or block an IP, a "
5154
+ "whole range of IP addresses <strong>and even AS numbers</strong> (Autonomous "
5155
+ "System number). IPv4 and IPv6 are fully supported by NinjaFirewall."
5156
  msgstr ""
5157
+ "Le Contrôle d'Accès par IP peut immédiatement accepter ou bloquer une "
5158
+ "adresse IP, une plage d'adresses <strong>ou même un numéro AS</strong> "
5159
+ "(Autonomous System). NinjaFirewall est compatible avec l'IPv4 et l'IPv6."
5160
 
5161
+ #: lib/wpplus.php:88
5162
  msgid ""
5163
+ "The IP Access Control can slow down aggressive bots, crawlers, web scrapers "
5164
  "or even small HTTP attacks with its <strong>Rate-Limiting</strong> feature."
5165
  msgstr ""
5166
+ "Le Contrôle d'Accès par IP vous permet de ralentir les bots, crawlers, web "
5167
  "scrapers ou même de petites attaques HTTP avec son option <strong>Limiter le "
5168
  "trafic</strong>."
5169
 
5170
+ #: lib/wpplus.php:90
5171
  msgid ""
5172
  "Because it can block attackers <strong>before WordPress and all its plugins "
5173
+ "are loaded</strong> and can handle a lot of HTTP requests per second, "
5174
  "NinjaFirewall will save precious bandwidth and reduce your server load."
5175
  msgstr ""
5176
  "Parce qu'il peut bloquer les attaques <strong>avant que WordPress et ses "
5178
  "requêtes HTTP par seconde, NinjaFirewall vous fera économiser de la bande "
5179
  "passante et permettra de réduire la charge du serveur."
5180
 
5181
+ #: lib/wpplus.php:106
5182
+ msgid "URL Access Control"
5183
+ msgstr "Contrôle d'Accès par URL"
5184
+
5185
+ #: lib/wpplus.php:107
5186
  msgid ""
5187
+ "URL Access Control lets you permanently allow/block any access to one or "
5188
+ "more PHP scripts based on their <code>SCRIPT_NAME</code>."
5189
  msgstr ""
5190
+ "Le Contrôle d'accès par URL vous permet d'autoriser ou bloquer tout accès à "
5191
+ "un ou plusieurs scripts PHP basé sur leur chemin ou leur nom "
5192
+ "(<code>SCRIPT_NAME</code>)."
5193
 
5194
+ #: lib/wpplus.php:116
5195
+ msgid "Bot Access Control"
5196
+ msgstr "Contrôle d'accès Bot"
5197
+
5198
+ #: lib/wpplus.php:117
5199
  msgid ""
5200
+ "Bot Access Control allows you block bots, scanners and various annoying "
5201
+ "crawlers."
5202
  msgstr ""
5203
+ "Avec le Contrôle d'accès par Bot vous pouvez bloquer les robots, scanners et "
5204
+ "autres robots ennuyeux."
5205
 
5206
+ #: lib/wpplus.php:133
5207
+ msgid "User Input Access Control"
5208
+ msgstr "Contrôle d'Accès d'Entrée Utilisateur"
5209
+
5210
+ #: lib/wpplus.php:134
5211
  msgid ""
5212
+ "User Input Access Control allows you to to ignore or block some specific "
5213
+ "user input."
5214
  msgstr ""
5215
+ "Le Contrôle d'accès d'entrée utilisateur vous permet d’ignorer ou de bloquer "
5216
+ "une entrée utilisateur spécifique."
5217
 
5218
+ #: lib/wpplus.php:143
5219
  msgid ""
5220
+ "The Web Filter can hook the response body, i.e., the output of the HTML "
5221
+ "page, and search it for some specific keywords. Such filter can be useful to "
5222
+ "identify errors, hacked content and data leakage issues in the response body "
5223
+ "sent to your visitors."
 
 
 
 
5224
  msgstr ""
5225
+ "Le Web Filter peut intercepter les requêtes sortantes, c'est à dire le "
5226
+ "contenu de la page HTML, et rechercher des mots clés spécifiques. Un tel "
5227
+ "filtre peut être utile pour identifier les erreurs, les contenus piratés et "
5228
+ "les problèmes de fuite de données dans le corps de la réponse envoyée à vos "
5229
+ "visiteurs."
 
 
5230
 
5231
+ #: lib/wpplus.php:144
5232
  msgid ""
5233
  "In the case of a positive detection, NinjaFirewall will not block the "
5234
  "response body but will send you an alert by email. It can even attach the "
5235
+ "whole HTML source of the page for your review."
5236
  msgstr ""
5237
  "En cas de détection positive, NinjaFirewall ne bloquera pas la requête mais "
5238
+ "vous enverra immédiatement une alerte par e-mail."
5239
 
5240
+ #: lib/wpplus.php:160
5241
  msgid "Antispam"
5242
  msgstr "Antispam"
5243
 
5244
+ #: lib/wpplus.php:161
5245
  msgid ""
5246
+ "The Antispam can protect your blog comment and registration forms against "
5247
+ "spam. The protection is totally transparent to your visitors and does not "
5248
+ "require any interaction: no CAPTCHA, no math puzzles or trivia questions. "
5249
+ "Extremely easy to activate, but powerful enough to make spam bots life as "
5250
+ "miserable as possible."
5251
  msgstr ""
5252
+ "L'Antispam peut protéger les formulaires de commentaire et d'inscription de "
5253
+ "votre blog contre le spam. La protection est totalement transparente pour "
5254
+ "vos visiteurs et ne nécessite ni CAPTCHA ni interaction de leur part. "
5255
+ "Extrêmement facile à activer, mais assez puissante pour ne laisser aucune "
5256
+ "chance aux spammeurs."
5257
 
5258
+ #: lib/wpplus.php:162
5259
  msgid ""
5260
  "NinjaFirewall antispam feature works only with WordPress built-in comment "
5261
  "and registration forms."
5263
  "L'option anti-spam de NinjaFirewall ne fonctionne qu'avec les formulaires "
5264
  "intégrés à WordPress (commentaire et d'inscription)."
5265
 
5266
+ #: lib/wpplus.php:171
5267
  #, php-format
5268
  msgid ""
5269
+ "Centralized Logging lets you remotely access the firewall log of all your "
5270
+ "NinjaFirewall protected websites from one single installation, using the <a "
5271
+ "href=\"%s\">Centralized Logging</a> feature. You do not need any longer to "
5272
+ "log in to individual servers to analyse your log data."
 
5273
  msgstr ""
5274
+ "La Centralisation des Logs vous permet d’accéder, depuis votre blog "
5275
+ "principal, au journal du pare-feu de chacun de vos sites protégés par "
5276
+ "NinjaFirewall. Vous n'avez plus besoin de vous connecter à chaque site pour "
5277
+ "analyser vos journaux. <a href=\"%s\">Consultez notre blog</a> pour plus "
5278
+ "d'informations à ce sujet."
5279
 
5280
+ #: lib/wpplus.php:173
5281
  msgid ""
5282
  "There is no limit to the number of websites you can connect to, and they can "
5283
  "be running any edition of NinjaFirewall: WP, <font color=\"#21759B\">WP+</"
5287
  "version de NinjaFirewall : WP, <font color=\"#21759B\">WP+</font>, Pro ou "
5288
  "<font color=\"red\">Pro+</font>."
5289
 
5290
+ #: lib/wpplus.php:184
5291
  msgid "Improved features"
5292
  msgstr "Fonctionnalités améliorées"
5293
 
5294
+ #: lib/wpplus.php:189
5295
+ msgid "File uploads"
5296
+ msgstr "Téléchargements de fichier"
5297
 
5298
+ #: lib/wpplus.php:190
5299
  msgid ""
5300
+ "You can allow uploads while rejecting potentially dangerous files: scripts "
5301
+ "(PHP, CGI, Ruby, Python, bash/shell), C/C++ source code, binaries (MZ/PE/NE "
5302
+ "and ELF formats), system files (.htaccess, .htpasswd and PHP INI) and SVG "
5303
+ "files containing Javascript/XML events. You can easily limit the size of "
5304
+ "each uploaded file too, without having to modify your PHP configuration."
 
5305
  msgstr ""
5306
+ "Vous pouvez autoriser ou interdire tout téléchargement de fichier vers votre "
5307
+ "site, ou bien bloquer uniquement les fichiers potentiellement dangereux : "
 
5308
  "scripts (PHP, CGI, Ruby, Python, bash/shell), code source C/C++, fichiers "
5309
  "exécutables (MZ/PE/NE et ELF), certains fichiers systèmes (.htaccess, ."
5310
+ "htpasswd et PHP INI) et les fichiers SVG contenant du JavaScript ou des "
5311
  "Événements XML. Vous pouvez aussi sélectionner la taille maximale d'un "
5312
+ "fichier téléchargé, sans avoir à modifier la configuration de PHP."
5313
 
5314
+ #: lib/wpplus.php:208
 
 
 
 
5315
  msgid ""
5316
  "The log menu has been revamped too. You can disable the firewall log, delete "
5317
  "the current one, enable its rotation based on the size of the file and, if "
5318
  "any, view each rotated log separately. Quick filtering options are easily "
5319
  "accessible from checkboxes and the log can be exported as a TSV (tab-"
5320
+ "separated values) text file. You can also easily add any IP to your Access "
5321
+ "Control whitelist or blacklist."
5322
  msgstr ""
5323
  "Le <b>Journal du Pare-feu</b> a été remanié. Vous pouvez maintenant le "
5324
  "désactiver, le supprimer et permettre sa rotation en vous basant sur la "
5325
  "taille du fichier. Des options de filtrage rapides sont facilement "
5326
  "accessibles à partir de cases à cocher et le journal peut également être "
5327
  "exporté dans un fichier au format TSV (valeurs séparées par des "
5328
+ "tabulations). Vous pouvez facilement ajouter une adresse IP à votre liste "
5329
+ "blanche ou votre liste noire du Contrôle d'Accès depuis cette page."
5330
 
5331
+ #: lib/wpplus.php:209
5332
  msgid ""
5333
  "It is also possible to redirect all incidents and events to the Syslog "
5334
  "server:"
5336
  "Il est également possible de rediriger tous les incidents et les événements "
5337
  "vers le serveur Syslog :"
5338
 
5339
+ #: lib/wpplus.php:219
5340
+ msgid ""
5341
+ "You can check for security rules updates <b>as often as every 15 minutes</"
5342
+ "b>, versus one hour for the free WP Edition. Don't leave your blog at risk!"
5343
+ msgstr ""
5344
+ "Vous pouvez vérifier les mises à jour des règles de sécurité <b>toutes les "
5345
+ "15 minutes</b>, contre une heure pour la version gratuite WP Edition. Ne "
5346
+ "prenez aucun risque avec votre blog !"
5347
 
5348
+ #: lib/wpplus.php:233
5349
  msgid ""
5350
+ "This feature requires that PHP was compiled with the <code>--enable-shmop</"
5351
+ "code> parameter and that NinjaFirewall is running in \"Full WAF\" mode."
 
5352
  msgstr ""
5353
+ "Cette fonction nécessite que PHP soit compilé avec le paramètre <code>--"
5354
+ "enable-shmop</code> et que NinjaFirewall soit installé en mode \"Full WAF\". "
 
5355
 
5356
+ #: lib/wpplus.php:236
5357
+ msgid "Shared Memory use"
5358
+ msgstr "Utilisation de la mémoire partagée"
5359
 
5360
+ #: lib/wpplus.php:238
5361
  #, php-format
5362
  msgid ""
5363
  "Although NinjaFirewall is already <a href=\"%s\">much faster than other "
5370
  "Edition</b> améliore encore plus ses performances en utilisant la mémoire "
5371
  "partagée."
5372
 
5373
+ #: lib/wpplus.php:238
5374
  msgid ""
5375
  "This allows easier and faster inter-process communication between the "
5376
  "firewall and the plugin part of NinjaFirewall and, because its data and "
5382
  "stockées en mémoire et le pare-feu n'a même plus besoin de se connecter à la "
5383
  "base de données pour y accéder."
5384
 
5385
+ #: lib/wpplus.php:238
5386
  msgid ""
5387
  "This dramatically increases the processing speed (there is nothing faster "
5388
  "than RAM), prevents blocking I/O and MySQL slow queries. On a very busy "
5389
  "server like a multi-site network, the firewall processing speed will "
5390
  "increase from 25% to 30%. It can be enabled from the \"Firewall Options\" "
5391
+ "menu."
5392
  msgstr ""
5393
  "Cela augmente considérablement la vitesse de traitement (il n'y a rien de "
5394
  "plus rapide que la mémoire), empêche le blocage des E/S et les requêtes "
5395
  "lentes MySQL. Sur un serveur très sollicité comme un réseau multi-site, la "
5396
  "vitesse de traitement de pare-feu va augmenter de 25% à 30%. Cette option "
5397
+ "peut être activé à partir de la page \"Options du pare-feu\"."
 
 
 
 
 
 
 
 
5398
 
5399
+ #: lib/wpplus.php:245
5400
  msgid ""
5401
  "Learn more</a> about the <font color=\"#21759B\">WP+</font> Edition unique "
5402
  "features."
5404
  "En savoir plus</a> sur les caractéristiques uniques de la version <font "
5405
  "color=\"#21759B\">WP+</font>."
5406
 
5407
+ #: lib/wpplus.php:246
5408
  msgid "Compare</a> the WP and <font color=\"#21759B\">WP+</font> Editions."
5409
  msgstr "Comparez</a> les versions WP et <font color=\"#21759B\">WP+</font>."
5410
 
5512
  msgid "The PHP msqli extension is missing or not loaded."
5513
  msgstr "L'extension PHP mysqli est manquante ou bien n'est pas chargée."
5514
 
5515
+ #: ninjafirewall.php:82
5516
+ msgid "Cannot retrieve user options from database (#4)"
5517
+ msgstr ""
5518
+ "Impossible de récupérer les options de l'utilisateur dans la base de données "
5519
+ "(#4)"
5520
+
5521
+ #: ninjafirewall.php:83
5522
+ msgid "Cannot retrieve user rules from database (#4)"
5523
+ msgstr ""
5524
+ "Impossible de récupérer les règles de l'utilisateur dans la base de données "
5525
+ "(#4)"
5526
+
5527
+ #: ninjafirewall.php:109
5528
  msgid ""
5529
  "You do not have \"unfiltered_html\" capability. Please enable it in order to "
5530
  "run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
5535
  "la directive \"DISALLOW_UNFILTERED_HTML\" activée dans votre fichier wp-"
5536
  "config.php)."
5537
 
5538
+ #: ninjafirewall.php:116
5539
  #, php-format
5540
  msgid ""
5541
  "NinjaFirewall requires WordPress 3.3 or greater but your current version is "
5544
  "NinjaFirewall nécessite au moins WordPress 3.3 mais votre version de "
5545
  "WordPress est %s."
5546
 
5547
+ #: ninjafirewall.php:120
5548
  #, php-format
5549
  msgid ""
5550
  "NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
5551
  msgstr ""
5552
  "NinjaFirewall nécessite au moins PHP 5.3 mais votre version de PHP est %s."
5553
 
5554
+ #: ninjafirewall.php:124
5555
  #, php-format
5556
  msgid "NinjaFirewall requires the PHP %s extension."
5557
  msgstr "NinjaFirewall nécessite l'extension PHP %s."
5558
 
5559
+ #: ninjafirewall.php:128
5560
  msgid ""
5561
  "You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
5562
  "5.3.0 (see http://php.net/safe-mode)."
5565
  "devenue obsolète depuis PHP 5.3 et a été supprimée depuis PHP 5.4 (cf. "
5566
  "http://php.net/safe-mode)."
5567
 
5568
+ #: ninjafirewall.php:132
5569
  msgid "You are not allowed to activate NinjaFirewall."
5570
  msgstr "Vous n’êtes pas autorisé à activer NinjaFirewall."
5571
 
5572
+ #: ninjafirewall.php:136
5573
  msgid "NinjaFirewall is not compatible with Microsoft Windows."
5574
  msgstr "NinjaFirewall n'est pas compatible avec Microsoft Windows."
5575
 
5576
+ #: ninjafirewall.php:288
5577
+ msgid ""
5578
+ "All fields will be restored to their default values and any changes you made "
5579
+ "will be lost. Continue?"
5580
+ msgstr ""
5581
+ "Tous les champs vont être re-initialisés et vos changements seront perdus. "
5582
+ "Continuer ?"
5583
+
5584
+ #: ninjafirewall.php:292
5585
+ msgid "Missing security nonce, try to reload the page."
5586
+ msgstr "La nonce de sécurité est manquante, essayer de recharger cette page."
5587
+
5588
+ #: ninjafirewall.php:294
5589
+ msgid "Please select the HTTP server in the list."
5590
+ msgstr "Sélectionnez votre serveur HTTP dans la list."
5591
+
5592
+ #: ninjafirewall.php:298
5593
+ msgid ""
5594
+ "This action will restore the selected configuration file and will override "
5595
+ "all your current firewall options, policies and rules. Continue?"
5596
+ msgstr ""
5597
+ "Cette action va restaurer le fichier de configuration sélectionné et "
5598
+ "remplacera toutes les options, politiques et règles de pare-feu actuelles. "
5599
+ "Continuer ?"
5600
+
5601
+ #: ninjafirewall.php:302
5602
+ msgid ""
5603
+ "Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
5604
+ "hyphen [-] or an underscore [_] will be removed from the filename and "
5605
+ "replaced with the substitution character. Continue?"
5606
+ msgstr ""
5607
+ "Tout caractère qui n'est pas une lettre [a-zA-Z], un chiffre [0-9], un point "
5608
+ "[.], un trait d'union[-] ou un caractère de soulignement[_], sera supprimé "
5609
+ "du nom du fichier et remplacé par le caractère de substitution."
5610
+
5611
+ #: ninjafirewall.php:304
5612
+ msgid ""
5613
+ "Ensure that you can access your admin console over HTTPS before enabling "
5614
+ "this option, otherwise you will lock yourself out of your site. Continue?"
5615
+ msgstr ""
5616
+ "Assurez-vous de bien disposer d'une connexion HTTPS avant d'activer cette "
5617
+ "option, sinon vous risqueriez de ne plus pouvoir accéder à l'interface "
5618
+ "d'administration. Continuer ?"
5619
+
5620
+ #: ninjafirewall.php:308
5621
+ msgid "Delete the current snapshot ?"
5622
+ msgstr "Supprimer l'instantané actuel ?"
5623
+
5624
+ #: ninjafirewall.php:312
5625
+ msgid "Invalid character."
5626
+ msgstr "Caractère invalide."
5627
+
5628
+ #: ninjafirewall.php:314
5629
+ msgid "\"admin\" is not acceptable, please choose another user name."
5630
+ msgstr ""
5631
+ "\"admin\" n\\'est pas acceptable, merci de bien vouloir choisir un autre "
5632
+ "identifiant."
5633
+
5634
+ #: ninjafirewall.php:316
5635
+ msgid "Please enter max 1024 character only."
5636
+ msgstr "Veuillez ne pas entrer plus de 1 024 caractères."
5637
+
5638
+ #: ninjafirewall.php:318
5639
+ msgid "Select when to enable the login protection."
5640
+ msgstr "Veuillez sélectionner quand activer la protection."
5641
+
5642
+ #: ninjafirewall.php:320
5643
+ msgid "Enter a name and a password for the HTTP authentication."
5644
+ msgstr ""
5645
+ "Veuillez entrer un nom d'utilisateur et mot de passe pour l'authentification "
5646
+ "HTTP."
5647
+
5648
+ #: ninjafirewall.php:324
5649
+ msgid "Your public key is not valid."
5650
+ msgstr "Votre clé publique n\\'est pas valide."
5651
+
5652
+ #: ninjafirewall.php:328
5653
+ msgid "No traffic yet, please wait"
5654
+ msgstr "Aucun visiteur actuellement, veuillez patienter"
5655
+
5656
+ #: ninjafirewall.php:330
5657
+ msgid "seconds..."
5658
+ msgstr "secondes..."
5659
+
5660
+ #: ninjafirewall.php:332
5661
+ msgid "Error: Live Log did not receive the expected response from your server:"
5662
+ msgstr "Erreur : le serveur distant n\\'a pas retourné la réponse attendue :"
5663
+
5664
+ #: ninjafirewall.php:334
5665
+ msgid "Error: URL does not seem to exist (404 Not Found):"
5666
+ msgstr "Erreur : l'URL ne semble pas exister (404 Not Found) :"
5667
+
5668
+ #: ninjafirewall.php:336
5669
+ msgid "Error: Cannot find your log file. Try to reload this page."
5670
+ msgstr ""
5671
+ "Erreur : Impossible de trouver le fichier log. Essayez de recharger cette "
5672
+ "page."
5673
+
5674
+ #: ninjafirewall.php:338
5675
+ msgid "Error: The HTTP server returned the following error code:"
5676
+ msgstr "Erreur : Le serveur HTTP a retourné le code d'erreur suivant :"
5677
+
5678
+ #: ninjafirewall.php:561
5679
+ msgid "Error: Security nonces do not match. Reload the page and try again."
5680
+ msgstr ""
5681
+ "Erreur : Les nonces de sécurité ne correspondent pas. Veuillez recharger "
5682
+ "cette page."
5683
+
5684
+ #: ninjafirewall.php:567
5685
+ msgid "Error: NinjaFirewall is disabled"
5686
+ msgstr "Erreur : NinjaFirewall est désactivé"
5687
+
5688
+ #: ninjafirewall.php:572
5689
+ #, php-format
5690
+ msgid "Error: missing parameter (%s)."
5691
+ msgstr "Erreur : Paramètre manquant (%s)."
5692
+
5693
+ #: ninjafirewall.php:715
5694
  msgid "NinjaFirewall: Overview"
5695
  msgstr "NinjaFirewall : Aperçu"
5696
 
5697
+ #: ninjafirewall.php:720
5698
  msgid "NinjaFirewall: Statistics"
5699
  msgstr "NinjaFirewall : Statistiques"
5700
 
5701
+ #: ninjafirewall.php:725
5702
  msgid "NinjaFirewall: Firewall Options"
5703
  msgstr "NinjaFirewall : Options du Pare-feu"
5704
 
5705
+ #: ninjafirewall.php:729
5706
  msgid "NinjaFirewall: Firewall Policies"
5707
  msgstr "NinjaFirewall : Politiques du Pare-feu"
5708
 
5709
+ #: ninjafirewall.php:733
5710
  msgid "NinjaFirewall: File Guard"
5711
  msgstr "NinjaFirewall: File Guard"
5712
 
5713
+ #: ninjafirewall.php:737
5714
  msgid "NinjaFirewall: File Check"
5715
  msgstr "NinjaFirewall: File Check"
5716
 
5717
+ #: ninjafirewall.php:747
5718
  msgid "NinjaFirewall: Anti-Malware"
5719
  msgstr "NinjaFirewall : Anti-Malware"
5720
 
5721
+ #: ninjafirewall.php:751
5722
  msgid "NinjaFirewall: Network"
5723
  msgstr "NinjaFirewall : Réseau"
5724
 
5725
+ #: ninjafirewall.php:755
5726
  msgid "NinjaFirewall: Event Notifications"
5727
  msgstr "NinjaFirewall : Notifications d’Événement"
5728
 
5729
+ #: ninjafirewall.php:759
5730
  msgid "NinjaFirewall: Log-in Protection"
5731
  msgstr "NinjaFirewall : Page de Connexion"
5732
 
5733
+ #: ninjafirewall.php:763
5734
  msgid "NinjaFirewall: Firewall Log"
5735
  msgstr "NinjaFirewall : Journal du Pare-feu"
5736
 
5737
+ #: ninjafirewall.php:767
5738
  msgid "NinjaFirewall: Live Log"
5739
  msgstr "NinjaFirewall: Live Log"
5740
 
5741
+ #: ninjafirewall.php:771
5742
  msgid "NinjaFirewall: Rules Editor"
5743
  msgstr "NinjaFirewall : Éditeur de Règles"
5744
 
5745
+ #: ninjafirewall.php:775
5746
  msgid "NinjaFirewall: Rules Update"
5747
  msgstr "NinjaFirewall: Mise à Jour des Règles"
5748
 
5749
+ #: ninjafirewall.php:782
5750
  msgid "NinjaFirewall: About"
5751
  msgstr "NinjaFirewall : À Propos"
5752
 
5753
+ #: ninjafirewall.php:782
5754
  msgid "About..."
5755
  msgstr "À Propos..."
5756
 
5757
+ #: ninjafirewall.php:822
5758
  msgid "NinjaFirewall Settings"
5759
  msgstr "Réglages de NinjaFirewall"
5760
 
5761
+ #: ninjafirewall.php:830
5762
  msgid "NinjaFirewall is enabled"
5763
  msgstr "NinjaFirewall est activé"
5764
 
5765
+ #: ninjafirewall.php:1010
5766
  msgid "Access Restricted"
5767
  msgstr "Accès limité"
5768
 
5769
+ #: ninjafirewall.php:1016
5770
  msgid "Settings"
5771
  msgstr "Réglages"
5772
 
5773
+ #: ninjafirewall.php:1017
5774
  msgid "Upgrade to Premium"
5775
  msgstr "Passez Premium !"
5776
 
5777
+ #: ninjafirewall.php:1018
5778
  msgid "Rate it!"
5779
  msgstr "Notez-le !"
5780
 
5781
+ #~ msgid "Disable the fatal error handler <code>WP_Fatal_Error_Handler</code>:"
5782
+ #~ msgstr ""
5783
+ #~ "Désactiver le gestionnaire d'erreurs fatales "
5784
+ #~ "<code>WP_Fatal_Error_Handler</code> :"
5785
+
5786
+ #~ msgid ""
5787
+ #~ "You may need to wait up to five minutes before PHP reloads the modified "
5788
+ #~ "INI files, because it caches them. <strong>Please wait for <font id=\"nfw-"
5789
+ #~ "waf-count\">%d</font> seconds</strong> before trying again (you can "
5790
+ #~ "navigate away from this page and come back in a few minutes)."
5791
+ #~ msgstr ""
5792
+ #~ "Vous devez peut-être attendre cinq minutes avant que PHP ne recharge les "
5793
+ #~ "fichiers INI modifiés, car il les met en cache. <strong>Veuillez "
5794
+ #~ "patienter pendant <font id=\"nfw-waf-count\">%d</font> secondes</strong> "
5795
+ #~ "avant de réessayer (vous pouvez quitter cette page et revenir dans "
5796
+ #~ "quelques minutes)."
5797
+
5798
+ #~ msgid ""
5799
+ #~ "The log menu has been revamped too. You can disable the firewall log, "
5800
+ #~ "delete the current one, enable its rotation based on the size of the file "
5801
+ #~ "and, if any, view each rotated log separately. Quick filtering options "
5802
+ #~ "are easily accessible from checkboxes and the log can be exported as a "
5803
+ #~ "TSV (tab-separated values) text file."
5804
+ #~ msgstr ""
5805
+ #~ "Le <b>Journal du Pare-feu</b> a été remanié. Vous pouvez maintenant le "
5806
+ #~ "désactiver, le supprimer et permettre sa rotation en vous basant sur la "
5807
+ #~ "taille du fichier. Des options de filtrage rapides sont facilement "
5808
+ #~ "accessibles à partir de cases à cocher et le journal peut également être "
5809
+ #~ "exporté dans un fichier au format TSV (valeurs séparées par des "
5810
+ #~ "tabulations)&nbsp;:"
5811
+
5812
+ #~ msgid "(not recommended)"
5813
+ #~ msgstr " (pas recommandé)"
5814
+
5815
+ #~ msgid "Need more security? Check out NinjaFirewall"
5816
+ #~ msgstr "Besoin de plus de sécurité ? Venez découvrir NinjaFirewall"
5817
+
5818
+ #~ msgid ""
5819
+ #~ "is a supercharged Edition of our Web Application Firewall. It adds many "
5820
+ #~ "new exciting features and blazing fast performances to make it the "
5821
+ #~ "fastest and most advanced security plugin for WordPress."
5822
+ #~ msgstr ""
5823
+ #~ "est une version encore plus musclée de notre pare-feu applicatif. Elle "
5824
+ #~ "offre de meilleures performances et contient de nouvelles fonctionnalités "
5825
+ #~ "qui en font l'extension de sécurité pour WordPress la plus avancée et "
5826
+ #~ "puissante sur le marché."
5827
+
5828
+ #~ msgid ""
5829
+ #~ "<b>Access Control</b> is a powerful set of directives that can be used to "
5830
+ #~ "allow or restrict access to your blog, depending on the <strong>User "
5831
+ #~ "Role</strong>, <strong>IP</strong>, <strong>Geolocation</strong>, "
5832
+ #~ "<strong>Requested URL</strong>, <strong>User-agent</strong> visitors "
5833
+ #~ "behavior (<strong>Rate Limiting</strong>)and <strong>User Input</strong>. "
5834
+ #~ "Those directives will be processed before the Firewall Policies and "
5835
+ #~ "NinjaFirewall's built-in security rules."
5836
+ #~ msgstr ""
5837
+ #~ "Le <b>Contrôle d'Accès</b> est un puissant ensemble de directives qui "
5838
+ #~ "peut être utilisé pour autoriser ou restreindre l'accès à votre blog "
5839
+ #~ "selon de nombreux critères&nbsp;: <strong>Rôle</strong> de l'utilisateur, "
5840
+ #~ "<strong>adresse IP</strong>, <strong>Géolocalisation</strong>, "
5841
+ #~ "<strong>URL demandée</strong>, <strong>User-agent</strong>, le "
5842
+ #~ "comportement des visiteurs (<strong>Limitation du trafic</strong>) et les "
5843
+ #~ "<strong>Entrées utilisateur</strong>."
5844
+
5845
+ #~ msgid ""
5846
+ #~ "Its main configuration allows you to whitelist WordPress users depending "
5847
+ #~ "on their roles, to select the source IP (useful if your site is using a "
5848
+ #~ "CDN or behind a reverse-proxy/load balancer), and the HTTP methods all "
5849
+ #~ "directives should apply to:"
5850
+ #~ msgstr ""
5851
+ #~ "Sa configuration principale vous permet de créer une liste blanche des "
5852
+ #~ "utilisateurs de WordPress en fonction de leurs rôles, de sélectionner "
5853
+ #~ "l'adresse IP source (utile si votre site utilise un CDN ou un équilibreur "
5854
+ #~ "de charge), et les méthodes HTTP auxquelles s'appliqueront toutes les "
5855
+ #~ "directives&nbsp;:"
5856
+
5857
+ #~ msgid ""
5858
+ #~ "<b>Access Control</b> can use geolocation to block visitors from specific "
5859
+ #~ "countries. It can apply to the whole blog or only to specific folders or "
5860
+ #~ "scripts (e.g., /wp-login.php, /xmlrpc.php etc). If you have a theme or a "
5861
+ #~ "plugin that needs to know your visitors location, you can even ask "
5862
+ #~ "NinjaFirewall to append the country code to the PHP headers:"
5863
+ #~ msgstr ""
5864
+ #~ "Le <b>Contrôle d'Accès</b> peut utiliser la géolocalisation pour bloquer "
5865
+ #~ "les visiteurs en provenance de pays spécifiques. Il peut s'appliquer à "
5866
+ #~ "tout le site ou bien à certains scripts ou répertoires uniquement (ex: /"
5867
+ #~ "wp-login.php, xmlrpc.php etc). Si vous avez un thème ou une extension "
5868
+ #~ "qui nécessite de géolocaliser vos visiteurs, vous pouvez même demander à "
5869
+ #~ "NinjaFirewall d’insérer le code à deux lettres du pays dans les en-têtes "
5870
+ #~ "PHP&nbsp;:"
5871
+
5872
+ #~ msgid ""
5873
+ #~ "<b>Access Control</b> can be used to whitelist/blacklist an IP or any "
5874
+ #~ "part of it. NinjaFirewall natively supports IPv4 and IPv6 protocols, for "
5875
+ #~ "both public and private addresses:"
5876
+ #~ msgstr ""
5877
+ #~ "Le <b>Contrôle d'Accès</b> peut immédiatement accepter ou bloquer une "
5878
+ #~ "adresse IP ou une partie de celle-ci. NinjaFirewall est compatible avec "
5879
+ #~ "l'IPv4 et l'IPv6&nbsp;:"
5880
+
5881
+ #~ msgid ""
5882
+ #~ "<b>Access Control</b> can slow down aggressive bots, crawlers, web "
5883
+ #~ "scrapers or even small HTTP attacks with its <strong>Rate-Limiting</"
5884
+ #~ "strong> feature."
5885
+ #~ msgstr ""
5886
+ #~ "Le <b>Contrôle d'Accès</b> vous permet de ralentir les bots, crawlers, "
5887
+ #~ "web scrapers ou même de petites attaques HTTP avec son option "
5888
+ #~ "<strong>Limiter le trafic</strong>."
5889
+
5890
+ #~ msgid ""
5891
+ #~ "Because it can block attackers <strong>before WordPress and all its "
5892
+ #~ "plugins are loaded</strong> and can handle thousands of HTTP requests per "
5893
+ #~ "second, NinjaFirewall will save precious bandwidth and reduce your server "
5894
+ #~ "load."
5895
+ #~ msgstr ""
5896
+ #~ "Parce qu'il peut bloquer les attaques <strong>avant que WordPress et ses "
5897
+ #~ "extensions ne soient chargés</strong> et peut gérer un très grand nombre "
5898
+ #~ "de requêtes HTTP par seconde, NinjaFirewall vous fera économiser de la "
5899
+ #~ "bande passante et permettra de réduire la charge du serveur."
5900
+
5901
+ #~ msgid ""
5902
+ #~ "<b>URL Access Control</b> lets you permanently allow/block any access to "
5903
+ #~ "one or more PHP scripts based on their path or name:"
5904
+ #~ msgstr ""
5905
+ #~ "Le <b>Contrôle d'accès par URL</b> vous permet d'autoriser / bloquer tout "
5906
+ #~ "accès à un ou plusieurs scripts PHP basé sur leur chemin ou leur "
5907
+ #~ "nom&nbsp;:"
5908
+
5909
+ #~ msgid ""
5910
+ #~ "<b>Bots Access Control</b> allows you block bots, scanners and various "
5911
+ #~ "annoying crawlers:"
5912
+ #~ msgstr ""
5913
+ #~ "Avec le <b>Contrôle d'accès par Bot</b> vous pouvez bloquer les robots, "
5914
+ #~ "scanners et autres robots ennuyeux&nbsp;:"
5915
+
5916
+ #~ msgid ""
5917
+ #~ "<b>User Input Access Control</b> allows you to to ignore or block some "
5918
+ #~ "specific user input:"
5919
+ #~ msgstr ""
5920
+ #~ "Le <b>Contrôle d'accès d'entrée utilisateur</b> vous permet d’ignorer ou "
5921
+ #~ "de bloquer une entrée utilisateur spécifique :"
5922
+
5923
+ #~ msgid ""
5924
+ #~ "If NinjaFirewall can hook and scan incoming requests, the <b><font color="
5925
+ #~ "\"#21759B\">WP+</font> Edition</b> can also hook the response body (i.e., "
5926
+ #~ "the output of the HTML page right before it is sent to your visitors "
5927
+ #~ "browser) and search it for some specific keywords. Such a filter can be "
5928
+ #~ "useful to detect hacking or malware patterns injected into your HTML page "
5929
+ #~ "(text strings, spam links, malicious JavaScript code), hackers shell "
5930
+ #~ "script, redirections and even errors (PHP/MySQL errors). Some suggested "
5931
+ #~ "keywords as well as a default list are included."
5932
+ #~ msgstr ""
5933
+ #~ "Si NinjaFirewall peut filtrer les requêtes HTTP entrantes, la version "
5934
+ #~ "<b><font color=\"#21759B\">WP+</font> Edition</b> peut aussi intercepter "
5935
+ #~ "les requêtes sortantes, c'est à dire le contenu de la page HTML juste "
5936
+ #~ "avant que celui-ci ne soit envoyé au navigateur de l'utilisateur. Ce type "
5937
+ #~ "de filtre est particulièrement intéressant pour détecter du code "
5938
+ #~ "malveillant injectés dans vos pages HTML (texte, liens, code JavaScript "
5939
+ #~ "etc), des scripts utilisés par les hackers (shell, backdoor) et même des "
5940
+ #~ "erreurs (PHP, MySQL). "
5941
+
5942
+ #~ msgid ""
5943
+ #~ "In the case of a positive detection, NinjaFirewall will not block the "
5944
+ #~ "response body but will send you an alert by email. It can even attach the "
5945
+ #~ "whole HTML source of the page for your review:"
5946
+ #~ msgstr ""
5947
+ #~ "En cas de détection positive, NinjaFirewall ne bloquera pas la requête "
5948
+ #~ "mais vous enverra immédiatement une alerte par e-mail&nbsp;:"
5949
+
5950
+ #~ msgid ""
5951
+ #~ "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) can protect "
5952
+ #~ "your blog comment and registration forms against spam. The protection is "
5953
+ #~ "totally transparent to your visitors and does not require any "
5954
+ #~ "interaction: no CAPTCHA, no math puzzles or trivia questions. Extremely "
5955
+ #~ "easy to activate, but powerful enough to make spam bots life as miserable "
5956
+ #~ "as possible:"
5957
+ #~ msgstr ""
5958
+ #~ "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) peut protéger "
5959
+ #~ "les formulaires de commentaire et d'inscription de votre blog contre le "
5960
+ #~ "spam. La protection est totalement transparente pour vos visiteurs et ne "
5961
+ #~ "nécessite ni CAPTCHA ni interaction de leur part. Extrêmement facile à "
5962
+ #~ "activer, mais assez puissante pour ne laisser aucune chance aux "
5963
+ #~ "spammeurs&nbsp;:"
5964
+
5965
+ #~ msgid ""
5966
+ #~ "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) lets you "
5967
+ #~ "remotely access the firewall log of all your NinjaFirewall protected "
5968
+ #~ "websites from one single installation, using the <a href=\"%s"
5969
+ #~ "\">Centralized Logging</a> feature. You do not need any longer to log in "
5970
+ #~ "to individual servers to analyse your log data."
5971
+ #~ msgstr ""
5972
+ #~ "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) vous permet "
5973
+ #~ "d’accéder, depuis votre blog principal, au journal du pare-feu de chacun "
5974
+ #~ "de vos sites protégés par NinjaFirewall grâce à la fonction de <a href="
5975
+ #~ "\"%s\">Centralisation des Logs</a>. Vous n'avez plus besoin de vous "
5976
+ #~ "connecter à chaque site pour analyser vos journaux."
5977
+
5978
+ #~ msgid "File uploads:"
5979
+ #~ msgstr "Téléchargements&nbsp;:"
5980
+
5981
+ #~ msgid ""
5982
+ #~ "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) makes it "
5983
+ #~ "possible to allow uploads while rejecting potentially dangerous files: "
5984
+ #~ "scripts (PHP, CGI, Ruby, Python, bash/shell), C/C++ source code, binaries "
5985
+ #~ "(MZ/PE/NE and ELF formats), system files (.htaccess, .htpasswd and PHP "
5986
+ #~ "INI) and SVG files containing Javascript/XML events. You can easily limit "
5987
+ #~ "the size of each uploaded file too, without having to modify your PHP "
5988
+ #~ "configuration:"
5989
+ #~ msgstr ""
5990
+ #~ "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) vous permet "
5991
+ #~ "d'autoriser ou d'interdire tout téléchargement de fichiers vers votre "
5992
+ #~ "site, ou bien de bloquer uniquement les fichiers potentiellement "
5993
+ #~ "dangereux : scripts (PHP, CGI, Ruby, Python, bash/shell), code source C/C+"
5994
+ #~ "+, fichiers exécutables (MZ/PE/NE et ELF), certains fichiers systèmes (."
5995
+ #~ "htaccess, .htpasswd et PHP INI) et les fichiers SVG contenant du "
5996
+ #~ "Javascript ou des Événements XML. Vous pouvez aussi sélectionner la "
5997
+ #~ "taille maximale d'un fichier téléchargé, sans avoir à modifier la "
5998
+ #~ "configuration de PHP&nbsp;:"
5999
+
6000
+ #~ msgid "Firewall Log:"
6001
+ #~ msgstr "Journal du Pare-feu&nbsp;:"
6002
+
6003
+ #~ msgid "Rules Update:"
6004
+ #~ msgstr "Mise à Jour des Règles :"
6005
+
6006
+ #~ msgid ""
6007
+ #~ "The <b><font color=\"#21759B\">WP+</font> Edition</b> can check for "
6008
+ #~ "security rules updates <b>as often as every 15 minutes</b>, versus one "
6009
+ #~ "hour for the free WP Edition."
6010
+ #~ msgstr ""
6011
+ #~ "NinjaFirewall <b><font color=\"#21759B\">WP+</font> Edition</b> peut "
6012
+ #~ "vérifier les mises à jour des règles de sécurité <b>toutes les 15 "
6013
+ #~ "minutes</b>, contre une heure pour la version gratuite WP Edition."
6014
+
6015
+ #~ msgid "Shared Memory use:"
6016
+ #~ msgstr "Utilisation de la mémoire partagée&nbsp;:"
6017
+
6018
+ #~ msgid ""
6019
+ #~ "This dramatically increases the processing speed (there is nothing faster "
6020
+ #~ "than RAM), prevents blocking I/O and MySQL slow queries. On a very busy "
6021
+ #~ "server like a multi-site network, the firewall processing speed will "
6022
+ #~ "increase from 25% to 30%. It can be enabled from the \"Firewall Options\" "
6023
+ #~ "menu:"
6024
+ #~ msgstr ""
6025
+ #~ "Cela augmente considérablement la vitesse de traitement (il n'y a rien de "
6026
+ #~ "plus rapide que la mémoire), empêche le blocage des E/S et les requêtes "
6027
+ #~ "lentes MySQL. Sur un serveur très sollicité comme un réseau multi-site, "
6028
+ #~ "la vitesse de traitement de pare-feu va augmenter de 25% à 30%. Cette "
6029
+ #~ "option peut être activé à partir de la page \"Options du pare-feu"
6030
+ #~ "\"&nbsp;:"
6031
+
6032
+ #~ msgid ""
6033
+ #~ "This feature requires that PHP was compiled with the <code>--enable-"
6034
+ #~ "shmop</code> parameter."
6035
+ #~ msgstr ""
6036
+ #~ "Cette fonction nécessite que PHP soit compilé avec le paramètre <code>--"
6037
+ #~ "enable-shmop</code>."
6038
+
6039
+ #~ msgid "Oops! Full WAF mode not is not enabled yet."
6040
+ #~ msgstr "Oops! Le mode Full WAF n'est pas encore activé."
6041
+
6042
+ #~ msgid "Sleeping"
6043
+ #~ msgstr "Rafraîchissement dans"
6044
+
6045
+ #~ msgid ""
6046
+ #~ "Error: You have a copy of NinjaFirewall (%s) installed.<br />Please "
6047
+ #~ "uninstall it completely before attempting to install NinjaFirewall (WP "
6048
+ #~ "Edition)."
6049
+ #~ msgstr ""
6050
+ #~ "Erreur : Vous avez déjà une copie de NinjaFirewall (%s) installée<br /"
6051
+ #~ ">Veuillez la désinstaller complètement avant d'installer NinjaFirewall "
6052
+ #~ "(WP Edition)."
6053
+
6054
+ #~ msgid "Thank you for using NinjaFirewall"
6055
+ #~ msgstr "Merci d'utiliser NinjaFirewall"
6056
+
6057
+ #~ msgid ""
6058
+ #~ "This installer will help you to make the setup process as quick and easy "
6059
+ #~ "as possible."
6060
+ #~ msgstr ""
6061
+ #~ "Cet installateur va vous aider afin de rendre le processus d'installation "
6062
+ #~ "aussi rapide et facile que possible."
6063
+
6064
+ #~ msgid ""
6065
+ #~ "Although NinjaFirewall looks like a regular security plugin, it is not. "
6066
+ #~ "It can be installed and configured from the WordPress admin console, but "
6067
+ #~ "it is a stand-alone Web Application Firewall that sits in front of "
6068
+ #~ "WordPress."
6069
+ #~ msgstr ""
6070
+ #~ "Bien que NinjaFirewall ressemble à toute autre extension pour WordPress, "
6071
+ #~ "il est très différent. Il peut certes être installé et configuré à partir "
6072
+ #~ "de votre Tableau de Bord, mais c'est un pare-feu applicatif autonome qui "
6073
+ #~ "agit en amont de WordPress."
6074
+
6075
+ #~ msgid ""
6076
+ #~ "It can run in two different modes: <b>Full WAF</b> or <b>WordPress WAF</"
6077
+ #~ "b> modes."
6078
+ #~ msgstr ""
6079
+ #~ "Il peut fonctionner en deux modes différents : <b>Full WAF</b> ou "
6080
+ #~ "<b>WordPress WAF</b>."
6081
+
6082
+ #~ msgid "Full WAF mode"
6083
+ #~ msgstr "Mode Full WAF"
6084
+
6085
+ #~ msgid ""
6086
+ #~ "In <b>Full WAF</b> mode, NinjaFirewall will hook, scan, reject or "
6087
+ #~ "sanitise any HTTP and HTTPS request sent to a PHP script before it "
6088
+ #~ "reaches WordPress, its plugins or even the database. All scripts located "
6089
+ #~ "inside the blog installation directories and sub-directories will be "
6090
+ #~ "protected, including those that aren't part of the WordPress package. "
6091
+ #~ "Even encoded PHP scripts (e.g., ionCube), potential backdoors and shell "
6092
+ #~ "scripts (e.g., c99, r57) will be filtered by NinjaFirewall."
6093
+ #~ msgstr ""
6094
+ #~ "En mode <b>Full WAF</b>, NinjaFirewall peut intercepter, analyser, "
6095
+ #~ "nettoyer ou rejeter toute requête HTTP ou HTTPS envoyée à un script PHP "
6096
+ #~ "avant même que celle-ci n'atteigne WordPress ou l'une de ses extensions. "
6097
+ #~ "Tous les scripts situés dans le répertoire et sous-répertoires "
6098
+ #~ "d'installation de votre blog seront protégés, y compris ceux qui ne font "
6099
+ #~ "pas partie de WordPress. Même un script PHP encodé (par ex. ionCube), une "
6100
+ #~ "éventuelle porte dérobée ou un script shell (par ex. c99, r57 ) installés "
6101
+ #~ "par un pirate seront filtrés par NinjaFirewall."
6102
+
6103
+ #~ msgid ""
6104
+ #~ "That makes it a true firewall and gives you the highest possible level of "
6105
+ #~ "protection: <a href=\"%s\" title=\"%s\">security without compromise</a>."
6106
+ #~ msgstr ""
6107
+ #~ "Cela fait de lui un véritable pare-feu applicatif et vous offre le niveau "
6108
+ #~ "de protection le plus élevé possible : <a href=\"%s\" title=\"%s\">La "
6109
+ #~ "sécurité sans aucun compromis</a>."
6110
+
6111
+ #~ msgid ""
6112
+ #~ "To run NinjaFirewall in <b>Full WAF</b> mode, your server must allow the "
6113
+ #~ "use of the <code>auto_prepend_file</code> PHP directive. It is required "
6114
+ #~ "to instruct the PHP interpreter to load the firewall before WordPress or "
6115
+ #~ "any other script. Most of the time it works right out of the box, or may "
6116
+ #~ "require <a href=\"%s\" title=\"%s\">some very little tweaks</a>. But in a "
6117
+ #~ "few cases, mostly because of some shared hosting plans restrictions, it "
6118
+ #~ "may simply not work at all."
6119
+ #~ msgstr ""
6120
+ #~ "Pour installer NinjaFirewall en mode <b>Full WAF</b>, votre serveur doit "
6121
+ #~ "autoriser l'utilisation de la directive PHP <code>auto_prepend_file</"
6122
+ #~ "code>. Celle-ci est nécessaire pour forcer l'interpréteur PHP à charger "
6123
+ #~ "le pare-feu avant WordPress ou tout autre script. La plupart du temps, "
6124
+ #~ "l'installation fonctionne sans aucun problème ou, peut nécessiter <a href="
6125
+ #~ "\"%s\" title=\"%s\">quelques petits ajustements</a>. Mais dans quelques "
6126
+ #~ "cas, principalement en raison de certaines restrictions d'hébergement "
6127
+ #~ "partagé, il se peut que l'installation ne puisse pas fonctionner du tout."
6128
+
6129
+ #~ msgid "WordPress WAF mode"
6130
+ #~ msgstr "Mode WordPress WAF"
6131
+
6132
+ #~ msgid ""
6133
+ #~ "The <b>WordPress WAF</b> mode requires to load NinjaFirewall via the "
6134
+ #~ "WordPress wp-config.php script. This process makes it easy to setup and "
6135
+ #~ "the installation will always be successful, regardless of your hosting "
6136
+ #~ "plan restrictions."
6137
+ #~ msgstr ""
6138
+ #~ "Le mode <b>WordPress WAF</b> nécessite de charger NinjaFirewall via le "
6139
+ #~ "script wp-config.php de WordPress. L'installation est très simple et "
6140
+ #~ "toujours couronnée de succès et ce, quelles que soient les restrictions "
6141
+ #~ "de votre plan hébergement."
6142
+
6143
+ #~ msgid ""
6144
+ #~ "NinjaFirewall will still load before WordPress, its plugins and the "
6145
+ #~ "database and will run as fast as the <b>Full WAF</b> mode."
6146
+ #~ msgstr ""
6147
+ #~ "NinjaFirewall se chargera là encore avant WordPress, ses extensions et la "
6148
+ #~ "base de données, et ses performances seront identiques à celles du mode "
6149
+ #~ "<b>Full WAF</b>."
6150
+
6151
+ #~ msgid ""
6152
+ #~ "However, the downside of this mode is that NinjaFirewall will be able to "
6153
+ #~ "hook and filter HTTP requests sent to WordPress only. A few features such "
6154
+ #~ "as File Guard, the URL Access Control and Web Filter (WP+ Edition only) "
6155
+ #~ "will be limited."
6156
+ #~ msgstr ""
6157
+ #~ "Toutefois, l'inconvénient de ce mode est que NinjaFirewall ne pourra "
6158
+ #~ "intercepter, analyser, nettoyer ou rejeter que les requêtes HTTP ou HTTPS "
6159
+ #~ "directement adressées à WordPress uniquement, et non plus à tout autre "
6160
+ #~ "script PHP ou application tierce. Certaines fonctionnalités telles que "
6161
+ #~ "File Guard, le contrôle d'accès par URL et Web Filter (WP+ Edition "
6162
+ #~ "uniquement) seront limitées."
6163
+
6164
+ #~ msgid ""
6165
+ #~ "Despite being less powerful than the <b>Full WAF</b> mode, it still "
6166
+ #~ "offers a level of protection and performance higher than any other "
6167
+ #~ "security plugin."
6168
+ #~ msgstr ""
6169
+ #~ "Bien que moins puissant que <b>Full WAF</b>, le mode <b>WordPress WAF</b> "
6170
+ #~ "offre tout de même des performances et un niveau de protection supérieurs "
6171
+ #~ "aux autres extensions de sécurité pour WordPress disponibles sur le "
6172
+ #~ "marché."
6173
+
6174
+ #~ msgid "Installation"
6175
+ #~ msgstr "Installation"
6176
+
6177
+ #~ msgid ""
6178
+ #~ "We recommend to select the <b>Full WAF</b> mode option first. If it "
6179
+ #~ "fails, this installer will let you switch to the <b>WordPress WAF</b> "
6180
+ #~ "mode easily."
6181
+ #~ msgstr ""
6182
+ #~ "Nous vous recommandons de sélectionner d'abord l'option <b>Full WAF</b>. "
6183
+ #~ "Si elle échoue, ce programme d'installation vous proposera de passer "
6184
+ #~ "facilement au mode <b>WordPress WAF</b>."
6185
+
6186
+ #~ msgid "Full WAF mode (recommended)"
6187
+ #~ msgstr "Mode Full WAF (recommandé)"
6188
+
6189
+ #~ msgid ""
6190
+ #~ "Enter the email address where NinjaFirewall will send notifications and "
6191
+ #~ "reports:"
6192
+ #~ msgstr ""
6193
+ #~ "Entrez l'adresse e-mail où NinjaFirewall enverra ses notifications et "
6194
+ #~ "rapports :"
6195
+
6196
+ #~ msgid "Next Step"
6197
+ #~ msgstr "Étape suivante"
6198
+
6199
+ #~ msgid "Privacy policy"
6200
+ #~ msgstr "Politique de confidentialité"
6201
+
6202
+ #~ msgid ""
6203
+ #~ "NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
6204
+ #~ "please make sure that the <code>%s</code> directory is writable"
6205
+ #~ msgstr ""
6206
+ #~ "NinjaFirewall ne peut pas créer le répertoire <code>nfwlog/</code>; "
6207
+ #~ "veuillez vous assurer que le répertoire <code>%s</code> est accessible en "
6208
+ #~ "écriture"
6209
+
6210
+ #~ msgid ""
6211
+ #~ "This is NinjaFirewall's logs, loader and cache directory. DO NOT alter or "
6212
+ #~ "remove it as long as NinjaFirewall is running!"
6213
+ #~ msgstr ""
6214
+ #~ "Ce répertoire est utilisé par NinjaFirewall. Veuillez NE PAS le supprimer "
6215
+ #~ "tant que NinjaFirewall est installé !"
6216
+
6217
+ #~ msgid "Try again"
6218
+ #~ msgstr "Essayer à nouveau"
6219
+
6220
+ #~ msgid "Quick Start, FAQ & Troubleshooting Guide"
6221
+ #~ msgstr "Guide d'Utilisation, d'Installation et de Dépannage"
6222
+
6223
+ #~ msgid "Hi,"
6224
+ #~ msgstr "Bonjour,"
6225
+
6226
+ #~ msgid ""
6227
+ #~ "This is NinjaFirewall's installer. Below are some helpful info and links "
6228
+ #~ "you may consider reading before using NinjaFirewall."
6229
+ #~ msgstr ""
6230
+ #~ "Je suis l'installateur de NinjaFirewall. Voici quelques informations et "
6231
+ #~ "liens qui pourraient vous être utiles (en langue anglaise) :"
6232
+
6233
+ #~ msgid "Must Read:"
6234
+ #~ msgstr "A lire aussi :"
6235
+
6236
+ #~ msgid "-Securing WordPress with NinjaFirewall. A step by step tutorial:"
6237
+ #~ msgstr ""
6238
+ #~ "-Sécurisation de WordPress avec NinjaFirewall. Un tutoriel étape par "
6239
+ #~ "étape :"
6240
+
6241
+ #~ msgid "-An introduction to NinjaFirewall filtering engine:"
6242
+ #~ msgstr "-Présentation du moteur de filtrage de NinjaFirewall :"
6243
+
6244
+ #~ msgid "-Testing NinjaFirewall without blocking your visitors:"
6245
+ #~ msgstr "-Tester NinjaFirewall sans bloquer vos visiteurs :"
6246
+
6247
+ #~ msgid "-Add your own code to the firewall: the \".htninja\" file:"
6248
+ #~ msgstr "-Ajoutez votre code au pare-feu: le fichier \".htninja\" :"
6249
+
6250
+ #~ msgid "-Restricting access to NinjaFirewall settings:"
6251
+ #~ msgstr "-Restreindre l'accès à la configuration de NinjaFirewall :"
6252
+
6253
+ #~ msgid "-Upgrading to PHP 7 with NinjaFirewall installed:"
6254
+ #~ msgstr "-Mise à niveau de PHP 5 vers PHP 7 avec NinjaFirewall installé :"
6255
+
6256
+ #~ msgid "-Keep your blog protected against the latest vulnerabilities:"
6257
+ #~ msgstr "-Gardez votre blog protégé contre les dernières vulnérabilités :"
6258
+
6259
+ #~ msgid "-Test your website security with our online scanner:"
6260
+ #~ msgstr "- Testez la sécurité de votre site avec notre scanner en ligne :"
6261
+
6262
+ #~ msgid "-NinjaFirewall Referral Program:"
6263
+ #~ msgstr "-Programme de parrainage de NinjaFirewall :"
6264
+
6265
+ #~ msgid "Troubleshooting:"
6266
+ #~ msgstr "Dépannage :"
6267
+
6268
+ #~ msgid "-Locked out of your site / Fatal error / WordPress crash?"
6269
+ #~ msgstr ""
6270
+ #~ "-Votre site n'est plus accessible / Erreur fatale / WordPress a planté ?"
6271
+
6272
+ #~ msgid "-Failed installation (\"Error: The firewall is not loaded\")?"
6273
+ #~ msgstr ""
6274
+ #~ "-Échec de l'installation (\"Erreur : Le pare-feu n'est pas activé.\") ?"
6275
+
6276
+ #~ msgid "-Blank page after INSTALLING NinjaFirewall?"
6277
+ #~ msgstr "-Page blanche après l'INSTALLATION de NinjaFirewall ?"
6278
+
6279
+ #~ msgid "-Blank page after UNINSTALLING NinjaFirewall?"
6280
+ #~ msgstr "-Page blanche après la DÉSINSTALLATION de NinjaFirewall ?"
6281
+
6282
+ #~ msgid "-500 Internal Server Error?"
6283
+ #~ msgstr "-500 Internal Server Error ?"
6284
+
6285
+ #~ msgid "-\"Cannot connect to WordPress database\" error message?"
6286
+ #~ msgstr "-Impossible de se connecter à la base de données WordPress ?"
6287
+
6288
+ #~ msgid "-How to disable NinjaFirewall?"
6289
+ #~ msgstr "-Comment désactiver NinjaFirewall ?"
6290
+
6291
+ #~ msgid "-Lost password (brute-force protection)?"
6292
+ #~ msgstr ""
6293
+ #~ "-Vous avez perdu le mot de passe de la protection contre les attaques par "
6294
+ #~ "force brute ?"
6295
+
6296
+ #~ msgid "-Blocked visitors (see below)?"
6297
+ #~ msgstr "-Vos visiteurs sont bloqués par erreur (voir ci-dessous) ?"
6298
+
6299
+ #~ msgid "-Exporting NinjaFirewall's configuration"
6300
+ #~ msgstr "-Exporter la configuration de NinjaFirewall"
6301
+
6302
+ #~ msgid "-NinjaFirewall (WP Edition) troubleshooter script"
6303
+ #~ msgstr "-Script de dépannage NinjaFirewall (WP Edition)"
6304
+
6305
+ #~ msgid "-Rename this file to \"wp-check.php\"."
6306
+ #~ msgstr "-Renommez ce fichier en \"wp-check.php\"."
6307
+
6308
+ #~ msgid "-Upload it into your WordPress root folder."
6309
+ #~ msgstr "-Téléchargez-le dans le repertoire racine de WordPress."
6310
+
6311
+ #~ msgid "-Goto http://YOUR WEBSITE/wp-check.php."
6312
+ #~ msgstr "-Rendez-vous sur http://VOTRE_SITE/wp-check.php."
6313
+
6314
+ #~ msgid "-Delete it afterwards."
6315
+ #~ msgstr "-Supprimez-le lorsque vous avez fini."
6316
+
6317
+ #~ msgid "FAQ:"
6318
+ #~ msgstr "FAQ :"
6319
+
6320
+ #~ msgid ""
6321
+ #~ "-Why is NinjaFirewall different from other security plugins for WordPress?"
6322
+ #~ msgstr ""
6323
+ #~ "-En quoi NinjaFirewall est-il différent des autres extensions de sécurité "
6324
+ #~ "pour WordPress ?"
6325
+
6326
+ #~ msgid "-Do I need root privileges to install NinjaFirewall?"
6327
+ #~ msgstr ""
6328
+ #~ "-Ai-je besoin d'avoir les privilèges root pour installer NinjaFirewall ?"
6329
+
6330
+ #~ msgid "-Does it work with Nginx?"
6331
+ #~ msgstr "-Est-ce qu'il fonctionne avec Nginx ?"
6332
+
6333
+ #~ msgid "-Do I need to alter my PHP scripts?"
6334
+ #~ msgstr "-Dois-je modifier mes script PHP ?"
6335
+
6336
+ #~ msgid ""
6337
+ #~ "-Will NinjaFirewall detect the correct IP of my visitors if I am behind a "
6338
+ #~ "CDN service like Cloudflare or Incapsula?"
6339
+ #~ msgstr ""
6340
+ #~ "-Est-ce que NinjaFirewall détectera la bonne adresse IP de mes visiteurs "
6341
+ #~ "si j'utilise un service CDN comme Cloudflare ou Incapsula ?"
6342
+
6343
+ #~ msgid ""
6344
+ #~ "-I moved my wp-config.php file to another directory. Will it work with "
6345
+ #~ "NinjaFirewall?"
6346
+ #~ msgstr ""
6347
+ #~ "-J'ai déplacé mon fichier wp-config.php dans un autre répertoire. "
6348
+ #~ "NinjaFirewall va-t-il fonctionner ?"
6349
+
6350
+ #~ msgid "-Will it slow down my site?"
6351
+ #~ msgstr "-Est-ce qu'il va ralentir mon site ?"
6352
+
6353
+ #~ msgid "-Is there a Microsoft Windows version?"
6354
+ #~ msgstr "-Existe-t-il une version pour Microsoft Windows ?"
6355
+
6356
+ #~ msgid "-Can I add/write my own security rules?"
6357
+ #~ msgstr "-Puis-je ajouter / écrire mes propres règles de sécurité ?"
6358
+
6359
+ #~ msgid "-Can I migrate my site(s) with NinjaFirewall installed?"
6360
+ #~ msgstr ""
6361
+ #~ "-Est-ce que je peux migrer mon site lorsque NinjaFirewall est installé ?"
6362
+
6363
+ #~ msgid "Help & Support Links:"
6364
+ #~ msgstr "Aide & Support :"
6365
+
6366
+ #~ msgid ""
6367
+ #~ "-Each page of NinjaFirewall includes a contextual help: click on "
6368
+ #~ "the \"Help\" menu tab located in the upper right corner of the "
6369
+ #~ "corresponding page."
6370
+ #~ msgstr ""
6371
+ #~ "-Si vous avez besoin d'aide, cliquez sur l'onglet \"Aide\" situé dans le "
6372
+ #~ "coin supérieur droit de chaque page."
6373
+
6374
+ #~ msgid "-Online documentation is also available here:"
6375
+ #~ msgstr "-Une documentation est aussi disponible en ligne :"
6376
+
6377
+ #~ msgid "-The WordPress support forum:"
6378
+ #~ msgstr "-Le forum de WordPress :"
6379
+
6380
+ #~ msgid "-Updates info are available via Twitter:"
6381
+ #~ msgstr "-Info sur les mises à jour via Twitter&nbsp;:"
6382
+
6383
+ #~ msgid "Error: The firewall is not loaded."
6384
+ #~ msgstr "Erreur&nbsp;: Le pare-feu n'est pas activé."
6385
+
6386
+ #~ msgid "Suggestions:"
6387
+ #~ msgstr "Suggestions&nbsp;:"
6388
+
6389
+ #~ msgid ""
6390
+ #~ "You selected <code>Apache + PHP module</code> as your HTTP server and PHP "
6391
+ #~ "SAPI. Maybe your HTTP server is <code>Apache + CGI/FastCGI</code>?"
6392
+ #~ msgstr ""
6393
+ #~ "Vous avez sélectionné <code>Apache + PHP module</code> comme serveur HTTP "
6394
+ #~ "et PHP SAPI. Peut-être que votre serveur utilise <code>Apache + CGI/"
6395
+ #~ "FastCGI</code>&nbsp;?"
6396
+
6397
+ #~ msgid ""
6398
+ #~ "You can click the \"Go Back\" button and try to select another HTTP "
6399
+ #~ "server type."
6400
+ #~ msgstr ""
6401
+ #~ "Vous pouvez cliquer sur le bouton \"Retour\" et essayer de sélectionner "
6402
+ #~ "un autre type de serveur HTTP."
6403
+
6404
+ #~ msgid ""
6405
+ #~ "You have selected LiteSpeed as your HTTP server. Did you enable the "
6406
+ #~ "\"AllowOverride\" directive from its admin panel? Make sure it is "
6407
+ #~ "enabled, restart LiteSpeed and then, click the \"Test Again\" button "
6408
+ #~ "below."
6409
+ #~ msgstr ""
6410
+ #~ "Vous avez sélectionné LiteSpeed comme serveur HTTP. Avez-vous activé la "
6411
+ #~ "directive \"AllowOverride\" à partir de son panneau d'administration ? "
6412
+ #~ "Assurez-vous qu'elle est activée, redémarrez LiteSpeed, puis cliquez sur "
6413
+ #~ "le bouton \"Tester à nouveau\" ci-dessous."
6414
+
6415
+ #~ msgid "Test Again"
6416
+ #~ msgstr "Tester à nouveau"
6417
+
6418
+ #~ msgid ""
6419
+ #~ "You have selected <code>.user.ini</code> as your PHP initialization file. "
6420
+ #~ "Unlike <code>php.ini</code>, <code>.user.ini</code> files are not "
6421
+ #~ "reloaded immediately by PHP, but every five minutes. If this is your own "
6422
+ #~ "server, restart Apache (or PHP-FPM if applicable) to force PHP to reload "
6423
+ #~ "it, otherwise please <strong>wait up to five minutes</strong> and then, "
6424
+ #~ "click the \"Test Again\" button below."
6425
+ #~ msgstr ""
6426
+ #~ "Vous avez sélectionné <code>.user.ini</code> comme fichier "
6427
+ #~ "d'initialisation de PHP. Contrairement aux fichiers <code>php.ini</code>, "
6428
+ #~ "après leur modification les fichiers <code>.user.ini</code> ne sont pas "
6429
+ #~ "rechargés immédiatement par PHP, mais environ toutes les cinq minutes. Si "
6430
+ #~ "ceci est votre serveur, redémarrez Apache (ou PHP-FPM le cas échéant) "
6431
+ #~ "afin de forcer PHP à le recharger, sinon veuillez <strong>patienter "
6432
+ #~ "jusqu'à cinq minutes</strong> avant de cliquer sur le bouton \"Tester à "
6433
+ #~ "nouveau\" ci-dessous."
6434
+
6435
+ #~ msgid ""
6436
+ #~ "You selected <code>Apache + CGI/FastCGI</code> as your HTTP server and "
6437
+ #~ "PHP SAPI. Maybe your HTTP server is <code>Apache + PHP module</code>?"
6438
+ #~ msgstr ""
6439
+ #~ "Vous avez sélectionné <code>Apache + CGI/FastCGI</code> comme serveur "
6440
+ #~ "HTTP et PHP SAPI. Peut-être que votre serveur utilise <code>Apache + PHP "
6441
+ #~ "module</code>&nbsp;?"
6442
+
6443
+ #~ msgid "Maybe you did not select the correct PHP INI ?"
6444
+ #~ msgstr ""
6445
+ #~ "Peut-être que vous n'avez pas sélectionné le bon fichier PHP INI&nbsp;?"
6446
+
6447
+ #~ msgid "You can click the \"Go Back\" button and try to select another one."
6448
+ #~ msgstr ""
6449
+ #~ "Vous pouvez cliquer sur le bouton \"Retour\" et essayer d'en sélectionner "
6450
+ #~ "un autre."
6451
+
6452
+ #~ msgid "Go Back"
6453
+ #~ msgstr "Retour"
6454
+
6455
+ #~ msgid ""
6456
+ #~ "If none of the above suggestions work, you can still install "
6457
+ #~ "NinjaFirewall in %s mode by clicking the button below. Setup is easy and "
6458
+ #~ "will always work."
6459
+ #~ msgstr ""
6460
+ #~ "Si aucune des suggestions ci-dessus ne fonctionnent, vous pouvez "
6461
+ #~ "installer NinjaFirewall en mode %s en cliquant sur le bouton ci-dessous. "
6462
+ #~ "L'installation est facile et toujours couronnée de succès."
6463
+
6464
+ #~ msgid "Switch to the WordPress WAF mode installer &#187;"
6465
+ #~ msgstr "Passer à l'installateur WordPress WAF &#187;"
6466
+
6467
+ #~ msgid "Need help? Check our blog:"
6468
+ #~ msgstr "Besoin d'aide ? Consultez notre blog :"
6469
+
6470
+ #~ msgid ""
6471
+ #~ "This is the Overview page; it shows information about the firewall "
6472
+ #~ "status. We recommend you keep an eye on it because, in case of problems, "
6473
+ #~ "all possible errors and warnings will be displayed here."
6474
+ #~ msgstr ""
6475
+ #~ "La page Aperçu affiche toutes les informations relatives au bon "
6476
+ #~ "fonctionnement du pare-feu ainsi que les mises à jour; il vous est "
6477
+ #~ "conseillé de la consulter fréquemment car, en cas de problèmes, ceux-ci "
6478
+ #~ "seront indiqués ici."
6479
+
6480
+ #~ msgid "Securing WordPress with NinjaFirewall."
6481
+ #~ msgstr "Sécurisation de WordPress avec NinjaFirewall."
6482
+
6483
+ #~ msgid "Installation, help and troubleshooting"
6484
+ #~ msgstr "Installation, aide et problèmes"
6485
+
6486
+ #~ msgid "Support Forum"
6487
+ #~ msgstr "Forum"
6488
+
6489
+ #~ msgid "Updates via Twitter"
6490
+ #~ msgstr "Mises à jour via Twitter"
6491
+
6492
+ #~ msgid "Error:"
6493
+ #~ msgstr "Erreur :"
6494
+
6495
+ #~ msgid ""
6496
+ #~ "Your WordPress directory (%s) is different from your website document "
6497
+ #~ "root (%s). Because it is possible to install WordPress into a "
6498
+ #~ "subdirectory, but have the blog exist in the site root, NinjaFirewall "
6499
+ #~ "needs to know the exact location of the site root."
6500
+ #~ msgstr ""
6501
+ #~ "Le répertoire de WordPress (%s) est différent du répertoire racine de "
6502
+ #~ "votre site Web (%s). Parce qu'il est possible d'installer WordPress dans "
6503
+ #~ "un sous-répertoire, tout en ayant le blog à la racine du site, "
6504
+ #~ "NinjaFirewall a besoin de connaître l'emplacement de la racine du site."
6505
+
6506
+ #~ msgid ""
6507
+ #~ "Please edit the path below only if you have manually modified your "
6508
+ #~ "WordPress root directory as described in the <a href=\"%s\">Giving "
6509
+ #~ "WordPress Its Own Directory</a> article."
6510
+ #~ msgstr ""
6511
+ #~ "Veuillez corriger le chemin ci-dessous uniquement si vous avez modifié "
6512
+ #~ "manuellement votre répertoire racine de WordPress comme décrit dans "
6513
+ #~ "l'article <a href=\"%s\">Giving WordPress Its Own Directory</a>."
6514
+
6515
+ #~ msgid "Most users should not change this value."
6516
+ #~ msgstr "La plupart des utilisateurs ne devront pas changer cette valeur."
6517
+
6518
+ #~ msgid "Path to WordPress site root directory:"
6519
+ #~ msgstr "Chemin vers le répertoire racine de WordPress :"
6520
+
6521
+ #~ msgid "please enter the full path to WordPress folder."
6522
+ #~ msgstr "veuillez entrer le chemin complet vers le répertoire de WordPress."
6523
+
6524
+ #~ msgid ""
6525
+ #~ "cannot find the %s directory! Please correct the full path to WordPress "
6526
+ #~ "site root directory."
6527
+ #~ msgstr ""
6528
+ #~ "impossible de trouver le répertoire %s&nbsp;! Veuillez corriger le chemin "
6529
+ #~ "complet vers le répertoire racine de WordPress."
6530
+
6531
+ #~ msgid "Please select the PHP initialization file supported by your server."
6532
+ #~ msgstr ""
6533
+ #~ "Sélectionnez le type de fichier de configuration PHP utilisé par votre "
6534
+ #~ "serveur."
6535
+
6536
+ #~ msgid ""
6537
+ #~ "Error: NinjaFirewall log directory is not writable (%s). Please chmod it "
6538
+ #~ "to 0777 and reload this page."
6539
+ #~ msgstr ""
6540
+ #~ "Erreur : le répertoire du journal et cache de NinjaFirewall (%s) n'est "
6541
+ #~ "pas accessible en écriture. Veuillez changer ses permissions (par ex. "
6542
+ #~ "0777) et recharger cette page."
6543
+
6544
+ #~ msgid "System configuration"
6545
+ #~ msgstr "Configuration du système"
6546
+
6547
+ #~ msgid ""
6548
+ #~ "NinjaFirewall detected that the PHP <code>auto_prepend_file</code> "
6549
+ #~ "directive seems to be used by another application: %s."
6550
+ #~ msgstr ""
6551
+ #~ "NinjaFirewall a détecté que <code>auto_prepend_file</code> est déjà "
6552
+ #~ "utilisé par une autre application : %s."
6553
+
6554
+ #~ msgid ""
6555
+ #~ "Because NinjaFirewall needs to use that directive, it will override it."
6556
+ #~ msgstr ""
6557
+ #~ "Parce qu’il a besoin de cette directive, NinjaFirewall va la remplacer "
6558
+ #~ "par la sienne."
6559
+
6560
+ #~ msgid "Multisite network detected:"
6561
+ #~ msgstr "Réseau multi-site détecté&nbsp;:"
6562
+
6563
+ #~ msgid ""
6564
+ #~ "NinjaFirewall will protect all sites from your network and its "
6565
+ #~ "configuration interface will be accessible only to the Super Admin from "
6566
+ #~ "the network main site."
6567
+ #~ msgstr ""
6568
+ #~ "NinjaFirewall protégera tous les sites de votre réseau; son interface de "
6569
+ #~ "configuration ne sera accessible qu'au Super Administrateur à partir du "
6570
+ #~ "site principal du réseau."
6571
+
6572
+ #~ msgid "CGI or PHP-FPM"
6573
+ #~ msgstr "CGI ou PHP-FPM"
6574
+
6575
+ #~ msgid "Other webserver + CGI/FastCGI"
6576
+ #~ msgstr "Autre serveur + CGI/FastCGI"
6577
+
6578
+ #~ msgid "Other webserver + HHVM"
6579
+ #~ msgstr "Autre serveur + HHVM"
6580
+
6581
+ #~ msgid "view PHPINFO"
6582
+ #~ msgstr "voir PHPINFO"
6583
+
6584
+ #~ msgid ""
6585
+ #~ "Please <a href=\"%s\">check our blog</a> if you want to install "
6586
+ #~ "NinjaFirewall on HHVM."
6587
+ #~ msgstr ""
6588
+ #~ "Veuillez consulter <a href=\"%s\">notre blog</a> afin d'installer "
6589
+ #~ "NinjaFirewall avec HHVM."
6590
+
6591
+ #~ msgid "Used by most shared hosting accounts."
6592
+ #~ msgstr "Utilisé par la plupart des hébergements mutualisés"
6593
+
6594
+ #~ msgid "The default PHP INI file since PHP 5.3.0"
6595
+ #~ msgstr "Le fichier PHP INI par défaut depuis PHP 5.3.0"
6596
+
6597
+ #~ msgid "more info"
6598
+ #~ msgstr "plus d'info"
6599
+
6600
+ #~ msgid "A few shared hosting accounts. Seldom used."
6601
+ #~ msgstr "Quelques hébergements mutualisés. Rarement utilisé."
6602
+
6603
+ #~ msgid "select your HTTP server and PHP SAPI."
6604
+ #~ msgstr "sélectionnez votre serveur HTTP et PHP SAPI."
6605
+
6606
+ #~ msgid "select the PHP initialization file supported by your server."
6607
+ #~ msgstr ""
6608
+ #~ "sélectionnez le type de fichier de configuration PHP utilisé par votre "
6609
+ #~ "serveur."
6610
+
6611
+ #~ msgid "Firewall Integration"
6612
+ #~ msgstr "Intégration du Pare-feu"
6613
+
6614
+ #~ msgid ""
6615
+ #~ "The <code>%s</code> file must be created, and the following lines of code "
6616
+ #~ "added to it:"
6617
+ #~ msgstr ""
6618
+ #~ "Le fichier <code>%s</code> doit être créé, et les lignes suivantes "
6619
+ #~ "doivent y être ajoutées&nbsp;:"
6620
+
6621
+ #~ msgid ""
6622
+ #~ "The following <font color=\"green\">green lines</font> of code must be "
6623
+ #~ "added to your <code>%s</code> file."
6624
+ #~ msgstr ""
6625
+ #~ "Les lignes de code de <font color=\"green\">couleur verte</font> doivent "
6626
+ #~ "être ajoutées à votre fichier <code>%s</code>."
6627
+
6628
+ #~ msgid "All other lines, if any, are the actual content of the file:"
6629
+ #~ msgstr ""
6630
+ #~ "Toutes les autres lignes, le cas échéant, sont le contenu actuel du "
6631
+ #~ "fichier et ne doivent pas être modifiées&nbsp;:"
6632
+
6633
+ #~ msgid "The file is not writable, I cannot edit it for you."
6634
+ #~ msgstr ""
6635
+ #~ "Le fichier est protégé en écriture, je ne peux pas faire ces changements "
6636
+ #~ "pour vous."
6637
+
6638
+ #~ msgid ""
6639
+ #~ "Add the following code to your <code>/etc/hhvm/php.ini</code> file, and "
6640
+ #~ "restart HHVM afterwards:"
6641
+ #~ msgstr ""
6642
+ #~ "Veuillez ajouter le code suivant au fichier <code>/etc/hhvm/php.ini</"
6643
+ #~ "code>, puis veuillez redémarrer HHVM&nbsp;:"
6644
+
6645
+ #~ msgid "Please make those changes, then click on button below."
6646
+ #~ msgstr ""
6647
+ #~ "Veuillez faire ces modifications, puis cliquez sur le bouton ci-dessous "
6648
+ #~ "pour continuer."
6649
+
6650
+ #~ msgid "Let NinjaFirewall make the above changes (recommended)."
6651
+ #~ msgstr "Laissez NinjaFirewall faire les changements ci-dessus (recommandé)."
6652
+
6653
+ #~ msgid "Please check our blog if you want to install NinjaFirewall on HHVM."
6654
+ #~ msgstr ""
6655
+ #~ "Veuillez consulter notre blog si vous souhaitez installer NinjaFirewall "
6656
+ #~ "avec HHVM."
6657
+
6658
+ #~ msgid "you must select how to make changes to your files."
6659
+ #~ msgstr ""
6660
+ #~ "vous devez sélectionner la façon dont vous souhaitez modifier vos "
6661
+ #~ "fichiers."
6662
+
6663
+ #~ msgid ""
6664
+ #~ "your WordPress root directory is not writable, I cannot make those "
6665
+ #~ "changes for you."
6666
+ #~ msgstr ""
6667
+ #~ "le répertoire racine de WordPress n'est pas accessible en écriture, je ne "
6668
+ #~ "peux pas faire ces changements pour vous."
6669
+
6670
+ #~ msgid "cannot write to <code>%s</code>, it is read-only."
6671
+ #~ msgstr ""
6672
+ #~ "impossible d’écrire dans <code>%s</code>, le fichier est en lecture seule."
6673
+
6674
+ #~ msgid "Your configuration was saved."
6675
+ #~ msgstr "Les modifications ont été enregistrées."
6676
+
6677
+ #~ msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to %s."
6678
+ #~ msgstr ""
6679
+ #~ "Un e-mail \"Guide d'Utilisation, d'Installation et de Dépannage\" a été "
6680
+ #~ "envoyé à %s."
6681
+
6682
+ #~ msgid ""
6683
+ #~ "Please click the button below to test if the firewall integration was "
6684
+ #~ "successful."
6685
+ #~ msgstr ""
6686
+ #~ "Veuillez cliquer sur le bouton ci-dessous pour vérifier le bon "
6687
+ #~ "fonctionnement du pare-feu."
6688
+
6689
+ #~ msgid "Test Firewall"
6690
+ #~ msgstr "Tester le pare-feu"
6691
+
6692
+ #~ msgid ""
6693
+ #~ "Unable to read the wp-config.php file (%s). Make sure it is readable and "
6694
+ #~ "try again."
6695
+ #~ msgstr ""
6696
+ #~ "Impossible de lire le fichier wp-config.php (%s). Veuillez-vous assurer "
6697
+ #~ "qu'il est bien accessible en lecture."
6698
+
6699
+ #~ msgid "Unable to find the wp-config.php file in the %s or %s directories."
6700
+ #~ msgstr ""
6701
+ #~ "Impossible de trouver le fichier wp-config.php dans les répertoires %s ou "
6702
+ #~ "%s."
6703
+
6704
+ #~ msgid ""
6705
+ #~ "The following <font color=\"green\">green lines</font> of code must be "
6706
+ #~ "added to your %s file."
6707
+ #~ msgstr ""
6708
+ #~ "Les lignes de code de <font color=\"green\">couleur verte</font> doivent "
6709
+ #~ "être ajoutées à votre fichier %s."
6710
+
6711
+ #~ msgid ""
6712
+ #~ "The file is not writable, I cannot edit it for you. Please make those "
6713
+ #~ "changes, then click on button below."
6714
+ #~ msgstr ""
6715
+ #~ "Le fichier est protégé en écriture, je ne peux pas le modifier pour vous. "
6716
+ #~ "Veuillez effectuer ces changements, puis cliquer sur le bouton ci-dessous."
6717
+
6718
+ #~ msgid "Back up the file (wp-config.bak.php) before editing it."
6719
+ #~ msgstr "Faire une sauvegarde du fichier (wp-config.bak.php)."
6720
+
6721
+ #~ msgid "Unable to find the wp-config.php file (#%s)."
6722
+ #~ msgstr "Impossible de trouver le fichier wp-config.php (#%s)."
6723
+
6724
+ #~ msgid ""
6725
+ #~ "The firewall is not loaded. Make sure that the required lines of code "
6726
+ #~ "were added to your wp-config.php file."
6727
+ #~ msgstr ""
6728
+ #~ "Le pare-feu n'est pas activé. Assurez-vous de bien ajouter les lignes de "
6729
+ #~ "code nécessaires au fichier wp-config.php."
6730
+
6731
+ #~ msgid ""
6732
+ #~ "You may need to wait up to five minutes before PHP reloads the modified "
6733
+ #~ "INI files, because it caches them. <strong>Please wait for %d seconds</"
6734
+ #~ "strong> before trying again (you can navigate away from this page and "
6735
+ #~ "come back in a few minutes)."
6736
+ #~ msgstr ""
6737
+ #~ "Vous devez peut-être attendre cinq minutes avant que PHP ne recharge les "
6738
+ #~ "fichiers INI modifiés, car il les met en cache. <strong>Veuillez "
6739
+ #~ "patienter pendant %d secondes</strong> avant de réessayer (vous pouvez "
6740
+ #~ "quitter cette page et revenir dans quelques minutes)."
6741
+
6742
+ #~ msgid ""
6743
+ #~ "In <strong>Full WAF</strong> mode, all scripts located inside the blog "
6744
+ #~ "installation directories and sub-directories will be protected by "
6745
+ #~ "NinjaFirewall, including those that aren't part of the WordPress package. "
6746
+ #~ "It will give you the highest possible level of protection: security "
6747
+ #~ "without compromise."
6748
+ #~ msgstr ""
6749
+ #~ "En mode <strong>Full WAF</strong>, tous les scripts situés dans le "
6750
+ #~ "répertoire et sous-répertoires d'installation de votre blog seront "
6751
+ #~ "protégés, y compris ceux qui ne font pas partie de WordPress. Cela vous "
6752
+ #~ "offre le niveau de protection le plus élevé possible : La sécurité sans "
6753
+ #~ "aucun compromis."
6754
+
6755
+ #~ msgid "NinjaFirewall Full WAF mode setup"
6756
+ #~ msgstr "Installation mode Full WAF"
6757
+
6758
+ #~ msgid ""
6759
+ #~ "For maximum security, <a %s>click here</a> to switch to Full WAF mode."
6760
+ #~ msgstr ""
6761
+ #~ "Pour une meilleure protection, <a %s>cliquez ici</a> pour activer son "
6762
+ #~ "mode Full WAF."
6763
+
6764
+ #~ msgid "For maximum security, consider switching to <a %s>Full WAF mode</a>."
6765
+ #~ msgstr ""
6766
+ #~ "Pour bénéficier d'encore plus de sécurité, nous vous conseillons de "
6767
+ #~ "passer en mode <a %s>Full WAF</a>."
6768
+
6769
+ #~ msgid ""
6770
+ #~ "Changes have been undone. You may need to modify your selection and try "
6771
+ #~ "again."
6772
+ #~ msgstr ""
6773
+ #~ "Les modifications ont été annulées. Vous devriez peut-être modifier votre "
6774
+ #~ "sélection et réessayer."
6775
+
6776
+ #~ msgid "Applies to the login page only."
6777
+ #~ msgstr "Ne s'applique qu'à la Page de connexion."
6778
+
6779
+ #~ msgid "Error: cannot find your log file. Try to reload this page."
6780
+ #~ msgstr ""
6781
+ #~ "Erreur : impossible de trouver le fichier log. Essayez de recharger cette "
6782
+ #~ "page."
6783
+
6784
+ #~ msgid "Error: the HTTP server returned the following error code:"
6785
+ #~ msgstr "Erreur : le serveur HTTP a retourné le code d\\'erreur suivant :"
6786
+
6787
+ #~ msgid ""
6788
+ #~ "Disabling access to the REST or XML-RPC API may break some functionality "
6789
+ #~ "on your blog, its themes or plugins (e.g., Gutenberg, Jetpack, Contact "
6790
+ #~ "Form 7 etc)."
6791
+ #~ msgstr ""
6792
+ #~ "L'activation de ces options peut rompre certaines fonctionnalités de "
6793
+ #~ "votre blog, ses thèmes ou ses extensions (ex.: Gutenberg, Jetpack, "
6794
+ #~ "Contact Form 7 etc)."
6795
+
6796
+ #~ msgid ""
6797
+ #~ "NinjaFirewall has blocked an attempt to gain administrative privileges:"
6798
+ #~ msgstr ""
6799
+ #~ "NinjaFirewall a bloqué un utilisateur ayant essayé d'élever ses "
6800
+ #~ "privilèges pour devenir administrateur du blog :"
6801
+
6802
+ #~ msgid "Yes (default)"
6803
+ #~ msgstr "Oui (défaut)"
6804
+
6805
+ #~ msgid "Delete the current snapshot?"
6806
+ #~ msgstr "Supprimer l'instantané actuel ?"
6807
+
6808
+ #~ msgid ""
6809
+ #~ "It seems that %s is enabled. Ensure you have another way to run WP-Cron, "
6810
+ #~ "otherwise NinjaFirewall scheduled scans will not work."
6811
+ #~ msgstr ""
6812
+ #~ "Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, "
6813
+ #~ "sinon File Check ne pourra pas se lancer automatiquement."
6814
+
6815
+ #~ msgid "Please enter a number from 1 to 99."
6816
+ #~ msgstr "Veuillez entrer un nombre de 1 à 99."
6817
+
6818
+ #~ msgid "Yes (recommended)"
6819
+ #~ msgstr "Oui (recommandé)"
6820
+
6821
+ #~ msgid "CSS style sheets"
6822
+ #~ msgstr "des feuilles de style CSS"
6823
+
6824
+ #~ msgid "Javascript code"
6825
+ #~ msgstr "du code Javascript"
6826
+
6827
+ #~ msgid ""
6828
+ #~ "Your message seems to contain %s. For security reasons, it cannot be "
6829
+ #~ "previewed from the admin dashboard."
6830
+ #~ msgstr ""
6831
+ #~ "Votre message semble contenir %s. Pour des raisons de sécurité, il ne "
6832
+ #~ "peut pas être prévisualisé à partir du Tableau de Bord d'administration."
6833
+
6834
+ #~ msgid "Refresh preview"
6835
+ #~ msgstr "Réactualiser"
6836
+
6837
+ #~ msgid "Warning: your site is not protected!"
6838
+ #~ msgstr "Attention, votre site n'est pas protégé&nbsp;!"
6839
+
6840
+ #~ msgid "Disabled (default)"
6841
+ #~ msgstr "Désactivé (défaut)"
6842
+
6843
+ #~ msgid "Anonymize IP addresses by removing the last 3 characters."
6844
+ #~ msgstr "Anonymiser les adresses IP en supprimant les 3 derniers caractères."
6845
+
6846
+ #~ msgid "Preview message"
6847
+ #~ msgstr "Prévisualiser"
6848
+
6849
+ #~ msgid "All fields will be restored to their default values. Go ahead?"
6850
+ #~ msgstr ""
6851
+ #~ "Tous les champs vont être réinitialisés avec leur valeur par défaut. "
6852
+ #~ "Continuer ?"
6853
+
6854
+ #~ msgid ""
6855
+ #~ "WARNING: ensure that you can access your admin console over HTTPS before "
6856
+ #~ "enabling this option, otherwise you will lock yourself out of your site. "
6857
+ #~ "Go ahead?"
6858
+ #~ msgstr ""
6859
+ #~ "AVERTISSEMENT: assurez-vous que vous pouvez accéder à votre Tableau de "
6860
+ #~ "bord via HTTPS avant d'activer cette option, sinon vous risquez de "
6861
+ #~ "bloquer l’accès à votre site. Continuer ?"
6862
+
6863
+ #~ msgid ""
6864
+ #~ "If you are using the %s plugin, blocking <code>system.multicall</code> "
6865
+ #~ "may prevent it from working correctly."
6866
+ #~ msgstr ""
6867
+ #~ "Si vous utilisez l'extension %s, bloquer <code>system.multicall</code> "
6868
+ #~ "pourrait l’empêcher de fonctionner correctement."
6869
+
6870
+ #~ msgid "This feature is only available when running WordPress 4.7 or above."
6871
+ #~ msgstr "Cette option ne peut être activée qu'avec WordPress 4.7 ou plus."
6872
+
6873
+ #~ msgid ""
6874
+ #~ "Disabling access to the REST or XML-RPC API may break some functionality "
6875
+ #~ "on your blog, its themes or plugins."
6876
+ #~ msgstr ""
6877
+ #~ "L'activation de ces options peut rompre certaines fonctionnalités de "
6878
+ #~ "votre blog, ses thèmes ou ses plugins."
6879
+
6880
+ #~ msgid ""
6881
+ #~ "This option is disabled because the %s PHP function is not available on "
6882
+ #~ "your server."
6883
+ #~ msgstr ""
6884
+ #~ "Cette option n'est pas disponible parce que la fonction PHP %s n'est pas "
6885
+ #~ "présente sur votre serveur."
6886
+
6887
+ #~ msgid ""
6888
+ #~ "If your PHP scripts use cookies that need to be accessed from JavaScript, "
6889
+ #~ "you should disable this option."
6890
+ #~ msgstr ""
6891
+ #~ "Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
6892
+ #~ "partir de JavaScript, vous devez garder cette option désactivée."
6893
+
6894
+ #~ msgid "Set <code>max-age</code> to 0"
6895
+ #~ msgstr "Régler <code>max-age</code> à 0"
6896
+
6897
+ #~ msgid "Loading..."
6898
+ #~ msgstr "Chargement..."
6899
+
6900
+ #~ msgid "No traffic yet, please wait..."
6901
+ #~ msgstr "Aucun visiteur actuellement, veuillez patienter..."
6902
+
6903
+ #~ msgid "Error: URL does not seem to exist:"
6904
+ #~ msgstr "Erreur : l\\'URL ne semble pas valide :"
6905
+
6906
+ #~ msgid "On"
6907
+ #~ msgstr "Activer"
6908
+
6909
+ #~ msgid "Off"
6910
+ #~ msgstr "Stopper"
6911
+
6912
+ #~ msgid "Live Log options"
6913
+ #~ msgstr "Options"
6914
+
6915
+ #~ msgid "Please enter a number from 1 to 99 in 'Password-protect' field."
6916
+ #~ msgstr ""
6917
+ #~ "Veuillez entrer uniquement des nombres de 1 à 99 dans les champs "
6918
+ #~ "\\'Protéger par mot de passe\\'."
6919
+
6920
+ #~ msgid ""
6921
+ #~ "Note: Access to the XML-RPC API will be completely disabled when the "
6922
+ #~ "brute-force attack protection is set to 'Always ON'."
6923
+ #~ msgstr ""
6924
+ #~ "L'accès API XML-RPC sera complètement désactivé lorsque la protection est "
6925
+ #~ "toujours activée."
6926
+
6927
+ #~ msgid "GD Support is not available on your server."
6928
+ #~ msgstr "L'extension PHP GD n'est pas disponible sur votre serveur."
6929
+
6930
+ #~ msgid "Yes, if under attack"
6931
+ #~ msgstr "Oui, si attaque en cours"
6932
+
6933
+ #~ msgid "Always ON"
6934
+ #~ msgstr "Toujours activer"
6935
+
6936
+ #~ msgid "Password"
6937
+ #~ msgstr "Mot de passe"
6938
+
6939
+ #~ msgid "Captcha"
6940
+ #~ msgstr "Captcha"
6941
+
6942
+ #~ msgid "XML-RPC API"
6943
+ #~ msgstr "API XML-RPC"
6944
+
6945
+ #~ msgid "Apply the protection to the <code>xmlrpc.php</code> script as well."
6946
+ #~ msgstr ""
6947
+ #~ "Activer aussi la protection pour le fichier <code>xmlrpc.php</code>."
6948
+
6949
+ #~ msgid "Bot protection"
6950
+ #~ msgstr "Protection contre les bots"
6951
+
6952
+ #~ msgid "Enable bot protection (applies to <code>wp-login.php</code> only.)"
6953
+ #~ msgstr ""
6954
+ #~ "Activer la protection contre les bots (ne s'applique qu'à <code>wp-login."
6955
+ #~ "php</code>)."
6956
+
6957
+ #~ msgid "Authentication log"
6958
+ #~ msgstr "Journal d'authentification"
6959
+
6960
+ #~ msgid ""
6961
+ #~ "The login protection must be set to \"Yes, if under attack\" in order to "
6962
+ #~ "use this option."
6963
+ #~ msgstr ""
6964
+ #~ "La protection doit être activée sur \"Oui, si attaque en cours\" afin de "
6965
+ #~ "pouvoir utiliser cette option."
6966
+
6967
+ #~ msgid "Write the incident to the server Authentication log."
6968
+ #~ msgstr ""
6969
+ #~ "Enregistrer l'incident dans le journal des authentifications du serveur."
6970
+
6971
+ #~ msgid "Signature"
6972
+ #~ msgstr "Signature"
6973
+
6974
+ #~ msgid ""
6975
+ #~ "Disable the <i>Brute-force protection by NinjaFirewall</i> signature on "
6976
+ #~ "the protection page."
6977
+ #~ msgstr ""
6978
+ #~ "Ne pas afficher <i>Brute-force protection by NinjaFirewall</i> sur la "
6979
+ #~ "page de connexion."
6980
+
6981
+ #~ msgid "Access to NinjaFirewall is restricted to:"
6982
+ #~ msgstr "L'accès à NinjaFirewall est restreint à :"
6983
+
6984
+ #~ msgid ""
6985
+ #~ "It seems that %s is enabled. Ensure you have another way to run WP-Cron, "
6986
+ #~ "otherwise NinjaFirewall automatic updates will not work."
6987
+ #~ msgstr ""
6988
+ #~ "Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, "
6989
+ #~ "sinon les mises à jour automatiques ne pourront pas être effectuées."
6990
+
6991
  #~ msgid ""
6992
  #~ "Benchmarks show the time NinjaFirewall took, in seconds, to proceed each "
6993
  #~ "request it has blocked."
languages/ninjafirewall.pot CHANGED
@@ -2,7 +2,7 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Stable (latest release)\n"
5
- "POT-Creation-Date: 2019-04-20 17:55+0700\n"
6
  "PO-Revision-Date: 2018-04-05 22:52+0700\n"
7
  "Last-Translator: NinTechNet <contact@nintechnet.com>\n"
8
  "Language-Team: \n"
@@ -18,540 +18,133 @@ msgstr ""
18
  "X-Poedit-SearchPath-0: .\n"
19
  "X-Poedit-SearchPathExcluded-0: /languages\n"
20
 
21
- #: install.php:128 install.php:373 lib/install_fullwaf.php:301
22
- #: lib/install_fullwaf.php:618 lib/install_wpwaf.php:48
23
- #: lib/install_wpwaf.php:201 lib/overview.php:32
24
- msgid "NinjaFirewall (WP Edition)"
25
- msgstr ""
26
-
27
- #: install.php:132
28
- #, php-format
29
- msgid ""
30
- "Error: You have a copy of NinjaFirewall (%s) installed.<br />Please "
31
- "uninstall it completely before attempting to install NinjaFirewall (WP "
32
- "Edition)."
33
- msgstr ""
34
-
35
- #: install.php:136
36
- msgid "Thank you for using NinjaFirewall"
37
- msgstr ""
38
-
39
- #: install.php:136
40
- msgid ""
41
- "This installer will help you to make the setup process as quick and easy as "
42
- "possible."
43
- msgstr ""
44
-
45
- #: install.php:138
46
- msgid ""
47
- "Although NinjaFirewall looks like a regular security plugin, it is not. It "
48
- "can be installed and configured from the WordPress admin console, but it is "
49
- "a stand-alone Web Application Firewall that sits in front of WordPress."
50
- msgstr ""
51
-
52
- #: install.php:138
53
- msgid ""
54
- "It can run in two different modes: <b>Full WAF</b> or <b>WordPress WAF</b> "
55
- "modes."
56
- msgstr ""
57
-
58
- #: install.php:140
59
- msgid "Full WAF mode"
60
- msgstr ""
61
-
62
- #: install.php:142
63
- msgid ""
64
- "In <b>Full WAF</b> mode, NinjaFirewall will hook, scan, reject or sanitise "
65
- "any HTTP and HTTPS request sent to a PHP script before it reaches WordPress, "
66
- "its plugins or even the database. All scripts located inside the blog "
67
- "installation directories and sub-directories will be protected, including "
68
- "those that aren't part of the WordPress package. Even encoded PHP scripts (e."
69
- "g., ionCube), potential backdoors and shell scripts (e.g., c99, r57) will be "
70
- "filtered by NinjaFirewall."
71
- msgstr ""
72
-
73
- #: install.php:144
74
- #, php-format
75
- msgid ""
76
- "That makes it a true firewall and gives you the highest possible level of "
77
- "protection: <a href=\"%s\" title=\"%s\">security without compromise</a>."
78
- msgstr ""
79
-
80
- #: install.php:146
81
- #, php-format
82
- msgid ""
83
- "To run NinjaFirewall in <b>Full WAF</b> mode, your server must allow the use "
84
- "of the <code>auto_prepend_file</code> PHP directive. It is required to "
85
- "instruct the PHP interpreter to load the firewall before WordPress or any "
86
- "other script. Most of the time it works right out of the box, or may require "
87
- "<a href=\"%s\" title=\"%s\">some very little tweaks</a>. But in a few cases, "
88
- "mostly because of some shared hosting plans restrictions, it may simply not "
89
- "work at all."
90
- msgstr ""
91
-
92
- #: install.php:148 install.php:164
93
- msgid "WordPress WAF mode"
94
- msgstr ""
95
-
96
- #: install.php:150
97
- msgid ""
98
- "The <b>WordPress WAF</b> mode requires to load NinjaFirewall via the "
99
- "WordPress wp-config.php script. This process makes it easy to setup and the "
100
- "installation will always be successful, regardless of your hosting plan "
101
- "restrictions."
102
- msgstr ""
103
-
104
- #: install.php:150
105
- msgid ""
106
- "NinjaFirewall will still load before WordPress, its plugins and the database "
107
- "and will run as fast as the <b>Full WAF</b> mode."
108
- msgstr ""
109
-
110
- #: install.php:152
111
- msgid ""
112
- "However, the downside of this mode is that NinjaFirewall will be able to "
113
- "hook and filter HTTP requests sent to WordPress only. A few features such as "
114
- "File Guard, the URL Access Control and Web Filter (WP+ Edition only) will be "
115
- "limited."
116
- msgstr ""
117
-
118
- #: install.php:154
119
- msgid ""
120
- "Despite being less powerful than the <b>Full WAF</b> mode, it still offers a "
121
- "level of protection and performance higher than any other security plugin."
122
- msgstr ""
123
-
124
- #: install.php:156 ninjafirewall.php:464
125
- msgid "Installation"
126
- msgstr ""
127
-
128
- #: install.php:158
129
- msgid ""
130
- "We recommend to select the <b>Full WAF</b> mode option first. If it fails, "
131
- "this installer will let you switch to the <b>WordPress WAF</b> mode easily."
132
- msgstr ""
133
-
134
- #: install.php:162
135
- msgid "Full WAF mode (recommended)"
136
- msgstr ""
137
-
138
- #: install.php:166
139
- msgid ""
140
- "Enter the email address where NinjaFirewall will send notifications and "
141
- "reports:"
142
- msgstr ""
143
-
144
- #: install.php:168 lib/install_fullwaf.php:45 lib/install_fullwaf.php:235
145
- #: lib/install_fullwaf.php:489 lib/install_wpwaf.php:140
146
- msgid "Next Step"
147
- msgstr ""
148
-
149
- #: install.php:175
150
- msgid "Privacy policy"
151
- msgstr ""
152
-
153
- #: install.php:177 lib/about.php:198 lib/help.php:460
154
- msgid ""
155
- "Your website can run NinjaFirewall and be compliant with the General Data "
156
- "Protection Regulation (GDPR). For more info, please visit our blog:"
157
- msgstr ""
158
-
159
- #: install.php:198
160
- #, php-format
161
- msgid ""
162
- "NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
163
- "please make sure that the <code>%s</code> directory is writable"
164
- msgstr ""
165
-
166
- #: install.php:232
167
- msgid ""
168
- "This is NinjaFirewall's logs, loader and cache directory. DO NOT alter or "
169
- "remove it as long as NinjaFirewall is running!"
170
- msgstr ""
171
-
172
- #: install.php:258 lib/firewall_policies.php:107 lib/help.php:168
173
- #: lib/install_fullwaf.php:33 lib/install_fullwaf.php:141 ninjafirewall.php:489
174
- msgid "Firewall Policies"
175
- msgstr ""
176
-
177
- #: install.php:266
178
- msgid "Try again"
179
- msgstr ""
180
-
181
- #: install.php:284
182
- msgid "Quick Start, FAQ & Troubleshooting Guide"
183
- msgstr ""
184
-
185
- #: install.php:285
186
- msgid "Hi,"
187
- msgstr ""
188
-
189
- #: install.php:287
190
- msgid ""
191
- "This is NinjaFirewall's installer. Below are some helpful info and links you "
192
- "may consider reading before using NinjaFirewall."
193
- msgstr ""
194
-
195
- #: install.php:289
196
- msgid "Must Read:"
197
- msgstr ""
198
-
199
- #: install.php:291
200
- msgid "-Securing WordPress with NinjaFirewall. A step by step tutorial:"
201
- msgstr ""
202
-
203
- #: install.php:294
204
- msgid "-An introduction to NinjaFirewall filtering engine:"
205
- msgstr ""
206
-
207
- #: install.php:297
208
- msgid "-Testing NinjaFirewall without blocking your visitors:"
209
- msgstr ""
210
-
211
- #: install.php:300
212
- msgid "-Add your own code to the firewall: the \".htninja\" file:"
213
- msgstr ""
214
-
215
- #: install.php:303
216
- msgid "-Restricting access to NinjaFirewall settings:"
217
- msgstr ""
218
-
219
- #: install.php:306
220
- msgid "-Upgrading to PHP 7 with NinjaFirewall installed:"
221
- msgstr ""
222
-
223
- #: install.php:309
224
- msgid "-Keep your blog protected against the latest vulnerabilities:"
225
- msgstr ""
226
-
227
- #: install.php:312
228
- msgid "-Test your website security with our online scanner:"
229
- msgstr ""
230
-
231
- #: install.php:315
232
- msgid "-NinjaFirewall Referral Program:"
233
- msgstr ""
234
-
235
- #: install.php:318
236
- msgid "Troubleshooting:"
237
- msgstr ""
238
-
239
- #: install.php:321
240
- msgid "-Locked out of your site / Fatal error / WordPress crash?"
241
- msgstr ""
242
-
243
- #: install.php:322
244
- msgid "-Failed installation (\"Error: The firewall is not loaded\")?"
245
- msgstr ""
246
-
247
- #: install.php:323
248
- msgid "-Blank page after INSTALLING NinjaFirewall?"
249
- msgstr ""
250
-
251
- #: install.php:324
252
- msgid "-Blank page after UNINSTALLING NinjaFirewall?"
253
- msgstr ""
254
-
255
- #: install.php:325
256
- msgid "-500 Internal Server Error?"
257
- msgstr ""
258
-
259
- #: install.php:326
260
- msgid "-\"Cannot connect to WordPress database\" error message?"
261
- msgstr ""
262
-
263
- #: install.php:327
264
- msgid "-How to disable NinjaFirewall?"
265
- msgstr ""
266
-
267
- #: install.php:328
268
- msgid "-Lost password (brute-force protection)?"
269
- msgstr ""
270
-
271
- #: install.php:329
272
- msgid "-Blocked visitors (see below)?"
273
- msgstr ""
274
-
275
- #: install.php:330
276
- msgid "-Exporting NinjaFirewall's configuration"
277
- msgstr ""
278
-
279
- #: install.php:332
280
- msgid "-NinjaFirewall (WP Edition) troubleshooter script"
281
- msgstr ""
282
-
283
- #: install.php:334
284
- msgid "-Rename this file to \"wp-check.php\"."
285
- msgstr ""
286
-
287
- #: install.php:335
288
- msgid "-Upload it into your WordPress root folder."
289
- msgstr ""
290
-
291
- #: install.php:336
292
- msgid "-Goto http://YOUR WEBSITE/wp-check.php."
293
- msgstr ""
294
-
295
- #: install.php:337
296
- msgid "-Delete it afterwards."
297
- msgstr ""
298
-
299
- #: install.php:339
300
- msgid "FAQ:"
301
- msgstr ""
302
-
303
- #: install.php:342
304
- msgid ""
305
- "-Why is NinjaFirewall different from other security plugins for WordPress?"
306
- msgstr ""
307
-
308
- #: install.php:343
309
- msgid "-Do I need root privileges to install NinjaFirewall?"
310
- msgstr ""
311
-
312
- #: install.php:344
313
- msgid "-Does it work with Nginx?"
314
- msgstr ""
315
-
316
- #: install.php:345
317
- msgid "-Do I need to alter my PHP scripts?"
318
- msgstr ""
319
-
320
- #: install.php:346
321
- msgid ""
322
- "-Will NinjaFirewall detect the correct IP of my visitors if I am behind a "
323
- "CDN service like Cloudflare or Incapsula?"
324
- msgstr ""
325
-
326
- #: install.php:347
327
- msgid ""
328
- "-I moved my wp-config.php file to another directory. Will it work with "
329
- "NinjaFirewall?"
330
- msgstr ""
331
-
332
- #: install.php:348
333
- msgid "-Will it slow down my site?"
334
- msgstr ""
335
-
336
- #: install.php:349
337
- msgid "-Is there a Microsoft Windows version?"
338
- msgstr ""
339
-
340
- #: install.php:350
341
- msgid "-Can I add/write my own security rules?"
342
- msgstr ""
343
-
344
- #: install.php:351
345
- msgid "-Can I migrate my site(s) with NinjaFirewall installed?"
346
- msgstr ""
347
-
348
- #: install.php:353
349
- msgid "Help & Support Links:"
350
- msgstr ""
351
-
352
- #: install.php:354
353
- msgid ""
354
- "-Each page of NinjaFirewall includes a contextual help: click on the \"Help"
355
- "\" menu tab located in the upper right corner of the corresponding page."
356
- msgstr ""
357
-
358
- #: install.php:355
359
- msgid "-Online documentation is also available here:"
360
- msgstr ""
361
-
362
- #: install.php:356
363
- msgid "-The WordPress support forum:"
364
- msgstr ""
365
-
366
- #: install.php:357
367
- msgid "-Updates info are available via Twitter:"
368
- msgstr ""
369
-
370
- #: install.php:378
371
- msgid "Error: The firewall is not loaded."
372
- msgstr ""
373
-
374
- #: install.php:379
375
- msgid "Suggestions:"
376
- msgstr ""
377
-
378
- #: install.php:383
379
- msgid ""
380
- "You selected <code>Apache + PHP module</code> as your HTTP server and PHP "
381
- "SAPI. Maybe your HTTP server is <code>Apache + CGI/FastCGI</code>?"
382
- msgstr ""
383
-
384
- #: install.php:385 install.php:413
385
- msgid ""
386
- "You can click the \"Go Back\" button and try to select another HTTP server "
387
- "type."
388
- msgstr ""
389
-
390
- #: install.php:389
391
- msgid ""
392
- "You have selected LiteSpeed as your HTTP server. Did you enable the "
393
- "\"AllowOverride\" directive from its admin panel? Make sure it is enabled, "
394
- "restart LiteSpeed and then, click the \"Test Again\" button below."
395
- msgstr ""
396
-
397
- #: install.php:391 install.php:402
398
- msgid "Test Again"
399
- msgstr ""
400
-
401
- #: install.php:400
402
- msgid ""
403
- "You have selected <code>.user.ini</code> as your PHP initialization file. "
404
- "Unlike <code>php.ini</code>, <code>.user.ini</code> files are not reloaded "
405
- "immediately by PHP, but every five minutes. If this is your own server, "
406
- "restart Apache (or PHP-FPM if applicable) to force PHP to reload it, "
407
- "otherwise please <strong>wait up to five minutes</strong> and then, click "
408
- "the \"Test Again\" button below."
409
- msgstr ""
410
-
411
- #: install.php:411
412
- msgid ""
413
- "You selected <code>Apache + CGI/FastCGI</code> as your HTTP server and PHP "
414
- "SAPI. Maybe your HTTP server is <code>Apache + PHP module</code>?"
415
- msgstr ""
416
-
417
- #: install.php:416
418
- msgid "Maybe you did not select the correct PHP INI ?"
419
- msgstr ""
420
-
421
- #: install.php:418
422
- msgid "You can click the \"Go Back\" button and try to select another one."
423
- msgstr ""
424
-
425
- #: install.php:422
426
- msgid "Go Back"
427
- msgstr ""
428
-
429
- #: install.php:428
430
- #, php-format
431
- msgid ""
432
- "If none of the above suggestions work, you can still install NinjaFirewall "
433
- "in %s mode by clicking the button below. Setup is easy and will always work."
434
- msgstr ""
435
-
436
- #: install.php:433
437
- msgid "Switch to the WordPress WAF mode installer &#187;"
438
- msgstr ""
439
-
440
- #: install.php:437
441
- msgid "Need help? Check our blog:"
442
- msgstr ""
443
-
444
  #: lib/about.php:31
445
  msgid "Error : cannot find changelog :("
446
  msgstr ""
447
 
448
- #: lib/about.php:53
449
  msgid "About"
450
  msgstr ""
451
 
452
- #: lib/about.php:74
453
  msgid "A powerful antivirus<br />scanner for WordPress."
454
  msgstr ""
455
 
456
- #: lib/about.php:76
457
  msgid "Free Download"
458
  msgstr ""
459
 
460
- #: lib/about.php:80
461
  msgid "Website Monitoring<br />for just $4.99/month."
462
  msgstr ""
463
 
464
- #: lib/about.php:82
465
  msgid "7-Day Free Trial"
466
  msgstr ""
467
 
468
- #: lib/about.php:86
469
  msgid "Malware removal<br />and hack recovery."
470
  msgstr ""
471
 
472
- #: lib/about.php:88
473
  msgid "Clean Your Site!"
474
  msgstr ""
475
 
476
- #: lib/about.php:100
477
  msgid "Changelog"
478
  msgstr ""
479
 
480
- #: lib/about.php:100
481
  msgid "Spread the word!"
482
  msgstr ""
483
 
484
- #: lib/about.php:100
485
  msgid "Referral Program"
486
  msgstr ""
487
 
488
- #: lib/about.php:100
489
  msgid "System Info"
490
  msgstr ""
491
 
492
- #: lib/about.php:100 lib/help.php:458
493
  msgid "GDPR Compliance"
494
  msgstr ""
495
 
496
- #: lib/about.php:134
 
 
 
 
 
 
 
 
 
 
497
  msgid "PHP version"
498
  msgstr ""
499
 
500
- #: lib/about.php:143
501
  msgid "HTTP server"
502
  msgstr ""
503
 
504
- #: lib/about.php:146
505
  msgid "Operating System"
506
  msgstr ""
507
 
508
- #: lib/about.php:149
509
  msgid "Load Average"
510
  msgstr ""
511
 
512
- #: lib/about.php:167
513
  msgid "RAM"
514
  msgstr ""
515
 
516
- #: lib/about.php:167
517
  msgid "MB free"
518
  msgstr ""
519
 
520
- #: lib/about.php:167
521
  msgid "MB total"
522
  msgstr ""
523
 
524
- #: lib/about.php:175
525
  msgid "Processor"
526
  msgid_plural "Processors"
527
  msgstr[0] ""
528
  msgstr[1] ""
529
 
530
- #: lib/about.php:175
531
  msgid "CPU core:"
532
  msgid_plural "CPU cores:"
533
  msgstr[0] ""
534
  msgstr[1] ""
535
 
536
- #: lib/about.php:176
537
  msgid "CPU model"
538
  msgstr ""
539
 
540
- #: lib/about.php:188
541
  #, php-format
542
  msgid ""
543
  "By joining our NinjaFirewall Referral Program you can earn up to %s for "
544
  "every payment made by a user who signs up using your personal referral link."
545
  msgstr ""
546
 
547
- #: lib/about.php:189
548
  #, php-format
549
  msgid ""
550
  "For more info and subscription, please check our <a href=\"%s\">Referral "
551
  "Program page</a>."
552
  msgstr ""
553
 
554
- #: lib/anti_malware.php:24 ninjafirewall.php:507
 
 
 
 
 
 
555
  msgid "Anti-Malware"
556
  msgstr ""
557
 
@@ -584,11 +177,11 @@ msgstr ""
584
  msgid "NinjaFirewall Statistics"
585
  msgstr ""
586
 
587
- #: lib/dashboard_widget.php:54 lib/statistics.php:109
588
  msgid "Blocked threats"
589
  msgstr ""
590
 
591
- #: lib/dashboard_widget.php:58 lib/statistics.php:113
592
  msgid "Threats level"
593
  msgstr ""
594
 
@@ -604,257 +197,264 @@ msgstr ""
604
  msgid "Medium:"
605
  msgstr ""
606
 
 
 
 
 
607
  #: lib/dashboard_widget.php:86
608
  msgid "View firewall log"
609
  msgstr ""
610
 
611
- #: lib/event_notifications.php:45 lib/help.php:350 ninjafirewall.php:515
612
  msgid "Event Notifications"
613
  msgstr ""
614
 
615
- #: lib/event_notifications.php:53 lib/file_check.php:113 lib/file_guard.php:73
616
- #: lib/firewall_log.php:58 lib/firewall_options.php:83
617
- #: lib/firewall_policies.php:116 lib/live_log.php:223
618
- #: lib/login_protection.php:30 lib/network.php:49 lib/rules_update.php:104
619
  msgid "Your changes have been saved."
620
  msgstr ""
621
 
622
- #: lib/event_notifications.php:63
623
  msgid "WordPress admin dashboard"
624
  msgstr ""
625
 
626
- #: lib/event_notifications.php:66 lib/event_notifications.php:135
627
  msgid "Send me an alert whenever"
628
  msgstr ""
629
 
630
- #: lib/event_notifications.php:68
631
  msgid "An administrator logs in (default)"
632
  msgstr ""
633
 
634
- #: lib/event_notifications.php:69
635
  msgid "Someone - user, admin, editor, etc - logs in"
636
  msgstr ""
637
 
638
- #: lib/event_notifications.php:70
639
  msgid "No, thanks (not recommended)"
640
  msgstr ""
641
 
642
- #: lib/event_notifications.php:77
643
  msgid "Plugins"
644
  msgstr ""
645
 
646
- #: lib/event_notifications.php:80 lib/event_notifications.php:97
647
- #: lib/event_notifications.php:112
648
  msgid "Send me an alert whenever someone"
649
  msgstr ""
650
 
651
- #: lib/event_notifications.php:82
652
  msgid "Uploads a plugin (default)"
653
  msgstr ""
654
 
655
- #: lib/event_notifications.php:83
656
  msgid "Installs a plugin (default)"
657
  msgstr ""
658
 
659
- #: lib/event_notifications.php:84
660
  msgid "Activates a plugin"
661
  msgstr ""
662
 
663
- #: lib/event_notifications.php:85
664
  msgid "Updates a plugin"
665
  msgstr ""
666
 
667
- #: lib/event_notifications.php:86
668
  msgid "Deactivates a plugin (default)"
669
  msgstr ""
670
 
671
- #: lib/event_notifications.php:87
672
  msgid "Deletes a plugin"
673
  msgstr ""
674
 
675
- #: lib/event_notifications.php:94
676
  msgid "Themes"
677
  msgstr ""
678
 
679
- #: lib/event_notifications.php:99
680
  msgid "Uploads a theme (default)"
681
  msgstr ""
682
 
683
- #: lib/event_notifications.php:100
684
  msgid "Installs a theme (default)"
685
  msgstr ""
686
 
687
- #: lib/event_notifications.php:101
688
  msgid "Activates a theme"
689
  msgstr ""
690
 
691
- #: lib/event_notifications.php:102
692
  msgid "Deletes a theme"
693
  msgstr ""
694
 
695
- #: lib/event_notifications.php:109
696
  msgid "Core"
697
  msgstr ""
698
 
699
- #: lib/event_notifications.php:114
700
  msgid "Updates WordPress (default)"
701
  msgstr ""
702
 
703
- #: lib/event_notifications.php:132
704
  msgid "Administrator account"
705
  msgstr ""
706
 
707
- #: lib/event_notifications.php:137
708
  msgid ""
709
  "An administrator account is created, modified or deleted in the database "
710
  "(default)"
711
  msgstr ""
712
 
713
- #: lib/event_notifications.php:138
714
  msgid "A user attempts to gain administrative privileges (default)"
715
  msgstr ""
716
 
717
- #: lib/event_notifications.php:145
718
  msgid "Daily report"
719
  msgstr ""
720
 
721
- #: lib/event_notifications.php:148
722
  msgid "Send me a daily activity report"
723
  msgstr ""
724
 
725
- #: lib/event_notifications.php:150 lib/event_notifications.php:162
726
- #: lib/firewall_policies.php:566 lib/firewall_policies.php:609
727
- #: lib/firewall_policies.php:629 lib/firewall_policies.php:679
728
- #: lib/firewall_policies.php:724 lib/firewall_policies.php:734
729
- #: lib/firewall_policies.php:744 lib/firewall_policies.php:787
730
- #: lib/firewall_policies.php:830 lib/firewall_policies.php:850
731
- #: lib/firewall_policies.php:1064 lib/firewall_policies.php:1120
732
- #: lib/firewall_policies.php:1130 lib/firewall_policies.php:1140
733
- #: lib/firewall_policies.php:1150 lib/firewall_policies.php:1197
734
- #: lib/firewall_policies.php:1207 lib/network.php:63 lib/rules_update.php:145
735
- msgid "Yes (default)"
736
  msgstr ""
737
 
738
- #: lib/event_notifications.php:157
 
 
 
 
 
 
 
 
739
  msgid "Log"
740
  msgstr ""
741
 
742
- #: lib/event_notifications.php:160
743
  msgid "Write all events to the firewall log"
744
  msgstr ""
745
 
746
- #: lib/event_notifications.php:174
747
  msgid "PHP backtrace"
748
  msgstr ""
749
 
750
- #: lib/event_notifications.php:177
751
  msgid "Attach a PHP backtrace to important notifications"
752
  msgstr ""
753
 
754
- #: lib/event_notifications.php:180
755
  msgid "Disable backtrace"
756
  msgstr ""
757
 
758
- #: lib/event_notifications.php:181
759
  msgid "Low verbosity"
760
  msgstr ""
761
 
762
- #: lib/event_notifications.php:182
763
  msgid "Medium verbosity (default)"
764
  msgstr ""
765
 
766
- #: lib/event_notifications.php:183
767
  msgid "High verbosity"
768
  msgstr ""
769
 
770
- #: lib/event_notifications.php:185
771
  #, php-format
772
  msgid "<a href=\"%s\">Consult our blog</a> for more info."
773
  msgstr ""
774
 
775
- #: lib/event_notifications.php:195 lib/event_notifications.php:225
776
  msgid "Contact email"
777
  msgstr ""
778
 
779
- #: lib/event_notifications.php:198 lib/event_notifications.php:228
780
  msgid "Alerts should be sent to"
781
  msgstr ""
782
 
783
- #: lib/event_notifications.php:207 lib/event_notifications.php:233
784
  msgid ""
785
  "Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
786
  "alice@example.org</code>)."
787
  msgstr ""
788
 
789
- #: lib/event_notifications.php:230
790
  msgid "Only to me, the Super Admin"
791
  msgstr ""
792
 
793
- #: lib/event_notifications.php:230
794
  msgid "default"
795
  msgstr ""
796
 
797
- #: lib/event_notifications.php:231
798
  msgid "To the administrator of the site where originated the alert"
799
  msgstr ""
800
 
801
- #: lib/event_notifications.php:232
802
  msgid "Other(s):"
803
  msgstr ""
804
 
805
- #: lib/event_notifications.php:244
806
  msgid "Save Event Notifications"
807
  msgstr ""
808
 
809
- #: lib/event_notifications.php:472
810
  msgid "[NinjaFirewall] Daily Activity Report"
811
  msgstr ""
812
 
813
- #: lib/event_notifications.php:482
814
  #, php-format
815
  msgid "Daily activity report for: %s"
816
  msgstr ""
817
 
818
- #: lib/event_notifications.php:483
819
  msgid "Date Range Processed: Yesterday"
820
  msgstr ""
821
 
822
- #: lib/event_notifications.php:485
823
  msgid "Blocked threats:"
824
  msgstr ""
825
 
826
- #: lib/event_notifications.php:487
827
  msgid "critical:"
828
  msgstr ""
829
 
830
- #: lib/event_notifications.php:488
831
  msgid "high:"
832
  msgstr ""
833
 
834
- #: lib/event_notifications.php:489
835
  msgid "medium:"
836
  msgstr ""
837
 
838
- #: lib/event_notifications.php:491
839
  msgid "Blocked brute-force attacks:"
840
  msgstr ""
841
 
842
- #: lib/event_notifications.php:492 lib/utils.php:793 lib/utils.php:958
843
  msgid ""
844
  "This notification can be turned off from NinjaFirewall \"Event Notifications"
845
  "\" page."
846
  msgstr ""
847
 
848
- #: lib/event_notifications.php:496 lib/file_check.php:855
849
- #: lib/file_check.php:876 lib/firewall_options.php:573 lib/rules_update.php:569
850
- #: lib/utils.php:688
851
  msgid "Support forum:"
852
  msgstr ""
853
 
854
- #: lib/event_notifications.php:499 lib/file_check.php:858
855
- #: lib/file_check.php:879 lib/firewall_options.php:576 lib/rules_update.php:572
856
- #: lib/utils.php:177 lib/utils.php:520 lib/utils.php:691 lib/utils.php:798
857
- #: lib/utils.php:963 lib/utils.php:1298
858
  #, php-format
859
  msgid ""
860
  "Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
@@ -877,7 +477,7 @@ msgstr ""
877
  msgid "You must create a snapshot first."
878
  msgstr ""
879
 
880
- #: lib/file_check.php:104 lib/file_check.php:841
881
  msgid "NinjaFirewall detected that changes were made to your files."
882
  msgstr ""
883
 
@@ -885,7 +485,7 @@ msgstr ""
885
  msgid "No changes detected."
886
  msgstr ""
887
 
888
- #: lib/file_check.php:129 lib/help.php:317 ninjafirewall.php:497
889
  msgid "File Check"
890
  msgstr ""
891
 
@@ -898,11 +498,11 @@ msgstr ""
898
  msgid "Default: %s"
899
  msgstr ""
900
 
901
- #: lib/file_check.php:158 lib/file_guard.php:119
902
  msgid "Exclude the following files/folders (optional)"
903
  msgstr ""
904
 
905
- #: lib/file_check.php:159 lib/file_guard.php:120 lib/live_log.php:299
906
  msgid "e.g.,"
907
  msgstr ""
908
 
@@ -912,307 +512,291 @@ msgid ""
912
  "separated"
913
  msgstr ""
914
 
915
- #: lib/file_check.php:164
916
  msgid "Do not follow symbolic links (default)"
917
  msgstr ""
918
 
919
- #: lib/file_check.php:169
920
  msgid "Create Snapshot"
921
  msgstr ""
922
 
923
- #: lib/file_check.php:297
924
- msgid "Delete the current snapshot?"
925
- msgstr ""
926
-
927
- #: lib/file_check.php:311
928
  msgid "Last snapshot"
929
  msgstr ""
930
 
931
- #: lib/file_check.php:313
932
  #, php-format
933
  msgid "Created on: %s"
934
  msgstr ""
935
 
936
- #: lib/file_check.php:314
937
  #, php-format
938
  msgid "Total files: %s "
939
  msgstr ""
940
 
941
- #: lib/file_check.php:316
942
  msgid "Directory:"
943
  msgstr ""
944
 
945
- #: lib/file_check.php:320
946
  msgid "Exclusion:"
947
  msgstr ""
948
 
949
- #: lib/file_check.php:326
950
  msgid "Symlinks:"
951
  msgstr ""
952
 
953
- #: lib/file_check.php:328
954
  msgid "follow"
955
  msgstr ""
956
 
957
- #: lib/file_check.php:330
958
  msgid "do not follow"
959
  msgstr ""
960
 
961
- #: lib/file_check.php:334
962
  #, php-format
963
  msgid "Processing time: %s seconds"
964
  msgstr ""
965
 
966
- #: lib/file_check.php:339
967
  msgid "Download Snapshot"
968
  msgstr ""
969
 
970
- #: lib/file_check.php:339
971
  msgid "Delete Snapshot"
972
  msgstr ""
973
 
974
- #: lib/file_check.php:344
975
  msgid "Last changes"
976
  msgstr ""
977
 
978
- #: lib/file_check.php:351 lib/file_check.php:849
979
  #, php-format
980
  msgid "New files: %s"
981
  msgstr ""
982
 
983
- #: lib/file_check.php:352 lib/file_check.php:851
984
  #, php-format
985
  msgid "Deleted files: %s"
986
  msgstr ""
987
 
988
- #: lib/file_check.php:353 lib/file_check.php:850
989
  #, php-format
990
  msgid "Modified files: %s"
991
  msgstr ""
992
 
993
- #: lib/file_check.php:357
994
  msgid "View Changes"
995
  msgstr ""
996
 
997
- #: lib/file_check.php:361
998
  msgid "Download Changes"
999
  msgstr ""
1000
 
1001
- #: lib/file_check.php:373
1002
  msgid "Click a file to get more info about it."
1003
  msgstr ""
1004
 
1005
- #: lib/file_check.php:376
1006
  msgid "New files:"
1007
  msgstr ""
1008
 
1009
- #: lib/file_check.php:385 lib/file_check.php:438
1010
  msgid "Size"
1011
  msgstr ""
1012
 
1013
- #: lib/file_check.php:389 lib/file_check.php:443
1014
  msgid "Access"
1015
  msgstr ""
1016
 
1017
- #: lib/file_check.php:393 lib/file_check.php:448
1018
  msgid "Uid / Gid"
1019
  msgstr ""
1020
 
1021
- #: lib/file_check.php:397 lib/file_check.php:453
1022
  msgid "Modify"
1023
  msgstr ""
1024
 
1025
- #: lib/file_check.php:401 lib/file_check.php:458
1026
  msgid "Change"
1027
  msgstr ""
1028
 
1029
- #: lib/file_check.php:411
1030
  msgid "Deleted files:"
1031
  msgstr ""
1032
 
1033
- #: lib/file_check.php:424
1034
  msgid "Modified files:"
1035
  msgstr ""
1036
 
1037
- #: lib/file_check.php:434
1038
  msgid "Old"
1039
  msgstr ""
1040
 
1041
- #: lib/file_check.php:435
1042
  msgid "New"
1043
  msgstr ""
1044
 
1045
- #: lib/file_check.php:474 lib/live_log.php:296
1046
  msgid "None"
1047
  msgstr ""
1048
 
1049
- #: lib/file_check.php:484
1050
  msgid "Scan System For File Changes"
1051
  msgstr ""
1052
 
1053
- #: lib/file_check.php:501
1054
  msgid "Options"
1055
  msgstr ""
1056
 
1057
- #: lib/file_check.php:508
1058
  #, php-format
1059
  msgid ""
1060
- "It seems that %s is enabled. Ensure you have another way to run WP-Cron, "
1061
  "otherwise NinjaFirewall scheduled scans will not work."
1062
  msgstr ""
1063
 
1064
- #: lib/file_check.php:514
1065
  msgid "Enable scheduled scans"
1066
  msgstr ""
1067
 
1068
- #: lib/file_check.php:516 lib/firewall_policies.php:464
1069
- #: lib/firewall_policies.php:479 lib/firewall_policies.php:489
1070
- #: lib/firewall_policies.php:499 lib/firewall_policies.php:509
1071
- #: lib/firewall_policies.php:579 lib/firewall_policies.php:622
1072
- #: lib/firewall_policies.php:654 lib/firewall_policies.php:692
1073
- #: lib/firewall_policies.php:780 lib/firewall_policies.php:800
1074
- #: lib/firewall_policies.php:843 lib/firewall_policies.php:973
1075
- #: lib/firewall_policies.php:987 lib/firewall_policies.php:1012
1076
- #: lib/firewall_policies.php:1220 lib/login_protection.php:295
1077
  msgid "No (default)"
1078
  msgstr ""
1079
 
1080
- #: lib/file_check.php:517 lib/rules_update.php:169
1081
  msgid "Hourly"
1082
  msgstr ""
1083
 
1084
- #: lib/file_check.php:518 lib/rules_update.php:170
1085
  msgid "Twicedaily"
1086
  msgstr ""
1087
 
1088
- #: lib/file_check.php:519 lib/rules_update.php:171
1089
  msgid "Daily"
1090
  msgstr ""
1091
 
1092
- #: lib/file_check.php:526
1093
  #, php-format
1094
  msgid ""
1095
  "Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
1096
  "and %s second(s)."
1097
  msgstr ""
1098
 
1099
- #: lib/file_check.php:533
1100
  msgid ""
1101
  "The next scheduled scan date is in the past! WordPress wp-cron may not be "
1102
  "working or may have been disabled."
1103
  msgstr ""
1104
 
1105
- #: lib/file_check.php:541
1106
  msgid "Scheduled scan report"
1107
  msgstr ""
1108
 
1109
- #: lib/file_check.php:543
1110
  msgid "Send me a report by email only if changes are detected (default)"
1111
  msgstr ""
1112
 
1113
- #: lib/file_check.php:544
1114
  msgid "Always send me a report by email after a scheduled scan"
1115
  msgstr ""
1116
 
1117
- #: lib/file_check.php:549
1118
  msgid "Save Scan Options"
1119
  msgstr ""
1120
 
1121
- #: lib/file_check.php:561
1122
  msgid "Enter the full path to the directory to be scanned."
1123
  msgstr ""
1124
 
1125
- #: lib/file_check.php:568
1126
  #, php-format
1127
  msgid "The directory %s does not exist."
1128
  msgstr ""
1129
 
1130
- #: lib/file_check.php:571
1131
  #, php-format
1132
  msgid "The directory %s is not readable."
1133
  msgstr ""
1134
 
1135
- #: lib/file_check.php:612
1136
  #, php-format
1137
  msgid "Cannot write to %s."
1138
  msgstr ""
1139
 
1140
- #: lib/file_check.php:642
1141
  #, php-format
1142
  msgid "Error : cannot open %s directory."
1143
  msgstr ""
1144
 
1145
- #: lib/file_check.php:645
1146
  #, php-format
1147
  msgid "Error : %s directory is not readable."
1148
  msgstr ""
1149
 
1150
- #: lib/file_check.php:660
1151
  #, php-format
1152
  msgid "Missing options line %s, please try again."
1153
  msgstr ""
1154
 
1155
- #: lib/file_check.php:670
1156
  #, php-format
1157
  msgid "Cannot create %s."
1158
  msgstr ""
1159
 
1160
- #: lib/file_check.php:687
1161
  msgid "Error reading old snapshot file."
1162
  msgstr ""
1163
 
1164
- #: lib/file_check.php:698
1165
  msgid "Error reading new snapshot file."
1166
  msgstr ""
1167
 
1168
- #: lib/file_check.php:814 ninjafirewall.php:270
1169
  msgid "New file"
1170
  msgstr ""
1171
 
1172
- #: lib/file_check.php:815 ninjafirewall.php:271
1173
  msgid "Modified file"
1174
  msgstr ""
1175
 
1176
- #: lib/file_check.php:816 ninjafirewall.php:272
1177
  msgid "Deleted file"
1178
  msgstr ""
1179
 
1180
- #: lib/file_check.php:840
1181
  msgid "[NinjaFirewall] Alert: File Check detection"
1182
  msgstr ""
1183
 
1184
- #: lib/file_check.php:843 lib/file_check.php:845 lib/file_check.php:870
1185
- #: lib/file_check.php:872 lib/rules_update.php:561 lib/rules_update.php:563
1186
- #: lib/utils.php:156 lib/utils.php:781 lib/utils.php:941 lib/utils.php:1287
1187
  msgid "Blog:"
1188
  msgstr ""
1189
 
1190
- #: lib/file_check.php:847 lib/file_check.php:874 lib/rules_update.php:566
1191
  #, php-format
1192
  msgid "Date: %s"
1193
  msgstr ""
1194
 
1195
- #: lib/file_check.php:853
1196
  msgid "See attached file for details."
1197
  msgstr ""
1198
 
1199
- #: lib/file_check.php:867
1200
  msgid "[NinjaFirewall] File Check report"
1201
  msgstr ""
1202
 
1203
- #: lib/file_check.php:868
1204
  msgid "NinjaFirewall did not detect changes in your files."
1205
  msgstr ""
1206
 
1207
- #: lib/file_guard.php:40 lib/file_guard.php:46
1208
- msgid "Please enter a number from 1 to 99."
1209
- msgstr ""
1210
-
1211
- #: lib/file_guard.php:54 lib/help.php:285 ninjafirewall.php:493
1212
  msgid "File Guard"
1213
  msgstr ""
1214
 
1215
- #: lib/file_guard.php:58
1216
  #, php-format
1217
  msgid ""
1218
  "You are running NinjaFirewall in <i>WordPress WAF</i> mode. The %s feature "
@@ -1221,57 +805,50 @@ msgid ""
1221
  "to any PHP script, you will need to run NinjaFirewall in %s mode."
1222
  msgstr ""
1223
 
1224
- #: lib/file_guard.php:64
1225
  #, php-format
1226
  msgid ""
1227
  "The cache directory %s is not writable. Please change its permissions (0777 "
1228
  "or equivalent)."
1229
  msgstr ""
1230
 
1231
- #: lib/file_guard.php:96
1232
  msgid "Enable File Guard"
1233
  msgstr ""
1234
 
1235
- #: lib/file_guard.php:98
1236
- msgid "Yes (recommended)"
 
 
1237
  msgstr ""
1238
 
1239
- #: lib/file_guard.php:101 lib/firewall_policies.php:27
1240
- #: lib/firewall_policies.php:569 lib/firewall_policies.php:612
1241
- #: lib/firewall_policies.php:632 lib/firewall_policies.php:682
1242
- #: lib/firewall_policies.php:727 lib/firewall_policies.php:737
1243
- #: lib/firewall_policies.php:747 lib/firewall_policies.php:790
1244
- #: lib/firewall_policies.php:833 lib/firewall_policies.php:853
1245
- #: lib/firewall_policies.php:915 lib/firewall_policies.php:1067
1246
- #: lib/firewall_policies.php:1123 lib/firewall_policies.php:1133
1247
- #: lib/firewall_policies.php:1143 lib/firewall_policies.php:1153
1248
- #: lib/firewall_policies.php:1200 lib/firewall_policies.php:1210
1249
- #: lib/network.php:64 lib/rules_update.php:148
1250
- msgid "No"
1251
  msgstr ""
1252
 
1253
- #: lib/file_guard.php:111
1254
  msgid "Real-time detection"
1255
  msgstr ""
1256
 
1257
- #: lib/file_guard.php:114
1258
  #, php-format
1259
  msgid ""
1260
  "Monitor file activity and send an alert when someone is accessing a PHP "
1261
  "script that was modified or created less than %s hour(s) ago."
1262
  msgstr ""
1263
 
1264
- #: lib/file_guard.php:120 lib/live_log.php:299
1265
  msgid "or"
1266
  msgstr ""
1267
 
1268
- #: lib/file_guard.php:120
1269
  msgid ""
1270
  "Full or partial case-sensitive string(s), max. 255 characters. Multiple "
1271
  "values must be comma-separated"
1272
  msgstr ""
1273
 
1274
- #: lib/file_guard.php:125
1275
  msgid "Save File Guard options"
1276
  msgstr ""
1277
 
@@ -1295,544 +872,464 @@ msgstr ""
1295
  msgid "Your public key has been saved"
1296
  msgstr ""
1297
 
1298
- #: lib/firewall_log.php:84 lib/help.php:424 ninjafirewall.php:523
 
1299
  msgid "Firewall Log"
1300
  msgstr ""
1301
 
1302
- #: lib/firewall_log.php:91
1303
  msgid "Error"
1304
  msgstr ""
1305
 
1306
- #: lib/firewall_log.php:98
1307
  msgid "Note"
1308
  msgstr ""
1309
 
1310
- #: lib/firewall_log.php:98
1311
  #, php-format
1312
  msgid "your log has %s lines. I will display the last %s lines only."
1313
  msgstr ""
1314
 
1315
- #: lib/firewall_log.php:102
1316
  msgid "Viewing:"
1317
  msgstr ""
1318
 
1319
- #: lib/firewall_log.php:109 lib/firewall_options.php:251
1320
  msgid "bytes"
1321
  msgstr ""
1322
 
1323
- #: lib/firewall_log.php:150 lib/firewall_log.php:334
1324
  msgid "The selected log is empty."
1325
  msgstr ""
1326
 
1327
- #: lib/firewall_log.php:156
1328
  msgid ""
1329
  "The log shows all threats that were blocked by the firewall, unless stated "
1330
  "otherwise. It is rotated monthly."
1331
  msgstr ""
1332
 
1333
- #: lib/firewall_log.php:169
1334
  msgid "Log Options"
1335
  msgstr ""
1336
 
1337
- #: lib/firewall_log.php:173 lib/help.php:437
1338
  msgid "Auto-delete log"
1339
  msgstr ""
1340
 
1341
- #: lib/firewall_log.php:177
1342
  #, php-format
1343
  msgid "Automatically delete logs older than %s days"
1344
  msgstr ""
1345
 
1346
- #: lib/firewall_log.php:180
1347
  msgid "Set this option to 0 to disable it."
1348
  msgstr ""
1349
 
1350
- #: lib/firewall_log.php:186
1351
  msgid "Save Log Options"
1352
  msgstr ""
1353
 
1354
- #: lib/firewall_log.php:202 lib/help.php:445 lib/overview.php:198
1355
- #: lib/wpplus.php:98
1356
- msgid "Centralized Logging"
1357
- msgstr ""
1358
-
1359
- #: lib/firewall_log.php:205
1360
- msgid "Enter your public key (optional)"
1361
- msgstr ""
1362
-
1363
- #: lib/firewall_log.php:208
1364
- #, php-format
1365
- msgid ""
1366
- "<a href=\"%s\">Consult our blog</a> if you want to enable centralized "
1367
- "logging."
1368
- msgstr ""
1369
-
1370
- #: lib/firewall_log.php:215
1371
- msgid "Save Public Key"
1372
- msgstr ""
1373
-
1374
- #: lib/firewall_log.php:217
1375
- msgid "Delete Public Key"
1376
- msgstr ""
1377
-
1378
- #: lib/firewall_log.php:236
1379
- msgid "Your public key is not valid."
1380
- msgstr ""
1381
-
1382
- #: lib/firewall_log.php:313
1383
- msgid "The requested log does not exist."
1384
- msgstr ""
1385
-
1386
- #: lib/firewall_log.php:320
1387
- msgid "Unable to open the log for read operation."
1388
- msgstr ""
1389
-
1390
- #: lib/firewall_options.php:32
1391
- msgid ""
1392
- "This action will restore the selected configuration file and will override "
1393
- "all your current firewall options, policies and rules. Continue?"
1394
- msgstr ""
1395
-
1396
- #: lib/firewall_options.php:52
1397
- msgid "CSS style sheets"
1398
  msgstr ""
1399
 
1400
- #: lib/firewall_options.php:55
1401
- msgid "Javascript code"
1402
  msgstr ""
1403
 
1404
- #: lib/firewall_options.php:58
1405
  #, php-format
1406
  msgid ""
1407
- "Your message seems to contain %s. For security reasons, it cannot be "
1408
- "previewed from the admin dashboard."
1409
  msgstr ""
1410
 
1411
- #: lib/firewall_options.php:63
1412
- msgid "Refresh preview"
1413
  msgstr ""
1414
 
1415
- #: lib/firewall_options.php:71 ninjafirewall.php:485
1416
- msgid "Firewall Options"
1417
  msgstr ""
1418
 
1419
- #: lib/firewall_options.php:92 lib/help.php:82
1420
- msgid "Firewall protection"
1421
  msgstr ""
1422
 
1423
- #: lib/firewall_options.php:100 lib/firewall_options.php:109
1424
- #: lib/firewall_options.php:124 lib/firewall_options.php:134
1425
- #: lib/overview.php:78 lib/overview.php:210
1426
- msgid "Enabled"
1427
  msgstr ""
1428
 
1429
- #: lib/firewall_options.php:101 lib/firewall_options.php:110
1430
- msgid "Disabled"
1431
  msgstr ""
1432
 
1433
- #: lib/firewall_options.php:111 lib/firewall_options.php:126
1434
- msgid "Warning: your site is not protected!"
1435
  msgstr ""
1436
 
1437
- #: lib/firewall_options.php:117 lib/help.php:90 lib/overview.php:100
1438
  msgid "Debugging mode"
1439
  msgstr ""
1440
 
1441
- #: lib/firewall_options.php:125 lib/firewall_options.php:135
1442
- msgid "Disabled (default)"
1443
- msgstr ""
1444
-
1445
- #: lib/firewall_options.php:147
1446
  msgid "HTTP error code to return"
1447
  msgstr ""
1448
 
1449
- #: lib/firewall_options.php:151
1450
  msgid "400 Bad Request"
1451
  msgstr ""
1452
 
1453
- #: lib/firewall_options.php:152
1454
  msgid "403 Forbidden (default)"
1455
  msgstr ""
1456
 
1457
- #: lib/firewall_options.php:153
1458
  msgid "404 Not Found"
1459
  msgstr ""
1460
 
1461
- #: lib/firewall_options.php:154
1462
  msgid "406 Not Acceptable"
1463
  msgstr ""
1464
 
1465
- #: lib/firewall_options.php:155
1466
  msgid "418 I'm a teapot"
1467
  msgstr ""
1468
 
1469
- #: lib/firewall_options.php:156
1470
  msgid "500 Internal Server Error"
1471
  msgstr ""
1472
 
1473
- #: lib/firewall_options.php:157
1474
  msgid "503 Service Unavailable"
1475
  msgstr ""
1476
 
1477
- #: lib/firewall_options.php:170 lib/help.php:97
1478
  msgid "IP anonymization"
1479
  msgstr ""
1480
 
1481
- #: lib/firewall_options.php:173
1482
- msgid "Anonymize IP addresses by removing the last 3 characters."
1483
- msgstr ""
1484
-
1485
- #: lib/firewall_options.php:174
1486
  #, php-format
1487
  msgid ""
1488
  "Does not apply to private IP addresses and the <a href=\"%s\">Login "
1489
  "Protection</a>."
1490
  msgstr ""
1491
 
1492
- #: lib/firewall_options.php:181
1493
  msgid "Blocked user message"
1494
  msgstr ""
1495
 
1496
- #: lib/firewall_options.php:192
1497
- msgid "Preview message"
1498
  msgstr ""
1499
 
1500
- #: lib/firewall_options.php:192
1501
  msgid "Default message"
1502
  msgstr ""
1503
 
1504
- #: lib/firewall_options.php:203
1505
  msgid "Firewall configuration"
1506
  msgstr ""
1507
 
1508
- #: lib/firewall_options.php:207
1509
  msgid "Export configuration"
1510
  msgstr ""
1511
 
1512
- #: lib/firewall_options.php:209
1513
  msgid "Download"
1514
  msgstr ""
1515
 
1516
- #: lib/firewall_options.php:209
1517
  msgid "File Check configuration will not be exported/imported."
1518
  msgstr ""
1519
 
1520
- #: lib/firewall_options.php:212
1521
  msgid "Import configuration"
1522
  msgstr ""
1523
 
1524
- #: lib/firewall_options.php:216
1525
  #, php-format
1526
  msgid "Imported configuration must match plugin version %s."
1527
  msgstr ""
1528
 
1529
- #: lib/firewall_options.php:217
1530
  msgid "It will override all your current firewall options and rules."
1531
  msgstr ""
1532
 
1533
- #: lib/firewall_options.php:221 lib/help.php:123
1534
  msgid "Configuration backup"
1535
  msgstr ""
1536
 
1537
- #: lib/firewall_options.php:228 lib/firewall_options.php:256
1538
  msgid "Save Firewall Options"
1539
  msgstr ""
1540
 
1541
- #: lib/firewall_options.php:247
1542
  msgid "Available backup files"
1543
  msgstr ""
1544
 
1545
- #: lib/firewall_options.php:256
1546
  #, php-format
1547
  msgid ""
1548
  "To restore NinjaFirewall's configuration to an earlier date, select it in "
1549
  "the list and click '%s'."
1550
  msgstr ""
1551
 
1552
- #: lib/firewall_options.php:260
1553
  msgid "There are no backup available yet, check back later."
1554
  msgstr ""
1555
 
1556
- #: lib/firewall_options.php:398
1557
  #, php-format
1558
  msgid "Uploaded file is either corrupted or its format is not supported (#%s)"
1559
  msgstr ""
1560
 
1561
- #: lib/firewall_options.php:427
1562
  msgid "The imported file is not compatible with that version of NinjaFirewall"
1563
  msgstr ""
1564
 
1565
- #: lib/firewall_options.php:547
1566
  msgid "[NinjaFirewall] Alert: Firewall is disabled"
1567
  msgstr ""
1568
 
1569
- #: lib/firewall_options.php:549 lib/firewall_options.php:551 lib/utils.php:676
1570
- #: lib/utils.php:678
1571
  msgid "-Blog :"
1572
  msgstr ""
1573
 
1574
- #: lib/firewall_options.php:555
1575
  msgid "Someone disabled NinjaFirewall from your WordPress admin dashboard:"
1576
  msgstr ""
1577
 
1578
- #: lib/firewall_options.php:558
1579
  msgid ""
1580
  "NinjaFirewall is disabled because someone enabled debugging mode from your "
1581
  "WordPress admin dashboard:"
1582
  msgstr ""
1583
 
1584
- #: lib/firewall_options.php:561
1585
  msgid "[NinjaFirewall] Alert: Firewall override settings"
1586
  msgstr ""
1587
 
1588
- #: lib/firewall_options.php:562
1589
  msgid ""
1590
  "Someone imported a new configuration which overrode the firewall settings:"
1591
  msgstr ""
1592
 
1593
- #: lib/firewall_options.php:568 lib/utils.php:683
1594
  msgid "-User :"
1595
  msgstr ""
1596
 
1597
- #: lib/firewall_options.php:569 lib/utils.php:684
1598
  msgid "-IP :"
1599
  msgstr ""
1600
 
1601
- #: lib/firewall_options.php:570 lib/utils.php:685
1602
  msgid "-Date :"
1603
  msgstr ""
1604
 
1605
- #: lib/firewall_policies.php:26 lib/firewall_policies.php:461
1606
- #: lib/firewall_policies.php:476 lib/firewall_policies.php:486
1607
- #: lib/firewall_policies.php:496 lib/firewall_policies.php:506
1608
- #: lib/firewall_policies.php:576 lib/firewall_policies.php:619
1609
- #: lib/firewall_policies.php:651 lib/firewall_policies.php:689
1610
- #: lib/firewall_policies.php:777 lib/firewall_policies.php:797
1611
- #: lib/firewall_policies.php:840 lib/firewall_policies.php:972
1612
- #: lib/firewall_policies.php:986 lib/firewall_policies.php:1011
1613
- #: lib/firewall_policies.php:1217
1614
- msgid "Yes"
1615
- msgstr ""
1616
-
1617
- #: lib/firewall_policies.php:28 lib/firewall_policies.php:192
1618
- #: lib/firewall_policies.php:390
1619
- msgid "(default)"
1620
- msgstr ""
1621
-
1622
  #: lib/firewall_policies.php:29
1623
  #, php-format
1624
  msgid ""
1625
  "This feature is only available when NinjaFirewall is running in %s mode."
1626
  msgstr ""
1627
 
1628
- #: lib/firewall_policies.php:42
1629
- msgid "All fields will be restored to their default values. Go ahead?"
1630
- msgstr ""
1631
-
1632
- #: lib/firewall_policies.php:72
1633
- msgid ""
1634
- "WARNING: ensure that you can access your admin console over HTTPS before "
1635
- "enabling this option, otherwise you will lock yourself out of your site. Go "
1636
- "ahead?"
1637
- msgstr ""
1638
-
1639
- #: lib/firewall_policies.php:81
1640
- msgid ""
1641
- "Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
1642
- "hyphen [-] or an underscore [_] will be removed from the filename and "
1643
- "replaced with the substitution character. Continue?"
1644
  msgstr ""
1645
 
1646
- #: lib/firewall_policies.php:119
1647
  msgid "Default values were restored."
1648
  msgstr ""
1649
 
1650
- #: lib/firewall_policies.php:121
1651
  msgid "No action taken."
1652
  msgstr ""
1653
 
1654
- #: lib/firewall_policies.php:130 lib/help.php:173
1655
  msgid "Basic Policies"
1656
  msgstr ""
1657
 
1658
- #: lib/firewall_policies.php:131 lib/help.php:199
1659
  msgid "Intermediate Policies"
1660
  msgstr ""
1661
 
1662
- #: lib/firewall_policies.php:132 lib/help.php:230
1663
  msgid "Advanced Policies"
1664
  msgstr ""
1665
 
1666
- #: lib/firewall_policies.php:156
1667
  msgid "Enable NinjaFirewall for"
1668
  msgstr ""
1669
 
1670
- #: lib/firewall_policies.php:159 lib/live_log.php:316
1671
  msgid "HTTP and HTTPS traffic (default)"
1672
  msgstr ""
1673
 
1674
- #: lib/firewall_policies.php:160 lib/live_log.php:317
1675
  msgid "HTTP traffic only"
1676
  msgstr ""
1677
 
1678
- #: lib/firewall_policies.php:161 lib/live_log.php:318
1679
  msgid "HTTPS traffic only"
1680
  msgstr ""
1681
 
1682
- #: lib/firewall_policies.php:185 lib/help.php:178
1683
  msgid "Uploads"
1684
  msgstr ""
1685
 
1686
- #: lib/firewall_policies.php:188
1687
  msgid "File Uploads"
1688
  msgstr ""
1689
 
1690
- #: lib/firewall_policies.php:192
1691
  msgid "Allow uploads"
1692
  msgstr ""
1693
 
1694
- #: lib/firewall_policies.php:193
 
 
 
 
1695
  msgid "Disallow uploads"
1696
  msgstr ""
1697
 
1698
- #: lib/firewall_policies.php:196
1699
  msgid "Sanitise filenames"
1700
  msgstr ""
1701
 
1702
- #: lib/firewall_policies.php:196
1703
  msgid "substitution character:"
1704
  msgstr ""
1705
 
1706
- #: lib/firewall_policies.php:318
1707
  msgid "Block direct access to any PHP file located in one of these directories"
1708
  msgstr ""
1709
 
1710
- #: lib/firewall_policies.php:348
1711
  msgid ""
1712
  "NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
1713
  "this option is enabled."
1714
  msgstr ""
1715
 
1716
- #: lib/firewall_policies.php:363
1717
  msgid ""
1718
  "Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
1719
  "by your visitors, we recommend to enable this option."
1720
  msgstr ""
1721
 
1722
- #: lib/firewall_policies.php:374 lib/firewall_policies.php:379
1723
- #, php-format
1724
- msgid ""
1725
- "If you are using the %s plugin, blocking <code>system.multicall</code> may "
1726
- "prevent it from working correctly."
1727
- msgstr ""
1728
-
1729
- #: lib/firewall_policies.php:387
1730
  msgid "General"
1731
  msgstr ""
1732
 
1733
- #: lib/firewall_policies.php:390 lib/help.php:184
1734
  msgid "Block attempts to modify important WordPress settings"
1735
  msgstr ""
1736
 
1737
- #: lib/firewall_policies.php:391 lib/help.php:185
1738
  msgid "Block user accounts creation"
1739
  msgstr ""
1740
 
1741
- #: lib/firewall_policies.php:392
1742
  msgid "Do not enable this policy if you allow user registration."
1743
  msgstr ""
1744
 
1745
- #: lib/firewall_policies.php:404 lib/help.php:186
1746
  msgid "WordPress AJAX"
1747
  msgstr ""
1748
 
1749
- #: lib/firewall_policies.php:407
1750
  msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
1751
  msgstr ""
1752
 
1753
- #: lib/firewall_policies.php:412
 
 
 
 
 
 
 
1754
  msgid "Protect against username enumeration"
1755
  msgstr ""
1756
 
1757
- #: lib/firewall_policies.php:415
1758
  msgid "Through the author archives"
1759
  msgstr ""
1760
 
1761
- #: lib/firewall_policies.php:416
1762
  msgid "Through the login page"
1763
  msgstr ""
1764
 
1765
- #: lib/firewall_policies.php:417
1766
  msgid "Through the WordPress REST API"
1767
  msgstr ""
1768
 
1769
- #: lib/firewall_policies.php:425
1770
- msgid "This feature is only available when running WordPress 4.7 or above."
1771
- msgstr ""
1772
-
1773
- #: lib/firewall_policies.php:432
1774
  msgid "WordPress REST API"
1775
  msgstr ""
1776
 
1777
- #: lib/firewall_policies.php:435 lib/firewall_policies.php:443
1778
  msgid "Block any access to the API"
1779
  msgstr ""
1780
 
1781
- #: lib/firewall_policies.php:440
1782
  msgid "WordPress XML-RPC API"
1783
  msgstr ""
1784
 
1785
- #: lib/firewall_policies.php:445
1786
  msgid "Block <code>system.multicall</code> method"
1787
  msgstr ""
1788
 
1789
- #: lib/firewall_policies.php:447
1790
  msgid "Block Pingbacks"
1791
  msgstr ""
1792
 
1793
- #: lib/firewall_policies.php:454
1794
  msgid ""
1795
  "Disabling access to the REST or XML-RPC API may break some functionality on "
1796
- "your blog, its themes or plugins."
 
1797
  msgstr ""
1798
 
1799
- #: lib/firewall_policies.php:458
1800
  msgid "Block <code>POST</code> requests in the themes folder"
1801
  msgstr ""
1802
 
1803
- #: lib/firewall_policies.php:473
1804
  msgid "Force SSL for admin and logins"
1805
  msgstr ""
1806
 
1807
- #: lib/firewall_policies.php:483
1808
  msgid "Disable the plugin and theme editor"
1809
  msgstr ""
1810
 
1811
- #: lib/firewall_policies.php:493
1812
  msgid "Disable plugin and theme update/installation"
1813
  msgstr ""
1814
 
1815
- #: lib/firewall_policies.php:503
1816
  msgid "Disable the fatal error handler"
1817
  msgstr ""
1818
 
1819
- #: lib/firewall_policies.php:529 lib/help.php:271
1820
  msgid "Users Whitelist"
1821
  msgstr ""
1822
 
1823
- #: lib/firewall_policies.php:532
1824
  msgid "Add the Administrator to the whitelist (default)."
1825
  msgstr ""
1826
 
1827
- #: lib/firewall_policies.php:533
1828
  msgid "Add all logged in users to the whitelist."
1829
  msgstr ""
1830
 
1831
- #: lib/firewall_policies.php:534
1832
  msgid "Disable users whitelist."
1833
  msgstr ""
1834
 
1835
- #: lib/firewall_policies.php:535
1836
  msgid ""
1837
  "Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
1838
  "<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
@@ -1840,329 +1337,507 @@ msgid ""
1840
  "always enforced."
1841
  msgstr ""
1842
 
1843
- #: lib/firewall_policies.php:560 lib/help.php:201
1844
  msgid "HTTP GET variable"
1845
  msgstr ""
1846
 
1847
- #: lib/firewall_policies.php:563
1848
  msgid "Scan <code>GET</code> variable"
1849
  msgstr ""
1850
 
1851
- #: lib/firewall_policies.php:573
1852
  msgid "Sanitise <code>GET</code> variable"
1853
  msgstr ""
1854
 
1855
- #: lib/firewall_policies.php:603 lib/help.php:204
1856
  msgid "HTTP POST variable"
1857
  msgstr ""
1858
 
1859
- #: lib/firewall_policies.php:606
1860
  msgid "Scan <code>POST</code> variable"
1861
  msgstr ""
1862
 
1863
- #: lib/firewall_policies.php:616
1864
  msgid "Sanitise <code>POST</code> variable"
1865
  msgstr ""
1866
 
1867
- #: lib/firewall_policies.php:622 lib/firewall_policies.php:654
1868
  msgid "Do not enable this option unless you know what you are doing!"
1869
  msgstr ""
1870
 
1871
- #: lib/firewall_policies.php:626
1872
  msgid "Decode Base64-encoded <code>POST</code> variable"
1873
  msgstr ""
1874
 
1875
- #: lib/firewall_policies.php:645 lib/help.php:208
1876
  msgid "HTTP REQUEST variable"
1877
  msgstr ""
1878
 
1879
- #: lib/firewall_policies.php:648
1880
  msgid "Sanitise <code>REQUEST</code> variable"
1881
  msgstr ""
1882
 
1883
- #: lib/firewall_policies.php:673 lib/help.php:211
1884
  msgid "Cookies"
1885
  msgstr ""
1886
 
1887
- #: lib/firewall_policies.php:676
1888
  msgid "Scan cookies"
1889
  msgstr ""
1890
 
1891
- #: lib/firewall_policies.php:686
1892
  msgid "Sanitise cookies"
1893
  msgstr ""
1894
 
1895
- #: lib/firewall_policies.php:718 lib/help.php:214
1896
  msgid "HTTP_USER_AGENT server variable"
1897
  msgstr ""
1898
 
1899
- #: lib/firewall_policies.php:721
1900
  msgid "Scan <code>HTTP_USER_AGENT</code>"
1901
  msgstr ""
1902
 
1903
- #: lib/firewall_policies.php:731
1904
  msgid "Sanitise <code>HTTP_USER_AGENT</code>"
1905
  msgstr ""
1906
 
1907
- #: lib/firewall_policies.php:741
1908
  msgid "Block suspicious bots/scanners"
1909
  msgstr ""
1910
 
1911
- #: lib/firewall_policies.php:771 lib/help.php:218
1912
  msgid "HTTP_REFERER server variable"
1913
  msgstr ""
1914
 
1915
- #: lib/firewall_policies.php:774
1916
  msgid "Scan <code>HTTP_REFERER</code>"
1917
  msgstr ""
1918
 
1919
- #: lib/firewall_policies.php:784
1920
  msgid "Sanitise <code>HTTP_REFERER</code>"
1921
  msgstr ""
1922
 
1923
- #: lib/firewall_policies.php:794
1924
  msgid ""
1925
  "Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
1926
  "code> header"
1927
  msgstr ""
1928
 
1929
- #: lib/firewall_policies.php:800
1930
  msgid ""
1931
  "Keep this option disabled if you are using scripts like Paypal IPN, "
1932
  "WordPress WP-Cron etc"
1933
  msgstr ""
1934
 
1935
- #: lib/firewall_policies.php:827
1936
  msgid "Block localhost IP in <code>GET/POST</code> request"
1937
  msgstr ""
1938
 
1939
- #: lib/firewall_policies.php:837
1940
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
1941
  msgstr ""
1942
 
1943
- #: lib/firewall_policies.php:847
1944
  msgid "Scan traffic coming from localhost and private IP address spaces"
1945
  msgstr ""
1946
 
1947
- #: lib/firewall_policies.php:869
1948
  #, php-format
1949
  msgid ""
1950
- "This option is disabled because the %s PHP function is not available on your "
1951
- "server."
1952
  msgstr ""
1953
 
1954
- #: lib/firewall_policies.php:884 lib/help.php:232
1955
  msgid "HTTP response headers"
1956
  msgstr ""
1957
 
1958
- #: lib/firewall_policies.php:887
1959
  #, php-format
1960
  msgid "Set %s to protect against MIME type confusion attacks"
1961
  msgstr ""
1962
 
1963
- #: lib/firewall_policies.php:897
1964
  #, php-format
1965
  msgid "Set %s to protect against clickjacking attempts"
1966
  msgstr ""
1967
 
1968
- #: lib/firewall_policies.php:906
 
 
 
 
 
 
1969
  #, php-format
1970
  msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
1971
  msgstr ""
1972
 
1973
- #: lib/firewall_policies.php:910 lib/firewall_policies.php:911
1974
- #: lib/firewall_policies.php:914
1975
  #, php-format
1976
  msgid "Set to %s"
1977
  msgstr ""
1978
 
1979
- #: lib/firewall_policies.php:919
1980
  #, php-format
1981
  msgid "Force %s flag on all cookies to mitigate XSS attacks"
1982
  msgstr ""
1983
 
1984
- #: lib/firewall_policies.php:925
1985
  msgid ""
1986
  "If your PHP scripts use cookies that need to be accessed from JavaScript, "
1987
- "you should disable this option."
1988
  msgstr ""
1989
 
1990
- #: lib/firewall_policies.php:931
1991
  msgid ""
1992
  "HSTS headers can only be set when you are accessing your site over HTTPS."
1993
  msgstr ""
1994
 
1995
- #: lib/firewall_policies.php:938
1996
  #, php-format
1997
  msgid "Set %s (HSTS) to enforce secure connections to the server"
1998
  msgstr ""
1999
 
2000
- #: lib/firewall_policies.php:941
 
 
 
 
2001
  msgid "1 month"
2002
  msgstr ""
2003
 
2004
- #: lib/firewall_policies.php:942
2005
  msgid "6 months"
2006
  msgstr ""
2007
 
2008
- #: lib/firewall_policies.php:943
2009
  msgid "1 year"
2010
  msgstr ""
2011
 
2012
- #: lib/firewall_policies.php:945
2013
  msgid "Apply to subdomains"
2014
  msgstr ""
2015
 
2016
- #: lib/firewall_policies.php:949
2017
- msgid "Set <code>max-age</code> to 0"
2018
- msgstr ""
2019
-
2020
- #: lib/firewall_policies.php:969
2021
  #, php-format
2022
  msgid "Set %s for the website frontend"
2023
  msgstr ""
2024
 
2025
- #: lib/firewall_policies.php:977
2026
  msgid "This CSP header will apply to the website frontend only."
2027
  msgstr ""
2028
 
2029
- #: lib/firewall_policies.php:983
2030
  #, php-format
2031
  msgid "Set %s for the WordPress admin dashboard"
2032
  msgstr ""
2033
 
2034
- #: lib/firewall_policies.php:991
2035
  msgid "This CSP header will apply to the WordPress admin dashboard only."
2036
  msgstr ""
2037
 
2038
- #: lib/firewall_policies.php:1007
2039
  #, php-format
2040
  msgid "Set %s (Chrome, Opera and Firefox browsers)"
2041
  msgstr ""
2042
 
2043
- #: lib/firewall_policies.php:1061
2044
  msgid ""
2045
  "Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
2046
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
2047
  msgstr ""
2048
 
2049
- #: lib/firewall_policies.php:1104
2050
  msgid "Block serialized PHP objects in the following global variables"
2051
  msgstr ""
2052
 
2053
- #: lib/firewall_policies.php:1117
2054
  msgid "Hide PHP notice and error messages"
2055
  msgstr ""
2056
 
2057
- #: lib/firewall_policies.php:1127
2058
  msgid "Sanitise <code>PHP_SELF</code>"
2059
  msgstr ""
2060
 
2061
- #: lib/firewall_policies.php:1137
2062
  msgid "Sanitise <code>PATH_TRANSLATED</code>"
2063
  msgstr ""
2064
 
2065
- #: lib/firewall_policies.php:1147
2066
  msgid "Sanitise <code>PATH_INFO</code>"
2067
  msgstr ""
2068
 
2069
- #: lib/firewall_policies.php:1167
2070
  msgid "This option is not compatible with your actual configuration."
2071
  msgstr ""
2072
 
2073
- #: lib/firewall_policies.php:1191 lib/help.php:262
2074
  msgid "Various"
2075
  msgstr ""
2076
 
2077
- #: lib/firewall_policies.php:1194
2078
  msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
2079
  msgstr ""
2080
 
2081
- #: lib/firewall_policies.php:1204
2082
  msgid "Block ASCII character 0x00 (NULL byte)"
2083
  msgstr ""
2084
 
2085
- #: lib/firewall_policies.php:1214
2086
  msgid "Block ASCII control characters 1 to 8 and 14 to 31"
2087
  msgstr ""
2088
 
2089
- #: lib/firewall_policies.php:1230
2090
  msgid "Save Firewall Policies"
2091
  msgstr ""
2092
 
2093
- #: lib/firewall_policies.php:1232
2094
  msgid "Restore Default Values"
2095
  msgstr ""
2096
 
2097
- #: lib/help.php:37 ninjafirewall.php:477
2098
  msgid "Overview"
2099
  msgstr ""
2100
 
2101
- #: lib/help.php:38
2102
- msgid ""
2103
- "This is the Overview page; it shows information about the firewall status. "
2104
- "We recommend you keep an eye on it because, in case of problems, all "
2105
- "possible errors and warnings will be displayed here."
2106
  msgstr ""
2107
 
2108
- #: lib/help.php:41
2109
- msgid "For more information:"
 
 
2110
  msgstr ""
2111
 
2112
- #: lib/help.php:43
2113
- msgid "Securing WordPress with NinjaFirewall."
2114
  msgstr ""
2115
 
2116
- #: lib/help.php:45
2117
- msgid "Installation, help and troubleshooting"
2118
  msgstr ""
2119
 
2120
  #: lib/help.php:47
2121
- msgid "Support Forum"
2122
  msgstr ""
2123
 
2124
  #: lib/help.php:48
2125
- msgid "Updates via Twitter"
2126
  msgstr ""
2127
 
2128
- #: lib/help.php:61 lib/statistics.php:105
2129
- msgid "Monthly stats"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2130
  msgstr ""
2131
 
2132
  #: lib/help.php:63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2133
  msgid ""
2134
  "Statistics are taken from the current log. It is rotated on the first day of "
2135
  "each month."
2136
  msgstr ""
2137
 
2138
- #: lib/help.php:65
2139
  #, php-format
2140
  msgid ""
2141
  "You can view the log by clicking on the <a href=\"%s\">Firewall Log</a> menu."
2142
  msgstr ""
2143
 
2144
- #: lib/help.php:69 lib/statistics.php:135
2145
  msgid "Benchmarks"
2146
  msgstr ""
2147
 
2148
- #: lib/help.php:71
2149
  msgid ""
2150
  "Benchmarks show the time NinjaFirewall took, in seconds, to process each "
2151
  "request it has blocked."
2152
  msgstr ""
2153
 
2154
- #: lib/help.php:84
2155
  #, php-format
2156
  msgid ""
2157
  "This option allows you to disable NinjaFirewall. It has basically the same "
2158
  "effect as deactivating it from the <a href=\"%s\">Plugins</a> menu page."
2159
  msgstr ""
2160
 
2161
- #: lib/help.php:86
2162
  msgid "Your site will remain unprotected until you enable it again."
2163
  msgstr ""
2164
 
2165
- #: lib/help.php:92
2166
  #, php-format
2167
  msgid ""
2168
  "In Debugging mode, NinjaFirewall will not block or sanitise suspicious "
@@ -2170,7 +1845,7 @@ msgid ""
2170
  "display <code>DEBUG_ON</code> in the LEVEL column."
2171
  msgstr ""
2172
 
2173
- #: lib/help.php:93
2174
  msgid ""
2175
  "We recommend to run it in Debugging Mode for at least 24 hours after "
2176
  "installing it on a new site and then to keep an eye on the firewall log "
@@ -2179,63 +1854,63 @@ msgid ""
2179
  "wrongly triggered."
2180
  msgstr ""
2181
 
2182
- #: lib/help.php:98
2183
  msgid ""
2184
  "This option will anonymize IP addresses in the firewall log by removing "
2185
  "their last 3 characters."
2186
  msgstr ""
2187
 
2188
- #: lib/help.php:98
2189
  msgid ""
2190
  "It does not apply to private IP addresses and the Login Protection feature."
2191
  msgstr ""
2192
 
2193
- #: lib/help.php:99
2194
  msgid ""
2195
  "Note that it will affect only IP addresses written to the firewall log after "
2196
  "enabling this option."
2197
  msgstr ""
2198
 
2199
- #: lib/help.php:99
2200
  msgid ""
2201
  "Also, if you are redirecting events to the syslog server (NinjaFirewall "
2202
  "<font color=\"#21759B\">WP+</font> Edition), IP addresses will be anonymized "
2203
  "too."
2204
  msgstr ""
2205
 
2206
- #: lib/help.php:103
2207
  msgid "Error code and message to return"
2208
  msgstr ""
2209
 
2210
- #: lib/help.php:105
2211
  msgid ""
2212
  "Lets you customize the HTTP error code returned by NinjaFirewall when "
2213
  "blocking a dangerous request and the message to display to the user."
2214
  msgstr ""
2215
 
2216
- #: lib/help.php:106
2217
  msgid "You can use any HTML tags and 3 built-in variables:"
2218
  msgstr ""
2219
 
2220
- #: lib/help.php:107
2221
  msgid "the blocked user IP."
2222
  msgstr ""
2223
 
2224
- #: lib/help.php:108
2225
  msgid ""
2226
  "the unique incident number as it will appear in the firewall log \"INCIDENT"
2227
  "\" column."
2228
  msgstr ""
2229
 
2230
- #: lib/help.php:109
2231
  msgid "NinjaFirewall logo."
2232
  msgstr ""
2233
 
2234
- #: lib/help.php:114
2235
  msgid "Export/import configuration"
2236
  msgstr ""
2237
 
2238
- #: lib/help.php:116
2239
  #, php-format
2240
  msgid ""
2241
  "This options lets you export you current configuration or import it from "
@@ -2244,18 +1919,18 @@ msgid ""
2244
  "rejected. Note that importing will override all firewall rules and options."
2245
  msgstr ""
2246
 
2247
- #: lib/help.php:118
2248
  msgid "\"File Check\" configuration will not be exported/imported."
2249
  msgstr ""
2250
 
2251
- #: lib/help.php:125
2252
  msgid ""
2253
  "NinjaFirewall will automatically backup its configuration (options, policies "
2254
  "and rules) everyday for the last 5 days. If you want to restore its "
2255
  "configuration to an earlier date, select the corresponding file in the list."
2256
  msgstr ""
2257
 
2258
- #: lib/help.php:139
2259
  #, php-format
2260
  msgid ""
2261
  "Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
@@ -2263,11 +1938,11 @@ msgid ""
2263
  "your WordPress index page."
2264
  msgstr ""
2265
 
2266
- #: lib/help.php:144
2267
  msgid "Policies overview"
2268
  msgstr ""
2269
 
2270
- #: lib/help.php:146
2271
  #, php-format
2272
  msgid ""
2273
  "Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
@@ -2278,24 +1953,24 @@ msgid ""
2278
  "<code><a href=\"%s\">$_SERVER</a></code> in HTTP and/or HTTPS mode."
2279
  msgstr ""
2280
 
2281
- #: lib/help.php:148
2282
  msgid ""
2283
  "Use the options below to enable, disable or to tweak these rules according "
2284
  "to your needs."
2285
  msgstr ""
2286
 
2287
- #: lib/help.php:155
2288
  msgid "Scan and Sanitise"
2289
  msgstr ""
2290
 
2291
- #: lib/help.php:157
2292
  msgid ""
2293
  "You can choose to scan and reject dangerous content but also to sanitise "
2294
  "requests and variables. Those two actions are different and can be combined "
2295
  "together for better security."
2296
  msgstr ""
2297
 
2298
- #: lib/help.php:158
2299
  msgid ""
2300
  "Scan : if anything suspicious is detected, NinjaFirewall will block the "
2301
  "request and return an HTTP error code and message (defined in the \"Firewall "
@@ -2303,7 +1978,7 @@ msgid ""
2303
  "closed immediately."
2304
  msgstr ""
2305
 
2306
- #: lib/help.php:159
2307
  #, php-format
2308
  msgid ""
2309
  "Sanitise : this option will not block but sanitise the user request by "
@@ -2314,36 +1989,36 @@ msgid ""
2314
  "sanitised."
2315
  msgstr ""
2316
 
2317
- #: lib/help.php:161
2318
  msgid ""
2319
  "This action will be performed when the filtering process is over, right "
2320
  "before NinjaFirewall forwards the request to your PHP script."
2321
  msgstr ""
2322
 
2323
- #: lib/help.php:164
2324
  msgid ""
2325
  "If you enabled <code>POST</code> requests sanitising, articles and messages "
2326
  "posted by your visitors could be corrupted with excessive backslashes or "
2327
  "substitution characters."
2328
  msgstr ""
2329
 
2330
- #: lib/help.php:176
2331
  msgid "Whether to filter HTTP and/or HTTPS traffic"
2332
  msgstr ""
2333
 
2334
- #: lib/help.php:179
2335
  msgid "File Uploads:"
2336
  msgstr ""
2337
 
2338
- #: lib/help.php:179
2339
  msgid "whether to allow/disallow file uploads."
2340
  msgstr ""
2341
 
2342
- #: lib/help.php:180
2343
  msgid "Sanitise filenames:"
2344
  msgstr ""
2345
 
2346
- #: lib/help.php:180
2347
  msgid ""
2348
  "any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</"
2349
  "code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
@@ -2351,13 +2026,13 @@ msgid ""
2351
  "substitution character."
2352
  msgstr ""
2353
 
2354
- #: lib/help.php:183
2355
  msgid ""
2356
  "Whether to block direct access to PHP files located in specific WordPress "
2357
  "directories."
2358
  msgstr ""
2359
 
2360
- #: lib/help.php:184
2361
  msgid ""
2362
  "enabling this policy will block any attempt (e.g., exploiting a "
2363
  "vulnerability, using a backdoor etc) to modify some important WordPress "
@@ -2365,14 +2040,14 @@ msgid ""
2365
  "regarding the issue. It is enabled by default."
2366
  msgstr ""
2367
 
2368
- #: lib/help.php:185
2369
  msgid ""
2370
  "enabling this policy will block any attempt (e.g., exploiting a "
2371
  "vulnerability, using a backdoor etc) to create a user account. If you allow "
2372
  "user registration, you should not enable it."
2373
  msgstr ""
2374
 
2375
- #: lib/help.php:186
2376
  #, php-format
2377
  msgid ""
2378
  "many vulnerabilities in plugins are exploited via the admin-ajax.php script. "
@@ -2381,11 +2056,11 @@ msgid ""
2381
  "addresses will not be blocked."
2382
  msgstr ""
2383
 
2384
- #: lib/help.php:187
2385
  msgid "Protect against username enumeration:"
2386
  msgstr ""
2387
 
2388
- #: lib/help.php:187
2389
  msgid ""
2390
  "it is possible to enumerate usernames either through the WordPress author "
2391
  "archives, the REST API or the login page. Although this is not a "
@@ -2397,22 +2072,22 @@ msgid ""
2397
  "block the request immediately."
2398
  msgstr ""
2399
 
2400
- #: lib/help.php:188
2401
  msgid "WordPress REST API:"
2402
  msgstr ""
2403
 
2404
- #: lib/help.php:188
2405
  msgid ""
2406
  "it allows you to access your WordPress site's data through an easy-to-use "
2407
  "HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
2408
  "allows you to block any access to that API if you do not intend to use it."
2409
  msgstr ""
2410
 
2411
- #: lib/help.php:189
2412
  msgid "WordPress XML-RPC API:"
2413
  msgstr ""
2414
 
2415
- #: lib/help.php:189
2416
  msgid ""
2417
  "XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
2418
  "its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
@@ -2423,24 +2098,24 @@ msgid ""
2423
  "used in brute-force amplification attacks or to block Pingbacks."
2424
  msgstr ""
2425
 
2426
- #: lib/help.php:190
2427
  msgid ""
2428
  "Block <code>POST</code> requests in the themes folder <code>/wp-content/"
2429
  "themes</code>:"
2430
  msgstr ""
2431
 
2432
- #: lib/help.php:190
2433
  msgid ""
2434
  "this option can be useful to block hackers from installing backdoor in the "
2435
  "PHP theme files. However, because some custom themes may include an HTML "
2436
  "form (contact, search form etc), this option is not enabled by default."
2437
  msgstr ""
2438
 
2439
- #: lib/help.php:191
2440
  msgid "Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:"
2441
  msgstr ""
2442
 
2443
- #: lib/help.php:191
2444
  msgid ""
2445
  "enable this option when you want to secure logins and the admin area so that "
2446
  "both passwords and cookies are never sent in the clear. Ensure that you can "
@@ -2448,88 +2123,89 @@ msgid ""
2448
  "you will lock yourself out of your site!"
2449
  msgstr ""
2450
 
2451
- #: lib/help.php:192
2452
  msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:"
2453
  msgstr ""
2454
 
2455
- #: lib/help.php:192
2456
  msgid ""
2457
  "disabling the plugin and theme editor provides an additional layer of "
2458
  "security if a hacker gains access to a well-privileged user account."
2459
  msgstr ""
2460
 
2461
- #: lib/help.php:193
2462
  msgid ""
2463
  "Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:"
2464
  msgstr ""
2465
 
2466
- #: lib/help.php:193
2467
  msgid ""
2468
  "this option will block users being able to use the plugin and theme "
2469
  "installation/update functionality from the WordPress admin area. Setting "
2470
  "this constant also disables the Plugin and Theme editor."
2471
  msgstr ""
2472
 
2473
- #: lib/help.php:194
2474
- msgid "Disable the fatal error handler <code>WP_Fatal_Error_Handler</code>:"
 
2475
  msgstr ""
2476
 
2477
- #: lib/help.php:194
2478
  msgid ""
2479
  "this option will disable the WSOD protection introduced in WordPress 5.1."
2480
  msgstr ""
2481
 
2482
- #: lib/help.php:202
2483
  msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
2484
  msgstr ""
2485
 
2486
- #: lib/help.php:205
2487
  msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
2488
  msgstr ""
2489
 
2490
- #: lib/help.php:206
2491
  msgid "Decode Base64-encoded <code>POST</code> variable:"
2492
  msgstr ""
2493
 
2494
- #: lib/help.php:206
2495
  msgid ""
2496
  "NinjaFirewall will decode and scan base64 encoded values in order to detect "
2497
  "obfuscated malicious code. This option is only available for the <code>POST</"
2498
  "code> variable."
2499
  msgstr ""
2500
 
2501
- #: lib/help.php:209
2502
  msgid "Whether to sanitise the <code>REQUEST</code> variable."
2503
  msgstr ""
2504
 
2505
- #: lib/help.php:212
2506
  msgid "Whether to scan and/or sanitise cookies."
2507
  msgstr ""
2508
 
2509
- #: lib/help.php:215
2510
  msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
2511
  msgstr ""
2512
 
2513
- #: lib/help.php:216
2514
  msgid "Block suspicious bots/scanners:"
2515
  msgstr ""
2516
 
2517
- #: lib/help.php:216
2518
  msgid ""
2519
  "rejects some known bots, scanners and various malicious scripts attempting "
2520
  "to access your blog."
2521
  msgstr ""
2522
 
2523
- #: lib/help.php:219
2524
  msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
2525
  msgstr ""
2526
 
2527
- #: lib/help.php:220
2528
  msgid ""
2529
  "Block POST requests that do not have an <code>HTTP_REFERER</code> header:"
2530
  msgstr ""
2531
 
2532
- #: lib/help.php:220
2533
  msgid ""
2534
  "this option will block any <code>POST</code> request that does not have a "
2535
  "Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
@@ -2540,22 +2216,22 @@ msgid ""
2540
  "default."
2541
  msgstr ""
2542
 
2543
- #: lib/help.php:223
2544
  msgid "Block localhost IP in <code>GET/POST</code> requests:"
2545
  msgstr ""
2546
 
2547
- #: lib/help.php:223
2548
  msgid ""
2549
  "this option will block any <code>GET</code> or <code>POST</code> request "
2550
  "containing the localhost IP (127.0.0.1). It can be useful to block SQL "
2551
  "dumpers and various hacker's shell scripts."
2552
  msgstr ""
2553
 
2554
- #: lib/help.php:224
2555
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
2556
  msgstr ""
2557
 
2558
- #: lib/help.php:224
2559
  #, php-format
2560
  msgid ""
2561
  "this option will reject any request using an IP instead of a domain name in "
@@ -2565,11 +2241,11 @@ msgid ""
2565
  "than domain names."
2566
  msgstr ""
2567
 
2568
- #: lib/help.php:225
2569
  msgid "Scan traffic coming from localhost and private IP address spaces:"
2570
  msgstr ""
2571
 
2572
- #: lib/help.php:225
2573
  msgid ""
2574
  "this option will allow the firewall to scan traffic from all non-routable "
2575
  "private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
@@ -2577,20 +2253,20 @@ msgid ""
2577
  "interconnected)."
2578
  msgstr ""
2579
 
2580
- #: lib/help.php:234
2581
  msgid ""
2582
  "In addition to filtering incoming requests, NinjaFirewall can also hook the "
2583
  "HTTP response in order to alter its headers. Those modifications can help to "
2584
  "mitigate threats such as XSS, phishing and clickjacking attacks."
2585
  msgstr ""
2586
 
2587
- #: lib/help.php:236
2588
  msgid ""
2589
  "Set <code>X-Content-Type-Options</code> to protect against MIME type "
2590
  "confusion attacks:"
2591
  msgstr ""
2592
 
2593
- #: lib/help.php:236
2594
  msgid ""
2595
  "this header will send the nosniff value to instruct the browser to disable "
2596
  "content or MIME sniffing and to use the content-type returned by the server. "
@@ -2599,12 +2275,12 @@ msgid ""
2599
  "such as MIME Confusion Attacks."
2600
  msgstr ""
2601
 
2602
- #: lib/help.php:237
2603
  msgid ""
2604
  "Set <code>X-Frame-Options</code> to protect against clickjacking attempts:"
2605
  msgstr ""
2606
 
2607
- #: lib/help.php:237
2608
  msgid ""
2609
  "this header indicates a policy whether a browser must not allow to render a "
2610
  "page in a &lt;frame&gt; or &lt;iframe&gt;. Hosts can declare this policy in "
@@ -2613,53 +2289,53 @@ msgid ""
2613
  "NinjaFirewall accepts two different values:"
2614
  msgstr ""
2615
 
2616
- #: lib/help.php:239
2617
  msgid ""
2618
  "a browser receiving content with this header must not display this content "
2619
  "in any frame from a page of different origin than the content itself."
2620
  msgstr ""
2621
 
2622
- #: lib/help.php:240
2623
  msgid ""
2624
  "a browser receiving content with this header must not display this content "
2625
  "in any frame."
2626
  msgstr ""
2627
 
2628
- #: lib/help.php:243
2629
  msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
2630
  msgstr ""
2631
 
2632
- #: lib/help.php:245
2633
  msgid ""
2634
  "Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
2635
  "administrator and the login page only."
2636
  msgstr ""
2637
 
2638
- #: lib/help.php:246
2639
  msgid ""
2640
  "Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
2641
  "browsers):"
2642
  msgstr ""
2643
 
2644
- #: lib/help.php:246
2645
  msgid ""
2646
  "this header allows browsers to identify and block XSS attacks by preventing "
2647
  "malicious scripts from executing. It is enabled by default on all compatible "
2648
  "browsers."
2649
  msgstr ""
2650
 
2651
- #: lib/help.php:247
2652
  msgid ""
2653
  "If a visitor disabled their browser's XSS filter, you cannot re-enable it "
2654
  "with that option."
2655
  msgstr ""
2656
 
2657
- #: lib/help.php:249
2658
  msgid ""
2659
  "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
2660
  msgstr ""
2661
 
2662
- #: lib/help.php:249
2663
  msgid ""
2664
  "adding this flag to cookies helps to mitigate the risk of cross-site "
2665
  "scripting by preventing them from being accessed through client-side "
@@ -2670,19 +2346,19 @@ msgid ""
2670
  "sets that flag on the logged in user cookies only."
2671
  msgstr ""
2672
 
2673
- #: lib/help.php:250
2674
  msgid ""
2675
  "If your PHP scripts send cookies that need to be accessed from JavaScript, "
2676
  "you should keep that option disabled."
2677
  msgstr ""
2678
 
2679
- #: lib/help.php:251
2680
  msgid ""
2681
  "Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
2682
  "connections to the server:"
2683
  msgstr ""
2684
 
2685
- #: lib/help.php:251
2686
  msgid ""
2687
  "this policy enforces secure HTTPS connections to the server. Web browsers "
2688
  "will not allow the user to access the web application over insecure HTTP "
@@ -2690,38 +2366,38 @@ msgid ""
2690
  "attacks. Most recent browsers support HSTS headers."
2691
  msgstr ""
2692
 
2693
- #: lib/help.php:252
2694
  msgid "Set <code>Content-Security-Policy</code>:"
2695
  msgstr ""
2696
 
2697
- #: lib/help.php:252
2698
  msgid ""
2699
  "this policy helps to mitigate threats such as XSS, phishing and clickjacking "
2700
  "attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
2701
  "objects (Java, ActiveX, audio and video files), and other HTML5 features."
2702
  msgstr ""
2703
 
2704
- #: lib/help.php:252
2705
  msgid ""
2706
  "NinjaFirewall lets you configure the CSP policy separately for the frontend "
2707
  "(blog, website) and the backend (WordPress admin dashboard)."
2708
  msgstr ""
2709
 
2710
- #: lib/help.php:253
2711
  msgid "Set <code>Referrer-Policy</code>:"
2712
  msgstr ""
2713
 
2714
- #: lib/help.php:253
2715
  msgid ""
2716
  "this HTTP header governs which referrer information, sent in the Referer "
2717
  "header, should be included with requests made."
2718
  msgstr ""
2719
 
2720
- #: lib/help.php:257
2721
  msgid "Block PHP built-in wrappers:"
2722
  msgstr ""
2723
 
2724
- #: lib/help.php:257
2725
  msgid ""
2726
  "PHP has several wrappers for use with the filesystem functions. It is "
2727
  "possible for an attacker to use them to bypass firewalls and various IDS to "
@@ -2732,11 +2408,11 @@ msgid ""
2732
  "request, cookies, user agent and referrer variables."
2733
  msgstr ""
2734
 
2735
- #: lib/help.php:258
2736
  msgid "Block serialized PHP objects:"
2737
  msgstr ""
2738
 
2739
- #: lib/help.php:258
2740
  #, php-format
2741
  msgid ""
2742
  "Object Serialization is a PHP feature used by many applications to generate "
@@ -2747,35 +2423,35 @@ msgid ""
2747
  "code> request, cookies, user agent and referrer variables."
2748
  msgstr ""
2749
 
2750
- #: lib/help.php:259
2751
  msgid "Hide PHP notice and error messages:"
2752
  msgstr ""
2753
 
2754
- #: lib/help.php:259
2755
  msgid ""
2756
  "this option lets you hide errors returned by your scripts. Such errors can "
2757
  "leak sensitive informations which can be exploited by hackers."
2758
  msgstr ""
2759
 
2760
- #: lib/help.php:260
2761
  msgid ""
2762
  "Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
2763
  "<code>PATH_INFO</code>:"
2764
  msgstr ""
2765
 
2766
- #: lib/help.php:260
2767
  msgid ""
2768
  "this option can sanitise any dangerous characters found in those 3 server "
2769
  "variables to prevent various XSS and database injection attempts."
2770
  msgstr ""
2771
 
2772
- #: lib/help.php:263
2773
  #, php-format
2774
  msgid ""
2775
  "Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests:"
2776
  msgstr ""
2777
 
2778
- #: lib/help.php:263
2779
  msgid ""
2780
  "this option will block scripts attempting to pass the <code>DOCUMENT_ROOT</"
2781
  "code> server variable in a <code>GET</code> or <code>POST</code> request. "
@@ -2783,11 +2459,11 @@ msgid ""
2783
  "legitimate programs do not."
2784
  msgstr ""
2785
 
2786
- #: lib/help.php:264
2787
  msgid "Block ASCII character 0x00 (NULL byte):"
2788
  msgstr ""
2789
 
2790
- #: lib/help.php:264
2791
  msgid ""
2792
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
2793
  "<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
@@ -2796,18 +2472,18 @@ msgid ""
2796
  "dangerous and should always be rejected."
2797
  msgstr ""
2798
 
2799
- #: lib/help.php:265
2800
  msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
2801
  msgstr ""
2802
 
2803
- #: lib/help.php:265
2804
  msgid ""
2805
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
2806
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
2807
  "ASCII characters from 1 to 8 and 14 to 31."
2808
  msgstr ""
2809
 
2810
- #: lib/help.php:273
2811
  #, php-format
2812
  msgid ""
2813
  "By default, any logged in WordPress administrator will not be blocked by "
@@ -2819,13 +2495,13 @@ msgid ""
2819
  "enforced."
2820
  msgstr ""
2821
 
2822
- #: lib/help.php:287
2823
  msgid ""
2824
  "File Guard can detect, in real-time, any access to a PHP file that was "
2825
  "recently modified or created, and alert you about this."
2826
  msgstr ""
2827
 
2828
- #: lib/help.php:289
2829
  msgid ""
2830
  "If a hacker uploaded a shell script to your site (or injected a backdoor "
2831
  "into an already existing file) and tried to directly access that file using "
@@ -2836,7 +2512,7 @@ msgid ""
2836
  "Notifications\" menu."
2837
  msgstr ""
2838
 
2839
- #: lib/help.php:290
2840
  msgid ""
2841
  "If you do not want to monitor a folder, you can exclude its full path or a "
2842
  "part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
@@ -2845,13 +2521,13 @@ msgid ""
2845
  "will ignore it."
2846
  msgstr ""
2847
 
2848
- #: lib/help.php:291
2849
  msgid ""
2850
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
2851
  "code>)."
2852
  msgstr ""
2853
 
2854
- #: lib/help.php:292
2855
  msgid ""
2856
  "File Guard real-time detection is a totally unique feature, because "
2857
  "NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
@@ -2859,11 +2535,11 @@ msgid ""
2859
  "package (third-party software, shell script, backdoor etc)."
2860
  msgstr ""
2861
 
2862
- #: lib/help.php:301 lib/network.php:32 ninjafirewall.php:511
2863
  msgid "Network"
2864
  msgstr ""
2865
 
2866
- #: lib/help.php:303
2867
  msgid ""
2868
  "Even if NinjaFirewall administration menu is only available to the Super "
2869
  "Admin (from the main site), you can still display its status to all sites in "
@@ -2871,26 +2547,26 @@ msgid ""
2871
  "be visible only to the administrators of those sites."
2872
  msgstr ""
2873
 
2874
- #: lib/help.php:305
2875
  msgid ""
2876
  "It is recommended to enable this feature as it is the only way to know "
2877
  "whether the sites in your network are protected and if NinjaFirewall "
2878
  "installation was successful."
2879
  msgstr ""
2880
 
2881
- #: lib/help.php:307
2882
  msgid ""
2883
  "Note that when it is disabled, the icon still remains visible to you, the "
2884
  "Super Admin."
2885
  msgstr ""
2886
 
2887
- #: lib/help.php:318
2888
  msgid ""
2889
  "File Check lets you perform file integrity monitoring upon request or on a "
2890
  "specific interval."
2891
  msgstr ""
2892
 
2893
- #: lib/help.php:320
2894
  msgid ""
2895
  "You need to create a snapshot of all your files and then, at a later time, "
2896
  "you can scan your system to compare it with the previous snapshot. Any "
@@ -2898,62 +2574,62 @@ msgid ""
2898
  "file ownership, timestamp as well as file creation and deletion."
2899
  msgstr ""
2900
 
2901
- #: lib/help.php:321
2902
  #, php-format
2903
  msgid ""
2904
  "Create a snapshot of all files stored in that directory: by default, the "
2905
  "directory is set to WordPress <code>ABSPATH</code> (%s)"
2906
  msgstr ""
2907
 
2908
- #: lib/help.php:322
2909
  msgid ""
2910
  "Exclude the following files/folders: you can enter a directory or a file "
2911
  "name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
2912
  "code>). Or you can exclude a file extension (e.g., <code>.css</code>)."
2913
  msgstr ""
2914
 
2915
- #: lib/help.php:324
2916
  msgid ""
2917
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
2918
  "code>)."
2919
  msgstr ""
2920
 
2921
- #: lib/help.php:325
2922
  msgid ""
2923
  "Do not follow symbolic links: by default, NinjaFirewall will not follow "
2924
  "symbolic links."
2925
  msgstr ""
2926
 
2927
- #: lib/help.php:330
2928
  msgid "Scheduled scans"
2929
  msgstr ""
2930
 
2931
- #: lib/help.php:331
2932
  msgid ""
2933
  "NinjaFirewall can scan your system on a specific interval (hourly, "
2934
  "twicedaily or daily)."
2935
  msgstr ""
2936
 
2937
- #: lib/help.php:333
2938
  msgid ""
2939
  "It can either send you a scan report only if changes are detected, or always "
2940
  "send you one after each scan."
2941
  msgstr ""
2942
 
2943
- #: lib/help.php:335
2944
  msgid ""
2945
  "Reports will be sent to the contact email address defined in the \"Event "
2946
  "Notifications\" menu."
2947
  msgstr ""
2948
 
2949
- #: lib/help.php:337
2950
  #, php-format
2951
  msgid ""
2952
  "Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
2953
  "only if your site gets sufficient traffic."
2954
  msgstr ""
2955
 
2956
- #: lib/help.php:351
2957
  msgid ""
2958
  "NinjaFirewall can alert you by email on specific events triggered within "
2959
  "your blog. They include installations, updates, activations etc, as well as "
@@ -2964,11 +2640,11 @@ msgid ""
2964
  "theme in order to take full control of your website."
2965
  msgstr ""
2966
 
2967
- #: lib/help.php:362 lib/login_protection.php:21 ninjafirewall.php:519
2968
  msgid "Login Protection"
2969
  msgstr ""
2970
 
2971
- #: lib/help.php:366
2972
  msgid ""
2973
  "By processing incoming HTTP requests before your blog and any of its "
2974
  "plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
@@ -2976,18 +2652,18 @@ msgid ""
2976
  "from several thousands of different IPs."
2977
  msgstr ""
2978
 
2979
- #: lib/help.php:368
2980
  msgid ""
2981
  "You can choose two different types of protection: a password or a captcha. "
2982
  "You can enable the protection only if an attack is detected or to keep it "
2983
  "always activated."
2984
  msgstr ""
2985
 
2986
- #: lib/help.php:370
2987
  msgid "Yes, if under attack:"
2988
  msgstr ""
2989
 
2990
- #: lib/help.php:372
2991
  msgid ""
2992
  "The protection will be triggered when too many login attempts are detected, "
2993
  "regardless of the offending IP. It blocks the attack instantly and prevents "
@@ -2996,92 +2672,92 @@ msgid ""
2996
  "combination or the captcha code. "
2997
  msgstr ""
2998
 
2999
- #: lib/help.php:374
3000
  msgid "Always ON:"
3001
  msgstr ""
3002
 
3003
- #: lib/help.php:376
3004
  msgid ""
3005
  "NinjaFirewall will always enforce the HTTP authentication or captcha "
3006
  "implementation each time you access the login page."
3007
  msgstr ""
3008
 
3009
- #: lib/help.php:379
3010
  msgid "Type of protection:"
3011
  msgstr ""
3012
 
3013
- #: lib/help.php:380
3014
  msgid ""
3015
  "<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
3016
  "own very fast authentication scheme and it is compatible with any HTTP "
3017
  "server (Apache, Nginx, Lighttpd etc)."
3018
  msgstr ""
3019
 
3020
- #: lib/help.php:381
3021
  msgid "<b>Captcha:</b> It will display a 5-character captcha code."
3022
  msgstr ""
3023
 
3024
- #: lib/help.php:382
3025
  msgid "Bot protection:"
3026
  msgstr ""
3027
 
3028
- #: lib/help.php:383
3029
  msgid ""
3030
  "NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
3031
  "before they start a brute-force attack."
3032
  msgstr ""
3033
 
3034
- #: lib/help.php:391
3035
  msgid "AUTH log"
3036
  msgstr ""
3037
 
3038
- #: lib/help.php:394
3039
  msgid ""
3040
  "NinjaFirewall can write to the server Authentication log when the brute-"
3041
  "force protection is triggered. This can be useful to the system "
3042
  "administrator for monitoring purposes or banning IPs at the server level."
3043
  msgstr ""
3044
 
3045
- #: lib/help.php:396
3046
  msgid ""
3047
  "If you have a shared hosting account, keep this option disabled as you do "
3048
  "not have any access to the server's logs."
3049
  msgstr ""
3050
 
3051
- #: lib/help.php:398
3052
  msgid ""
3053
  "On Debian-based systems, the log is located in <code>/var/log/auth.log</"
3054
  "code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
3055
  "logline uses the following format:"
3056
  msgstr ""
3057
 
3058
- #: lib/help.php:401
3059
  msgid "AA: the process ID (PID)."
3060
  msgstr ""
3061
 
3062
- #: lib/help.php:402
3063
  msgid "BB: the user IPv4 or IPv6 address."
3064
  msgstr ""
3065
 
3066
- #: lib/help.php:403
3067
  msgid "CC: the blog (sub-)domain name."
3068
  msgstr ""
3069
 
3070
- #: lib/help.php:404
3071
  msgid ""
3072
  "DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
3073
  "API</code>."
3074
  msgstr ""
3075
 
3076
- #: lib/help.php:405
3077
  msgid "EE: the time, in minutes, the protection will remain active."
3078
  msgstr ""
3079
 
3080
- #: lib/help.php:407
3081
  msgid "Sample loglines:"
3082
  msgstr ""
3083
 
3084
- #: lib/help.php:410
3085
  #, php-format
3086
  msgid ""
3087
  "Be careful if you are behind a load balancer, reverse-proxy or CDN because "
@@ -3092,46 +2768,46 @@ msgid ""
3092
  "otherwise you will likely block legitimate users."
3093
  msgstr ""
3094
 
3095
- #: lib/help.php:426
3096
  msgid ""
3097
  "The firewall log displays blocked and sanitised requests as well as some "
3098
  "useful information. It has 6 columns:"
3099
  msgstr ""
3100
 
3101
- #: lib/help.php:427
3102
  msgid "DATE : date and time of the incident."
3103
  msgstr ""
3104
 
3105
- #: lib/help.php:428
3106
  msgid ""
3107
  "INCIDENT : unique incident number/ID as it was displayed to the blocked user."
3108
  msgstr ""
3109
 
3110
- #: lib/help.php:429
3111
  msgid ""
3112
  "LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
3113
  "<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
3114
  "and debugging mode (<code>DEBUG_ON</code>)."
3115
  msgstr ""
3116
 
3117
- #: lib/help.php:430
3118
  msgid ""
3119
  "RULE : reference of the NinjaFirewall built-in security rule that triggered "
3120
  "the action. A hyphen (<code>-</code>) instead of a number means it was a "
3121
  "rule from the \"Firewall Policies\" page."
3122
  msgstr ""
3123
 
3124
- #: lib/help.php:431
3125
  msgid "IP : the user IPv4 or IPv6 address."
3126
  msgstr ""
3127
 
3128
- #: lib/help.php:432
3129
  msgid ""
3130
  "REQUEST : the HTTP request including offending variables and values as well "
3131
  "as the reason the action was logged."
3132
  msgstr ""
3133
 
3134
- #: lib/help.php:439
3135
  msgid ""
3136
  "This options lets you configure NinjaFirewall to delete its old logs "
3137
  "automatically. By default, logs are never deleted, <b>even when uninstall "
@@ -3139,56 +2815,56 @@ msgid ""
3139
  "delete old logs."
3140
  msgstr ""
3141
 
3142
- #: lib/help.php:447
3143
  msgid ""
3144
  "Centralized Logging lets you remotely access the firewall log of all your "
3145
  "NinjaFirewall protected websites from one single installation. You do not "
3146
  "need any longer to log in to individual servers to analyse your log data."
3147
  msgstr ""
3148
 
3149
- #: lib/help.php:447
3150
  #, php-format
3151
  msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
3152
  msgstr ""
3153
 
3154
- #: lib/help.php:448
3155
  msgid ""
3156
  "Enter your public key (optional): This is the public key that was created "
3157
  "from your main server."
3158
  msgstr ""
3159
 
3160
- #: lib/help.php:451
3161
  msgid ""
3162
  "Centralized Logging will keep working even if NinjaFirewall is disabled. "
3163
  "Delete your public key below if you want to disable it."
3164
  msgstr ""
3165
 
3166
- #: lib/help.php:473 lib/live_log.php:37 lib/live_log.php:216
3167
- #: ninjafirewall.php:527
3168
  msgid "Live Log"
3169
  msgstr ""
3170
 
3171
- #: lib/help.php:475
3172
  msgid ""
3173
  "Live Log lets you watch your blog traffic in real time, just like the Unix "
3174
  "<code>tail -f</code> command. Note that requests sent to static elements "
3175
  "like JS/CSS files and images are not managed by NinjaFirewall."
3176
  msgstr ""
3177
 
3178
- #: lib/help.php:477
3179
  msgid ""
3180
  "You can enable/disable the monitoring process, change the refresh rate, "
3181
  "clear the screen, enable automatic vertical scrolling, change the log "
3182
  "format, select which traffic you want to view (HTTP/HTTPS) and the timezone."
3183
  msgstr ""
3184
 
3185
- #: lib/help.php:477
3186
  msgid ""
3187
  "You can also apply filters to include or exclude files and folders "
3188
  "(REQUEST_URI)."
3189
  msgstr ""
3190
 
3191
- #: lib/help.php:480
3192
  msgid ""
3193
  "Live Log does not make use of any WordPress core file (e.g., <code>admin-"
3194
  "ajax.php</code>). It communicates directly with the firewall without loading "
@@ -3197,78 +2873,78 @@ msgid ""
3197
  "value."
3198
  msgstr ""
3199
 
3200
- #: lib/help.php:482
3201
  msgid ""
3202
  "If you are using the optional <code>.htninja</code> configuration file to "
3203
  "whitelist your IP, the Live Log feature will not work."
3204
  msgstr ""
3205
 
3206
- #: lib/help.php:487
3207
  msgid "Log Format"
3208
  msgstr ""
3209
 
3210
- #: lib/help.php:488
3211
  msgid "You can easily customize the log format. Possible values are:"
3212
  msgstr ""
3213
 
3214
- #: lib/help.php:489
3215
  msgid "<code>%time</code>: the server date, time and timezone."
3216
  msgstr ""
3217
 
3218
- #: lib/help.php:490
3219
  msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
3220
  msgstr ""
3221
 
3222
- #: lib/help.php:491
3223
  #, php-format
3224
  msgid ""
3225
  "<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
3226
  "balancer or CDN, this will be its IP."
3227
  msgstr ""
3228
 
3229
- #: lib/help.php:492
3230
  msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
3231
  msgstr ""
3232
 
3233
- #: lib/help.php:493
3234
  #, php-format
3235
  msgid ""
3236
  "<code>%uri</code>: the URI which was given in order to access the page "
3237
  "(REQUEST_URI)."
3238
  msgstr ""
3239
 
3240
- #: lib/help.php:494
3241
  msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
3242
  msgstr ""
3243
 
3244
- #: lib/help.php:495
3245
  #, php-format
3246
  msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
3247
  msgstr ""
3248
 
3249
- #: lib/help.php:496
3250
  #, php-format
3251
  msgid ""
3252
  "<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
3253
  "load balancer or CDN, this will likely be the visitor true IP."
3254
  msgstr ""
3255
 
3256
- #: lib/help.php:497
3257
  msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
3258
  msgstr ""
3259
 
3260
- #: lib/help.php:498
3261
  msgid ""
3262
  "Additionally, you can include any of the following characters: <code>\"</"
3263
  "code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
3264
  "and lowercase letters <code>a-z</code>."
3265
  msgstr ""
3266
 
3267
- #: lib/help.php:510 lib/rules_editor.php:17 ninjafirewall.php:531
3268
  msgid "Rules Editor"
3269
  msgstr ""
3270
 
3271
- #: lib/help.php:512
3272
  msgid ""
3273
  "Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
3274
  "of built-in rules used to protect your blog against the most common "
@@ -3278,350 +2954,128 @@ msgid ""
3278
  "individually:"
3279
  msgstr ""
3280
 
3281
- #: lib/help.php:514
3282
  msgid ""
3283
  "Check your firewall log and find the rule ID you want to disable (it is "
3284
  "displayed in the <code>RULE</code> column)."
3285
  msgstr ""
3286
 
3287
- #: lib/help.php:515
3288
  msgid ""
3289
  "Select its ID from the enabled rules list below and click the \"Disable it\" "
3290
  "button."
3291
  msgstr ""
3292
 
3293
- #: lib/help.php:517
3294
  msgid ""
3295
  "Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
3296
  "code> instead of a number, that means that the rule can be changed in the "
3297
  "\"Firewall Policies\" page."
3298
  msgstr ""
3299
 
3300
- #: lib/help.php:522
3301
  msgid "Credits"
3302
  msgstr ""
3303
 
3304
- #: lib/help.php:524
3305
  msgid ""
3306
  "NinjaFirewall security rules protect against many vulnerabilities. Some of "
3307
  "them were reported by the following companies, individuals or mailing lists:"
3308
  msgstr ""
3309
 
3310
- #: lib/help.php:576 lib/overview.php:132
3311
  msgid "Updates"
3312
  msgstr ""
3313
 
3314
- #: lib/help.php:578
3315
  msgid ""
3316
  "To get the most efficient protection, you can ask NinjaFirewall to "
3317
  "automatically update its security rules."
3318
  msgstr ""
3319
 
3320
- #: lib/help.php:580
3321
  msgid ""
3322
  "Each time a new vulnerability is found in WordPress or one of its plugins/"
3323
  "themes, a new set of security rules will be made available to protect "
3324
  "against such vulnerability if needed."
3325
  msgstr ""
3326
 
3327
- #: lib/help.php:582
3328
  msgid ""
3329
  "Only security rules will be downloaded. If a new version of NinjaFirewall "
3330
  "(including new files, options and features) was available, it would have to "
3331
  "be updated from the dashboard plugins menu as usual."
3332
  msgstr ""
3333
 
3334
- #: lib/help.php:584
3335
  msgid ""
3336
  "We recommend to enable this feature, as it is the <strong>best way to keep "
3337
  "your WordPress secure</strong> against new vulnerabilities."
3338
  msgstr ""
3339
 
3340
- #: lib/install_default.php:170
3341
- msgid ""
3342
- "Error: The installer cannot download the security rules from wordpress.org "
3343
- "website."
3344
- msgstr ""
3345
-
3346
- #: lib/install_default.php:171
3347
- msgid ""
3348
- "The server may be temporarily down or you may have network connectivity "
3349
- "problems? Please try again in a few minutes."
3350
- msgstr ""
3351
-
3352
- #: lib/install_default.php:172
3353
- msgid ""
3354
- "NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
3355
- "your server does not support SSL? You can force NinjaFirewall to use a non-"
3356
- "secure HTTP connection by adding the following directive to your <strong>wp-"
3357
- "config.php</strong> file:"
3358
- msgstr ""
3359
-
3360
- #: lib/install_fullwaf.php:35 lib/install_fullwaf.php:149
3361
- #: lib/install_fullwaf.php:304 lib/install_wpwaf.php:53
3362
- #: lib/install_wpwaf.php:63 lib/install_wpwaf.php:70
3363
- msgid "Error:"
3364
- msgstr ""
3365
-
3366
- #: lib/install_fullwaf.php:39
3367
- #, php-format
3368
- msgid ""
3369
- "Your WordPress directory (%s) is different from your website document root "
3370
- "(%s). Because it is possible to install WordPress into a subdirectory, but "
3371
- "have the blog exist in the site root, NinjaFirewall needs to know the exact "
3372
- "location of the site root."
3373
- msgstr ""
3374
-
3375
- #: lib/install_fullwaf.php:40
3376
- #, php-format
3377
- msgid ""
3378
- "Please edit the path below only if you have manually modified your WordPress "
3379
- "root directory as described in the <a href=\"%s\">Giving WordPress Its Own "
3380
- "Directory</a> article."
3381
- msgstr ""
3382
-
3383
- #: lib/install_fullwaf.php:41
3384
- msgid "Most users should not change this value."
3385
- msgstr ""
3386
-
3387
- #: lib/install_fullwaf.php:42
3388
- msgid "Path to WordPress site root directory:"
3389
- msgstr ""
3390
-
3391
- #: lib/install_fullwaf.php:57 lib/install_fullwaf.php:249
3392
- msgid "please enter the full path to WordPress folder."
3393
- msgstr ""
3394
-
3395
- #: lib/install_fullwaf.php:62
3396
- #, php-format
3397
- msgid ""
3398
- "cannot find the %s directory! Please correct the full path to WordPress site "
3399
- "root directory."
3400
- msgstr ""
3401
-
3402
- #: lib/install_fullwaf.php:75
3403
- msgid "(recommended)"
3404
- msgstr ""
3405
-
3406
- #: lib/install_fullwaf.php:118
3407
- msgid "Please select the PHP initialization file supported by your server."
3408
- msgstr ""
3409
-
3410
- #: lib/install_fullwaf.php:144
3411
- #, php-format
3412
- msgid ""
3413
- "Error: NinjaFirewall log directory is not writable (%s). Please chmod it to "
3414
- "0777 and reload this page."
3415
- msgstr ""
3416
-
3417
- #: lib/install_fullwaf.php:153
3418
- msgid "System configuration"
3419
- msgstr ""
3420
-
3421
- #: lib/install_fullwaf.php:159
3422
  #, php-format
3423
  msgid ""
3424
- "NinjaFirewall detected that the PHP <code>auto_prepend_file</code> directive "
3425
- "seems to be used by another application: %s."
3426
  msgstr ""
3427
 
3428
- #: lib/install_fullwaf.php:159
3429
- msgid "Because NinjaFirewall needs to use that directive, it will override it."
3430
- msgstr ""
3431
-
3432
- #: lib/install_fullwaf.php:166 lib/install_wpwaf.php:95
3433
- msgid "Multisite network detected:"
3434
- msgstr ""
3435
-
3436
- #: lib/install_fullwaf.php:166 lib/install_wpwaf.php:95
3437
- msgid ""
3438
- "NinjaFirewall will protect all sites from your network and its configuration "
3439
- "interface will be accessible only to the Super Admin from the network main "
3440
- "site."
3441
- msgstr ""
3442
-
3443
- #: lib/install_fullwaf.php:175
3444
- msgid "Select your HTTP server and your PHP server API"
3445
- msgstr ""
3446
-
3447
- #: lib/install_fullwaf.php:182
3448
- msgid "CGI or PHP-FPM"
3449
- msgstr ""
3450
-
3451
- #: lib/install_fullwaf.php:184
3452
- msgid "Other webserver + CGI/FastCGI"
3453
- msgstr ""
3454
-
3455
- #: lib/install_fullwaf.php:185
3456
- msgid "Other webserver + HHVM"
3457
- msgstr ""
3458
-
3459
- #: lib/install_fullwaf.php:186
3460
- msgid "view PHPINFO"
3461
- msgstr ""
3462
-
3463
- #: lib/install_fullwaf.php:194
3464
  #, php-format
3465
- msgid ""
3466
- "Please <a href=\"%s\">check our blog</a> if you want to install "
3467
- "NinjaFirewall on HHVM."
3468
- msgstr ""
3469
-
3470
- #: lib/install_fullwaf.php:223
3471
- msgid "Select the PHP initialization file supported by your server"
3472
- msgstr ""
3473
-
3474
- #: lib/install_fullwaf.php:226
3475
- msgid "Used by most shared hosting accounts."
3476
- msgstr ""
3477
-
3478
- #: lib/install_fullwaf.php:228
3479
- msgid "The default PHP INI file since PHP 5.3.0"
3480
- msgstr ""
3481
-
3482
- #: lib/install_fullwaf.php:228
3483
- msgid "more info"
3484
- msgstr ""
3485
-
3486
- #: lib/install_fullwaf.php:230
3487
- msgid "A few shared hosting accounts. Seldom used."
3488
- msgstr ""
3489
-
3490
- #: lib/install_fullwaf.php:254 lib/install_fullwaf.php:514
3491
- msgid "select your HTTP server and PHP SAPI."
3492
  msgstr ""
3493
 
3494
- #: lib/install_fullwaf.php:260 lib/install_fullwaf.php:520
3495
- msgid "select the PHP initialization file supported by your server."
3496
- msgstr ""
3497
-
3498
- #: lib/install_fullwaf.php:307 lib/install_wpwaf.php:89
3499
- msgid "Firewall Integration"
3500
- msgstr ""
3501
-
3502
- #: lib/install_fullwaf.php:312
3503
  #, php-format
3504
  msgid ""
3505
- "The <code>%s</code> file must be created, and the following lines of code "
3506
- "added to it:"
3507
  msgstr ""
3508
 
3509
- #: lib/install_fullwaf.php:313
3510
  #, php-format
3511
  msgid ""
3512
- "The following <font color=\"green\">green lines</font> of code must be added "
3513
- "to your <code>%s</code> file."
3514
- msgstr ""
3515
-
3516
- #: lib/install_fullwaf.php:313 lib/install_wpwaf.php:101
3517
- msgid "All other lines, if any, are the actual content of the file:"
3518
- msgstr ""
3519
-
3520
- #: lib/install_fullwaf.php:315
3521
- msgid "The file is not writable, I cannot edit it for you."
3522
- msgstr ""
3523
-
3524
- #: lib/install_fullwaf.php:397
3525
- msgid ""
3526
- "Add the following code to your <code>/etc/hhvm/php.ini</code> file, and "
3527
- "restart HHVM afterwards:"
3528
- msgstr ""
3529
-
3530
- #: lib/install_fullwaf.php:462 lib/install_wpwaf.php:135
3531
- msgid "Please make those changes, then click on button below."
3532
- msgstr ""
3533
-
3534
- #: lib/install_fullwaf.php:467 lib/install_wpwaf.php:127
3535
- msgid "Let NinjaFirewall make the above changes (recommended)."
3536
- msgstr ""
3537
-
3538
- #: lib/install_fullwaf.php:470 lib/install_wpwaf.php:131
3539
- msgid ""
3540
- "Ensure that you have FTP access to your website so that, if there were a "
3541
- "problem during the installation of the firewall, you could easily undo the "
3542
- "changes."
3543
- msgstr ""
3544
-
3545
- #: lib/install_fullwaf.php:475 lib/install_wpwaf.php:134
3546
- msgid "I want to make the changes myself."
3547
- msgstr ""
3548
-
3549
- #: lib/install_fullwaf.php:484
3550
- msgid "Please check our blog if you want to install NinjaFirewall on HHVM."
3551
- msgstr ""
3552
-
3553
- #: lib/install_fullwaf.php:504
3554
- msgid "you must select how to make changes to your files."
3555
  msgstr ""
3556
 
3557
- #: lib/install_fullwaf.php:530
3558
  msgid ""
3559
- "your WordPress root directory is not writable, I cannot make those changes "
3560
- "for you."
3561
- msgstr ""
3562
-
3563
- #: lib/install_fullwaf.php:545 lib/install_fullwaf.php:588
3564
- #, php-format
3565
- msgid "cannot write to <code>%s</code>, it is read-only."
3566
- msgstr ""
3567
-
3568
- #: lib/install_fullwaf.php:620 lib/install_wpwaf.php:203
3569
- msgid "Your configuration was saved."
3570
  msgstr ""
3571
 
3572
- #: lib/install_fullwaf.php:625 lib/install_wpwaf.php:208
3573
  #, php-format
3574
- msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to %s."
3575
- msgstr ""
3576
-
3577
- #: lib/install_fullwaf.php:630 lib/install_wpwaf.php:213
3578
- msgid ""
3579
- "Please click the button below to test if the firewall integration was "
3580
- "successful."
3581
- msgstr ""
3582
-
3583
- #: lib/install_fullwaf.php:632 lib/install_wpwaf.php:215
3584
- msgid "Test Firewall"
3585
  msgstr ""
3586
 
3587
- #: lib/install_wpwaf.php:54
3588
  #, php-format
3589
- msgid ""
3590
- "Unable to read the wp-config.php file (%s). Make sure it is readable and try "
3591
- "again."
3592
  msgstr ""
3593
 
3594
- #: lib/install_wpwaf.php:71
3595
- #, php-format
3596
- msgid "Unable to find the wp-config.php file in the %s or %s directories."
3597
  msgstr ""
3598
 
3599
- #: lib/install_wpwaf.php:101
3600
- #, php-format
3601
  msgid ""
3602
- "The following <font color=\"green\">green lines</font> of code must be added "
3603
- "to your %s file."
3604
  msgstr ""
3605
 
3606
- #: lib/install_wpwaf.php:120
3607
  msgid ""
3608
- "The file is not writable, I cannot edit it for you. Please make those "
3609
- "changes, then click on button below."
3610
- msgstr ""
3611
-
3612
- #: lib/install_wpwaf.php:129
3613
- msgid "Back up the file (wp-config.bak.php) before editing it."
3614
- msgstr ""
3615
-
3616
- #: lib/install_wpwaf.php:155
3617
- #, php-format
3618
- msgid "Unable to find the wp-config.php file (#%s)."
3619
  msgstr ""
3620
 
3621
- #: lib/install_wpwaf.php:236
3622
  msgid ""
3623
- "The firewall is not loaded. Make sure that the required lines of code were "
3624
- "added to your wp-config.php file."
 
 
3625
  msgstr ""
3626
 
3627
  #: lib/live_log.php:29
@@ -3638,337 +3092,261 @@ msgid ""
3638
  "Administrator to the whitelist\" option is enabled."
3639
  msgstr ""
3640
 
3641
- #: lib/live_log.php:94
3642
- msgid "Loading..."
3643
- msgstr ""
3644
-
3645
- #: lib/live_log.php:112 lib/live_log.php:141 lib/live_log.php:239
3646
- msgid "No traffic yet, please wait..."
3647
- msgstr ""
3648
-
3649
- #: lib/live_log.php:115
3650
- msgid "Error: Live Log did not receive the expected response from your server:"
3651
- msgstr ""
3652
-
3653
- #: lib/live_log.php:134
3654
- msgid "Error: URL does not seem to exist:"
3655
- msgstr ""
3656
-
3657
- #: lib/live_log.php:136
3658
- msgid "Error: cannot find your log file. Try to reload this page."
3659
- msgstr ""
3660
-
3661
- #: lib/live_log.php:138
3662
- msgid "Error: the HTTP server returned the following error code:"
3663
- msgstr ""
3664
-
3665
- #: lib/live_log.php:143 lib/live_log.php:156 lib/live_log.php:176
3666
- msgid "Sleeping"
3667
- msgstr ""
3668
-
3669
- #: lib/live_log.php:143 lib/live_log.php:156 lib/live_log.php:176
3670
- msgid "seconds"
3671
- msgstr ""
3672
-
3673
- #: lib/live_log.php:243
3674
- msgid "On"
3675
- msgstr ""
3676
-
3677
- #: lib/live_log.php:243
3678
- msgid "Off"
3679
- msgstr ""
3680
-
3681
- #: lib/live_log.php:243
3682
  msgid "Refresh rate:"
3683
  msgstr ""
3684
 
3685
- #: lib/live_log.php:245
3686
  msgid "5 seconds"
3687
  msgstr ""
3688
 
3689
- #: lib/live_log.php:246
3690
  msgid "10 seconds"
3691
  msgstr ""
3692
 
3693
- #: lib/live_log.php:247
3694
  msgid "20 seconds"
3695
  msgstr ""
3696
 
3697
- #: lib/live_log.php:248
3698
  msgid "45 seconds"
3699
  msgstr ""
3700
 
3701
- #: lib/live_log.php:249
3702
  msgid "Clear screen"
3703
  msgstr ""
3704
 
3705
- #: lib/live_log.php:249
3706
  msgid "Autoscrolling"
3707
  msgstr ""
3708
 
3709
- #: lib/live_log.php:255
3710
  msgid "Live Log will not display whitelisted users and brute-force attacks."
3711
  msgstr ""
3712
 
3713
- #: lib/live_log.php:290
3714
- msgid "Live Log options"
3715
  msgstr ""
3716
 
3717
- #: lib/live_log.php:293
3718
  msgid "Inclusion and exclusion filters (REQUEST_URI)"
3719
  msgstr ""
3720
 
3721
- #: lib/live_log.php:297
3722
  msgid "Must include"
3723
  msgstr ""
3724
 
3725
- #: lib/live_log.php:298
3726
  msgid "Must not include"
3727
  msgstr ""
3728
 
3729
- #: lib/live_log.php:301
3730
  msgid ""
3731
  "Full or partial case-sensitive REQUEST_URI string. Multiple values must be "
3732
  "comma-separated."
3733
  msgstr ""
3734
 
3735
- #: lib/live_log.php:305
3736
  msgid "Format"
3737
  msgstr ""
3738
 
3739
- #: lib/live_log.php:308
3740
  msgid "Custom"
3741
  msgstr ""
3742
 
3743
- #: lib/live_log.php:309
3744
  msgid "See contextual help for available log format."
3745
  msgstr ""
3746
 
3747
- #: lib/live_log.php:313
3748
  msgid "Display"
3749
  msgstr ""
3750
 
3751
- #: lib/live_log.php:323
3752
  msgid "Timezone"
3753
  msgstr ""
3754
 
3755
- #: lib/live_log.php:338
3756
  msgid "Save Live Log Options"
3757
  msgstr ""
3758
 
3759
- #: lib/live_log.php:377
3760
  msgid "Error: please enter the custom log format."
3761
  msgstr ""
3762
 
3763
- #: lib/login_protection.php:69 lib/login_protection.php:124
3764
- #: lib/login_protection.php:547
3765
  msgid "Access restricted"
3766
  msgstr ""
3767
 
3768
- #: lib/login_protection.php:79 lib/login_protection.php:128
3769
- #: lib/login_protection.php:557
3770
  msgid "Type the characters you see in the picture below:"
3771
  msgstr ""
3772
 
3773
- #: lib/login_protection.php:138
3774
- msgid "Please enter a number from 1 to 99 in 'Password-protect' field."
3775
- msgstr ""
3776
-
3777
- #: lib/login_protection.php:145
3778
- msgid "Invalid character."
3779
- msgstr ""
3780
-
3781
- #: lib/login_protection.php:150
3782
- msgid "\"admin\" is not acceptable, please choose another user name."
3783
- msgstr ""
3784
-
3785
- #: lib/login_protection.php:158
3786
- msgid "Please enter max 1024 character only."
3787
- msgstr ""
3788
-
3789
- #: lib/login_protection.php:211
3790
  msgid ""
3791
- "Note: Access to the XML-RPC API will be completely disabled when the brute-"
3792
- "force attack protection is set to 'Always ON'."
3793
- msgstr ""
3794
-
3795
- #: lib/login_protection.php:271
3796
- msgid "GD Support is not available on your server."
3797
  msgstr ""
3798
 
3799
- #: lib/login_protection.php:277
3800
  msgid ""
3801
  "Error: GD Support is not available on your server, the captcha protection "
3802
  "will not work!"
3803
  msgstr ""
3804
 
3805
- #: lib/login_protection.php:286
3806
  msgid "Enable brute force attack protection"
3807
  msgstr ""
3808
 
3809
- #: lib/login_protection.php:289
3810
- msgid "Yes, if under attack"
3811
  msgstr ""
3812
 
3813
- #: lib/login_protection.php:292
3814
- msgid "Always ON"
3815
  msgstr ""
3816
 
3817
- #: lib/login_protection.php:305
3818
- msgid "Type of protection"
 
 
 
 
3819
  msgstr ""
3820
 
3821
- #: lib/login_protection.php:308
3822
- msgid "Password"
3823
  msgstr ""
3824
 
3825
- #: lib/login_protection.php:311
3826
- msgid "Captcha"
3827
  msgstr ""
3828
 
3829
- #: lib/login_protection.php:320
3830
  msgid "Protect the login page against"
3831
  msgstr ""
3832
 
3833
- #: lib/login_protection.php:322
3834
  msgid "<code>GET</code> request attacks"
3835
  msgstr ""
3836
 
3837
- #: lib/login_protection.php:323
3838
  msgid "<code>POST</code> request attacks (default)"
3839
  msgstr ""
3840
 
3841
- #: lib/login_protection.php:324
3842
  msgid "<code>GET</code> and <code>POST</code> requests attacks"
3843
  msgstr ""
3844
 
3845
- #: lib/login_protection.php:328
3846
  msgid "Enable protection"
3847
  msgstr ""
3848
 
3849
- #: lib/login_protection.php:331
3850
  #, php-format
3851
  msgid "For %1$s minutes, if more than %2$s %3$s requests within %4$s seconds."
3852
  msgstr ""
3853
 
3854
- #: lib/login_protection.php:352
3855
  msgid "HTTP authentication"
3856
  msgstr ""
3857
 
3858
- #: lib/login_protection.php:354
3859
  msgid "User:"
3860
  msgstr ""
3861
 
3862
- #: lib/login_protection.php:354
3863
  msgid "Password:"
3864
  msgstr ""
3865
 
3866
- #: lib/login_protection.php:355
3867
  msgid "User and Password must be from 6 to 32 characters."
3868
  msgstr ""
3869
 
3870
- #: lib/login_protection.php:356
3871
  msgid "Message (max. 1024 characters, HTML tags allowed)"
3872
  msgstr ""
3873
 
3874
- #: lib/login_protection.php:367
3875
  msgid "Message"
3876
  msgstr ""
3877
 
3878
- #: lib/login_protection.php:370
3879
  msgid "This message will be displayed above the captcha. Max. 255 characters."
3880
  msgstr ""
3881
 
3882
- #: lib/login_protection.php:379
3883
  msgid "Various options"
3884
  msgstr ""
3885
 
3886
- #: lib/login_protection.php:384
3887
  msgid ""
3888
  "If you are using the Jetpack plugin, blocking access to the XML-RPC API may "
3889
  "prevent it from working correctly."
3890
  msgstr ""
3891
 
3892
- #: lib/login_protection.php:390
3893
- msgid "XML-RPC API"
3894
- msgstr ""
3895
-
3896
- #: lib/login_protection.php:392
3897
- msgid "Apply the protection to the <code>xmlrpc.php</code> script as well."
3898
- msgstr ""
3899
-
3900
- #: lib/login_protection.php:397
3901
- msgid "Bot protection"
3902
  msgstr ""
3903
 
3904
- #: lib/login_protection.php:399
3905
- msgid "Enable bot protection (applies to <code>wp-login.php</code> only.)"
3906
  msgstr ""
3907
 
3908
- #: lib/login_protection.php:404
3909
- msgid "Authentication log"
3910
  msgstr ""
3911
 
3912
- #: lib/login_protection.php:410
3913
  msgid "Your server configuration is not compatible with that option."
3914
  msgstr ""
3915
 
3916
- #: lib/login_protection.php:413
3917
  msgid ""
3918
- "The login protection must be set to \"Yes, if under attack\" in order to use "
3919
  "this option."
3920
  msgstr ""
3921
 
3922
- #: lib/login_protection.php:417
3923
- msgid "Write the incident to the server Authentication log."
3924
- msgstr ""
3925
-
3926
- #: lib/login_protection.php:423
3927
- msgid "Signature"
3928
- msgstr ""
3929
-
3930
- #. translators: "Brute-force protection by NinjaFirewall" should not be translated.
3931
- #: lib/login_protection.php:427
3932
- msgid ""
3933
- "Disable the <i>Brute-force protection by NinjaFirewall</i> signature on the "
3934
- "protection page."
3935
  msgstr ""
3936
 
3937
- #: lib/login_protection.php:436
3938
  msgid "Save Login Protection"
3939
  msgstr ""
3940
 
3941
- #: lib/login_protection.php:437
3942
  msgid "See our benchmark and stress-test:"
3943
  msgstr ""
3944
 
3945
- #: lib/login_protection.php:455
3946
  #, php-format
3947
  msgid "Error: %s directory is not writable. Please chmod it to 0777."
3948
  msgstr ""
3949
 
3950
- #: lib/login_protection.php:529
3951
  msgid "Error: please enter a user name for HTTP authentication."
3952
  msgstr ""
3953
 
3954
- #: lib/login_protection.php:531
3955
  msgid "Error: HTTP authentication user name is not valid."
3956
  msgstr ""
3957
 
3958
- #: lib/login_protection.php:537
3959
  msgid "Error: please enter a user name and password for HTTP authentication."
3960
  msgstr ""
3961
 
3962
- #: lib/login_protection.php:540
3963
  msgid "Error: password must be from 6 to 32 characters."
3964
  msgstr ""
3965
 
3966
- #: lib/login_protection.php:575
3967
  #, php-format
3968
  msgid "Error: unable to write to the %s configuration file"
3969
  msgstr ""
3970
 
3971
- #: lib/network.php:24 ninjafirewall.php:844 ninjafirewall.php:848
3972
  #, php-format
3973
  msgid "You are not allowed to perform this task (%s)."
3974
  msgstr ""
@@ -3977,94 +3355,140 @@ msgstr ""
3977
  msgid "You do not have a multisite network."
3978
  msgstr ""
3979
 
3980
- #: lib/network.php:59
3981
  msgid "NinjaFirewall Status"
3982
  msgstr ""
3983
 
3984
- #: lib/network.php:62
3985
  msgid ""
3986
  "Display NinjaFirewall status icon in the admin bar of all sites in the "
3987
  "network"
3988
  msgstr ""
3989
 
3990
- #: lib/network.php:70
3991
- msgid "Save Network options"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3992
  msgstr ""
3993
 
3994
- #: lib/overview.php:37
3995
  msgid "Congratulations, NinjaFirewall is up and running!"
3996
  msgstr ""
3997
 
3998
- #: lib/overview.php:38
3999
  msgid ""
4000
  "If you need help, click on the contextual \"Help\" menu tab located in the "
4001
  "upper right corner of each page."
4002
  msgstr ""
4003
 
4004
- #: lib/overview.php:40
4005
  msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to"
4006
  msgstr ""
4007
 
4008
- #: lib/overview.php:62 lib/utils.php:485
4009
- msgid "unknown error"
4010
  msgstr ""
4011
 
4012
- #: lib/overview.php:66 lib/overview.php:76
4013
  msgid "Firewall"
4014
  msgstr ""
4015
 
4016
- #: lib/overview.php:85
4017
- msgid "WordPress WAF"
4018
  msgstr ""
4019
 
4020
- #: lib/overview.php:87
4021
- msgid "Full WAF"
 
4022
  msgstr ""
4023
 
4024
- #: lib/overview.php:91
4025
- msgid "Mode"
4026
  msgstr ""
4027
 
4028
- #: lib/overview.php:93
4029
  #, php-format
4030
- msgid "NinjaFirewall is running in %s mode."
 
 
 
 
 
4031
  msgstr ""
4032
 
4033
- #: lib/overview.php:102
 
 
 
 
4034
  msgid "Enabled."
4035
  msgstr ""
4036
 
4037
- #: lib/overview.php:102
4038
  msgid "Click here to turn Debugging Mode off"
4039
  msgstr ""
4040
 
4041
- #: lib/overview.php:108
4042
- msgid "PHP SAPI"
 
 
 
 
4043
  msgstr ""
4044
 
4045
- #: lib/overview.php:122 lib/utils.php:666
4046
  msgid "Version"
4047
  msgstr ""
4048
 
4049
- #: lib/overview.php:124
4050
  msgid "Security rules:"
4051
  msgstr ""
4052
 
4053
- #: lib/overview.php:134
 
 
 
 
4054
  msgid "Security rules updates are disabled."
4055
  msgstr ""
4056
 
4057
- #: lib/overview.php:134
4058
  msgid ""
4059
  "If you want your blog to be protected against the latest threats, enable "
4060
  "automatic security rules updates."
4061
  msgstr ""
4062
 
4063
- #: lib/overview.php:142 lib/overview.php:151
4064
  msgid "Admin user"
4065
  msgstr ""
4066
 
4067
- #: lib/overview.php:144
4068
  #, php-format
4069
  msgid ""
4070
  "You are not whitelisted. Ensure that the \"Do not block WordPress "
@@ -4073,66 +3497,66 @@ msgid ""
4073
  "your administration dashboard."
4074
  msgstr ""
4075
 
4076
- #: lib/overview.php:153
4077
  msgid "You are whitelisted by the firewall."
4078
  msgstr ""
4079
 
4080
- #: lib/overview.php:160
4081
  msgid "Restrictions"
4082
  msgstr ""
4083
 
4084
- #: lib/overview.php:162
4085
- msgid "Access to NinjaFirewall is restricted to:"
4086
  msgstr ""
4087
 
4088
- #: lib/overview.php:173
4089
  msgid "User session"
4090
  msgstr ""
4091
 
4092
- #: lib/overview.php:175
4093
  msgid ""
4094
  "It seems that the user session set by NinjaFirewall was not found by the "
4095
  "firewall script."
4096
  msgstr ""
4097
 
4098
- #: lib/overview.php:183
4099
  #, php-format
4100
  msgid ""
4101
  "the public key is invalid. Please <a href=\"%s\">check your configuration</"
4102
  "a>."
4103
  msgstr ""
4104
 
4105
- #: lib/overview.php:187
4106
  msgid "No IP address restriction."
4107
  msgstr ""
4108
 
4109
- #: lib/overview.php:190
4110
  #, php-format
4111
  msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
4112
  msgstr ""
4113
 
4114
- #: lib/overview.php:193
4115
  #, php-format
4116
  msgid ""
4117
  "the whitelisted IP is not valid. Please <a href=\"%s\">check your "
4118
  "configuration</a>."
4119
  msgstr ""
4120
 
4121
- #: lib/overview.php:203
4122
  #, php-format
4123
  msgid "Error: %s"
4124
  msgstr ""
4125
 
4126
- #: lib/overview.php:221
4127
  msgid "Source IP"
4128
  msgstr ""
4129
 
4130
- #: lib/overview.php:223
4131
  #, php-format
4132
  msgid "You have a private IP : %s"
4133
  msgstr ""
4134
 
4135
- #: lib/overview.php:223
4136
  #, php-format
4137
  msgid ""
4138
  "If your site is behind a reverse proxy or a load balancer, ensure that you "
@@ -4140,11 +3564,11 @@ msgid ""
4140
  "otherwise use the NinjaFirewall %s configuration file."
4141
  msgstr ""
4142
 
4143
- #: lib/overview.php:231 lib/overview.php:242
4144
  msgid "CDN detection"
4145
  msgstr ""
4146
 
4147
- #: lib/overview.php:233
4148
  #, php-format
4149
  msgid ""
4150
  "%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
@@ -4152,7 +3576,7 @@ msgid ""
4152
  "otherwise use the NinjaFirewall %s configuration file."
4153
  msgstr ""
4154
 
4155
- #: lib/overview.php:244
4156
  #, php-format
4157
  msgid ""
4158
  "%s detected: you seem to be using Incapsula CDN services. Ensure that you "
@@ -4160,118 +3584,118 @@ msgid ""
4160
  "otherwise use the NinjaFirewall %s configuration file."
4161
  msgstr ""
4162
 
4163
- #: lib/overview.php:253 lib/overview.php:263
4164
  msgid "Log dir"
4165
  msgstr ""
4166
 
4167
- #: lib/overview.php:255 lib/overview.php:265
4168
  #, php-format
4169
  msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
4170
  msgstr ""
4171
 
4172
- #: lib/overview.php:273
4173
  msgid "Optional configuration file"
4174
  msgstr ""
4175
 
4176
- #: lib/overview.php:281
4177
  msgid "MySQLi link identifier"
4178
  msgstr ""
4179
 
4180
- #: lib/overview.php:283
4181
  msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
4182
  msgstr ""
4183
 
4184
- #: lib/rules_editor.php:27
4185
  msgid "Error: you did not select a rule to disable."
4186
  msgstr ""
4187
 
4188
- #: lib/rules_editor.php:29 lib/rules_editor.php:44
4189
  msgid "Error: to change this rule, use the \"Firewall Policies\" menu."
4190
  msgstr ""
4191
 
4192
- #: lib/rules_editor.php:31 lib/rules_editor.php:46
4193
  msgid "Error: this rule does not exist."
4194
  msgstr ""
4195
 
4196
- #: lib/rules_editor.php:35
4197
  #, php-format
4198
  msgid "Rule ID %s has been disabled."
4199
  msgstr ""
4200
 
4201
- #: lib/rules_editor.php:42
4202
  msgid "Error: you did not select a rule to enable."
4203
  msgstr ""
4204
 
4205
- #: lib/rules_editor.php:50
4206
  #, php-format
4207
  msgid "Rule ID %s has been enabled."
4208
  msgstr ""
4209
 
4210
- #: lib/rules_editor.php:60
4211
  msgid "Error: no rules found."
4212
  msgstr ""
4213
 
4214
- #: lib/rules_editor.php:82
4215
  msgid "NinjaFirewall built-in security rules"
4216
  msgstr ""
4217
 
4218
- #: lib/rules_editor.php:85
4219
  msgid "Select the rule you want to disable or enable"
4220
  msgstr ""
4221
 
4222
- #: lib/rules_editor.php:89
4223
  msgid "Total rules enabled"
4224
  msgstr ""
4225
 
4226
- #: lib/rules_editor.php:95 lib/rules_editor.php:124
4227
  msgid "Remote/local file inclusion"
4228
  msgstr ""
4229
 
4230
- #: lib/rules_editor.php:97 lib/rules_editor.php:126
4231
  msgid "Cross-site scripting"
4232
  msgstr ""
4233
 
4234
- #: lib/rules_editor.php:99 lib/rules_editor.php:128
4235
  msgid "Code injection"
4236
  msgstr ""
4237
 
4238
- #: lib/rules_editor.php:101 lib/rules_editor.php:130
4239
  msgid "SQL injection"
4240
  msgstr ""
4241
 
4242
- #: lib/rules_editor.php:103 lib/rules_editor.php:132
4243
  msgid "Various vulnerability"
4244
  msgstr ""
4245
 
4246
- #: lib/rules_editor.php:105 lib/rules_editor.php:134
4247
  msgid "Backdoor/shell"
4248
  msgstr ""
4249
 
4250
- #: lib/rules_editor.php:107 lib/rules_editor.php:136
4251
  msgid "Application specific"
4252
  msgstr ""
4253
 
4254
- #: lib/rules_editor.php:109 lib/rules_editor.php:138
4255
  msgid "WordPress vulnerability"
4256
  msgstr ""
4257
 
4258
- #: lib/rules_editor.php:111 lib/rules_editor.php:140
4259
  msgid "Rule ID"
4260
  msgstr ""
4261
 
4262
- #: lib/rules_editor.php:114
4263
  msgid "Disable it"
4264
  msgstr ""
4265
 
4266
- #: lib/rules_editor.php:119
4267
  msgid "Total rules disabled"
4268
  msgstr ""
4269
 
4270
- #: lib/rules_editor.php:144
4271
  msgid "Enable it"
4272
  msgstr ""
4273
 
4274
- #: lib/rules_update.php:73 ninjafirewall.php:535
4275
  msgid "Rules Update"
4276
  msgstr ""
4277
 
@@ -4283,368 +3707,476 @@ msgstr ""
4283
  msgid "Security rules have been updated."
4284
  msgstr ""
4285
 
4286
- #: lib/rules_update.php:94 lib/rules_update.php:445
4287
  msgid "No security rules update available."
4288
  msgstr ""
4289
 
4290
- #: lib/rules_update.php:143
4291
- msgid "Automatically update NinjaFirewall security rules"
4292
- msgstr ""
4293
-
4294
- #: lib/rules_update.php:157
4295
  #, php-format
4296
  msgid ""
4297
- "It seems that %s is enabled. Ensure you have another way to run WP-Cron, "
4298
  "otherwise NinjaFirewall automatic updates will not work."
4299
  msgstr ""
4300
 
4301
- #: lib/rules_update.php:164
 
 
 
 
4302
  msgid "Check for updates"
4303
  msgstr ""
4304
 
4305
- #: lib/rules_update.php:167
4306
  msgid "Every 15 minutes"
4307
  msgstr ""
4308
 
4309
- #: lib/rules_update.php:168
4310
  msgid "Every 30 minutes"
4311
  msgstr ""
4312
 
4313
- #: lib/rules_update.php:179
4314
- #, php-format
4315
  msgid ""
4316
- "Next scheduled update will start in approximately %s day, %s hour(s), %s "
4317
- "minute(s) and %s seconds."
4318
  msgstr ""
4319
 
4320
- #: lib/rules_update.php:186
 
4321
  msgid ""
4322
- "The next scheduled date is in the past! WordPress wp-cron may not be working "
4323
- "or may have been disabled."
4324
  msgstr ""
4325
 
4326
- #: lib/rules_update.php:194
4327
  msgid "Notification"
4328
  msgstr ""
4329
 
4330
- #: lib/rules_update.php:196
4331
  msgid "Send me a report by email when security rules have been updated."
4332
  msgstr ""
4333
 
4334
- #: lib/rules_update.php:197
4335
  msgid ""
4336
  "Reports will be sent to the contact email address defined in the Event "
4337
  "Notifications menu."
4338
  msgstr ""
4339
 
4340
- #: lib/rules_update.php:204
4341
- msgid "Save Updates Options"
4342
  msgstr ""
4343
 
4344
- #: lib/rules_update.php:204
4345
- msgid "Check For Updates Now!"
4346
  msgstr ""
4347
 
4348
- #: lib/rules_update.php:213
4349
- msgid "The updates log is currently empty."
4350
  msgstr ""
4351
 
4352
- #: lib/rules_update.php:221
4353
- msgid "Updates Log"
4354
  msgstr ""
4355
 
4356
- #: lib/rules_update.php:230
4357
- msgid "Delete Log"
4358
  msgstr ""
4359
 
4360
- #: lib/rules_update.php:236
4361
- msgid "Log is flushed automatically."
4362
  msgstr ""
4363
 
4364
- #: lib/rules_update.php:332
4365
  msgid "Error: Wrong rules format."
4366
  msgstr ""
4367
 
4368
- #: lib/rules_update.php:341
4369
  msgid "Error: Unable to unserialize the new rules."
4370
  msgstr ""
4371
 
4372
- #: lib/rules_update.php:349
4373
  msgid "Error: Unserialized rules seem corrupted."
4374
  msgstr ""
4375
 
4376
- #: lib/rules_update.php:389
4377
  #, php-format
4378
  msgid "Security rules updated to version %s."
4379
  msgstr ""
4380
 
4381
- #: lib/rules_update.php:425
4382
  msgid ""
4383
  "Error: Your version of NinjaFirewall is too old and is not compatible with "
4384
  "those rules. Please upgrade it."
4385
  msgstr ""
4386
 
4387
- #: lib/rules_update.php:434
4388
  msgid "Error: Unable to retrieve the new rules version."
4389
  msgstr ""
4390
 
4391
- #: lib/rules_update.php:452
4392
  #, php-format
4393
  msgid "Error: Server returned a %s HTTP error code (#1)."
4394
  msgstr ""
4395
 
4396
- #: lib/rules_update.php:459 lib/rules_update.php:525
4397
  msgid "Error: Unable to connect to the remote server"
4398
  msgstr ""
4399
 
4400
- #: lib/rules_update.php:489
4401
  #, php-format
4402
  msgid "Error: The new rules versions do not match (%s != %s)."
4403
  msgstr ""
4404
 
4405
- #: lib/rules_update.php:503
4406
  #, php-format
4407
  msgid ""
4408
  "Error: The new rules %s digital signature is not correct. Aborting update, "
4409
  "rules may have been tampered with."
4410
  msgstr ""
4411
 
4412
- #: lib/rules_update.php:518
4413
  #, php-format
4414
  msgid "Error: Server returned a %s HTTP error code (#2)."
4415
  msgstr ""
4416
 
4417
- #: lib/rules_update.php:558
4418
  msgid "[NinjaFirewall] Security rules update"
4419
  msgstr ""
4420
 
4421
- #: lib/rules_update.php:559
4422
  msgid "NinjaFirewall security rules have been updated:"
4423
  msgstr ""
4424
 
4425
- #: lib/rules_update.php:565
4426
  msgid "Rules version:"
4427
  msgstr ""
4428
 
4429
- #: lib/rules_update.php:567
4430
  msgid ""
4431
  "This notification can be turned off from NinjaFirewall \"Rules Update\" page."
4432
  msgstr ""
4433
 
4434
- #: lib/statistics.php:27 ninjafirewall.php:481
4435
  msgid "Statistics"
4436
  msgstr ""
4437
 
4438
- #: lib/statistics.php:81
4439
  msgid "You do not have any stats for the selected month yet."
4440
  msgstr ""
4441
 
4442
- #: lib/statistics.php:115
4443
- msgid "Critical"
 
 
 
 
4444
  msgstr ""
4445
 
4446
  #: lib/statistics.php:121
 
 
 
 
 
 
 
 
 
 
 
 
4447
  msgid "High"
4448
  msgstr ""
4449
 
4450
- #: lib/statistics.php:127
4451
  msgid "Medium"
4452
  msgstr ""
4453
 
4454
- #: lib/statistics.php:137
4455
- msgid "Average time per request"
4456
  msgstr ""
4457
 
4458
- #: lib/statistics.php:141
4459
- msgid "Fastest request"
4460
  msgstr ""
4461
 
4462
- #: lib/statistics.php:145
4463
- msgid "Slowest request"
 
 
 
 
4464
  msgstr ""
4465
 
4466
- #: lib/statistics.php:171
4467
- msgid "Select monthly stats to view..."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4468
  msgstr ""
4469
 
4470
- #: lib/utils.php:142
4471
  msgid "Blocked user account creation"
4472
  msgstr ""
4473
 
4474
- #: lib/utils.php:154
4475
  msgid "NinjaFirewall has blocked an attempt to create a user account:"
4476
  msgstr ""
4477
 
4478
- #: lib/utils.php:157 lib/utils.php:942
4479
  msgid "Username:"
4480
  msgstr ""
4481
 
4482
- #: lib/utils.php:158 lib/utils.php:943 lib/utils.php:1288
4483
  msgid "User IP:"
4484
  msgstr ""
4485
 
4486
- #: lib/utils.php:161 lib/utils.php:782 lib/utils.php:946 lib/utils.php:1291
4487
  msgid "Date:"
4488
  msgstr ""
4489
 
4490
- #: lib/utils.php:170 lib/utils.php:955 lib/utils.php:1283
4491
  msgid "A PHP backtrace has been attached to this message for your convenience."
4492
  msgstr ""
4493
 
4494
- #: lib/utils.php:193 lib/utils.php:194 lib/utils.php:980 lib/utils.php:981
4495
- #: lib/utils.php:1188 lib/utils.php:1189
4496
  msgid "You are not allowed to perform this task."
4497
  msgstr ""
4498
 
4499
- #: lib/utils.php:461 lib/utils.php:465
4500
  msgid "NinjaFirewall error"
4501
  msgstr ""
4502
 
4503
- #: lib/utils.php:462
4504
  #, php-format
4505
  msgid ""
4506
  "%s directory cannot be created. Please review your installation and ensure "
4507
  "that %s is writable."
4508
  msgstr ""
4509
 
4510
- #: lib/utils.php:466
4511
  #, php-format
4512
  msgid ""
4513
  "%s directory is read-only. Please review your installation and ensure that "
4514
  "%s is writable."
4515
  msgstr ""
4516
 
4517
- #: lib/utils.php:487
 
 
 
 
4518
  msgid "NinjaFirewall fatal error:"
4519
  msgstr ""
4520
 
4521
- #: lib/utils.php:488
4522
  msgid "Review your installation, your site is not protected."
4523
  msgstr ""
4524
 
4525
- #: lib/utils.php:505
4526
  msgid "Alert: WordPress console login"
4527
  msgstr ""
4528
 
4529
- #: lib/utils.php:507
4530
  msgid "-Blog:"
4531
  msgstr ""
4532
 
4533
- #: lib/utils.php:511
4534
  msgid "Someone just logged in to your WordPress admin console:"
4535
  msgstr ""
4536
 
4537
- #: lib/utils.php:512
4538
  msgid "-User:"
4539
  msgstr ""
4540
 
4541
- #: lib/utils.php:513
4542
  msgid "-IP:"
4543
  msgstr ""
4544
 
4545
- #: lib/utils.php:514
4546
  msgid "-Date:"
4547
  msgstr ""
4548
 
4549
- #: lib/utils.php:517
4550
  msgid "Support forum"
4551
  msgstr ""
4552
 
4553
- #: lib/utils.php:578 lib/utils.php:605
4554
  msgid "Forbidden access"
4555
  msgstr ""
4556
 
4557
- #: lib/utils.php:624
4558
  #, php-format
4559
  msgid ""
4560
  "<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
4561
  "\">Lost your password</a>?"
4562
  msgstr ""
4563
 
4564
- #: lib/utils.php:658
4565
  msgid "Plugin"
4566
  msgstr ""
4567
 
4568
- #: lib/utils.php:658 lib/utils.php:662
4569
  msgid "uploaded"
4570
  msgstr ""
4571
 
4572
- #: lib/utils.php:658 lib/utils.php:662
4573
  msgid "installed"
4574
  msgstr ""
4575
 
4576
- #: lib/utils.php:658 lib/utils.php:662
4577
  msgid "activated"
4578
  msgstr ""
4579
 
4580
- #: lib/utils.php:659
4581
  msgid "updated"
4582
  msgstr ""
4583
 
4584
- #: lib/utils.php:659
4585
  msgid "deactivated"
4586
  msgstr ""
4587
 
4588
- #: lib/utils.php:659 lib/utils.php:663
4589
  msgid "deleted"
4590
  msgstr ""
4591
 
4592
- #: lib/utils.php:659 lib/utils.php:663
4593
  msgid "Name"
4594
  msgstr ""
4595
 
4596
- #: lib/utils.php:662
4597
  msgid "Theme"
4598
  msgstr ""
4599
 
4600
- #: lib/utils.php:666
4601
  msgid "upgraded"
4602
  msgstr ""
4603
 
4604
- #: lib/utils.php:674
4605
  msgid "[NinjaFirewall] Alert:"
4606
  msgstr ""
4607
 
4608
- #: lib/utils.php:680
4609
  msgid "NinjaFirewall has detected the following activity on your account:"
4610
  msgstr ""
4611
 
4612
- #: lib/utils.php:777
4613
  msgid "[NinjaFirewall] Alert: Database changes detected"
4614
  msgstr ""
4615
 
4616
- #: lib/utils.php:778
4617
  msgid ""
4618
  "NinjaFirewall has detected that one or more administrator accounts were "
4619
  "modified in the database:"
4620
  msgstr ""
4621
 
4622
- #: lib/utils.php:783
4623
  #, php-format
4624
  msgid "Total administrators : %s"
4625
  msgstr ""
4626
 
4627
- #: lib/utils.php:792
4628
  msgid ""
4629
  "If you cannot see any modifications in the above fields, it is possible that "
4630
  "the administrator password was changed."
4631
  msgstr ""
4632
 
4633
- #: lib/utils.php:917
4634
  msgid "Blocked privilege escalation attempt"
4635
  msgstr ""
4636
 
4637
- #: lib/utils.php:939
4638
- msgid "NinjaFirewall has blocked an attempt to gain administrative privileges:"
 
 
4639
  msgstr ""
4640
 
4641
- #: lib/utils.php:991
4642
  msgid ""
4643
  "NinjaFirewall brute-force protection is enabled and you are temporarily "
4644
  "whitelisted."
4645
  msgstr ""
4646
 
4647
- #: lib/utils.php:1005
4648
  #, php-format
4649
  msgid ""
4650
  "Hey, it seems that you've been using NinjaFirewall for some time. If you "
@@ -4653,252 +4185,298 @@ msgid ""
4653
  "rate it. Thank you!"
4654
  msgstr ""
4655
 
4656
- #: lib/utils.php:1255
4657
  msgid ""
4658
  "The attempt was blocked and the option was reversed to its original value."
4659
  msgstr ""
4660
 
4661
- #: lib/utils.php:1260
4662
  msgid "Attempt to modify WordPress settings"
4663
  msgstr ""
4664
 
4665
- #: lib/utils.php:1261
4666
  msgid ""
4667
  "NinjaFirewall has blocked an attempt to modify some important WordPress "
4668
  "settings by a user that does not have administrative privileges:"
4669
  msgstr ""
4670
 
4671
- #: lib/utils.php:1262 lib/utils.php:1271
4672
  #, php-format
4673
  msgid "Option: %s"
4674
  msgstr ""
4675
 
4676
- #: lib/utils.php:1263
4677
  #, php-format
4678
  msgid "Original value: %s"
4679
  msgstr ""
4680
 
4681
- #: lib/utils.php:1264
4682
  #, php-format
4683
  msgid "Modified value: %s"
4684
  msgstr ""
4685
 
4686
- #: lib/utils.php:1265 lib/utils.php:1273
4687
  #, php-format
4688
  msgid "Action taken: %s"
4689
  msgstr ""
4690
 
4691
- #: lib/utils.php:1269
4692
  msgid "Code injection attempt in WordPress options table"
4693
  msgstr ""
4694
 
4695
- #: lib/utils.php:1270
4696
  msgid ""
4697
  "NinjaFirewall has blocked an attempt to inject code in the WordPress options "
4698
  "table by a user that does not have administrative privileges:"
4699
  msgstr ""
4700
 
4701
- #: lib/utils.php:1272
4702
  #, php-format
4703
  msgid "Code: %s"
4704
  msgstr ""
4705
 
4706
- #: lib/utils.php:1293
4707
  msgid ""
4708
  "This protection (and notification) can be turned off from NinjaFirewall "
4709
  "\"Firewall Policies\" page."
4710
  msgstr ""
4711
 
4712
- #: lib/wpplus.php:33
4713
- msgid "Need more security? Check out NinjaFirewall"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4714
  msgstr ""
4715
 
4716
- #. translators: [NinjaFirewall] is a supercharged Edition...
4717
- #: lib/wpplus.php:37
4718
  msgid ""
4719
- "is a supercharged Edition of our Web Application Firewall. It adds many new "
4720
- "exciting features and blazing fast performances to make it the fastest and "
4721
- "most advanced security plugin for WordPress."
 
4722
  msgstr ""
4723
 
4724
- #: lib/wpplus.php:42
 
 
 
 
4725
  msgid "Access Control"
4726
  msgstr ""
4727
 
4728
- #: lib/wpplus.php:43
4729
  msgid ""
4730
- "<b>Access Control</b> is a powerful set of directives that can be used to "
4731
- "allow or restrict access to your blog, depending on the <strong>User Role</"
4732
- "strong>, <strong>IP</strong>, <strong>Geolocation</strong>, "
4733
- "<strong>Requested URL</strong>, <strong>User-agent</strong> visitors "
4734
- "behavior (<strong>Rate Limiting</strong>)and <strong>User Input</strong>. "
4735
- "Those directives will be processed before the Firewall Policies and "
4736
- "NinjaFirewall's built-in security rules."
4737
  msgstr ""
4738
 
4739
- #: lib/wpplus.php:45
4740
  msgid ""
4741
  "Its main configuration allows you to whitelist WordPress users depending on "
4742
  "their roles, to select the source IP (useful if your site is using a CDN or "
4743
  "behind a reverse-proxy/load balancer), and the HTTP methods all directives "
4744
- "should apply to:"
4745
  msgstr ""
4746
 
4747
- #: lib/wpplus.php:50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4748
  msgid ""
4749
- "<b>Access Control</b> can use geolocation to block visitors from specific "
4750
- "countries. It can apply to the whole blog or only to specific folders or "
4751
- "scripts (e.g., /wp-login.php, /xmlrpc.php etc). If you have a theme or a "
4752
- "plugin that needs to know your visitors location, you can even ask "
4753
- "NinjaFirewall to append the country code to the PHP headers:"
 
 
 
 
4754
  msgstr ""
4755
 
4756
- #: lib/wpplus.php:55
4757
  msgid ""
4758
- "<b>Access Control</b> can be used to whitelist/blacklist an IP or any part "
4759
- "of it. NinjaFirewall natively supports IPv4 and IPv6 protocols, for both "
4760
- "public and private addresses:"
4761
  msgstr ""
4762
 
4763
- #: lib/wpplus.php:60
4764
  msgid ""
4765
- "<b>Access Control</b> can slow down aggressive bots, crawlers, web scrapers "
4766
  "or even small HTTP attacks with its <strong>Rate-Limiting</strong> feature."
4767
  msgstr ""
4768
 
4769
- #: lib/wpplus.php:62
4770
  msgid ""
4771
  "Because it can block attackers <strong>before WordPress and all its plugins "
4772
- "are loaded</strong> and can handle thousands of HTTP requests per second, "
4773
  "NinjaFirewall will save precious bandwidth and reduce your server load."
4774
  msgstr ""
4775
 
4776
- #: lib/wpplus.php:67
 
 
 
 
4777
  msgid ""
4778
- "<b>URL Access Control</b> lets you permanently allow/block any access to one "
4779
- "or more PHP scripts based on their path or name:"
 
 
 
 
4780
  msgstr ""
4781
 
4782
- #: lib/wpplus.php:72
4783
  msgid ""
4784
- "<b>Bots Access Control</b> allows you block bots, scanners and various "
4785
- "annoying crawlers:"
4786
  msgstr ""
4787
 
4788
- #: lib/wpplus.php:77
 
 
 
 
4789
  msgid ""
4790
- "<b>User Input Access Control</b> allows you to to ignore or block some "
4791
- "specific user input:"
4792
  msgstr ""
4793
 
4794
- #: lib/wpplus.php:83
4795
  msgid ""
4796
- "If NinjaFirewall can hook and scan incoming requests, the <b><font color="
4797
- "\"#21759B\">WP+</font> Edition</b> can also hook the response body (i.e., "
4798
- "the output of the HTML page right before it is sent to your visitors "
4799
- "browser) and search it for some specific keywords. Such a filter can be "
4800
- "useful to detect hacking or malware patterns injected into your HTML page "
4801
- "(text strings, spam links, malicious JavaScript code), hackers shell script, "
4802
- "redirections and even errors (PHP/MySQL errors). Some suggested keywords as "
4803
- "well as a default list are included."
4804
  msgstr ""
4805
 
4806
- #: lib/wpplus.php:85
4807
  msgid ""
4808
  "In the case of a positive detection, NinjaFirewall will not block the "
4809
  "response body but will send you an alert by email. It can even attach the "
4810
- "whole HTML source of the page for your review:"
4811
  msgstr ""
4812
 
4813
- #: lib/wpplus.php:90
4814
  msgid "Antispam"
4815
  msgstr ""
4816
 
4817
- #: lib/wpplus.php:91
4818
  msgid ""
4819
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) can protect your "
4820
- "blog comment and registration forms against spam. The protection is totally "
4821
- "transparent to your visitors and does not require any interaction: no "
4822
- "CAPTCHA, no math puzzles or trivia questions. Extremely easy to activate, "
4823
- "but powerful enough to make spam bots life as miserable as possible:"
4824
  msgstr ""
4825
 
4826
- #: lib/wpplus.php:94
4827
  msgid ""
4828
  "NinjaFirewall antispam feature works only with WordPress built-in comment "
4829
  "and registration forms."
4830
  msgstr ""
4831
 
4832
- #: lib/wpplus.php:99
4833
  #, php-format
4834
  msgid ""
4835
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) lets you remotely "
4836
- "access the firewall log of all your NinjaFirewall protected websites from "
4837
- "one single installation, using the <a href=\"%s\">Centralized Logging</a> "
4838
- "feature. You do not need any longer to log in to individual servers to "
4839
- "analyse your log data."
4840
  msgstr ""
4841
 
4842
- #: lib/wpplus.php:101
4843
  msgid ""
4844
  "There is no limit to the number of websites you can connect to, and they can "
4845
  "be running any edition of NinjaFirewall: WP, <font color=\"#21759B\">WP+</"
4846
  "font>, Pro or <font color=\"red\">Pro+</font>."
4847
  msgstr ""
4848
 
4849
- #: lib/wpplus.php:107
4850
  msgid "Improved features"
4851
  msgstr ""
4852
 
4853
- #: lib/wpplus.php:108
4854
- msgid "File uploads:"
4855
  msgstr ""
4856
 
4857
- #: lib/wpplus.php:109
4858
  msgid ""
4859
- "NinjaFirewall (<font color=\"#21759B\">WP+</font> Edition) makes it possible "
4860
- "to allow uploads while rejecting potentially dangerous files: scripts (PHP, "
4861
- "CGI, Ruby, Python, bash/shell), C/C++ source code, binaries (MZ/PE/NE and "
4862
- "ELF formats), system files (.htaccess, .htpasswd and PHP INI) and SVG files "
4863
- "containing Javascript/XML events. You can easily limit the size of each "
4864
- "uploaded file too, without having to modify your PHP configuration:"
4865
- msgstr ""
4866
-
4867
- #: lib/wpplus.php:114
4868
- msgid "Firewall Log:"
4869
  msgstr ""
4870
 
4871
- #: lib/wpplus.php:116
4872
  msgid ""
4873
  "The log menu has been revamped too. You can disable the firewall log, delete "
4874
  "the current one, enable its rotation based on the size of the file and, if "
4875
  "any, view each rotated log separately. Quick filtering options are easily "
4876
  "accessible from checkboxes and the log can be exported as a TSV (tab-"
4877
- "separated values) text file."
 
4878
  msgstr ""
4879
 
4880
- #: lib/wpplus.php:117
4881
  msgid ""
4882
  "It is also possible to redirect all incidents and events to the Syslog "
4883
  "server:"
4884
  msgstr ""
4885
 
4886
- #: lib/wpplus.php:122
4887
- msgid "Rules Update:"
 
 
4888
  msgstr ""
4889
 
4890
- #: lib/wpplus.php:124
4891
  msgid ""
4892
- "The <b><font color=\"#21759B\">WP+</font> Edition</b> can check for security "
4893
- "rules updates <b>as often as every 15 minutes</b>, versus one hour for the "
4894
- "free WP Edition."
4895
  msgstr ""
4896
 
4897
- #: lib/wpplus.php:129
4898
- msgid "Shared Memory use:"
4899
  msgstr ""
4900
 
4901
- #: lib/wpplus.php:131
4902
  #, php-format
4903
  msgid ""
4904
  "Although NinjaFirewall is already <a href=\"%s\">much faster than other "
@@ -4907,7 +4485,7 @@ msgid ""
4907
  "order to speed things up even more."
4908
  msgstr ""
4909
 
4910
- #: lib/wpplus.php:131
4911
  msgid ""
4912
  "This allows easier and faster inter-process communication between the "
4913
  "firewall and the plugin part of NinjaFirewall and, because its data and "
@@ -4915,28 +4493,22 @@ msgid ""
4915
  "need to connect to the database any longer."
4916
  msgstr ""
4917
 
4918
- #: lib/wpplus.php:131
4919
  msgid ""
4920
  "This dramatically increases the processing speed (there is nothing faster "
4921
  "than RAM), prevents blocking I/O and MySQL slow queries. On a very busy "
4922
  "server like a multi-site network, the firewall processing speed will "
4923
  "increase from 25% to 30%. It can be enabled from the \"Firewall Options\" "
4924
- "menu:"
4925
- msgstr ""
4926
-
4927
- #: lib/wpplus.php:135
4928
- msgid ""
4929
- "This feature requires that PHP was compiled with the <code>--enable-shmop</"
4930
- "code> parameter."
4931
  msgstr ""
4932
 
4933
- #: lib/wpplus.php:145
4934
  msgid ""
4935
  "Learn more</a> about the <font color=\"#21759B\">WP+</font> Edition unique "
4936
  "features."
4937
  msgstr ""
4938
 
4939
- #: lib/wpplus.php:146
4940
  msgid "Compare</a> the WP and <font color=\"#21759B\">WP+</font> Editions."
4941
  msgstr ""
4942
 
@@ -5021,129 +4593,235 @@ msgstr ""
5021
  msgid "The PHP msqli extension is missing or not loaded."
5022
  msgstr ""
5023
 
5024
- #: ninjafirewall.php:106
 
 
 
 
 
 
 
 
5025
  msgid ""
5026
  "You do not have \"unfiltered_html\" capability. Please enable it in order to "
5027
  "run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
5028
  "in your wp-config.php script)."
5029
  msgstr ""
5030
 
5031
- #: ninjafirewall.php:113
5032
  #, php-format
5033
  msgid ""
5034
  "NinjaFirewall requires WordPress 3.3 or greater but your current version is "
5035
  "%s."
5036
  msgstr ""
5037
 
5038
- #: ninjafirewall.php:117
5039
  #, php-format
5040
  msgid ""
5041
  "NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
5042
  msgstr ""
5043
 
5044
- #: ninjafirewall.php:121
5045
  #, php-format
5046
  msgid "NinjaFirewall requires the PHP %s extension."
5047
  msgstr ""
5048
 
5049
- #: ninjafirewall.php:125
5050
  msgid ""
5051
  "You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
5052
  "5.3.0 (see http://php.net/safe-mode)."
5053
  msgstr ""
5054
 
5055
- #: ninjafirewall.php:129
5056
  msgid "You are not allowed to activate NinjaFirewall."
5057
  msgstr ""
5058
 
5059
- #: ninjafirewall.php:133
5060
  msgid "NinjaFirewall is not compatible with Microsoft Windows."
5061
  msgstr ""
5062
 
5063
- #: ninjafirewall.php:477
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5064
  msgid "NinjaFirewall: Overview"
5065
  msgstr ""
5066
 
5067
- #: ninjafirewall.php:481
5068
  msgid "NinjaFirewall: Statistics"
5069
  msgstr ""
5070
 
5071
- #: ninjafirewall.php:485
5072
  msgid "NinjaFirewall: Firewall Options"
5073
  msgstr ""
5074
 
5075
- #: ninjafirewall.php:489
5076
  msgid "NinjaFirewall: Firewall Policies"
5077
  msgstr ""
5078
 
5079
- #: ninjafirewall.php:493
5080
  msgid "NinjaFirewall: File Guard"
5081
  msgstr ""
5082
 
5083
- #: ninjafirewall.php:497
5084
  msgid "NinjaFirewall: File Check"
5085
  msgstr ""
5086
 
5087
- #: ninjafirewall.php:507
5088
  msgid "NinjaFirewall: Anti-Malware"
5089
  msgstr ""
5090
 
5091
- #: ninjafirewall.php:511
5092
  msgid "NinjaFirewall: Network"
5093
  msgstr ""
5094
 
5095
- #: ninjafirewall.php:515
5096
  msgid "NinjaFirewall: Event Notifications"
5097
  msgstr ""
5098
 
5099
- #: ninjafirewall.php:519
5100
  msgid "NinjaFirewall: Log-in Protection"
5101
  msgstr ""
5102
 
5103
- #: ninjafirewall.php:523
5104
  msgid "NinjaFirewall: Firewall Log"
5105
  msgstr ""
5106
 
5107
- #: ninjafirewall.php:527
5108
  msgid "NinjaFirewall: Live Log"
5109
  msgstr ""
5110
 
5111
- #: ninjafirewall.php:531
5112
  msgid "NinjaFirewall: Rules Editor"
5113
  msgstr ""
5114
 
5115
- #: ninjafirewall.php:535
5116
  msgid "NinjaFirewall: Rules Update"
5117
  msgstr ""
5118
 
5119
- #: ninjafirewall.php:542
5120
  msgid "NinjaFirewall: About"
5121
  msgstr ""
5122
 
5123
- #: ninjafirewall.php:542
5124
  msgid "About..."
5125
  msgstr ""
5126
 
5127
- #: ninjafirewall.php:582
5128
  msgid "NinjaFirewall Settings"
5129
  msgstr ""
5130
 
5131
- #: ninjafirewall.php:590
5132
  msgid "NinjaFirewall is enabled"
5133
  msgstr ""
5134
 
5135
- #: ninjafirewall.php:779
5136
  msgid "Access Restricted"
5137
  msgstr ""
5138
 
5139
- #: ninjafirewall.php:785
5140
  msgid "Settings"
5141
  msgstr ""
5142
 
5143
- #: ninjafirewall.php:786
5144
  msgid "Upgrade to Premium"
5145
  msgstr ""
5146
 
5147
- #: ninjafirewall.php:787
5148
  msgid "Rate it!"
5149
  msgstr ""
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Stable (latest release)\n"
5
+ "POT-Creation-Date: 2019-06-24 18:07+0700\n"
6
  "PO-Revision-Date: 2018-04-05 22:52+0700\n"
7
  "Last-Translator: NinTechNet <contact@nintechnet.com>\n"
8
  "Language-Team: \n"
18
  "X-Poedit-SearchPath-0: .\n"
19
  "X-Poedit-SearchPathExcluded-0: /languages\n"
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  #: lib/about.php:31
22
  msgid "Error : cannot find changelog :("
23
  msgstr ""
24
 
25
+ #: lib/about.php:36
26
  msgid "About"
27
  msgstr ""
28
 
29
+ #: lib/about.php:56
30
  msgid "A powerful antivirus<br />scanner for WordPress."
31
  msgstr ""
32
 
33
+ #: lib/about.php:58
34
  msgid "Free Download"
35
  msgstr ""
36
 
37
+ #: lib/about.php:62
38
  msgid "Website Monitoring<br />for just $4.99/month."
39
  msgstr ""
40
 
41
+ #: lib/about.php:64
42
  msgid "7-Day Free Trial"
43
  msgstr ""
44
 
45
+ #: lib/about.php:68
46
  msgid "Malware removal<br />and hack recovery."
47
  msgstr ""
48
 
49
+ #: lib/about.php:70
50
  msgid "Clean Your Site!"
51
  msgstr ""
52
 
53
+ #: lib/about.php:82
54
  msgid "Changelog"
55
  msgstr ""
56
 
57
+ #: lib/about.php:82
58
  msgid "Spread the word!"
59
  msgstr ""
60
 
61
+ #: lib/about.php:82
62
  msgid "Referral Program"
63
  msgstr ""
64
 
65
+ #: lib/about.php:82
66
  msgid "System Info"
67
  msgstr ""
68
 
69
+ #: lib/about.php:82 lib/help.php:521
70
  msgid "GDPR Compliance"
71
  msgstr ""
72
 
73
+ #: lib/about.php:88 lib/help.php:56
74
+ msgid ""
75
+ "Stay informed about the latest vulnerabilities in WordPress plugins and "
76
+ "themes."
77
+ msgstr ""
78
+
79
+ #: lib/about.php:89
80
+ msgid "Rate it on WordPress.org!"
81
+ msgstr ""
82
+
83
+ #: lib/about.php:113
84
  msgid "PHP version"
85
  msgstr ""
86
 
87
+ #: lib/about.php:122
88
  msgid "HTTP server"
89
  msgstr ""
90
 
91
+ #: lib/about.php:125
92
  msgid "Operating System"
93
  msgstr ""
94
 
95
+ #: lib/about.php:128
96
  msgid "Load Average"
97
  msgstr ""
98
 
99
+ #: lib/about.php:146
100
  msgid "RAM"
101
  msgstr ""
102
 
103
+ #: lib/about.php:146
104
  msgid "MB free"
105
  msgstr ""
106
 
107
+ #: lib/about.php:146
108
  msgid "MB total"
109
  msgstr ""
110
 
111
+ #: lib/about.php:154
112
  msgid "Processor"
113
  msgid_plural "Processors"
114
  msgstr[0] ""
115
  msgstr[1] ""
116
 
117
+ #: lib/about.php:154
118
  msgid "CPU core:"
119
  msgid_plural "CPU cores:"
120
  msgstr[0] ""
121
  msgstr[1] ""
122
 
123
+ #: lib/about.php:155
124
  msgid "CPU model"
125
  msgstr ""
126
 
127
+ #: lib/about.php:167
128
  #, php-format
129
  msgid ""
130
  "By joining our NinjaFirewall Referral Program you can earn up to %s for "
131
  "every payment made by a user who signs up using your personal referral link."
132
  msgstr ""
133
 
134
+ #: lib/about.php:168
135
  #, php-format
136
  msgid ""
137
  "For more info and subscription, please check our <a href=\"%s\">Referral "
138
  "Program page</a>."
139
  msgstr ""
140
 
141
+ #: lib/about.php:177 lib/help.php:523
142
+ msgid ""
143
+ "Your website can run NinjaFirewall and be compliant with the General Data "
144
+ "Protection Regulation (GDPR). For more info, please visit our blog:"
145
+ msgstr ""
146
+
147
+ #: lib/anti_malware.php:24 ninjafirewall.php:747
148
  msgid "Anti-Malware"
149
  msgstr ""
150
 
177
  msgid "NinjaFirewall Statistics"
178
  msgstr ""
179
 
180
+ #: lib/dashboard_widget.php:54 lib/statistics.php:105 lib/statistics.php:138
181
  msgid "Blocked threats"
182
  msgstr ""
183
 
184
+ #: lib/dashboard_widget.php:58 lib/statistics.php:109
185
  msgid "Threats level"
186
  msgstr ""
187
 
197
  msgid "Medium:"
198
  msgstr ""
199
 
200
+ #: lib/dashboard_widget.php:86
201
+ msgid "View statistics"
202
+ msgstr ""
203
+
204
  #: lib/dashboard_widget.php:86
205
  msgid "View firewall log"
206
  msgstr ""
207
 
208
+ #: lib/event_notifications.php:34 lib/help.php:413 ninjafirewall.php:755
209
  msgid "Event Notifications"
210
  msgstr ""
211
 
212
+ #: lib/event_notifications.php:42 lib/file_check.php:113 lib/file_guard.php:47
213
+ #: lib/firewall_log.php:58 lib/firewall_options.php:42
214
+ #: lib/firewall_policies.php:71 lib/live_log.php:82 lib/login_protection.php:30
215
+ #: lib/network.php:52 lib/rules_update.php:104
216
  msgid "Your changes have been saved."
217
  msgstr ""
218
 
219
+ #: lib/event_notifications.php:52
220
  msgid "WordPress admin dashboard"
221
  msgstr ""
222
 
223
+ #: lib/event_notifications.php:55 lib/event_notifications.php:124
224
  msgid "Send me an alert whenever"
225
  msgstr ""
226
 
227
+ #: lib/event_notifications.php:57
228
  msgid "An administrator logs in (default)"
229
  msgstr ""
230
 
231
+ #: lib/event_notifications.php:58
232
  msgid "Someone - user, admin, editor, etc - logs in"
233
  msgstr ""
234
 
235
+ #: lib/event_notifications.php:59
236
  msgid "No, thanks (not recommended)"
237
  msgstr ""
238
 
239
+ #: lib/event_notifications.php:66
240
  msgid "Plugins"
241
  msgstr ""
242
 
243
+ #: lib/event_notifications.php:69 lib/event_notifications.php:86
244
+ #: lib/event_notifications.php:101
245
  msgid "Send me an alert whenever someone"
246
  msgstr ""
247
 
248
+ #: lib/event_notifications.php:71
249
  msgid "Uploads a plugin (default)"
250
  msgstr ""
251
 
252
+ #: lib/event_notifications.php:72
253
  msgid "Installs a plugin (default)"
254
  msgstr ""
255
 
256
+ #: lib/event_notifications.php:73
257
  msgid "Activates a plugin"
258
  msgstr ""
259
 
260
+ #: lib/event_notifications.php:74
261
  msgid "Updates a plugin"
262
  msgstr ""
263
 
264
+ #: lib/event_notifications.php:75
265
  msgid "Deactivates a plugin (default)"
266
  msgstr ""
267
 
268
+ #: lib/event_notifications.php:76
269
  msgid "Deletes a plugin"
270
  msgstr ""
271
 
272
+ #: lib/event_notifications.php:83
273
  msgid "Themes"
274
  msgstr ""
275
 
276
+ #: lib/event_notifications.php:88
277
  msgid "Uploads a theme (default)"
278
  msgstr ""
279
 
280
+ #: lib/event_notifications.php:89
281
  msgid "Installs a theme (default)"
282
  msgstr ""
283
 
284
+ #: lib/event_notifications.php:90
285
  msgid "Activates a theme"
286
  msgstr ""
287
 
288
+ #: lib/event_notifications.php:91
289
  msgid "Deletes a theme"
290
  msgstr ""
291
 
292
+ #: lib/event_notifications.php:98
293
  msgid "Core"
294
  msgstr ""
295
 
296
+ #: lib/event_notifications.php:103
297
  msgid "Updates WordPress (default)"
298
  msgstr ""
299
 
300
+ #: lib/event_notifications.php:121
301
  msgid "Administrator account"
302
  msgstr ""
303
 
304
+ #: lib/event_notifications.php:126
305
  msgid ""
306
  "An administrator account is created, modified or deleted in the database "
307
  "(default)"
308
  msgstr ""
309
 
310
+ #: lib/event_notifications.php:127
311
  msgid "A user attempts to gain administrative privileges (default)"
312
  msgstr ""
313
 
314
+ #: lib/event_notifications.php:134
315
  msgid "Daily report"
316
  msgstr ""
317
 
318
+ #: lib/event_notifications.php:137
319
  msgid "Send me a daily activity report"
320
  msgstr ""
321
 
322
+ #: lib/event_notifications.php:139 lib/event_notifications.php:151
323
+ #: lib/firewall_options.php:78 lib/firewall_options.php:113
324
+ #: lib/firewall_policies.php:25 lib/login_protection.php:309
325
+ #: lib/login_protection.php:324 lib/login_protection.php:345
326
+ #: lib/login_protection.php:352 lib/network.php:70
327
+ msgid "Yes"
 
 
 
 
 
328
  msgstr ""
329
 
330
+ #: lib/event_notifications.php:139 lib/event_notifications.php:151
331
+ #: lib/firewall_options.php:78 lib/firewall_options.php:113
332
+ #: lib/firewall_policies.php:26 lib/login_protection.php:309
333
+ #: lib/login_protection.php:324 lib/login_protection.php:345
334
+ #: lib/login_protection.php:352 lib/network.php:70
335
+ msgid "No"
336
+ msgstr ""
337
+
338
+ #: lib/event_notifications.php:146
339
  msgid "Log"
340
  msgstr ""
341
 
342
+ #: lib/event_notifications.php:149
343
  msgid "Write all events to the firewall log"
344
  msgstr ""
345
 
346
+ #: lib/event_notifications.php:163
347
  msgid "PHP backtrace"
348
  msgstr ""
349
 
350
+ #: lib/event_notifications.php:166
351
  msgid "Attach a PHP backtrace to important notifications"
352
  msgstr ""
353
 
354
+ #: lib/event_notifications.php:169
355
  msgid "Disable backtrace"
356
  msgstr ""
357
 
358
+ #: lib/event_notifications.php:170
359
  msgid "Low verbosity"
360
  msgstr ""
361
 
362
+ #: lib/event_notifications.php:171
363
  msgid "Medium verbosity (default)"
364
  msgstr ""
365
 
366
+ #: lib/event_notifications.php:172
367
  msgid "High verbosity"
368
  msgstr ""
369
 
370
+ #: lib/event_notifications.php:174
371
  #, php-format
372
  msgid "<a href=\"%s\">Consult our blog</a> for more info."
373
  msgstr ""
374
 
375
+ #: lib/event_notifications.php:184 lib/event_notifications.php:214
376
  msgid "Contact email"
377
  msgstr ""
378
 
379
+ #: lib/event_notifications.php:187 lib/event_notifications.php:217
380
  msgid "Alerts should be sent to"
381
  msgstr ""
382
 
383
+ #: lib/event_notifications.php:196 lib/event_notifications.php:222
384
  msgid ""
385
  "Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
386
  "alice@example.org</code>)."
387
  msgstr ""
388
 
389
+ #: lib/event_notifications.php:219
390
  msgid "Only to me, the Super Admin"
391
  msgstr ""
392
 
393
+ #: lib/event_notifications.php:219
394
  msgid "default"
395
  msgstr ""
396
 
397
+ #: lib/event_notifications.php:220
398
  msgid "To the administrator of the site where originated the alert"
399
  msgstr ""
400
 
401
+ #: lib/event_notifications.php:221
402
  msgid "Other(s):"
403
  msgstr ""
404
 
405
+ #: lib/event_notifications.php:233
406
  msgid "Save Event Notifications"
407
  msgstr ""
408
 
409
+ #: lib/event_notifications.php:461
410
  msgid "[NinjaFirewall] Daily Activity Report"
411
  msgstr ""
412
 
413
+ #: lib/event_notifications.php:471
414
  #, php-format
415
  msgid "Daily activity report for: %s"
416
  msgstr ""
417
 
418
+ #: lib/event_notifications.php:472
419
  msgid "Date Range Processed: Yesterday"
420
  msgstr ""
421
 
422
+ #: lib/event_notifications.php:474
423
  msgid "Blocked threats:"
424
  msgstr ""
425
 
426
+ #: lib/event_notifications.php:476
427
  msgid "critical:"
428
  msgstr ""
429
 
430
+ #: lib/event_notifications.php:477
431
  msgid "high:"
432
  msgstr ""
433
 
434
+ #: lib/event_notifications.php:478
435
  msgid "medium:"
436
  msgstr ""
437
 
438
+ #: lib/event_notifications.php:480
439
  msgid "Blocked brute-force attacks:"
440
  msgstr ""
441
 
442
+ #: lib/event_notifications.php:481 lib/utils.php:851 lib/utils.php:1030
443
  msgid ""
444
  "This notification can be turned off from NinjaFirewall \"Event Notifications"
445
  "\" page."
446
  msgstr ""
447
 
448
+ #: lib/event_notifications.php:485 lib/file_check.php:783
449
+ #: lib/file_check.php:804 lib/firewall_options.php:515 lib/rules_update.php:553
450
+ #: lib/utils.php:746
451
  msgid "Support forum:"
452
  msgstr ""
453
 
454
+ #: lib/event_notifications.php:488 lib/file_check.php:786
455
+ #: lib/file_check.php:807 lib/firewall_options.php:518 lib/rules_update.php:556
456
+ #: lib/utils.php:235 lib/utils.php:578 lib/utils.php:749 lib/utils.php:856
457
+ #: lib/utils.php:1035 lib/utils.php:1389
458
  #, php-format
459
  msgid ""
460
  "Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
477
  msgid "You must create a snapshot first."
478
  msgstr ""
479
 
480
+ #: lib/file_check.php:104 lib/file_check.php:769
481
  msgid "NinjaFirewall detected that changes were made to your files."
482
  msgstr ""
483
 
485
  msgid "No changes detected."
486
  msgstr ""
487
 
488
+ #: lib/file_check.php:129 lib/help.php:380 ninjafirewall.php:737
489
  msgid "File Check"
490
  msgstr ""
491
 
498
  msgid "Default: %s"
499
  msgstr ""
500
 
501
+ #: lib/file_check.php:158 lib/file_guard.php:90
502
  msgid "Exclude the following files/folders (optional)"
503
  msgstr ""
504
 
505
+ #: lib/file_check.php:159 lib/file_guard.php:91 lib/live_log.php:165
506
  msgid "e.g.,"
507
  msgstr ""
508
 
512
  "separated"
513
  msgstr ""
514
 
515
+ #: lib/file_check.php:165
516
  msgid "Do not follow symbolic links (default)"
517
  msgstr ""
518
 
519
+ #: lib/file_check.php:171
520
  msgid "Create Snapshot"
521
  msgstr ""
522
 
523
+ #: lib/file_check.php:239
 
 
 
 
524
  msgid "Last snapshot"
525
  msgstr ""
526
 
527
+ #: lib/file_check.php:241
528
  #, php-format
529
  msgid "Created on: %s"
530
  msgstr ""
531
 
532
+ #: lib/file_check.php:242
533
  #, php-format
534
  msgid "Total files: %s "
535
  msgstr ""
536
 
537
+ #: lib/file_check.php:244
538
  msgid "Directory:"
539
  msgstr ""
540
 
541
+ #: lib/file_check.php:248
542
  msgid "Exclusion:"
543
  msgstr ""
544
 
545
+ #: lib/file_check.php:254
546
  msgid "Symlinks:"
547
  msgstr ""
548
 
549
+ #: lib/file_check.php:256
550
  msgid "follow"
551
  msgstr ""
552
 
553
+ #: lib/file_check.php:258
554
  msgid "do not follow"
555
  msgstr ""
556
 
557
+ #: lib/file_check.php:262
558
  #, php-format
559
  msgid "Processing time: %s seconds"
560
  msgstr ""
561
 
562
+ #: lib/file_check.php:267
563
  msgid "Download Snapshot"
564
  msgstr ""
565
 
566
+ #: lib/file_check.php:267
567
  msgid "Delete Snapshot"
568
  msgstr ""
569
 
570
+ #: lib/file_check.php:272
571
  msgid "Last changes"
572
  msgstr ""
573
 
574
+ #: lib/file_check.php:279 lib/file_check.php:777
575
  #, php-format
576
  msgid "New files: %s"
577
  msgstr ""
578
 
579
+ #: lib/file_check.php:280 lib/file_check.php:779
580
  #, php-format
581
  msgid "Deleted files: %s"
582
  msgstr ""
583
 
584
+ #: lib/file_check.php:281 lib/file_check.php:778
585
  #, php-format
586
  msgid "Modified files: %s"
587
  msgstr ""
588
 
589
+ #: lib/file_check.php:285
590
  msgid "View Changes"
591
  msgstr ""
592
 
593
+ #: lib/file_check.php:289
594
  msgid "Download Changes"
595
  msgstr ""
596
 
597
+ #: lib/file_check.php:301
598
  msgid "Click a file to get more info about it."
599
  msgstr ""
600
 
601
+ #: lib/file_check.php:304
602
  msgid "New files:"
603
  msgstr ""
604
 
605
+ #: lib/file_check.php:313 lib/file_check.php:366
606
  msgid "Size"
607
  msgstr ""
608
 
609
+ #: lib/file_check.php:317 lib/file_check.php:371
610
  msgid "Access"
611
  msgstr ""
612
 
613
+ #: lib/file_check.php:321 lib/file_check.php:376
614
  msgid "Uid / Gid"
615
  msgstr ""
616
 
617
+ #: lib/file_check.php:325 lib/file_check.php:381
618
  msgid "Modify"
619
  msgstr ""
620
 
621
+ #: lib/file_check.php:329 lib/file_check.php:386
622
  msgid "Change"
623
  msgstr ""
624
 
625
+ #: lib/file_check.php:339
626
  msgid "Deleted files:"
627
  msgstr ""
628
 
629
+ #: lib/file_check.php:352
630
  msgid "Modified files:"
631
  msgstr ""
632
 
633
+ #: lib/file_check.php:362
634
  msgid "Old"
635
  msgstr ""
636
 
637
+ #: lib/file_check.php:363
638
  msgid "New"
639
  msgstr ""
640
 
641
+ #: lib/file_check.php:402 lib/live_log.php:161
642
  msgid "None"
643
  msgstr ""
644
 
645
+ #: lib/file_check.php:412
646
  msgid "Scan System For File Changes"
647
  msgstr ""
648
 
649
+ #: lib/file_check.php:429
650
  msgid "Options"
651
  msgstr ""
652
 
653
+ #: lib/file_check.php:436
654
  #, php-format
655
  msgid ""
656
+ "It seems that %s is set. Ensure you have another way to run WP-Cron, "
657
  "otherwise NinjaFirewall scheduled scans will not work."
658
  msgstr ""
659
 
660
+ #: lib/file_check.php:442
661
  msgid "Enable scheduled scans"
662
  msgstr ""
663
 
664
+ #: lib/file_check.php:444
 
 
 
 
 
 
 
 
665
  msgid "No (default)"
666
  msgstr ""
667
 
668
+ #: lib/file_check.php:445 lib/rules_update.php:156
669
  msgid "Hourly"
670
  msgstr ""
671
 
672
+ #: lib/file_check.php:446 lib/rules_update.php:157
673
  msgid "Twicedaily"
674
  msgstr ""
675
 
676
+ #: lib/file_check.php:447 lib/rules_update.php:158
677
  msgid "Daily"
678
  msgstr ""
679
 
680
+ #: lib/file_check.php:454
681
  #, php-format
682
  msgid ""
683
  "Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
684
  "and %s second(s)."
685
  msgstr ""
686
 
687
+ #: lib/file_check.php:461
688
  msgid ""
689
  "The next scheduled scan date is in the past! WordPress wp-cron may not be "
690
  "working or may have been disabled."
691
  msgstr ""
692
 
693
+ #: lib/file_check.php:469
694
  msgid "Scheduled scan report"
695
  msgstr ""
696
 
697
+ #: lib/file_check.php:471
698
  msgid "Send me a report by email only if changes are detected (default)"
699
  msgstr ""
700
 
701
+ #: lib/file_check.php:472
702
  msgid "Always send me a report by email after a scheduled scan"
703
  msgstr ""
704
 
705
+ #: lib/file_check.php:477
706
  msgid "Save Scan Options"
707
  msgstr ""
708
 
709
+ #: lib/file_check.php:489
710
  msgid "Enter the full path to the directory to be scanned."
711
  msgstr ""
712
 
713
+ #: lib/file_check.php:496
714
  #, php-format
715
  msgid "The directory %s does not exist."
716
  msgstr ""
717
 
718
+ #: lib/file_check.php:499
719
  #, php-format
720
  msgid "The directory %s is not readable."
721
  msgstr ""
722
 
723
+ #: lib/file_check.php:540
724
  #, php-format
725
  msgid "Cannot write to %s."
726
  msgstr ""
727
 
728
+ #: lib/file_check.php:570
729
  #, php-format
730
  msgid "Error : cannot open %s directory."
731
  msgstr ""
732
 
733
+ #: lib/file_check.php:573
734
  #, php-format
735
  msgid "Error : %s directory is not readable."
736
  msgstr ""
737
 
738
+ #: lib/file_check.php:588
739
  #, php-format
740
  msgid "Missing options line %s, please try again."
741
  msgstr ""
742
 
743
+ #: lib/file_check.php:598
744
  #, php-format
745
  msgid "Cannot create %s."
746
  msgstr ""
747
 
748
+ #: lib/file_check.php:615
749
  msgid "Error reading old snapshot file."
750
  msgstr ""
751
 
752
+ #: lib/file_check.php:626
753
  msgid "Error reading new snapshot file."
754
  msgstr ""
755
 
756
+ #: lib/file_check.php:742 ninjafirewall.php:407
757
  msgid "New file"
758
  msgstr ""
759
 
760
+ #: lib/file_check.php:743 ninjafirewall.php:408
761
  msgid "Modified file"
762
  msgstr ""
763
 
764
+ #: lib/file_check.php:744 ninjafirewall.php:409
765
  msgid "Deleted file"
766
  msgstr ""
767
 
768
+ #: lib/file_check.php:768
769
  msgid "[NinjaFirewall] Alert: File Check detection"
770
  msgstr ""
771
 
772
+ #: lib/file_check.php:771 lib/file_check.php:773 lib/file_check.php:798
773
+ #: lib/file_check.php:800 lib/rules_update.php:545 lib/rules_update.php:547
774
+ #: lib/utils.php:214 lib/utils.php:839 lib/utils.php:1005 lib/utils.php:1378
775
  msgid "Blog:"
776
  msgstr ""
777
 
778
+ #: lib/file_check.php:775 lib/file_check.php:802 lib/rules_update.php:550
779
  #, php-format
780
  msgid "Date: %s"
781
  msgstr ""
782
 
783
+ #: lib/file_check.php:781
784
  msgid "See attached file for details."
785
  msgstr ""
786
 
787
+ #: lib/file_check.php:795
788
  msgid "[NinjaFirewall] File Check report"
789
  msgstr ""
790
 
791
+ #: lib/file_check.php:796
792
  msgid "NinjaFirewall did not detect changes in your files."
793
  msgstr ""
794
 
795
+ #: lib/file_guard.php:28 lib/help.php:348 ninjafirewall.php:733
 
 
 
 
796
  msgid "File Guard"
797
  msgstr ""
798
 
799
+ #: lib/file_guard.php:32
800
  #, php-format
801
  msgid ""
802
  "You are running NinjaFirewall in <i>WordPress WAF</i> mode. The %s feature "
805
  "to any PHP script, you will need to run NinjaFirewall in %s mode."
806
  msgstr ""
807
 
808
+ #: lib/file_guard.php:38
809
  #, php-format
810
  msgid ""
811
  "The cache directory %s is not writable. Please change its permissions (0777 "
812
  "or equivalent)."
813
  msgstr ""
814
 
815
+ #: lib/file_guard.php:70
816
  msgid "Enable File Guard"
817
  msgstr ""
818
 
819
+ #: lib/file_guard.php:72 lib/firewall_options.php:64 lib/live_log.php:102
820
+ #: lib/login_protection.php:203 lib/overview.php:123 lib/overview.php:257
821
+ #: lib/rules_update.php:141
822
+ msgid "Enabled"
823
  msgstr ""
824
 
825
+ #: lib/file_guard.php:72 lib/firewall_options.php:64 lib/live_log.php:102
826
+ #: lib/login_protection.php:203 lib/rules_update.php:141
827
+ msgid "Disabled"
 
 
 
 
 
 
 
 
 
828
  msgstr ""
829
 
830
+ #: lib/file_guard.php:82
831
  msgid "Real-time detection"
832
  msgstr ""
833
 
834
+ #: lib/file_guard.php:85
835
  #, php-format
836
  msgid ""
837
  "Monitor file activity and send an alert when someone is accessing a PHP "
838
  "script that was modified or created less than %s hour(s) ago."
839
  msgstr ""
840
 
841
+ #: lib/file_guard.php:91 lib/live_log.php:165
842
  msgid "or"
843
  msgstr ""
844
 
845
+ #: lib/file_guard.php:91
846
  msgid ""
847
  "Full or partial case-sensitive string(s), max. 255 characters. Multiple "
848
  "values must be comma-separated"
849
  msgstr ""
850
 
851
+ #: lib/file_guard.php:96
852
  msgid "Save File Guard options"
853
  msgstr ""
854
 
872
  msgid "Your public key has been saved"
873
  msgstr ""
874
 
875
+ #: lib/firewall_log.php:81 lib/help.php:487 lib/wpplus.php:206
876
+ #: ninjafirewall.php:763
877
  msgid "Firewall Log"
878
  msgstr ""
879
 
880
+ #: lib/firewall_log.php:88
881
  msgid "Error"
882
  msgstr ""
883
 
884
+ #: lib/firewall_log.php:95
885
  msgid "Note"
886
  msgstr ""
887
 
888
+ #: lib/firewall_log.php:95
889
  #, php-format
890
  msgid "your log has %s lines. I will display the last %s lines only."
891
  msgstr ""
892
 
893
+ #: lib/firewall_log.php:99
894
  msgid "Viewing:"
895
  msgstr ""
896
 
897
+ #: lib/firewall_log.php:106 lib/firewall_options.php:193
898
  msgid "bytes"
899
  msgstr ""
900
 
901
+ #: lib/firewall_log.php:147 lib/firewall_log.php:308
902
  msgid "The selected log is empty."
903
  msgstr ""
904
 
905
+ #: lib/firewall_log.php:152
906
  msgid ""
907
  "The log shows all threats that were blocked by the firewall, unless stated "
908
  "otherwise. It is rotated monthly."
909
  msgstr ""
910
 
911
+ #: lib/firewall_log.php:165
912
  msgid "Log Options"
913
  msgstr ""
914
 
915
+ #: lib/firewall_log.php:169 lib/help.php:500
916
  msgid "Auto-delete log"
917
  msgstr ""
918
 
919
+ #: lib/firewall_log.php:173
920
  #, php-format
921
  msgid "Automatically delete logs older than %s days"
922
  msgstr ""
923
 
924
+ #: lib/firewall_log.php:175
925
  msgid "Set this option to 0 to disable it."
926
  msgstr ""
927
 
928
+ #: lib/firewall_log.php:181
929
  msgid "Save Log Options"
930
  msgstr ""
931
 
932
+ #: lib/firewall_log.php:197 lib/help.php:508 lib/overview.php:247
933
+ #: lib/wpplus.php:170
934
+ msgid "Centralized Logging"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
935
  msgstr ""
936
 
937
+ #: lib/firewall_log.php:200
938
+ msgid "Enter your public key (optional)"
939
  msgstr ""
940
 
941
+ #: lib/firewall_log.php:203
942
  #, php-format
943
  msgid ""
944
+ "<a href=\"%s\">Consult our blog</a> if you want to enable centralized "
945
+ "logging."
946
  msgstr ""
947
 
948
+ #: lib/firewall_log.php:210
949
+ msgid "Save Public Key"
950
  msgstr ""
951
 
952
+ #: lib/firewall_log.php:212
953
+ msgid "Delete Public Key"
954
  msgstr ""
955
 
956
+ #: lib/firewall_log.php:287
957
+ msgid "The requested log does not exist."
958
  msgstr ""
959
 
960
+ #: lib/firewall_log.php:294
961
+ msgid "Unable to open the log for read operation."
 
 
962
  msgstr ""
963
 
964
+ #: lib/firewall_options.php:29 ninjafirewall.php:725
965
+ msgid "Firewall Options"
966
  msgstr ""
967
 
968
+ #: lib/firewall_options.php:62 lib/help.php:145
969
+ msgid "Firewall protection"
970
  msgstr ""
971
 
972
+ #: lib/firewall_options.php:76 lib/help.php:153 lib/overview.php:152
973
  msgid "Debugging mode"
974
  msgstr ""
975
 
976
+ #: lib/firewall_options.php:89
 
 
 
 
977
  msgid "HTTP error code to return"
978
  msgstr ""
979
 
980
+ #: lib/firewall_options.php:92
981
  msgid "400 Bad Request"
982
  msgstr ""
983
 
984
+ #: lib/firewall_options.php:93
985
  msgid "403 Forbidden (default)"
986
  msgstr ""
987
 
988
+ #: lib/firewall_options.php:94
989
  msgid "404 Not Found"
990
  msgstr ""
991
 
992
+ #: lib/firewall_options.php:95
993
  msgid "406 Not Acceptable"
994
  msgstr ""
995
 
996
+ #: lib/firewall_options.php:96
997
  msgid "418 I'm a teapot"
998
  msgstr ""
999
 
1000
+ #: lib/firewall_options.php:97
1001
  msgid "500 Internal Server Error"
1002
  msgstr ""
1003
 
1004
+ #: lib/firewall_options.php:98
1005
  msgid "503 Service Unavailable"
1006
  msgstr ""
1007
 
1008
+ #: lib/firewall_options.php:111 lib/help.php:160
1009
  msgid "IP anonymization"
1010
  msgstr ""
1011
 
1012
+ #: lib/firewall_options.php:114
 
 
 
 
1013
  #, php-format
1014
  msgid ""
1015
  "Does not apply to private IP addresses and the <a href=\"%s\">Login "
1016
  "Protection</a>."
1017
  msgstr ""
1018
 
1019
+ #: lib/firewall_options.php:128
1020
  msgid "Blocked user message"
1021
  msgstr ""
1022
 
1023
+ #: lib/firewall_options.php:131
1024
+ msgid "HTML code, including CSS and JS, is allowed."
1025
  msgstr ""
1026
 
1027
+ #: lib/firewall_options.php:133
1028
  msgid "Default message"
1029
  msgstr ""
1030
 
1031
+ #: lib/firewall_options.php:141
1032
  msgid "Firewall configuration"
1033
  msgstr ""
1034
 
1035
+ #: lib/firewall_options.php:145
1036
  msgid "Export configuration"
1037
  msgstr ""
1038
 
1039
+ #: lib/firewall_options.php:147
1040
  msgid "Download"
1041
  msgstr ""
1042
 
1043
+ #: lib/firewall_options.php:148
1044
  msgid "File Check configuration will not be exported/imported."
1045
  msgstr ""
1046
 
1047
+ #: lib/firewall_options.php:152
1048
  msgid "Import configuration"
1049
  msgstr ""
1050
 
1051
+ #: lib/firewall_options.php:157
1052
  #, php-format
1053
  msgid "Imported configuration must match plugin version %s."
1054
  msgstr ""
1055
 
1056
+ #: lib/firewall_options.php:158
1057
  msgid "It will override all your current firewall options and rules."
1058
  msgstr ""
1059
 
1060
+ #: lib/firewall_options.php:163 lib/help.php:186
1061
  msgid "Configuration backup"
1062
  msgstr ""
1063
 
1064
+ #: lib/firewall_options.php:169 lib/firewall_options.php:198
1065
  msgid "Save Firewall Options"
1066
  msgstr ""
1067
 
1068
+ #: lib/firewall_options.php:189
1069
  msgid "Available backup files"
1070
  msgstr ""
1071
 
1072
+ #: lib/firewall_options.php:198
1073
  #, php-format
1074
  msgid ""
1075
  "To restore NinjaFirewall's configuration to an earlier date, select it in "
1076
  "the list and click '%s'."
1077
  msgstr ""
1078
 
1079
+ #: lib/firewall_options.php:202
1080
  msgid "There are no backup available yet, check back later."
1081
  msgstr ""
1082
 
1083
+ #: lib/firewall_options.php:340
1084
  #, php-format
1085
  msgid "Uploaded file is either corrupted or its format is not supported (#%s)"
1086
  msgstr ""
1087
 
1088
+ #: lib/firewall_options.php:369
1089
  msgid "The imported file is not compatible with that version of NinjaFirewall"
1090
  msgstr ""
1091
 
1092
+ #: lib/firewall_options.php:489
1093
  msgid "[NinjaFirewall] Alert: Firewall is disabled"
1094
  msgstr ""
1095
 
1096
+ #: lib/firewall_options.php:491 lib/firewall_options.php:493 lib/utils.php:734
1097
+ #: lib/utils.php:736
1098
  msgid "-Blog :"
1099
  msgstr ""
1100
 
1101
+ #: lib/firewall_options.php:497
1102
  msgid "Someone disabled NinjaFirewall from your WordPress admin dashboard:"
1103
  msgstr ""
1104
 
1105
+ #: lib/firewall_options.php:500
1106
  msgid ""
1107
  "NinjaFirewall is disabled because someone enabled debugging mode from your "
1108
  "WordPress admin dashboard:"
1109
  msgstr ""
1110
 
1111
+ #: lib/firewall_options.php:503
1112
  msgid "[NinjaFirewall] Alert: Firewall override settings"
1113
  msgstr ""
1114
 
1115
+ #: lib/firewall_options.php:504
1116
  msgid ""
1117
  "Someone imported a new configuration which overrode the firewall settings:"
1118
  msgstr ""
1119
 
1120
+ #: lib/firewall_options.php:510 lib/utils.php:741
1121
  msgid "-User :"
1122
  msgstr ""
1123
 
1124
+ #: lib/firewall_options.php:511 lib/utils.php:742
1125
  msgid "-IP :"
1126
  msgstr ""
1127
 
1128
+ #: lib/firewall_options.php:512 lib/utils.php:743
1129
  msgid "-Date :"
1130
  msgstr ""
1131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1132
  #: lib/firewall_policies.php:29
1133
  #, php-format
1134
  msgid ""
1135
  "This feature is only available when NinjaFirewall is running in %s mode."
1136
  msgstr ""
1137
 
1138
+ #: lib/firewall_policies.php:62 lib/help.php:231 ninjafirewall.php:729
1139
+ msgid "Firewall Policies"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1140
  msgstr ""
1141
 
1142
+ #: lib/firewall_policies.php:74
1143
  msgid "Default values were restored."
1144
  msgstr ""
1145
 
1146
+ #: lib/firewall_policies.php:76
1147
  msgid "No action taken."
1148
  msgstr ""
1149
 
1150
+ #: lib/firewall_policies.php:85 lib/help.php:236
1151
  msgid "Basic Policies"
1152
  msgstr ""
1153
 
1154
+ #: lib/firewall_policies.php:86 lib/help.php:262
1155
  msgid "Intermediate Policies"
1156
  msgstr ""
1157
 
1158
+ #: lib/firewall_policies.php:87 lib/help.php:293
1159
  msgid "Advanced Policies"
1160
  msgstr ""
1161
 
1162
+ #: lib/firewall_policies.php:111
1163
  msgid "Enable NinjaFirewall for"
1164
  msgstr ""
1165
 
1166
+ #: lib/firewall_policies.php:113 lib/live_log.php:182
1167
  msgid "HTTP and HTTPS traffic (default)"
1168
  msgstr ""
1169
 
1170
+ #: lib/firewall_policies.php:114 lib/live_log.php:183
1171
  msgid "HTTP traffic only"
1172
  msgstr ""
1173
 
1174
+ #: lib/firewall_policies.php:115 lib/live_log.php:184
1175
  msgid "HTTPS traffic only"
1176
  msgstr ""
1177
 
1178
+ #: lib/firewall_policies.php:141 lib/help.php:241
1179
  msgid "Uploads"
1180
  msgstr ""
1181
 
1182
+ #: lib/firewall_policies.php:144
1183
  msgid "File Uploads"
1184
  msgstr ""
1185
 
1186
+ #: lib/firewall_policies.php:147
1187
  msgid "Allow uploads"
1188
  msgstr ""
1189
 
1190
+ #: lib/firewall_policies.php:147
1191
+ msgid "(default)"
1192
+ msgstr ""
1193
+
1194
+ #: lib/firewall_policies.php:148
1195
  msgid "Disallow uploads"
1196
  msgstr ""
1197
 
1198
+ #: lib/firewall_policies.php:152
1199
  msgid "Sanitise filenames"
1200
  msgstr ""
1201
 
1202
+ #: lib/firewall_policies.php:152
1203
  msgid "substitution character:"
1204
  msgstr ""
1205
 
1206
+ #: lib/firewall_policies.php:276
1207
  msgid "Block direct access to any PHP file located in one of these directories"
1208
  msgstr ""
1209
 
1210
+ #: lib/firewall_policies.php:306
1211
  msgid ""
1212
  "NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
1213
  "this option is enabled."
1214
  msgstr ""
1215
 
1216
+ #: lib/firewall_policies.php:321
1217
  msgid ""
1218
  "Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
1219
  "by your visitors, we recommend to enable this option."
1220
  msgstr ""
1221
 
1222
+ #: lib/firewall_policies.php:330
 
 
 
 
 
 
 
1223
  msgid "General"
1224
  msgstr ""
1225
 
1226
+ #: lib/firewall_policies.php:332 lib/help.php:247
1227
  msgid "Block attempts to modify important WordPress settings"
1228
  msgstr ""
1229
 
1230
+ #: lib/firewall_policies.php:333 lib/help.php:248
1231
  msgid "Block user accounts creation"
1232
  msgstr ""
1233
 
1234
+ #: lib/firewall_policies.php:334
1235
  msgid "Do not enable this policy if you allow user registration."
1236
  msgstr ""
1237
 
1238
+ #: lib/firewall_policies.php:346 lib/help.php:249
1239
  msgid "WordPress AJAX"
1240
  msgstr ""
1241
 
1242
+ #: lib/firewall_policies.php:348
1243
  msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
1244
  msgstr ""
1245
 
1246
+ #: lib/firewall_policies.php:349
1247
+ #, php-format
1248
+ msgid ""
1249
+ "Your server IP (%s), localhost and private IP addresses will not be affected "
1250
+ "by this policy."
1251
+ msgstr ""
1252
+
1253
+ #: lib/firewall_policies.php:354
1254
  msgid "Protect against username enumeration"
1255
  msgstr ""
1256
 
1257
+ #: lib/firewall_policies.php:356
1258
  msgid "Through the author archives"
1259
  msgstr ""
1260
 
1261
+ #: lib/firewall_policies.php:357
1262
  msgid "Through the login page"
1263
  msgstr ""
1264
 
1265
+ #: lib/firewall_policies.php:358
1266
  msgid "Through the WordPress REST API"
1267
  msgstr ""
1268
 
1269
+ #: lib/firewall_policies.php:363
 
 
 
 
1270
  msgid "WordPress REST API"
1271
  msgstr ""
1272
 
1273
+ #: lib/firewall_policies.php:365 lib/firewall_policies.php:371
1274
  msgid "Block any access to the API"
1275
  msgstr ""
1276
 
1277
+ #: lib/firewall_policies.php:369
1278
  msgid "WordPress XML-RPC API"
1279
  msgstr ""
1280
 
1281
+ #: lib/firewall_policies.php:372
1282
  msgid "Block <code>system.multicall</code> method"
1283
  msgstr ""
1284
 
1285
+ #: lib/firewall_policies.php:373
1286
  msgid "Block Pingbacks"
1287
  msgstr ""
1288
 
1289
+ #: lib/firewall_policies.php:375
1290
  msgid ""
1291
  "Disabling access to the REST or XML-RPC API may break some functionality on "
1292
+ "your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact "
1293
+ "Form 7 etc)."
1294
  msgstr ""
1295
 
1296
+ #: lib/firewall_policies.php:380
1297
  msgid "Block <code>POST</code> requests in the themes folder"
1298
  msgstr ""
1299
 
1300
+ #: lib/firewall_policies.php:390
1301
  msgid "Force SSL for admin and logins"
1302
  msgstr ""
1303
 
1304
+ #: lib/firewall_policies.php:396
1305
  msgid "Disable the plugin and theme editor"
1306
  msgstr ""
1307
 
1308
+ #: lib/firewall_policies.php:402
1309
  msgid "Disable plugin and theme update/installation"
1310
  msgstr ""
1311
 
1312
+ #: lib/firewall_policies.php:408
1313
  msgid "Disable the fatal error handler"
1314
  msgstr ""
1315
 
1316
+ #: lib/firewall_policies.php:430 lib/help.php:334
1317
  msgid "Users Whitelist"
1318
  msgstr ""
1319
 
1320
+ #: lib/firewall_policies.php:432
1321
  msgid "Add the Administrator to the whitelist (default)."
1322
  msgstr ""
1323
 
1324
+ #: lib/firewall_policies.php:433
1325
  msgid "Add all logged in users to the whitelist."
1326
  msgstr ""
1327
 
1328
+ #: lib/firewall_policies.php:434
1329
  msgid "Disable users whitelist."
1330
  msgstr ""
1331
 
1332
+ #: lib/firewall_policies.php:435
1333
  msgid ""
1334
  "Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
1335
  "<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
1337
  "always enforced."
1338
  msgstr ""
1339
 
1340
+ #: lib/firewall_policies.php:460 lib/help.php:264
1341
  msgid "HTTP GET variable"
1342
  msgstr ""
1343
 
1344
+ #: lib/firewall_policies.php:463
1345
  msgid "Scan <code>GET</code> variable"
1346
  msgstr ""
1347
 
1348
+ #: lib/firewall_policies.php:469
1349
  msgid "Sanitise <code>GET</code> variable"
1350
  msgstr ""
1351
 
1352
+ #: lib/firewall_policies.php:495 lib/help.php:267
1353
  msgid "HTTP POST variable"
1354
  msgstr ""
1355
 
1356
+ #: lib/firewall_policies.php:498
1357
  msgid "Scan <code>POST</code> variable"
1358
  msgstr ""
1359
 
1360
+ #: lib/firewall_policies.php:504
1361
  msgid "Sanitise <code>POST</code> variable"
1362
  msgstr ""
1363
 
1364
+ #: lib/firewall_policies.php:507 lib/firewall_policies.php:532
1365
  msgid "Do not enable this option unless you know what you are doing!"
1366
  msgstr ""
1367
 
1368
+ #: lib/firewall_policies.php:511
1369
  msgid "Decode Base64-encoded <code>POST</code> variable"
1370
  msgstr ""
1371
 
1372
+ #: lib/firewall_policies.php:526 lib/help.php:271
1373
  msgid "HTTP REQUEST variable"
1374
  msgstr ""
1375
 
1376
+ #: lib/firewall_policies.php:529
1377
  msgid "Sanitise <code>REQUEST</code> variable"
1378
  msgstr ""
1379
 
1380
+ #: lib/firewall_policies.php:551 lib/help.php:274
1381
  msgid "Cookies"
1382
  msgstr ""
1383
 
1384
+ #: lib/firewall_policies.php:554
1385
  msgid "Scan cookies"
1386
  msgstr ""
1387
 
1388
+ #: lib/firewall_policies.php:560
1389
  msgid "Sanitise cookies"
1390
  msgstr ""
1391
 
1392
+ #: lib/firewall_policies.php:586 lib/help.php:277
1393
  msgid "HTTP_USER_AGENT server variable"
1394
  msgstr ""
1395
 
1396
+ #: lib/firewall_policies.php:589
1397
  msgid "Scan <code>HTTP_USER_AGENT</code>"
1398
  msgstr ""
1399
 
1400
+ #: lib/firewall_policies.php:595
1401
  msgid "Sanitise <code>HTTP_USER_AGENT</code>"
1402
  msgstr ""
1403
 
1404
+ #: lib/firewall_policies.php:601
1405
  msgid "Block suspicious bots/scanners"
1406
  msgstr ""
1407
 
1408
+ #: lib/firewall_policies.php:627 lib/help.php:281
1409
  msgid "HTTP_REFERER server variable"
1410
  msgstr ""
1411
 
1412
+ #: lib/firewall_policies.php:630
1413
  msgid "Scan <code>HTTP_REFERER</code>"
1414
  msgstr ""
1415
 
1416
+ #: lib/firewall_policies.php:636
1417
  msgid "Sanitise <code>HTTP_REFERER</code>"
1418
  msgstr ""
1419
 
1420
+ #: lib/firewall_policies.php:642
1421
  msgid ""
1422
  "Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
1423
  "code> header"
1424
  msgstr ""
1425
 
1426
+ #: lib/firewall_policies.php:645
1427
  msgid ""
1428
  "Keep this option disabled if you are using scripts like Paypal IPN, "
1429
  "WordPress WP-Cron etc"
1430
  msgstr ""
1431
 
1432
+ #: lib/firewall_policies.php:672
1433
  msgid "Block localhost IP in <code>GET/POST</code> request"
1434
  msgstr ""
1435
 
1436
+ #: lib/firewall_policies.php:678
1437
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
1438
  msgstr ""
1439
 
1440
+ #: lib/firewall_policies.php:684
1441
  msgid "Scan traffic coming from localhost and private IP address spaces"
1442
  msgstr ""
1443
 
1444
+ #: lib/firewall_policies.php:703
1445
  #, php-format
1446
  msgid ""
1447
+ "The \"HTTP response headers\" options below are disabled because the %s PHP "
1448
+ "function is not available on your server."
1449
  msgstr ""
1450
 
1451
+ #: lib/firewall_policies.php:723 lib/help.php:295
1452
  msgid "HTTP response headers"
1453
  msgstr ""
1454
 
1455
+ #: lib/firewall_policies.php:731
1456
  #, php-format
1457
  msgid "Set %s to protect against MIME type confusion attacks"
1458
  msgstr ""
1459
 
1460
+ #: lib/firewall_policies.php:737
1461
  #, php-format
1462
  msgid "Set %s to protect against clickjacking attempts"
1463
  msgstr ""
1464
 
1465
+ #: lib/firewall_policies.php:744
1466
+ msgid ""
1467
+ "Setting this option to <code>DENY</code> may break some functionality on "
1468
+ "your blog, its themes or plugins."
1469
+ msgstr ""
1470
+
1471
+ #: lib/firewall_policies.php:749
1472
  #, php-format
1473
  msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
1474
  msgstr ""
1475
 
1476
+ #: lib/firewall_policies.php:753 lib/firewall_policies.php:754
1477
+ #: lib/firewall_policies.php:755
1478
  #, php-format
1479
  msgid "Set to %s"
1480
  msgstr ""
1481
 
1482
+ #: lib/firewall_policies.php:760
1483
  #, php-format
1484
  msgid "Force %s flag on all cookies to mitigate XSS attacks"
1485
  msgstr ""
1486
 
1487
+ #: lib/firewall_policies.php:763
1488
  msgid ""
1489
  "If your PHP scripts use cookies that need to be accessed from JavaScript, "
1490
+ "you should not enable this option."
1491
  msgstr ""
1492
 
1493
+ #: lib/firewall_policies.php:772
1494
  msgid ""
1495
  "HSTS headers can only be set when you are accessing your site over HTTPS."
1496
  msgstr ""
1497
 
1498
+ #: lib/firewall_policies.php:780
1499
  #, php-format
1500
  msgid "Set %s (HSTS) to enforce secure connections to the server"
1501
  msgstr ""
1502
 
1503
+ #: lib/firewall_policies.php:784
1504
+ msgid "Set \"max-age\" to 0"
1505
+ msgstr ""
1506
+
1507
+ #: lib/firewall_policies.php:785
1508
  msgid "1 month"
1509
  msgstr ""
1510
 
1511
+ #: lib/firewall_policies.php:786
1512
  msgid "6 months"
1513
  msgstr ""
1514
 
1515
+ #: lib/firewall_policies.php:787
1516
  msgid "1 year"
1517
  msgstr ""
1518
 
1519
+ #: lib/firewall_policies.php:789
1520
  msgid "Apply to subdomains"
1521
  msgstr ""
1522
 
1523
+ #: lib/firewall_policies.php:813
 
 
 
 
1524
  #, php-format
1525
  msgid "Set %s for the website frontend"
1526
  msgstr ""
1527
 
1528
+ #: lib/firewall_policies.php:818
1529
  msgid "This CSP header will apply to the website frontend only."
1530
  msgstr ""
1531
 
1532
+ #: lib/firewall_policies.php:822
1533
  #, php-format
1534
  msgid "Set %s for the WordPress admin dashboard"
1535
  msgstr ""
1536
 
1537
+ #: lib/firewall_policies.php:827
1538
  msgid "This CSP header will apply to the WordPress admin dashboard only."
1539
  msgstr ""
1540
 
1541
+ #: lib/firewall_policies.php:843
1542
  #, php-format
1543
  msgid "Set %s (Chrome, Opera and Firefox browsers)"
1544
  msgstr ""
1545
 
1546
+ #: lib/firewall_policies.php:893
1547
  msgid ""
1548
  "Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
1549
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
1550
  msgstr ""
1551
 
1552
+ #: lib/firewall_policies.php:932
1553
  msgid "Block serialized PHP objects in the following global variables"
1554
  msgstr ""
1555
 
1556
+ #: lib/firewall_policies.php:942
1557
  msgid "Hide PHP notice and error messages"
1558
  msgstr ""
1559
 
1560
+ #: lib/firewall_policies.php:948
1561
  msgid "Sanitise <code>PHP_SELF</code>"
1562
  msgstr ""
1563
 
1564
+ #: lib/firewall_policies.php:954
1565
  msgid "Sanitise <code>PATH_TRANSLATED</code>"
1566
  msgstr ""
1567
 
1568
+ #: lib/firewall_policies.php:960
1569
  msgid "Sanitise <code>PATH_INFO</code>"
1570
  msgstr ""
1571
 
1572
+ #: lib/firewall_policies.php:974
1573
  msgid "This option is not compatible with your actual configuration."
1574
  msgstr ""
1575
 
1576
+ #: lib/firewall_policies.php:996 lib/help.php:325
1577
  msgid "Various"
1578
  msgstr ""
1579
 
1580
+ #: lib/firewall_policies.php:999
1581
  msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
1582
  msgstr ""
1583
 
1584
+ #: lib/firewall_policies.php:1006
1585
  msgid "Block ASCII character 0x00 (NULL byte)"
1586
  msgstr ""
1587
 
1588
+ #: lib/firewall_policies.php:1012
1589
  msgid "Block ASCII control characters 1 to 8 and 14 to 31"
1590
  msgstr ""
1591
 
1592
+ #: lib/firewall_policies.php:1025
1593
  msgid "Save Firewall Policies"
1594
  msgstr ""
1595
 
1596
+ #: lib/firewall_policies.php:1027
1597
  msgid "Restore Default Values"
1598
  msgstr ""
1599
 
1600
+ #: lib/help.php:37 ninjafirewall.php:715
1601
  msgid "Overview"
1602
  msgstr ""
1603
 
1604
+ #: lib/help.php:41
1605
+ msgid "Quick Start, FAQ, Support and Troubleshooting Guide."
 
 
 
1606
  msgstr ""
1607
 
1608
+ #: lib/help.php:42
1609
+ msgid ""
1610
+ "Below are some helpful info and links you may consider reading before using "
1611
+ "NinjaFirewall:"
1612
  msgstr ""
1613
 
1614
+ #: lib/help.php:44
1615
+ msgid "Must Read"
1616
  msgstr ""
1617
 
1618
+ #: lib/help.php:46
1619
+ msgid "Securing WordPress with NinjaFirewall: A step by step tutorial."
1620
  msgstr ""
1621
 
1622
  #: lib/help.php:47
1623
+ msgid "An introduction to NinjaFirewall filtering engine."
1624
  msgstr ""
1625
 
1626
  #: lib/help.php:48
1627
+ msgid "NinjaFirewall Full WAF vs WordPress WAF mode."
1628
  msgstr ""
1629
 
1630
+ #: lib/help.php:49
1631
+ msgid "Testing NinjaFirewall without blocking your visitors."
1632
+ msgstr ""
1633
+
1634
+ #: lib/help.php:50
1635
+ msgid "Add your own code to the firewall: the \".htninja\" file."
1636
+ msgstr ""
1637
+
1638
+ #: lib/help.php:51
1639
+ msgid "Restricting access to NinjaFirewall settings."
1640
+ msgstr ""
1641
+
1642
+ #: lib/help.php:52
1643
+ msgid "Upgrading to PHP 7 with NinjaFirewall installed."
1644
+ msgstr ""
1645
+
1646
+ #: lib/help.php:53
1647
+ msgid "Keep your blog protected against the latest vulnerabilities."
1648
+ msgstr ""
1649
+
1650
+ #: lib/help.php:54
1651
+ msgid "Test your website security with our online scanner."
1652
+ msgstr ""
1653
+
1654
+ #: lib/help.php:55
1655
+ msgid "NinjaFirewall Referral Program."
1656
+ msgstr ""
1657
+
1658
+ #: lib/help.php:57
1659
+ msgid "Our blog."
1660
+ msgstr ""
1661
+
1662
+ #: lib/help.php:60
1663
+ msgid "Troubleshooting"
1664
+ msgstr ""
1665
+
1666
+ #: lib/help.php:62
1667
+ msgid "Locked out of your site / Fatal error / WordPress crash?"
1668
  msgstr ""
1669
 
1670
  #: lib/help.php:63
1671
+ msgid "Failed installation (\"Error: The firewall is not loaded\")?"
1672
+ msgstr ""
1673
+
1674
+ #: lib/help.php:64
1675
+ msgid "Blank page after INSTALLING NinjaFirewall?"
1676
+ msgstr ""
1677
+
1678
+ #: lib/help.php:65
1679
+ msgid "Blank page after UNINSTALLING NinjaFirewall?"
1680
+ msgstr ""
1681
+
1682
+ #: lib/help.php:66
1683
+ msgid "500 Internal Server Error?"
1684
+ msgstr ""
1685
+
1686
+ #: lib/help.php:67
1687
+ msgid "\"Cannot connect to WordPress database\" error message?"
1688
+ msgstr ""
1689
+
1690
+ #: lib/help.php:68
1691
+ msgid "How to disable NinjaFirewall?"
1692
+ msgstr ""
1693
+
1694
+ #: lib/help.php:69
1695
+ msgid "Lost password (brute-force protection)?"
1696
+ msgstr ""
1697
+
1698
+ #: lib/help.php:70
1699
+ msgid "Blocked visitors?"
1700
+ msgstr ""
1701
+
1702
+ #: lib/help.php:71
1703
+ msgid "Exporting NinjaFirewall's configuration"
1704
+ msgstr ""
1705
+
1706
+ #: lib/help.php:72 lib/help.php:96
1707
+ msgid "Click here."
1708
+ msgstr ""
1709
+
1710
+ #: lib/help.php:75
1711
+ msgid "NinjaFirewall troubleshooter script"
1712
+ msgstr ""
1713
+
1714
+ #: lib/help.php:77
1715
+ msgid "Click to download."
1716
+ msgstr ""
1717
+
1718
+ #: lib/help.php:78
1719
+ msgid "Rename this file to \"wp-check.php\"."
1720
+ msgstr ""
1721
+
1722
+ #: lib/help.php:79
1723
+ msgid "Upload it into your WordPress root folder."
1724
+ msgstr ""
1725
+
1726
+ #: lib/help.php:80
1727
+ msgid "Goto http://YOUR WEBSITE/wp-check.php."
1728
+ msgstr ""
1729
+
1730
+ #: lib/help.php:81
1731
+ msgid "Delete it afterwards."
1732
+ msgstr ""
1733
+
1734
+ #: lib/help.php:84
1735
+ msgid "FAQ"
1736
+ msgstr ""
1737
+
1738
+ #: lib/help.php:86
1739
+ msgid ""
1740
+ "Why is NinjaFirewall different from other security plugins for WordPress?"
1741
+ msgstr ""
1742
+
1743
+ #: lib/help.php:87
1744
+ msgid "Do I need root privileges to install NinjaFirewall?"
1745
+ msgstr ""
1746
+
1747
+ #: lib/help.php:88
1748
+ msgid "Does it work with Nginx?"
1749
+ msgstr ""
1750
+
1751
+ #: lib/help.php:89
1752
+ msgid "Do I need to alter my PHP scripts?"
1753
+ msgstr ""
1754
+
1755
+ #: lib/help.php:90
1756
+ msgid ""
1757
+ "Will NinjaFirewall detect the correct IP of my visitors if I am behind a CDN "
1758
+ "service like Cloudflare or Incapsula?"
1759
+ msgstr ""
1760
+
1761
+ #: lib/help.php:91
1762
+ msgid ""
1763
+ "I moved my wp-config.php file to another directory. Will it work with "
1764
+ "NinjaFirewall?"
1765
+ msgstr ""
1766
+
1767
+ #: lib/help.php:92
1768
+ msgid "Will it slow down my site?"
1769
+ msgstr ""
1770
+
1771
+ #: lib/help.php:93
1772
+ msgid "Is there a Microsoft Windows version?"
1773
+ msgstr ""
1774
+
1775
+ #: lib/help.php:94
1776
+ msgid "Can I add/write my own security rules?"
1777
+ msgstr ""
1778
+
1779
+ #: lib/help.php:95
1780
+ msgid "Can I migrate my site(s) with NinjaFirewall installed?"
1781
+ msgstr ""
1782
+
1783
+ #: lib/help.php:99
1784
+ msgid "Help and Support"
1785
+ msgstr ""
1786
+
1787
+ #: lib/help.php:101
1788
+ msgid "WordPress forum: "
1789
+ msgstr ""
1790
+
1791
+ #: lib/help.php:102
1792
+ msgid "Online support (Premium customers only): "
1793
+ msgstr ""
1794
+
1795
+ #: lib/help.php:110
1796
+ msgid "For more information:"
1797
+ msgstr ""
1798
+
1799
+ #: lib/help.php:111
1800
+ msgid "NinTechNet's updates and security announcements:"
1801
+ msgstr ""
1802
+
1803
+ #: lib/help.php:124 lib/statistics.php:101
1804
+ msgid "Monthly stats"
1805
+ msgstr ""
1806
+
1807
+ #: lib/help.php:126
1808
  msgid ""
1809
  "Statistics are taken from the current log. It is rotated on the first day of "
1810
  "each month."
1811
  msgstr ""
1812
 
1813
+ #: lib/help.php:128
1814
  #, php-format
1815
  msgid ""
1816
  "You can view the log by clicking on the <a href=\"%s\">Firewall Log</a> menu."
1817
  msgstr ""
1818
 
1819
+ #: lib/help.php:132 lib/statistics.php:113
1820
  msgid "Benchmarks"
1821
  msgstr ""
1822
 
1823
+ #: lib/help.php:134
1824
  msgid ""
1825
  "Benchmarks show the time NinjaFirewall took, in seconds, to process each "
1826
  "request it has blocked."
1827
  msgstr ""
1828
 
1829
+ #: lib/help.php:147
1830
  #, php-format
1831
  msgid ""
1832
  "This option allows you to disable NinjaFirewall. It has basically the same "
1833
  "effect as deactivating it from the <a href=\"%s\">Plugins</a> menu page."
1834
  msgstr ""
1835
 
1836
+ #: lib/help.php:149
1837
  msgid "Your site will remain unprotected until you enable it again."
1838
  msgstr ""
1839
 
1840
+ #: lib/help.php:155
1841
  #, php-format
1842
  msgid ""
1843
  "In Debugging mode, NinjaFirewall will not block or sanitise suspicious "
1845
  "display <code>DEBUG_ON</code> in the LEVEL column."
1846
  msgstr ""
1847
 
1848
+ #: lib/help.php:156
1849
  msgid ""
1850
  "We recommend to run it in Debugging Mode for at least 24 hours after "
1851
  "installing it on a new site and then to keep an eye on the firewall log "
1854
  "wrongly triggered."
1855
  msgstr ""
1856
 
1857
+ #: lib/help.php:161
1858
  msgid ""
1859
  "This option will anonymize IP addresses in the firewall log by removing "
1860
  "their last 3 characters."
1861
  msgstr ""
1862
 
1863
+ #: lib/help.php:161
1864
  msgid ""
1865
  "It does not apply to private IP addresses and the Login Protection feature."
1866
  msgstr ""
1867
 
1868
+ #: lib/help.php:162
1869
  msgid ""
1870
  "Note that it will affect only IP addresses written to the firewall log after "
1871
  "enabling this option."
1872
  msgstr ""
1873
 
1874
+ #: lib/help.php:162
1875
  msgid ""
1876
  "Also, if you are redirecting events to the syslog server (NinjaFirewall "
1877
  "<font color=\"#21759B\">WP+</font> Edition), IP addresses will be anonymized "
1878
  "too."
1879
  msgstr ""
1880
 
1881
+ #: lib/help.php:166
1882
  msgid "Error code and message to return"
1883
  msgstr ""
1884
 
1885
+ #: lib/help.php:168
1886
  msgid ""
1887
  "Lets you customize the HTTP error code returned by NinjaFirewall when "
1888
  "blocking a dangerous request and the message to display to the user."
1889
  msgstr ""
1890
 
1891
+ #: lib/help.php:169
1892
  msgid "You can use any HTML tags and 3 built-in variables:"
1893
  msgstr ""
1894
 
1895
+ #: lib/help.php:170
1896
  msgid "the blocked user IP."
1897
  msgstr ""
1898
 
1899
+ #: lib/help.php:171
1900
  msgid ""
1901
  "the unique incident number as it will appear in the firewall log \"INCIDENT"
1902
  "\" column."
1903
  msgstr ""
1904
 
1905
+ #: lib/help.php:172
1906
  msgid "NinjaFirewall logo."
1907
  msgstr ""
1908
 
1909
+ #: lib/help.php:177
1910
  msgid "Export/import configuration"
1911
  msgstr ""
1912
 
1913
+ #: lib/help.php:179
1914
  #, php-format
1915
  msgid ""
1916
  "This options lets you export you current configuration or import it from "
1919
  "rejected. Note that importing will override all firewall rules and options."
1920
  msgstr ""
1921
 
1922
+ #: lib/help.php:181
1923
  msgid "\"File Check\" configuration will not be exported/imported."
1924
  msgstr ""
1925
 
1926
+ #: lib/help.php:188
1927
  msgid ""
1928
  "NinjaFirewall will automatically backup its configuration (options, policies "
1929
  "and rules) everyday for the last 5 days. If you want to restore its "
1930
  "configuration to an earlier date, select the corresponding file in the list."
1931
  msgstr ""
1932
 
1933
+ #: lib/help.php:202
1934
  #, php-format
1935
  msgid ""
1936
  "Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
1938
  "your WordPress index page."
1939
  msgstr ""
1940
 
1941
+ #: lib/help.php:207
1942
  msgid "Policies overview"
1943
  msgstr ""
1944
 
1945
+ #: lib/help.php:209
1946
  #, php-format
1947
  msgid ""
1948
  "Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
1953
  "<code><a href=\"%s\">$_SERVER</a></code> in HTTP and/or HTTPS mode."
1954
  msgstr ""
1955
 
1956
+ #: lib/help.php:211
1957
  msgid ""
1958
  "Use the options below to enable, disable or to tweak these rules according "
1959
  "to your needs."
1960
  msgstr ""
1961
 
1962
+ #: lib/help.php:218
1963
  msgid "Scan and Sanitise"
1964
  msgstr ""
1965
 
1966
+ #: lib/help.php:220
1967
  msgid ""
1968
  "You can choose to scan and reject dangerous content but also to sanitise "
1969
  "requests and variables. Those two actions are different and can be combined "
1970
  "together for better security."
1971
  msgstr ""
1972
 
1973
+ #: lib/help.php:221
1974
  msgid ""
1975
  "Scan : if anything suspicious is detected, NinjaFirewall will block the "
1976
  "request and return an HTTP error code and message (defined in the \"Firewall "
1978
  "closed immediately."
1979
  msgstr ""
1980
 
1981
+ #: lib/help.php:222
1982
  #, php-format
1983
  msgid ""
1984
  "Sanitise : this option will not block but sanitise the user request by "
1989
  "sanitised."
1990
  msgstr ""
1991
 
1992
+ #: lib/help.php:224
1993
  msgid ""
1994
  "This action will be performed when the filtering process is over, right "
1995
  "before NinjaFirewall forwards the request to your PHP script."
1996
  msgstr ""
1997
 
1998
+ #: lib/help.php:227
1999
  msgid ""
2000
  "If you enabled <code>POST</code> requests sanitising, articles and messages "
2001
  "posted by your visitors could be corrupted with excessive backslashes or "
2002
  "substitution characters."
2003
  msgstr ""
2004
 
2005
+ #: lib/help.php:239
2006
  msgid "Whether to filter HTTP and/or HTTPS traffic"
2007
  msgstr ""
2008
 
2009
+ #: lib/help.php:242
2010
  msgid "File Uploads:"
2011
  msgstr ""
2012
 
2013
+ #: lib/help.php:242
2014
  msgid "whether to allow/disallow file uploads."
2015
  msgstr ""
2016
 
2017
+ #: lib/help.php:243
2018
  msgid "Sanitise filenames:"
2019
  msgstr ""
2020
 
2021
+ #: lib/help.php:243
2022
  msgid ""
2023
  "any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</"
2024
  "code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
2026
  "substitution character."
2027
  msgstr ""
2028
 
2029
+ #: lib/help.php:246
2030
  msgid ""
2031
  "Whether to block direct access to PHP files located in specific WordPress "
2032
  "directories."
2033
  msgstr ""
2034
 
2035
+ #: lib/help.php:247
2036
  msgid ""
2037
  "enabling this policy will block any attempt (e.g., exploiting a "
2038
  "vulnerability, using a backdoor etc) to modify some important WordPress "
2040
  "regarding the issue. It is enabled by default."
2041
  msgstr ""
2042
 
2043
+ #: lib/help.php:248
2044
  msgid ""
2045
  "enabling this policy will block any attempt (e.g., exploiting a "
2046
  "vulnerability, using a backdoor etc) to create a user account. If you allow "
2047
  "user registration, you should not enable it."
2048
  msgstr ""
2049
 
2050
+ #: lib/help.php:249
2051
  #, php-format
2052
  msgid ""
2053
  "many vulnerabilities in plugins are exploited via the admin-ajax.php script. "
2056
  "addresses will not be blocked."
2057
  msgstr ""
2058
 
2059
+ #: lib/help.php:250
2060
  msgid "Protect against username enumeration:"
2061
  msgstr ""
2062
 
2063
+ #: lib/help.php:250
2064
  msgid ""
2065
  "it is possible to enumerate usernames either through the WordPress author "
2066
  "archives, the REST API or the login page. Although this is not a "
2072
  "block the request immediately."
2073
  msgstr ""
2074
 
2075
+ #: lib/help.php:251
2076
  msgid "WordPress REST API:"
2077
  msgstr ""
2078
 
2079
+ #: lib/help.php:251
2080
  msgid ""
2081
  "it allows you to access your WordPress site's data through an easy-to-use "
2082
  "HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
2083
  "allows you to block any access to that API if you do not intend to use it."
2084
  msgstr ""
2085
 
2086
+ #: lib/help.php:252
2087
  msgid "WordPress XML-RPC API:"
2088
  msgstr ""
2089
 
2090
+ #: lib/help.php:252
2091
  msgid ""
2092
  "XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
2093
  "its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
2098
  "used in brute-force amplification attacks or to block Pingbacks."
2099
  msgstr ""
2100
 
2101
+ #: lib/help.php:253
2102
  msgid ""
2103
  "Block <code>POST</code> requests in the themes folder <code>/wp-content/"
2104
  "themes</code>:"
2105
  msgstr ""
2106
 
2107
+ #: lib/help.php:253
2108
  msgid ""
2109
  "this option can be useful to block hackers from installing backdoor in the "
2110
  "PHP theme files. However, because some custom themes may include an HTML "
2111
  "form (contact, search form etc), this option is not enabled by default."
2112
  msgstr ""
2113
 
2114
+ #: lib/help.php:254
2115
  msgid "Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:"
2116
  msgstr ""
2117
 
2118
+ #: lib/help.php:254
2119
  msgid ""
2120
  "enable this option when you want to secure logins and the admin area so that "
2121
  "both passwords and cookies are never sent in the clear. Ensure that you can "
2123
  "you will lock yourself out of your site!"
2124
  msgstr ""
2125
 
2126
+ #: lib/help.php:255
2127
  msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:"
2128
  msgstr ""
2129
 
2130
+ #: lib/help.php:255
2131
  msgid ""
2132
  "disabling the plugin and theme editor provides an additional layer of "
2133
  "security if a hacker gains access to a well-privileged user account."
2134
  msgstr ""
2135
 
2136
+ #: lib/help.php:256
2137
  msgid ""
2138
  "Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:"
2139
  msgstr ""
2140
 
2141
+ #: lib/help.php:256
2142
  msgid ""
2143
  "this option will block users being able to use the plugin and theme "
2144
  "installation/update functionality from the WordPress admin area. Setting "
2145
  "this constant also disables the Plugin and Theme editor."
2146
  msgstr ""
2147
 
2148
+ #: lib/help.php:257
2149
+ msgid ""
2150
+ "Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>:"
2151
  msgstr ""
2152
 
2153
+ #: lib/help.php:257
2154
  msgid ""
2155
  "this option will disable the WSOD protection introduced in WordPress 5.1."
2156
  msgstr ""
2157
 
2158
+ #: lib/help.php:265
2159
  msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
2160
  msgstr ""
2161
 
2162
+ #: lib/help.php:268
2163
  msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
2164
  msgstr ""
2165
 
2166
+ #: lib/help.php:269
2167
  msgid "Decode Base64-encoded <code>POST</code> variable:"
2168
  msgstr ""
2169
 
2170
+ #: lib/help.php:269
2171
  msgid ""
2172
  "NinjaFirewall will decode and scan base64 encoded values in order to detect "
2173
  "obfuscated malicious code. This option is only available for the <code>POST</"
2174
  "code> variable."
2175
  msgstr ""
2176
 
2177
+ #: lib/help.php:272
2178
  msgid "Whether to sanitise the <code>REQUEST</code> variable."
2179
  msgstr ""
2180
 
2181
+ #: lib/help.php:275
2182
  msgid "Whether to scan and/or sanitise cookies."
2183
  msgstr ""
2184
 
2185
+ #: lib/help.php:278
2186
  msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
2187
  msgstr ""
2188
 
2189
+ #: lib/help.php:279
2190
  msgid "Block suspicious bots/scanners:"
2191
  msgstr ""
2192
 
2193
+ #: lib/help.php:279
2194
  msgid ""
2195
  "rejects some known bots, scanners and various malicious scripts attempting "
2196
  "to access your blog."
2197
  msgstr ""
2198
 
2199
+ #: lib/help.php:282
2200
  msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
2201
  msgstr ""
2202
 
2203
+ #: lib/help.php:283
2204
  msgid ""
2205
  "Block POST requests that do not have an <code>HTTP_REFERER</code> header:"
2206
  msgstr ""
2207
 
2208
+ #: lib/help.php:283
2209
  msgid ""
2210
  "this option will block any <code>POST</code> request that does not have a "
2211
  "Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
2216
  "default."
2217
  msgstr ""
2218
 
2219
+ #: lib/help.php:286
2220
  msgid "Block localhost IP in <code>GET/POST</code> requests:"
2221
  msgstr ""
2222
 
2223
+ #: lib/help.php:286
2224
  msgid ""
2225
  "this option will block any <code>GET</code> or <code>POST</code> request "
2226
  "containing the localhost IP (127.0.0.1). It can be useful to block SQL "
2227
  "dumpers and various hacker's shell scripts."
2228
  msgstr ""
2229
 
2230
+ #: lib/help.php:287
2231
  msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
2232
  msgstr ""
2233
 
2234
+ #: lib/help.php:287
2235
  #, php-format
2236
  msgid ""
2237
  "this option will reject any request using an IP instead of a domain name in "
2241
  "than domain names."
2242
  msgstr ""
2243
 
2244
+ #: lib/help.php:288
2245
  msgid "Scan traffic coming from localhost and private IP address spaces:"
2246
  msgstr ""
2247
 
2248
+ #: lib/help.php:288
2249
  msgid ""
2250
  "this option will allow the firewall to scan traffic from all non-routable "
2251
  "private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
2253
  "interconnected)."
2254
  msgstr ""
2255
 
2256
+ #: lib/help.php:297
2257
  msgid ""
2258
  "In addition to filtering incoming requests, NinjaFirewall can also hook the "
2259
  "HTTP response in order to alter its headers. Those modifications can help to "
2260
  "mitigate threats such as XSS, phishing and clickjacking attacks."
2261
  msgstr ""
2262
 
2263
+ #: lib/help.php:299
2264
  msgid ""
2265
  "Set <code>X-Content-Type-Options</code> to protect against MIME type "
2266
  "confusion attacks:"
2267
  msgstr ""
2268
 
2269
+ #: lib/help.php:299
2270
  msgid ""
2271
  "this header will send the nosniff value to instruct the browser to disable "
2272
  "content or MIME sniffing and to use the content-type returned by the server. "
2275
  "such as MIME Confusion Attacks."
2276
  msgstr ""
2277
 
2278
+ #: lib/help.php:300
2279
  msgid ""
2280
  "Set <code>X-Frame-Options</code> to protect against clickjacking attempts:"
2281
  msgstr ""
2282
 
2283
+ #: lib/help.php:300
2284
  msgid ""
2285
  "this header indicates a policy whether a browser must not allow to render a "
2286
  "page in a &lt;frame&gt; or &lt;iframe&gt;. Hosts can declare this policy in "
2289
  "NinjaFirewall accepts two different values:"
2290
  msgstr ""
2291
 
2292
+ #: lib/help.php:302
2293
  msgid ""
2294
  "a browser receiving content with this header must not display this content "
2295
  "in any frame from a page of different origin than the content itself."
2296
  msgstr ""
2297
 
2298
+ #: lib/help.php:303
2299
  msgid ""
2300
  "a browser receiving content with this header must not display this content "
2301
  "in any frame."
2302
  msgstr ""
2303
 
2304
+ #: lib/help.php:306
2305
  msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
2306
  msgstr ""
2307
 
2308
+ #: lib/help.php:308
2309
  msgid ""
2310
  "Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
2311
  "administrator and the login page only."
2312
  msgstr ""
2313
 
2314
+ #: lib/help.php:309
2315
  msgid ""
2316
  "Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
2317
  "browsers):"
2318
  msgstr ""
2319
 
2320
+ #: lib/help.php:309
2321
  msgid ""
2322
  "this header allows browsers to identify and block XSS attacks by preventing "
2323
  "malicious scripts from executing. It is enabled by default on all compatible "
2324
  "browsers."
2325
  msgstr ""
2326
 
2327
+ #: lib/help.php:310
2328
  msgid ""
2329
  "If a visitor disabled their browser's XSS filter, you cannot re-enable it "
2330
  "with that option."
2331
  msgstr ""
2332
 
2333
+ #: lib/help.php:312
2334
  msgid ""
2335
  "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
2336
  msgstr ""
2337
 
2338
+ #: lib/help.php:312
2339
  msgid ""
2340
  "adding this flag to cookies helps to mitigate the risk of cross-site "
2341
  "scripting by preventing them from being accessed through client-side "
2346
  "sets that flag on the logged in user cookies only."
2347
  msgstr ""
2348
 
2349
+ #: lib/help.php:313
2350
  msgid ""
2351
  "If your PHP scripts send cookies that need to be accessed from JavaScript, "
2352
  "you should keep that option disabled."
2353
  msgstr ""
2354
 
2355
+ #: lib/help.php:314
2356
  msgid ""
2357
  "Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
2358
  "connections to the server:"
2359
  msgstr ""
2360
 
2361
+ #: lib/help.php:314
2362
  msgid ""
2363
  "this policy enforces secure HTTPS connections to the server. Web browsers "
2364
  "will not allow the user to access the web application over insecure HTTP "
2366
  "attacks. Most recent browsers support HSTS headers."
2367
  msgstr ""
2368
 
2369
+ #: lib/help.php:315
2370
  msgid "Set <code>Content-Security-Policy</code>:"
2371
  msgstr ""
2372
 
2373
+ #: lib/help.php:315
2374
  msgid ""
2375
  "this policy helps to mitigate threats such as XSS, phishing and clickjacking "
2376
  "attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
2377
  "objects (Java, ActiveX, audio and video files), and other HTML5 features."
2378
  msgstr ""
2379
 
2380
+ #: lib/help.php:315
2381
  msgid ""
2382
  "NinjaFirewall lets you configure the CSP policy separately for the frontend "
2383
  "(blog, website) and the backend (WordPress admin dashboard)."
2384
  msgstr ""
2385
 
2386
+ #: lib/help.php:316
2387
  msgid "Set <code>Referrer-Policy</code>:"
2388
  msgstr ""
2389
 
2390
+ #: lib/help.php:316
2391
  msgid ""
2392
  "this HTTP header governs which referrer information, sent in the Referer "
2393
  "header, should be included with requests made."
2394
  msgstr ""
2395
 
2396
+ #: lib/help.php:320
2397
  msgid "Block PHP built-in wrappers:"
2398
  msgstr ""
2399
 
2400
+ #: lib/help.php:320
2401
  msgid ""
2402
  "PHP has several wrappers for use with the filesystem functions. It is "
2403
  "possible for an attacker to use them to bypass firewalls and various IDS to "
2408
  "request, cookies, user agent and referrer variables."
2409
  msgstr ""
2410
 
2411
+ #: lib/help.php:321
2412
  msgid "Block serialized PHP objects:"
2413
  msgstr ""
2414
 
2415
+ #: lib/help.php:321
2416
  #, php-format
2417
  msgid ""
2418
  "Object Serialization is a PHP feature used by many applications to generate "
2423
  "code> request, cookies, user agent and referrer variables."
2424
  msgstr ""
2425
 
2426
+ #: lib/help.php:322
2427
  msgid "Hide PHP notice and error messages:"
2428
  msgstr ""
2429
 
2430
+ #: lib/help.php:322
2431
  msgid ""
2432
  "this option lets you hide errors returned by your scripts. Such errors can "
2433
  "leak sensitive informations which can be exploited by hackers."
2434
  msgstr ""
2435
 
2436
+ #: lib/help.php:323
2437
  msgid ""
2438
  "Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
2439
  "<code>PATH_INFO</code>:"
2440
  msgstr ""
2441
 
2442
+ #: lib/help.php:323
2443
  msgid ""
2444
  "this option can sanitise any dangerous characters found in those 3 server "
2445
  "variables to prevent various XSS and database injection attempts."
2446
  msgstr ""
2447
 
2448
+ #: lib/help.php:326
2449
  #, php-format
2450
  msgid ""
2451
  "Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests:"
2452
  msgstr ""
2453
 
2454
+ #: lib/help.php:326
2455
  msgid ""
2456
  "this option will block scripts attempting to pass the <code>DOCUMENT_ROOT</"
2457
  "code> server variable in a <code>GET</code> or <code>POST</code> request. "
2459
  "legitimate programs do not."
2460
  msgstr ""
2461
 
2462
+ #: lib/help.php:327
2463
  msgid "Block ASCII character 0x00 (NULL byte):"
2464
  msgstr ""
2465
 
2466
+ #: lib/help.php:327
2467
  msgid ""
2468
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
2469
  "<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
2472
  "dangerous and should always be rejected."
2473
  msgstr ""
2474
 
2475
+ #: lib/help.php:328
2476
  msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
2477
  msgstr ""
2478
 
2479
+ #: lib/help.php:328
2480
  msgid ""
2481
  "this option will reject any <code>GET</code> or <code>POST</code> request, "
2482
  "<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
2483
  "ASCII characters from 1 to 8 and 14 to 31."
2484
  msgstr ""
2485
 
2486
+ #: lib/help.php:336
2487
  #, php-format
2488
  msgid ""
2489
  "By default, any logged in WordPress administrator will not be blocked by "
2495
  "enforced."
2496
  msgstr ""
2497
 
2498
+ #: lib/help.php:350
2499
  msgid ""
2500
  "File Guard can detect, in real-time, any access to a PHP file that was "
2501
  "recently modified or created, and alert you about this."
2502
  msgstr ""
2503
 
2504
+ #: lib/help.php:352
2505
  msgid ""
2506
  "If a hacker uploaded a shell script to your site (or injected a backdoor "
2507
  "into an already existing file) and tried to directly access that file using "
2512
  "Notifications\" menu."
2513
  msgstr ""
2514
 
2515
+ #: lib/help.php:353
2516
  msgid ""
2517
  "If you do not want to monitor a folder, you can exclude its full path or a "
2518
  "part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
2521
  "will ignore it."
2522
  msgstr ""
2523
 
2524
+ #: lib/help.php:354
2525
  msgid ""
2526
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
2527
  "code>)."
2528
  msgstr ""
2529
 
2530
+ #: lib/help.php:355
2531
  msgid ""
2532
  "File Guard real-time detection is a totally unique feature, because "
2533
  "NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
2535
  "package (third-party software, shell script, backdoor etc)."
2536
  msgstr ""
2537
 
2538
+ #: lib/help.php:364 lib/network.php:32 ninjafirewall.php:751
2539
  msgid "Network"
2540
  msgstr ""
2541
 
2542
+ #: lib/help.php:366
2543
  msgid ""
2544
  "Even if NinjaFirewall administration menu is only available to the Super "
2545
  "Admin (from the main site), you can still display its status to all sites in "
2547
  "be visible only to the administrators of those sites."
2548
  msgstr ""
2549
 
2550
+ #: lib/help.php:368
2551
  msgid ""
2552
  "It is recommended to enable this feature as it is the only way to know "
2553
  "whether the sites in your network are protected and if NinjaFirewall "
2554
  "installation was successful."
2555
  msgstr ""
2556
 
2557
+ #: lib/help.php:370
2558
  msgid ""
2559
  "Note that when it is disabled, the icon still remains visible to you, the "
2560
  "Super Admin."
2561
  msgstr ""
2562
 
2563
+ #: lib/help.php:381
2564
  msgid ""
2565
  "File Check lets you perform file integrity monitoring upon request or on a "
2566
  "specific interval."
2567
  msgstr ""
2568
 
2569
+ #: lib/help.php:383
2570
  msgid ""
2571
  "You need to create a snapshot of all your files and then, at a later time, "
2572
  "you can scan your system to compare it with the previous snapshot. Any "
2574
  "file ownership, timestamp as well as file creation and deletion."
2575
  msgstr ""
2576
 
2577
+ #: lib/help.php:384
2578
  #, php-format
2579
  msgid ""
2580
  "Create a snapshot of all files stored in that directory: by default, the "
2581
  "directory is set to WordPress <code>ABSPATH</code> (%s)"
2582
  msgstr ""
2583
 
2584
+ #: lib/help.php:385
2585
  msgid ""
2586
  "Exclude the following files/folders: you can enter a directory or a file "
2587
  "name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
2588
  "code>). Or you can exclude a file extension (e.g., <code>.css</code>)."
2589
  msgstr ""
2590
 
2591
+ #: lib/help.php:387
2592
  msgid ""
2593
  "Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
2594
  "code>)."
2595
  msgstr ""
2596
 
2597
+ #: lib/help.php:388
2598
  msgid ""
2599
  "Do not follow symbolic links: by default, NinjaFirewall will not follow "
2600
  "symbolic links."
2601
  msgstr ""
2602
 
2603
+ #: lib/help.php:393
2604
  msgid "Scheduled scans"
2605
  msgstr ""
2606
 
2607
+ #: lib/help.php:394
2608
  msgid ""
2609
  "NinjaFirewall can scan your system on a specific interval (hourly, "
2610
  "twicedaily or daily)."
2611
  msgstr ""
2612
 
2613
+ #: lib/help.php:396
2614
  msgid ""
2615
  "It can either send you a scan report only if changes are detected, or always "
2616
  "send you one after each scan."
2617
  msgstr ""
2618
 
2619
+ #: lib/help.php:398
2620
  msgid ""
2621
  "Reports will be sent to the contact email address defined in the \"Event "
2622
  "Notifications\" menu."
2623
  msgstr ""
2624
 
2625
+ #: lib/help.php:400
2626
  #, php-format
2627
  msgid ""
2628
  "Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
2629
  "only if your site gets sufficient traffic."
2630
  msgstr ""
2631
 
2632
+ #: lib/help.php:414
2633
  msgid ""
2634
  "NinjaFirewall can alert you by email on specific events triggered within "
2635
  "your blog. They include installations, updates, activations etc, as well as "
2640
  "theme in order to take full control of your website."
2641
  msgstr ""
2642
 
2643
+ #: lib/help.php:425 lib/login_protection.php:21 ninjafirewall.php:759
2644
  msgid "Login Protection"
2645
  msgstr ""
2646
 
2647
+ #: lib/help.php:429
2648
  msgid ""
2649
  "By processing incoming HTTP requests before your blog and any of its "
2650
  "plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
2652
  "from several thousands of different IPs."
2653
  msgstr ""
2654
 
2655
+ #: lib/help.php:431
2656
  msgid ""
2657
  "You can choose two different types of protection: a password or a captcha. "
2658
  "You can enable the protection only if an attack is detected or to keep it "
2659
  "always activated."
2660
  msgstr ""
2661
 
2662
+ #: lib/help.php:433
2663
  msgid "Yes, if under attack:"
2664
  msgstr ""
2665
 
2666
+ #: lib/help.php:435
2667
  msgid ""
2668
  "The protection will be triggered when too many login attempts are detected, "
2669
  "regardless of the offending IP. It blocks the attack instantly and prevents "
2672
  "combination or the captcha code. "
2673
  msgstr ""
2674
 
2675
+ #: lib/help.php:437
2676
  msgid "Always ON:"
2677
  msgstr ""
2678
 
2679
+ #: lib/help.php:439
2680
  msgid ""
2681
  "NinjaFirewall will always enforce the HTTP authentication or captcha "
2682
  "implementation each time you access the login page."
2683
  msgstr ""
2684
 
2685
+ #: lib/help.php:442
2686
  msgid "Type of protection:"
2687
  msgstr ""
2688
 
2689
+ #: lib/help.php:443
2690
  msgid ""
2691
  "<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
2692
  "own very fast authentication scheme and it is compatible with any HTTP "
2693
  "server (Apache, Nginx, Lighttpd etc)."
2694
  msgstr ""
2695
 
2696
+ #: lib/help.php:444
2697
  msgid "<b>Captcha:</b> It will display a 5-character captcha code."
2698
  msgstr ""
2699
 
2700
+ #: lib/help.php:445
2701
  msgid "Bot protection:"
2702
  msgstr ""
2703
 
2704
+ #: lib/help.php:446
2705
  msgid ""
2706
  "NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
2707
  "before they start a brute-force attack."
2708
  msgstr ""
2709
 
2710
+ #: lib/help.php:454
2711
  msgid "AUTH log"
2712
  msgstr ""
2713
 
2714
+ #: lib/help.php:457
2715
  msgid ""
2716
  "NinjaFirewall can write to the server Authentication log when the brute-"
2717
  "force protection is triggered. This can be useful to the system "
2718
  "administrator for monitoring purposes or banning IPs at the server level."
2719
  msgstr ""
2720
 
2721
+ #: lib/help.php:459
2722
  msgid ""
2723
  "If you have a shared hosting account, keep this option disabled as you do "
2724
  "not have any access to the server's logs."
2725
  msgstr ""
2726
 
2727
+ #: lib/help.php:461
2728
  msgid ""
2729
  "On Debian-based systems, the log is located in <code>/var/log/auth.log</"
2730
  "code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
2731
  "logline uses the following format:"
2732
  msgstr ""
2733
 
2734
+ #: lib/help.php:464
2735
  msgid "AA: the process ID (PID)."
2736
  msgstr ""
2737
 
2738
+ #: lib/help.php:465
2739
  msgid "BB: the user IPv4 or IPv6 address."
2740
  msgstr ""
2741
 
2742
+ #: lib/help.php:466
2743
  msgid "CC: the blog (sub-)domain name."
2744
  msgstr ""
2745
 
2746
+ #: lib/help.php:467
2747
  msgid ""
2748
  "DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
2749
  "API</code>."
2750
  msgstr ""
2751
 
2752
+ #: lib/help.php:468
2753
  msgid "EE: the time, in minutes, the protection will remain active."
2754
  msgstr ""
2755
 
2756
+ #: lib/help.php:470
2757
  msgid "Sample loglines:"
2758
  msgstr ""
2759
 
2760
+ #: lib/help.php:473
2761
  #, php-format
2762
  msgid ""
2763
  "Be careful if you are behind a load balancer, reverse-proxy or CDN because "
2768
  "otherwise you will likely block legitimate users."
2769
  msgstr ""
2770
 
2771
+ #: lib/help.php:489
2772
  msgid ""
2773
  "The firewall log displays blocked and sanitised requests as well as some "
2774
  "useful information. It has 6 columns:"
2775
  msgstr ""
2776
 
2777
+ #: lib/help.php:490
2778
  msgid "DATE : date and time of the incident."
2779
  msgstr ""
2780
 
2781
+ #: lib/help.php:491
2782
  msgid ""
2783
  "INCIDENT : unique incident number/ID as it was displayed to the blocked user."
2784
  msgstr ""
2785
 
2786
+ #: lib/help.php:492
2787
  msgid ""
2788
  "LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
2789
  "<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
2790
  "and debugging mode (<code>DEBUG_ON</code>)."
2791
  msgstr ""
2792
 
2793
+ #: lib/help.php:493
2794
  msgid ""
2795
  "RULE : reference of the NinjaFirewall built-in security rule that triggered "
2796
  "the action. A hyphen (<code>-</code>) instead of a number means it was a "
2797
  "rule from the \"Firewall Policies\" page."
2798
  msgstr ""
2799
 
2800
+ #: lib/help.php:494
2801
  msgid "IP : the user IPv4 or IPv6 address."
2802
  msgstr ""
2803
 
2804
+ #: lib/help.php:495
2805
  msgid ""
2806
  "REQUEST : the HTTP request including offending variables and values as well "
2807
  "as the reason the action was logged."
2808
  msgstr ""
2809
 
2810
+ #: lib/help.php:502
2811
  msgid ""
2812
  "This options lets you configure NinjaFirewall to delete its old logs "
2813
  "automatically. By default, logs are never deleted, <b>even when uninstall "
2815
  "delete old logs."
2816
  msgstr ""
2817
 
2818
+ #: lib/help.php:510
2819
  msgid ""
2820
  "Centralized Logging lets you remotely access the firewall log of all your "
2821
  "NinjaFirewall protected websites from one single installation. You do not "
2822
  "need any longer to log in to individual servers to analyse your log data."
2823
  msgstr ""
2824
 
2825
+ #: lib/help.php:510
2826
  #, php-format
2827
  msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
2828
  msgstr ""
2829
 
2830
+ #: lib/help.php:511
2831
  msgid ""
2832
  "Enter your public key (optional): This is the public key that was created "
2833
  "from your main server."
2834
  msgstr ""
2835
 
2836
+ #: lib/help.php:514
2837
  msgid ""
2838
  "Centralized Logging will keep working even if NinjaFirewall is disabled. "
2839
  "Delete your public key below if you want to disable it."
2840
  msgstr ""
2841
 
2842
+ #: lib/help.php:536 lib/live_log.php:37 lib/live_log.php:75
2843
+ #: ninjafirewall.php:767
2844
  msgid "Live Log"
2845
  msgstr ""
2846
 
2847
+ #: lib/help.php:538
2848
  msgid ""
2849
  "Live Log lets you watch your blog traffic in real time, just like the Unix "
2850
  "<code>tail -f</code> command. Note that requests sent to static elements "
2851
  "like JS/CSS files and images are not managed by NinjaFirewall."
2852
  msgstr ""
2853
 
2854
+ #: lib/help.php:540
2855
  msgid ""
2856
  "You can enable/disable the monitoring process, change the refresh rate, "
2857
  "clear the screen, enable automatic vertical scrolling, change the log "
2858
  "format, select which traffic you want to view (HTTP/HTTPS) and the timezone."
2859
  msgstr ""
2860
 
2861
+ #: lib/help.php:540
2862
  msgid ""
2863
  "You can also apply filters to include or exclude files and folders "
2864
  "(REQUEST_URI)."
2865
  msgstr ""
2866
 
2867
+ #: lib/help.php:543
2868
  msgid ""
2869
  "Live Log does not make use of any WordPress core file (e.g., <code>admin-"
2870
  "ajax.php</code>). It communicates directly with the firewall without loading "
2873
  "value."
2874
  msgstr ""
2875
 
2876
+ #: lib/help.php:545
2877
  msgid ""
2878
  "If you are using the optional <code>.htninja</code> configuration file to "
2879
  "whitelist your IP, the Live Log feature will not work."
2880
  msgstr ""
2881
 
2882
+ #: lib/help.php:550
2883
  msgid "Log Format"
2884
  msgstr ""
2885
 
2886
+ #: lib/help.php:551
2887
  msgid "You can easily customize the log format. Possible values are:"
2888
  msgstr ""
2889
 
2890
+ #: lib/help.php:552
2891
  msgid "<code>%time</code>: the server date, time and timezone."
2892
  msgstr ""
2893
 
2894
+ #: lib/help.php:553
2895
  msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
2896
  msgstr ""
2897
 
2898
+ #: lib/help.php:554
2899
  #, php-format
2900
  msgid ""
2901
  "<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
2902
  "balancer or CDN, this will be its IP."
2903
  msgstr ""
2904
 
2905
+ #: lib/help.php:555
2906
  msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
2907
  msgstr ""
2908
 
2909
+ #: lib/help.php:556
2910
  #, php-format
2911
  msgid ""
2912
  "<code>%uri</code>: the URI which was given in order to access the page "
2913
  "(REQUEST_URI)."
2914
  msgstr ""
2915
 
2916
+ #: lib/help.php:557
2917
  msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
2918
  msgstr ""
2919
 
2920
+ #: lib/help.php:558
2921
  #, php-format
2922
  msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
2923
  msgstr ""
2924
 
2925
+ #: lib/help.php:559
2926
  #, php-format
2927
  msgid ""
2928
  "<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
2929
  "load balancer or CDN, this will likely be the visitor true IP."
2930
  msgstr ""
2931
 
2932
+ #: lib/help.php:560
2933
  msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
2934
  msgstr ""
2935
 
2936
+ #: lib/help.php:561
2937
  msgid ""
2938
  "Additionally, you can include any of the following characters: <code>\"</"
2939
  "code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
2940
  "and lowercase letters <code>a-z</code>."
2941
  msgstr ""
2942
 
2943
+ #: lib/help.php:573 lib/rules_editor.php:27 ninjafirewall.php:771
2944
  msgid "Rules Editor"
2945
  msgstr ""
2946
 
2947
+ #: lib/help.php:575
2948
  msgid ""
2949
  "Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
2950
  "of built-in rules used to protect your blog against the most common "
2954
  "individually:"
2955
  msgstr ""
2956
 
2957
+ #: lib/help.php:577
2958
  msgid ""
2959
  "Check your firewall log and find the rule ID you want to disable (it is "
2960
  "displayed in the <code>RULE</code> column)."
2961
  msgstr ""
2962
 
2963
+ #: lib/help.php:578
2964
  msgid ""
2965
  "Select its ID from the enabled rules list below and click the \"Disable it\" "
2966
  "button."
2967
  msgstr ""
2968
 
2969
+ #: lib/help.php:580
2970
  msgid ""
2971
  "Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
2972
  "code> instead of a number, that means that the rule can be changed in the "
2973
  "\"Firewall Policies\" page."
2974
  msgstr ""
2975
 
2976
+ #: lib/help.php:585
2977
  msgid "Credits"
2978
  msgstr ""
2979
 
2980
+ #: lib/help.php:587
2981
  msgid ""
2982
  "NinjaFirewall security rules protect against many vulnerabilities. Some of "
2983
  "them were reported by the following companies, individuals or mailing lists:"
2984
  msgstr ""
2985
 
2986
+ #: lib/help.php:638 lib/overview.php:186
2987
  msgid "Updates"
2988
  msgstr ""
2989
 
2990
+ #: lib/help.php:640
2991
  msgid ""
2992
  "To get the most efficient protection, you can ask NinjaFirewall to "
2993
  "automatically update its security rules."
2994
  msgstr ""
2995
 
2996
+ #: lib/help.php:642
2997
  msgid ""
2998
  "Each time a new vulnerability is found in WordPress or one of its plugins/"
2999
  "themes, a new set of security rules will be made available to protect "
3000
  "against such vulnerability if needed."
3001
  msgstr ""
3002
 
3003
+ #: lib/help.php:644
3004
  msgid ""
3005
  "Only security rules will be downloaded. If a new version of NinjaFirewall "
3006
  "(including new files, options and features) was available, it would have to "
3007
  "be updated from the dashboard plugins menu as usual."
3008
  msgstr ""
3009
 
3010
+ #: lib/help.php:646
3011
  msgid ""
3012
  "We recommend to enable this feature, as it is the <strong>best way to keep "
3013
  "your WordPress secure</strong> against new vulnerabilities."
3014
  msgstr ""
3015
 
3016
+ #: lib/install.php:60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3017
  #, php-format
3018
  msgid ""
3019
+ "Error: Your .htaccess file is not writable, please change its permissions: %s"
 
3020
  msgstr ""
3021
 
3022
+ #: lib/install.php:85 ninjafirewall.php:576 ninjafirewall.php:580
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3023
  #, php-format
3024
+ msgid "Error: wrong parameter value (%s)."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3025
  msgstr ""
3026
 
3027
+ #: lib/install.php:92 lib/install.php:168 lib/install.php:189
 
 
 
 
 
 
 
 
3028
  #, php-format
3029
  msgid ""
3030
+ "Error: The following file is not writable, please change its permissions: %s"
 
3031
  msgstr ""
3032
 
3033
+ #: lib/install.php:115
3034
  #, php-format
3035
  msgid ""
3036
+ "NinjaFirewall detected that the requested changes seemed to crash your blog. "
3037
+ "%s"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3038
  msgstr ""
3039
 
3040
+ #: lib/install.php:116
3041
  msgid ""
3042
+ "Changes have been undone. You may need to modify your selection and try "
3043
+ "again."
 
 
 
 
 
 
 
 
 
3044
  msgstr ""
3045
 
3046
+ #: lib/install.php:126
3047
  #, php-format
3048
+ msgid "The website front-end returned: HTTP %s %s."
 
 
 
 
 
 
 
 
 
 
3049
  msgstr ""
3050
 
3051
+ #: lib/install.php:138
3052
  #, php-format
3053
+ msgid "The website front-end returned a fatal error: %s."
 
 
3054
  msgstr ""
3055
 
3056
+ #: lib/install.php:218 lib/install.php:243 lib/install.php:268
3057
+ #: lib/install.php:289
3058
+ msgid "File is not writable"
3059
  msgstr ""
3060
 
3061
+ #: lib/install_default.php:164
 
3062
  msgid ""
3063
+ "Error: The installer cannot download the security rules from wordpress.org "
3064
+ "website."
3065
  msgstr ""
3066
 
3067
+ #: lib/install_default.php:165
3068
  msgid ""
3069
+ "The server may be temporarily down or you may have network connectivity "
3070
+ "problems? Please try again in a few minutes."
 
 
 
 
 
 
 
 
 
3071
  msgstr ""
3072
 
3073
+ #: lib/install_default.php:166
3074
  msgid ""
3075
+ "NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
3076
+ "your server does not support SSL? You can force NinjaFirewall to use a non-"
3077
+ "secure HTTP connection by adding the following directive to your <strong>wp-"
3078
+ "config.php</strong> file:"
3079
  msgstr ""
3080
 
3081
  #: lib/live_log.php:29
3092
  "Administrator to the whitelist\" option is enabled."
3093
  msgstr ""
3094
 
3095
+ #: lib/live_log.php:105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3096
  msgid "Refresh rate:"
3097
  msgstr ""
3098
 
3099
+ #: lib/live_log.php:107
3100
  msgid "5 seconds"
3101
  msgstr ""
3102
 
3103
+ #: lib/live_log.php:108
3104
  msgid "10 seconds"
3105
  msgstr ""
3106
 
3107
+ #: lib/live_log.php:109
3108
  msgid "20 seconds"
3109
  msgstr ""
3110
 
3111
+ #: lib/live_log.php:110
3112
  msgid "45 seconds"
3113
  msgstr ""
3114
 
3115
+ #: lib/live_log.php:112
3116
  msgid "Clear screen"
3117
  msgstr ""
3118
 
3119
+ #: lib/live_log.php:113
3120
  msgid "Autoscrolling"
3121
  msgstr ""
3122
 
3123
+ #: lib/live_log.php:118
3124
  msgid "Live Log will not display whitelisted users and brute-force attacks."
3125
  msgstr ""
3126
 
3127
+ #: lib/live_log.php:155
3128
+ msgid "Live Log Options"
3129
  msgstr ""
3130
 
3131
+ #: lib/live_log.php:158
3132
  msgid "Inclusion and exclusion filters (REQUEST_URI)"
3133
  msgstr ""
3134
 
3135
+ #: lib/live_log.php:162
3136
  msgid "Must include"
3137
  msgstr ""
3138
 
3139
+ #: lib/live_log.php:163
3140
  msgid "Must not include"
3141
  msgstr ""
3142
 
3143
+ #: lib/live_log.php:167
3144
  msgid ""
3145
  "Full or partial case-sensitive REQUEST_URI string. Multiple values must be "
3146
  "comma-separated."
3147
  msgstr ""
3148
 
3149
+ #: lib/live_log.php:171
3150
  msgid "Format"
3151
  msgstr ""
3152
 
3153
+ #: lib/live_log.php:174
3154
  msgid "Custom"
3155
  msgstr ""
3156
 
3157
+ #: lib/live_log.php:175
3158
  msgid "See contextual help for available log format."
3159
  msgstr ""
3160
 
3161
+ #: lib/live_log.php:179
3162
  msgid "Display"
3163
  msgstr ""
3164
 
3165
+ #: lib/live_log.php:189
3166
  msgid "Timezone"
3167
  msgstr ""
3168
 
3169
+ #: lib/live_log.php:204
3170
  msgid "Save Live Log Options"
3171
  msgstr ""
3172
 
3173
+ #: lib/live_log.php:243
3174
  msgid "Error: please enter the custom log format."
3175
  msgstr ""
3176
 
3177
+ #: lib/login_protection.php:72 lib/login_protection.php:126
3178
+ #: lib/login_protection.php:476
3179
  msgid "Access restricted"
3180
  msgstr ""
3181
 
3182
+ #: lib/login_protection.php:81 lib/login_protection.php:130
3183
+ #: lib/login_protection.php:486
3184
  msgid "Type the characters you see in the picture below:"
3185
  msgstr ""
3186
 
3187
+ #: lib/login_protection.php:186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3188
  msgid ""
3189
+ "GD Support is not available on your server, the CAPTCHA option is disabled."
 
 
 
 
 
3190
  msgstr ""
3191
 
3192
+ #: lib/login_protection.php:191
3193
  msgid ""
3194
  "Error: GD Support is not available on your server, the captcha protection "
3195
  "will not work!"
3196
  msgstr ""
3197
 
3198
+ #: lib/login_protection.php:201
3199
  msgid "Enable brute force attack protection"
3200
  msgstr ""
3201
 
3202
+ #: lib/login_protection.php:214
3203
+ msgid "Type of protection"
3204
  msgstr ""
3205
 
3206
+ #: lib/login_protection.php:216
3207
+ msgid "Username + Password"
3208
  msgstr ""
3209
 
3210
+ #: lib/login_protection.php:217
3211
+ msgid "Captcha image"
3212
+ msgstr ""
3213
+
3214
+ #: lib/login_protection.php:222
3215
+ msgid "When to enable the protection"
3216
  msgstr ""
3217
 
3218
+ #: lib/login_protection.php:224
3219
+ msgid "Always enabled"
3220
  msgstr ""
3221
 
3222
+ #: lib/login_protection.php:225
3223
+ msgid "When under attack"
3224
  msgstr ""
3225
 
3226
+ #: lib/login_protection.php:235
3227
  msgid "Protect the login page against"
3228
  msgstr ""
3229
 
3230
+ #: lib/login_protection.php:237
3231
  msgid "<code>GET</code> request attacks"
3232
  msgstr ""
3233
 
3234
+ #: lib/login_protection.php:238
3235
  msgid "<code>POST</code> request attacks (default)"
3236
  msgstr ""
3237
 
3238
+ #: lib/login_protection.php:239
3239
  msgid "<code>GET</code> and <code>POST</code> requests attacks"
3240
  msgstr ""
3241
 
3242
+ #: lib/login_protection.php:243
3243
  msgid "Enable protection"
3244
  msgstr ""
3245
 
3246
+ #: lib/login_protection.php:246
3247
  #, php-format
3248
  msgid "For %1$s minutes, if more than %2$s %3$s requests within %4$s seconds."
3249
  msgstr ""
3250
 
3251
+ #: lib/login_protection.php:267
3252
  msgid "HTTP authentication"
3253
  msgstr ""
3254
 
3255
+ #: lib/login_protection.php:269
3256
  msgid "User:"
3257
  msgstr ""
3258
 
3259
+ #: lib/login_protection.php:269
3260
  msgid "Password:"
3261
  msgstr ""
3262
 
3263
+ #: lib/login_protection.php:270
3264
  msgid "User and Password must be from 6 to 32 characters."
3265
  msgstr ""
3266
 
3267
+ #: lib/login_protection.php:271
3268
  msgid "Message (max. 1024 characters, HTML tags allowed)"
3269
  msgstr ""
3270
 
3271
+ #: lib/login_protection.php:282
3272
  msgid "Message"
3273
  msgstr ""
3274
 
3275
+ #: lib/login_protection.php:285
3276
  msgid "This message will be displayed above the captcha. Max. 255 characters."
3277
  msgstr ""
3278
 
3279
+ #: lib/login_protection.php:296
3280
  msgid "Various options"
3281
  msgstr ""
3282
 
3283
+ #: lib/login_protection.php:301
3284
  msgid ""
3285
  "If you are using the Jetpack plugin, blocking access to the XML-RPC API may "
3286
  "prevent it from working correctly."
3287
  msgstr ""
3288
 
3289
+ #: lib/login_protection.php:307
3290
+ msgid "Apply the protection to the <code>xmlrpc.php</code> script as well"
 
 
 
 
 
 
 
 
3291
  msgstr ""
3292
 
3293
+ #: lib/login_protection.php:315
3294
+ msgid "Enable bot protection"
3295
  msgstr ""
3296
 
3297
+ #: lib/login_protection.php:329
3298
+ msgid "Write the incident to the server Authentication log"
3299
  msgstr ""
3300
 
3301
+ #: lib/login_protection.php:335
3302
  msgid "Your server configuration is not compatible with that option."
3303
  msgstr ""
3304
 
3305
+ #: lib/login_protection.php:338
3306
  msgid ""
3307
+ "The login protection must be set to \"When under attack\" in order to use "
3308
  "this option."
3309
  msgstr ""
3310
 
3311
+ #: lib/login_protection.php:350
3312
+ msgid "Disable NinjaFirewall's signature on the login protection page"
 
 
 
 
 
 
 
 
 
 
 
3313
  msgstr ""
3314
 
3315
+ #: lib/login_protection.php:362
3316
  msgid "Save Login Protection"
3317
  msgstr ""
3318
 
3319
+ #: lib/login_protection.php:365
3320
  msgid "See our benchmark and stress-test:"
3321
  msgstr ""
3322
 
3323
+ #: lib/login_protection.php:384
3324
  #, php-format
3325
  msgid "Error: %s directory is not writable. Please chmod it to 0777."
3326
  msgstr ""
3327
 
3328
+ #: lib/login_protection.php:458
3329
  msgid "Error: please enter a user name for HTTP authentication."
3330
  msgstr ""
3331
 
3332
+ #: lib/login_protection.php:460
3333
  msgid "Error: HTTP authentication user name is not valid."
3334
  msgstr ""
3335
 
3336
+ #: lib/login_protection.php:466
3337
  msgid "Error: please enter a user name and password for HTTP authentication."
3338
  msgstr ""
3339
 
3340
+ #: lib/login_protection.php:469
3341
  msgid "Error: password must be from 6 to 32 characters."
3342
  msgstr ""
3343
 
3344
+ #: lib/login_protection.php:504
3345
  #, php-format
3346
  msgid "Error: unable to write to the %s configuration file"
3347
  msgstr ""
3348
 
3349
+ #: lib/network.php:24 ninjafirewall.php:1075 ninjafirewall.php:1079
3350
  #, php-format
3351
  msgid "You are not allowed to perform this task (%s)."
3352
  msgstr ""
3355
  msgid "You do not have a multisite network."
3356
  msgstr ""
3357
 
3358
+ #: lib/network.php:65
3359
  msgid "NinjaFirewall Status"
3360
  msgstr ""
3361
 
3362
+ #: lib/network.php:68
3363
  msgid ""
3364
  "Display NinjaFirewall status icon in the admin bar of all sites in the "
3365
  "network"
3366
  msgstr ""
3367
 
3368
+ #: lib/network.php:77
3369
+ msgid "Save Network options"
3370
+ msgstr ""
3371
+
3372
+ #: lib/overview.php:49
3373
+ msgid "Make sure you followed the instructions and restarted Openlitespeed."
3374
+ msgstr ""
3375
+
3376
+ #: lib/overview.php:53
3377
+ #, php-format
3378
+ msgid ""
3379
+ "Make sure your HTTP server support the %s directive in .htaccess files. Or "
3380
+ "maybe you need to restart your HTTP server to apply the changes?"
3381
+ msgstr ""
3382
+
3383
+ #: lib/overview.php:61
3384
+ #, php-format
3385
+ msgid ""
3386
+ "Because PHP caches INI files, you may need to wait up to five minutes before "
3387
+ "the changes are reloaded by the PHP interpreter. <strong>Please wait for "
3388
+ "<font id=\"nfw-waf-count\">%d</font> seconds</strong> before trying again "
3389
+ "(you can navigate away from this page and come back in a few minutes)."
3390
+ msgstr ""
3391
+
3392
+ #: lib/overview.php:69
3393
+ msgid "Oops! Full WAF mode is not enabled yet."
3394
+ msgstr ""
3395
+
3396
+ #: lib/overview.php:80
3397
+ msgid "NinjaFirewall (WP Edition)"
3398
  msgstr ""
3399
 
3400
+ #: lib/overview.php:85
3401
  msgid "Congratulations, NinjaFirewall is up and running!"
3402
  msgstr ""
3403
 
3404
+ #: lib/overview.php:86
3405
  msgid ""
3406
  "If you need help, click on the contextual \"Help\" menu tab located in the "
3407
  "upper right corner of each page."
3408
  msgstr ""
3409
 
3410
+ #: lib/overview.php:88
3411
  msgid "A \"Quick Start, FAQ & Troubleshooting Guide\" email was sent to"
3412
  msgstr ""
3413
 
3414
+ #: lib/overview.php:110
3415
+ msgid "Unknown error"
3416
  msgstr ""
3417
 
3418
+ #: lib/overview.php:114 lib/overview.php:122
3419
  msgid "Firewall"
3420
  msgstr ""
3421
 
3422
+ #: lib/overview.php:130
3423
+ msgid "Mode"
3424
  msgstr ""
3425
 
3426
+ #: lib/overview.php:135 lib/overview.php:141
3427
+ #, php-format
3428
+ msgid "NinjaFirewall is running in %s mode."
3429
  msgstr ""
3430
 
3431
+ #: lib/overview.php:135
3432
+ msgid "WordPress WAF"
3433
  msgstr ""
3434
 
3435
+ #: lib/overview.php:137
3436
  #, php-format
3437
+ msgid ""
3438
+ "For better protection, <a %s>click here</a> to enable its Full WAF mode."
3439
+ msgstr ""
3440
+
3441
+ #: lib/overview.php:137
3442
+ msgid "Click to install NinjaFirewall in Full WAF mode."
3443
  msgstr ""
3444
 
3445
+ #: lib/overview.php:141
3446
+ msgid "Full WAF"
3447
+ msgstr ""
3448
+
3449
+ #: lib/overview.php:153
3450
  msgid "Enabled."
3451
  msgstr ""
3452
 
3453
+ #: lib/overview.php:153
3454
  msgid "Click here to turn Debugging Mode off"
3455
  msgstr ""
3456
 
3457
+ #: lib/overview.php:159
3458
+ msgid "Edition"
3459
+ msgstr ""
3460
+
3461
+ #: lib/overview.php:160
3462
+ msgid "Need more security? Get Premium!"
3463
  msgstr ""
3464
 
3465
+ #: lib/overview.php:163 lib/utils.php:724
3466
  msgid "Version"
3467
  msgstr ""
3468
 
3469
+ #: lib/overview.php:164
3470
  msgid "Security rules:"
3471
  msgstr ""
3472
 
3473
+ #: lib/overview.php:168
3474
+ msgid "PHP SAPI"
3475
+ msgstr ""
3476
+
3477
+ #: lib/overview.php:187
3478
  msgid "Security rules updates are disabled."
3479
  msgstr ""
3480
 
3481
+ #: lib/overview.php:187
3482
  msgid ""
3483
  "If you want your blog to be protected against the latest threats, enable "
3484
  "automatic security rules updates."
3485
  msgstr ""
3486
 
3487
+ #: lib/overview.php:195 lib/overview.php:203
3488
  msgid "Admin user"
3489
  msgstr ""
3490
 
3491
+ #: lib/overview.php:196
3492
  #, php-format
3493
  msgid ""
3494
  "You are not whitelisted. Ensure that the \"Do not block WordPress "
3497
  "your administration dashboard."
3498
  msgstr ""
3499
 
3500
+ #: lib/overview.php:204
3501
  msgid "You are whitelisted by the firewall."
3502
  msgstr ""
3503
 
3504
+ #: lib/overview.php:211
3505
  msgid "Restrictions"
3506
  msgstr ""
3507
 
3508
+ #: lib/overview.php:212
3509
+ msgid "Access to NinjaFirewall is restricted to specific users."
3510
  msgstr ""
3511
 
3512
+ #: lib/overview.php:223
3513
  msgid "User session"
3514
  msgstr ""
3515
 
3516
+ #: lib/overview.php:224
3517
  msgid ""
3518
  "It seems that the user session set by NinjaFirewall was not found by the "
3519
  "firewall script."
3520
  msgstr ""
3521
 
3522
+ #: lib/overview.php:232
3523
  #, php-format
3524
  msgid ""
3525
  "the public key is invalid. Please <a href=\"%s\">check your configuration</"
3526
  "a>."
3527
  msgstr ""
3528
 
3529
+ #: lib/overview.php:236
3530
  msgid "No IP address restriction."
3531
  msgstr ""
3532
 
3533
+ #: lib/overview.php:239
3534
  #, php-format
3535
  msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
3536
  msgstr ""
3537
 
3538
+ #: lib/overview.php:242
3539
  #, php-format
3540
  msgid ""
3541
  "the whitelisted IP is not valid. Please <a href=\"%s\">check your "
3542
  "configuration</a>."
3543
  msgstr ""
3544
 
3545
+ #: lib/overview.php:251
3546
  #, php-format
3547
  msgid "Error: %s"
3548
  msgstr ""
3549
 
3550
+ #: lib/overview.php:266
3551
  msgid "Source IP"
3552
  msgstr ""
3553
 
3554
+ #: lib/overview.php:267
3555
  #, php-format
3556
  msgid "You have a private IP : %s"
3557
  msgstr ""
3558
 
3559
+ #: lib/overview.php:267
3560
  #, php-format
3561
  msgid ""
3562
  "If your site is behind a reverse proxy or a load balancer, ensure that you "
3564
  "otherwise use the NinjaFirewall %s configuration file."
3565
  msgstr ""
3566
 
3567
+ #: lib/overview.php:275 lib/overview.php:285
3568
  msgid "CDN detection"
3569
  msgstr ""
3570
 
3571
+ #: lib/overview.php:276
3572
  #, php-format
3573
  msgid ""
3574
  "%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
3576
  "otherwise use the NinjaFirewall %s configuration file."
3577
  msgstr ""
3578
 
3579
+ #: lib/overview.php:286
3580
  #, php-format
3581
  msgid ""
3582
  "%s detected: you seem to be using Incapsula CDN services. Ensure that you "
3584
  "otherwise use the NinjaFirewall %s configuration file."
3585
  msgstr ""
3586
 
3587
+ #: lib/overview.php:295 lib/overview.php:304
3588
  msgid "Log dir"
3589
  msgstr ""
3590
 
3591
+ #: lib/overview.php:296 lib/overview.php:305
3592
  #, php-format
3593
  msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
3594
  msgstr ""
3595
 
3596
+ #: lib/overview.php:313
3597
  msgid "Optional configuration file"
3598
  msgstr ""
3599
 
3600
+ #: lib/overview.php:320
3601
  msgid "MySQLi link identifier"
3602
  msgstr ""
3603
 
3604
+ #: lib/overview.php:321
3605
  msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
3606
  msgstr ""
3607
 
3608
+ #: lib/rules_editor.php:37
3609
  msgid "Error: you did not select a rule to disable."
3610
  msgstr ""
3611
 
3612
+ #: lib/rules_editor.php:39 lib/rules_editor.php:54
3613
  msgid "Error: to change this rule, use the \"Firewall Policies\" menu."
3614
  msgstr ""
3615
 
3616
+ #: lib/rules_editor.php:41 lib/rules_editor.php:56
3617
  msgid "Error: this rule does not exist."
3618
  msgstr ""
3619
 
3620
+ #: lib/rules_editor.php:45
3621
  #, php-format
3622
  msgid "Rule ID %s has been disabled."
3623
  msgstr ""
3624
 
3625
+ #: lib/rules_editor.php:52
3626
  msgid "Error: you did not select a rule to enable."
3627
  msgstr ""
3628
 
3629
+ #: lib/rules_editor.php:60
3630
  #, php-format
3631
  msgid "Rule ID %s has been enabled."
3632
  msgstr ""
3633
 
3634
+ #: lib/rules_editor.php:70
3635
  msgid "Error: no rules found."
3636
  msgstr ""
3637
 
3638
+ #: lib/rules_editor.php:92
3639
  msgid "NinjaFirewall built-in security rules"
3640
  msgstr ""
3641
 
3642
+ #: lib/rules_editor.php:95
3643
  msgid "Select the rule you want to disable or enable"
3644
  msgstr ""
3645
 
3646
+ #: lib/rules_editor.php:99
3647
  msgid "Total rules enabled"
3648
  msgstr ""
3649
 
3650
+ #: lib/rules_editor.php:105 lib/rules_editor.php:134
3651
  msgid "Remote/local file inclusion"
3652
  msgstr ""
3653
 
3654
+ #: lib/rules_editor.php:107 lib/rules_editor.php:136
3655
  msgid "Cross-site scripting"
3656
  msgstr ""
3657
 
3658
+ #: lib/rules_editor.php:109 lib/rules_editor.php:138
3659
  msgid "Code injection"
3660
  msgstr ""
3661
 
3662
+ #: lib/rules_editor.php:111 lib/rules_editor.php:140
3663
  msgid "SQL injection"
3664
  msgstr ""
3665
 
3666
+ #: lib/rules_editor.php:113 lib/rules_editor.php:142
3667
  msgid "Various vulnerability"
3668
  msgstr ""
3669
 
3670
+ #: lib/rules_editor.php:115 lib/rules_editor.php:144
3671
  msgid "Backdoor/shell"
3672
  msgstr ""
3673
 
3674
+ #: lib/rules_editor.php:117 lib/rules_editor.php:146
3675
  msgid "Application specific"
3676
  msgstr ""
3677
 
3678
+ #: lib/rules_editor.php:119 lib/rules_editor.php:148
3679
  msgid "WordPress vulnerability"
3680
  msgstr ""
3681
 
3682
+ #: lib/rules_editor.php:121 lib/rules_editor.php:150
3683
  msgid "Rule ID"
3684
  msgstr ""
3685
 
3686
+ #: lib/rules_editor.php:124
3687
  msgid "Disable it"
3688
  msgstr ""
3689
 
3690
+ #: lib/rules_editor.php:129
3691
  msgid "Total rules disabled"
3692
  msgstr ""
3693
 
3694
+ #: lib/rules_editor.php:154
3695
  msgid "Enable it"
3696
  msgstr ""
3697
 
3698
+ #: lib/rules_update.php:73 lib/wpplus.php:217 ninjafirewall.php:775
3699
  msgid "Rules Update"
3700
  msgstr ""
3701
 
3707
  msgid "Security rules have been updated."
3708
  msgstr ""
3709
 
3710
+ #: lib/rules_update.php:94 lib/rules_update.php:429
3711
  msgid "No security rules update available."
3712
  msgstr ""
3713
 
3714
+ #: lib/rules_update.php:112
 
 
 
 
3715
  #, php-format
3716
  msgid ""
3717
+ "It seems that %s is set. Ensure you have another way to run WP-Cron, "
3718
  "otherwise NinjaFirewall automatic updates will not work."
3719
  msgstr ""
3720
 
3721
+ #: lib/rules_update.php:139
3722
+ msgid "Automatically update NinjaFirewall security rules"
3723
+ msgstr ""
3724
+
3725
+ #: lib/rules_update.php:151
3726
  msgid "Check for updates"
3727
  msgstr ""
3728
 
3729
+ #: lib/rules_update.php:154
3730
  msgid "Every 15 minutes"
3731
  msgstr ""
3732
 
3733
+ #: lib/rules_update.php:155
3734
  msgid "Every 30 minutes"
3735
  msgstr ""
3736
 
3737
+ #: lib/rules_update.php:170
 
3738
  msgid ""
3739
+ "The next scheduled date is in the past! WordPress wp-cron may not be working "
3740
+ "or may have been disabled."
3741
  msgstr ""
3742
 
3743
+ #: lib/rules_update.php:174
3744
+ #, php-format
3745
  msgid ""
3746
+ "Next scheduled update will start in approximately %s day, %s hour(s), %s "
3747
+ "minute(s) and %s seconds."
3748
  msgstr ""
3749
 
3750
+ #: lib/rules_update.php:182
3751
  msgid "Notification"
3752
  msgstr ""
3753
 
3754
+ #: lib/rules_update.php:184
3755
  msgid "Send me a report by email when security rules have been updated."
3756
  msgstr ""
3757
 
3758
+ #: lib/rules_update.php:185
3759
  msgid ""
3760
  "Reports will be sent to the contact email address defined in the Event "
3761
  "Notifications menu."
3762
  msgstr ""
3763
 
3764
+ #: lib/rules_update.php:195
3765
+ msgid "The updates log is currently empty."
3766
  msgstr ""
3767
 
3768
+ #: lib/rules_update.php:199
3769
+ msgid "Updates Log"
3770
  msgstr ""
3771
 
3772
+ #: lib/rules_update.php:206
3773
+ msgid "Log is flushed automatically."
3774
  msgstr ""
3775
 
3776
+ #: lib/rules_update.php:217
3777
+ msgid "Save Updates Options"
3778
  msgstr ""
3779
 
3780
+ #: lib/rules_update.php:218
3781
+ msgid "Check For Updates Now!"
3782
  msgstr ""
3783
 
3784
+ #: lib/rules_update.php:226
3785
+ msgid "Delete Log"
3786
  msgstr ""
3787
 
3788
+ #: lib/rules_update.php:316
3789
  msgid "Error: Wrong rules format."
3790
  msgstr ""
3791
 
3792
+ #: lib/rules_update.php:325
3793
  msgid "Error: Unable to unserialize the new rules."
3794
  msgstr ""
3795
 
3796
+ #: lib/rules_update.php:333
3797
  msgid "Error: Unserialized rules seem corrupted."
3798
  msgstr ""
3799
 
3800
+ #: lib/rules_update.php:373
3801
  #, php-format
3802
  msgid "Security rules updated to version %s."
3803
  msgstr ""
3804
 
3805
+ #: lib/rules_update.php:409
3806
  msgid ""
3807
  "Error: Your version of NinjaFirewall is too old and is not compatible with "
3808
  "those rules. Please upgrade it."
3809
  msgstr ""
3810
 
3811
+ #: lib/rules_update.php:418
3812
  msgid "Error: Unable to retrieve the new rules version."
3813
  msgstr ""
3814
 
3815
+ #: lib/rules_update.php:436
3816
  #, php-format
3817
  msgid "Error: Server returned a %s HTTP error code (#1)."
3818
  msgstr ""
3819
 
3820
+ #: lib/rules_update.php:443 lib/rules_update.php:509
3821
  msgid "Error: Unable to connect to the remote server"
3822
  msgstr ""
3823
 
3824
+ #: lib/rules_update.php:473
3825
  #, php-format
3826
  msgid "Error: The new rules versions do not match (%s != %s)."
3827
  msgstr ""
3828
 
3829
+ #: lib/rules_update.php:487
3830
  #, php-format
3831
  msgid ""
3832
  "Error: The new rules %s digital signature is not correct. Aborting update, "
3833
  "rules may have been tampered with."
3834
  msgstr ""
3835
 
3836
+ #: lib/rules_update.php:502
3837
  #, php-format
3838
  msgid "Error: Server returned a %s HTTP error code (#2)."
3839
  msgstr ""
3840
 
3841
+ #: lib/rules_update.php:542
3842
  msgid "[NinjaFirewall] Security rules update"
3843
  msgstr ""
3844
 
3845
+ #: lib/rules_update.php:543
3846
  msgid "NinjaFirewall security rules have been updated:"
3847
  msgstr ""
3848
 
3849
+ #: lib/rules_update.php:549
3850
  msgid "Rules version:"
3851
  msgstr ""
3852
 
3853
+ #: lib/rules_update.php:551
3854
  msgid ""
3855
  "This notification can be turned off from NinjaFirewall \"Rules Update\" page."
3856
  msgstr ""
3857
 
3858
+ #: lib/statistics.php:27 ninjafirewall.php:720
3859
  msgid "Statistics"
3860
  msgstr ""
3861
 
3862
+ #: lib/statistics.php:83
3863
  msgid "You do not have any stats for the selected month yet."
3864
  msgstr ""
3865
 
3866
+ #: lib/statistics.php:117
3867
+ msgid "Average time per request"
3868
+ msgstr ""
3869
+
3870
+ #: lib/statistics.php:118 lib/statistics.php:122 lib/statistics.php:126
3871
+ msgid "seconds"
3872
  msgstr ""
3873
 
3874
  #: lib/statistics.php:121
3875
+ msgid "Fastest request"
3876
+ msgstr ""
3877
+
3878
+ #: lib/statistics.php:125
3879
+ msgid "Slowest request"
3880
+ msgstr ""
3881
+
3882
+ #: lib/statistics.php:133
3883
+ msgid "Critical"
3884
+ msgstr ""
3885
+
3886
+ #: lib/statistics.php:134
3887
  msgid "High"
3888
  msgstr ""
3889
 
3890
+ #: lib/statistics.php:135
3891
  msgid "Medium"
3892
  msgstr ""
3893
 
3894
+ #: lib/statistics.php:192
3895
+ msgid "Select monthly stats to view..."
3896
  msgstr ""
3897
 
3898
+ #: lib/thickbox.php:37
3899
+ msgid "Upgrade to Full WAF mode"
3900
  msgstr ""
3901
 
3902
+ #: lib/thickbox.php:42
3903
+ msgid ""
3904
+ "In <strong>Full WAF</strong> mode, all scripts located inside the blog "
3905
+ "installation directories and sub-directories are protected by NinjaFirewall, "
3906
+ "including those that aren't part of the WordPress package. It gives you the "
3907
+ "highest possible level of protection: security without compromise."
3908
  msgstr ""
3909
 
3910
+ #: lib/thickbox.php:44
3911
+ #, php-format
3912
+ msgid ""
3913
+ "It works on most websites right out of the box, or may require <a href=\"%s"
3914
+ "\" title=\"%s\">some very little tweaks</a>. But in a few cases, mostly "
3915
+ "because of some shared hosting plans restrictions, it may simply not work at "
3916
+ "all."
3917
+ msgstr ""
3918
+
3919
+ #: lib/thickbox.php:46
3920
+ msgid ""
3921
+ "If this happened to you, don't worry: you could still run it in "
3922
+ "<strong>WordPress WAF</strong> mode. Despite being less powerful than the "
3923
+ "<b>Full WAF</b> mode, it offers a level of protection and performance much "
3924
+ "higher than other security plugins."
3925
+ msgstr ""
3926
+
3927
+ #: lib/thickbox.php:52
3928
+ msgid "(recommended)"
3929
+ msgstr ""
3930
+
3931
+ #: lib/thickbox.php:112
3932
+ msgid "Select your HTTP server and your PHP server API"
3933
+ msgstr ""
3934
+
3935
+ #: lib/thickbox.php:122
3936
+ msgid "Other webserver + CGI/FastCGI or PHP-FPM"
3937
+ msgstr ""
3938
+
3939
+ #: lib/thickbox.php:124
3940
+ msgid "View PHPINFO"
3941
+ msgstr ""
3942
+
3943
+ #: lib/thickbox.php:153
3944
+ msgid "Select the PHP initialization file supported by your server"
3945
+ msgstr ""
3946
+
3947
+ #: lib/thickbox.php:165
3948
+ msgid "Let NinjaFirewall make the necessary changes (recommended)."
3949
+ msgstr ""
3950
+
3951
+ #: lib/thickbox.php:166
3952
+ msgid "I want to make the changes myself."
3953
+ msgstr ""
3954
+
3955
+ #: lib/thickbox.php:168
3956
+ msgid ""
3957
+ "Ensure that you have FTP access to your website so that, if there were a "
3958
+ "problem during the installation of the firewall, you could easily undo the "
3959
+ "changes."
3960
+ msgstr ""
3961
+
3962
+ #: lib/thickbox.php:171
3963
+ msgid "Please make the changes below, then click on the \"Finish\" button."
3964
+ msgstr ""
3965
+
3966
+ #: lib/thickbox.php:178
3967
+ #, php-format
3968
+ msgid ""
3969
+ "The %s file must be created, and the following lines of code added to it:"
3970
+ msgstr ""
3971
+
3972
+ #: lib/thickbox.php:179
3973
+ #, php-format
3974
+ msgid "The following lines of code must be added to your existing %s file:"
3975
+ msgstr ""
3976
+
3977
+ #: lib/thickbox.php:239
3978
+ msgid ""
3979
+ "Log in to your Openlitespeed admin dashboard, click on \"Virtual Host\", "
3980
+ "select your domain, add the following instructions to the \"php.ini Override"
3981
+ "\" section in the \"General\" tab, and restart Openlitespeed:"
3982
+ msgstr ""
3983
+
3984
+ #: lib/thickbox.php:246
3985
+ msgid ""
3986
+ "Important: if one day you wanted to uninstall NinjaFirewall, do not forget "
3987
+ "to remove these instructions from your Openlitespeed admin dashboard "
3988
+ "<strong>before</strong> uninstalling NinjaFirewall because this installer "
3989
+ "could not do it for you."
3990
+ msgstr ""
3991
+
3992
+ #: lib/thickbox.php:264
3993
+ msgid "Finish"
3994
  msgstr ""
3995
 
3996
+ #: lib/utils.php:200
3997
  msgid "Blocked user account creation"
3998
  msgstr ""
3999
 
4000
+ #: lib/utils.php:212
4001
  msgid "NinjaFirewall has blocked an attempt to create a user account:"
4002
  msgstr ""
4003
 
4004
+ #: lib/utils.php:215 lib/utils.php:1010
4005
  msgid "Username:"
4006
  msgstr ""
4007
 
4008
+ #: lib/utils.php:216 lib/utils.php:1015 lib/utils.php:1379
4009
  msgid "User IP:"
4010
  msgstr ""
4011
 
4012
+ #: lib/utils.php:219 lib/utils.php:840 lib/utils.php:1018 lib/utils.php:1382
4013
  msgid "Date:"
4014
  msgstr ""
4015
 
4016
+ #: lib/utils.php:228 lib/utils.php:1027 lib/utils.php:1374
4017
  msgid "A PHP backtrace has been attached to this message for your convenience."
4018
  msgstr ""
4019
 
4020
+ #: lib/utils.php:251 lib/utils.php:252 lib/utils.php:1052 lib/utils.php:1053
4021
+ #: lib/utils.php:1279 lib/utils.php:1280
4022
  msgid "You are not allowed to perform this task."
4023
  msgstr ""
4024
 
4025
+ #: lib/utils.php:519 lib/utils.php:523
4026
  msgid "NinjaFirewall error"
4027
  msgstr ""
4028
 
4029
+ #: lib/utils.php:520
4030
  #, php-format
4031
  msgid ""
4032
  "%s directory cannot be created. Please review your installation and ensure "
4033
  "that %s is writable."
4034
  msgstr ""
4035
 
4036
+ #: lib/utils.php:524
4037
  #, php-format
4038
  msgid ""
4039
  "%s directory is read-only. Please review your installation and ensure that "
4040
  "%s is writable."
4041
  msgstr ""
4042
 
4043
+ #: lib/utils.php:543
4044
+ msgid "unknown error"
4045
+ msgstr ""
4046
+
4047
+ #: lib/utils.php:545
4048
  msgid "NinjaFirewall fatal error:"
4049
  msgstr ""
4050
 
4051
+ #: lib/utils.php:546
4052
  msgid "Review your installation, your site is not protected."
4053
  msgstr ""
4054
 
4055
+ #: lib/utils.php:563
4056
  msgid "Alert: WordPress console login"
4057
  msgstr ""
4058
 
4059
+ #: lib/utils.php:565
4060
  msgid "-Blog:"
4061
  msgstr ""
4062
 
4063
+ #: lib/utils.php:569
4064
  msgid "Someone just logged in to your WordPress admin console:"
4065
  msgstr ""
4066
 
4067
+ #: lib/utils.php:570
4068
  msgid "-User:"
4069
  msgstr ""
4070
 
4071
+ #: lib/utils.php:571
4072
  msgid "-IP:"
4073
  msgstr ""
4074
 
4075
+ #: lib/utils.php:572
4076
  msgid "-Date:"
4077
  msgstr ""
4078
 
4079
+ #: lib/utils.php:575
4080
  msgid "Support forum"
4081
  msgstr ""
4082
 
4083
+ #: lib/utils.php:636 lib/utils.php:663
4084
  msgid "Forbidden access"
4085
  msgstr ""
4086
 
4087
+ #: lib/utils.php:682
4088
  #, php-format
4089
  msgid ""
4090
  "<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
4091
  "\">Lost your password</a>?"
4092
  msgstr ""
4093
 
4094
+ #: lib/utils.php:716
4095
  msgid "Plugin"
4096
  msgstr ""
4097
 
4098
+ #: lib/utils.php:716 lib/utils.php:720
4099
  msgid "uploaded"
4100
  msgstr ""
4101
 
4102
+ #: lib/utils.php:716 lib/utils.php:720
4103
  msgid "installed"
4104
  msgstr ""
4105
 
4106
+ #: lib/utils.php:716 lib/utils.php:720
4107
  msgid "activated"
4108
  msgstr ""
4109
 
4110
+ #: lib/utils.php:717
4111
  msgid "updated"
4112
  msgstr ""
4113
 
4114
+ #: lib/utils.php:717
4115
  msgid "deactivated"
4116
  msgstr ""
4117
 
4118
+ #: lib/utils.php:717 lib/utils.php:721
4119
  msgid "deleted"
4120
  msgstr ""
4121
 
4122
+ #: lib/utils.php:717 lib/utils.php:721
4123
  msgid "Name"
4124
  msgstr ""
4125
 
4126
+ #: lib/utils.php:720
4127
  msgid "Theme"
4128
  msgstr ""
4129
 
4130
+ #: lib/utils.php:724
4131
  msgid "upgraded"
4132
  msgstr ""
4133
 
4134
+ #: lib/utils.php:732
4135
  msgid "[NinjaFirewall] Alert:"
4136
  msgstr ""
4137
 
4138
+ #: lib/utils.php:738
4139
  msgid "NinjaFirewall has detected the following activity on your account:"
4140
  msgstr ""
4141
 
4142
+ #: lib/utils.php:835
4143
  msgid "[NinjaFirewall] Alert: Database changes detected"
4144
  msgstr ""
4145
 
4146
+ #: lib/utils.php:836
4147
  msgid ""
4148
  "NinjaFirewall has detected that one or more administrator accounts were "
4149
  "modified in the database:"
4150
  msgstr ""
4151
 
4152
+ #: lib/utils.php:841
4153
  #, php-format
4154
  msgid "Total administrators : %s"
4155
  msgstr ""
4156
 
4157
+ #: lib/utils.php:850
4158
  msgid ""
4159
  "If you cannot see any modifications in the above fields, it is possible that "
4160
  "the administrator password was changed."
4161
  msgstr ""
4162
 
4163
+ #: lib/utils.php:986
4164
  msgid "Blocked privilege escalation attempt"
4165
  msgstr ""
4166
 
4167
+ #: lib/utils.php:1003
4168
+ msgid ""
4169
+ "NinjaFirewall has blocked an attempt to modify a user capability by someone "
4170
+ "who does not have administrative privileges:"
4171
  msgstr ""
4172
 
4173
+ #: lib/utils.php:1064
4174
  msgid ""
4175
  "NinjaFirewall brute-force protection is enabled and you are temporarily "
4176
  "whitelisted."
4177
  msgstr ""
4178
 
4179
+ #: lib/utils.php:1079
4180
  #, php-format
4181
  msgid ""
4182
  "Hey, it seems that you've been using NinjaFirewall for some time. If you "
4185
  "rate it. Thank you!"
4186
  msgstr ""
4187
 
4188
+ #: lib/utils.php:1346
4189
  msgid ""
4190
  "The attempt was blocked and the option was reversed to its original value."
4191
  msgstr ""
4192
 
4193
+ #: lib/utils.php:1351
4194
  msgid "Attempt to modify WordPress settings"
4195
  msgstr ""
4196
 
4197
+ #: lib/utils.php:1352
4198
  msgid ""
4199
  "NinjaFirewall has blocked an attempt to modify some important WordPress "
4200
  "settings by a user that does not have administrative privileges:"
4201
  msgstr ""
4202
 
4203
+ #: lib/utils.php:1353 lib/utils.php:1362
4204
  #, php-format
4205
  msgid "Option: %s"
4206
  msgstr ""
4207
 
4208
+ #: lib/utils.php:1354
4209
  #, php-format
4210
  msgid "Original value: %s"
4211
  msgstr ""
4212
 
4213
+ #: lib/utils.php:1355
4214
  #, php-format
4215
  msgid "Modified value: %s"
4216
  msgstr ""
4217
 
4218
+ #: lib/utils.php:1356 lib/utils.php:1364
4219
  #, php-format
4220
  msgid "Action taken: %s"
4221
  msgstr ""
4222
 
4223
+ #: lib/utils.php:1360
4224
  msgid "Code injection attempt in WordPress options table"
4225
  msgstr ""
4226
 
4227
+ #: lib/utils.php:1361
4228
  msgid ""
4229
  "NinjaFirewall has blocked an attempt to inject code in the WordPress options "
4230
  "table by a user that does not have administrative privileges:"
4231
  msgstr ""
4232
 
4233
+ #: lib/utils.php:1363
4234
  #, php-format
4235
  msgid "Code: %s"
4236
  msgstr ""
4237
 
4238
+ #: lib/utils.php:1384
4239
  msgid ""
4240
  "This protection (and notification) can be turned off from NinjaFirewall "
4241
  "\"Firewall Policies\" page."
4242
  msgstr ""
4243
 
4244
+ #: lib/utils.php:1418
4245
+ #, php-format
4246
+ msgid "Error, cannot create the %s folder."
4247
+ msgstr ""
4248
+
4249
+ #: lib/utils.php:1418 lib/utils.php:1426 lib/utils.php:1434
4250
+ msgid "Check your server permissions and try again."
4251
+ msgstr ""
4252
+
4253
+ #: lib/utils.php:1426
4254
+ #, php-format
4255
+ msgid "Error, the %s folder is not writable."
4256
+ msgstr ""
4257
+
4258
+ #: lib/utils.php:1434
4259
+ #, php-format
4260
+ msgid "Error, cannot write %s."
4261
+ msgstr ""
4262
+
4263
+ #: lib/wpplus.php:29
4264
+ msgid "Need more security?"
4265
  msgstr ""
4266
 
4267
+ #: lib/wpplus.php:34
4268
+ #, php-format
4269
  msgid ""
4270
+ "Take the time to explore NinjaFirewall %s, a supercharged Edition of our Web "
4271
+ "Application Firewall. It adds many new exciting features and blazing fast "
4272
+ "performances to make it the fastest and most powerful security plugin for "
4273
+ "WordPress, no less!"
4274
  msgstr ""
4275
 
4276
+ #: lib/wpplus.php:44
4277
+ msgid "New Features"
4278
+ msgstr ""
4279
+
4280
+ #: lib/wpplus.php:49
4281
  msgid "Access Control"
4282
  msgstr ""
4283
 
4284
+ #: lib/wpplus.php:50
4285
  msgid ""
4286
+ "Access Control is a powerful set of directives that can be used to allow or "
4287
+ "restrict access to your blog, depending on the <strong>User Role</strong>, "
4288
+ "<strong>IP</strong>, <strong>Geolocation</strong>, <strong>Requested URL</"
4289
+ "strong>, <strong>User-agent</strong> visitors behavior (<strong>Rate "
4290
+ "Limiting</strong>) and <strong>User Input</strong>. Those directives will be "
4291
+ "processed before the Firewall Policies and NinjaFirewall's built-in security "
4292
+ "rules."
4293
  msgstr ""
4294
 
4295
+ #: lib/wpplus.php:51
4296
  msgid ""
4297
  "Its main configuration allows you to whitelist WordPress users depending on "
4298
  "their roles, to select the source IP (useful if your site is using a CDN or "
4299
  "behind a reverse-proxy/load balancer), and the HTTP methods all directives "
4300
+ "should apply to."
4301
  msgstr ""
4302
 
4303
+ #: lib/wpplus.php:54 lib/wpplus.php:55 lib/wpplus.php:63 lib/wpplus.php:64
4304
+ #: lib/wpplus.php:81 lib/wpplus.php:82 lib/wpplus.php:93 lib/wpplus.php:94
4305
+ #: lib/wpplus.php:102 lib/wpplus.php:103 lib/wpplus.php:120 lib/wpplus.php:121
4306
+ #: lib/wpplus.php:129 lib/wpplus.php:130 lib/wpplus.php:147 lib/wpplus.php:148
4307
+ #: lib/wpplus.php:156 lib/wpplus.php:157 lib/wpplus.php:176 lib/wpplus.php:177
4308
+ #: lib/wpplus.php:193 lib/wpplus.php:194 lib/wpplus.php:202 lib/wpplus.php:203
4309
+ #: lib/wpplus.php:222 lib/wpplus.php:223 lib/wpplus.php:231 lib/wpplus.php:232
4310
+ msgid "Click to enlarge image."
4311
+ msgstr ""
4312
+
4313
+ #: lib/wpplus.php:67
4314
+ msgid "Geolocation Access Control"
4315
+ msgstr ""
4316
+
4317
+ #: lib/wpplus.php:68
4318
  msgid ""
4319
+ "Geolocation can be used to block visitors from specific countries. It can "
4320
+ "apply to the whole blog or only to specific folders or scripts (e.g., /wp-"
4321
+ "login.php, /xmlrpc.php etc). If you have a theme or a plugin that needs to "
4322
+ "know your visitors location, you can even ask NinjaFirewall to append the "
4323
+ "country code to the PHP headers."
4324
+ msgstr ""
4325
+
4326
+ #: lib/wpplus.php:77
4327
+ msgid "IP Access Control"
4328
  msgstr ""
4329
 
4330
+ #: lib/wpplus.php:78
4331
  msgid ""
4332
+ "The IP Access Control allows you to permanently allow or block an IP, a "
4333
+ "whole range of IP addresses <strong>and even AS numbers</strong> (Autonomous "
4334
+ "System number). IPv4 and IPv6 are fully supported by NinjaFirewall."
4335
  msgstr ""
4336
 
4337
+ #: lib/wpplus.php:88
4338
  msgid ""
4339
+ "The IP Access Control can slow down aggressive bots, crawlers, web scrapers "
4340
  "or even small HTTP attacks with its <strong>Rate-Limiting</strong> feature."
4341
  msgstr ""
4342
 
4343
+ #: lib/wpplus.php:90
4344
  msgid ""
4345
  "Because it can block attackers <strong>before WordPress and all its plugins "
4346
+ "are loaded</strong> and can handle a lot of HTTP requests per second, "
4347
  "NinjaFirewall will save precious bandwidth and reduce your server load."
4348
  msgstr ""
4349
 
4350
+ #: lib/wpplus.php:106
4351
+ msgid "URL Access Control"
4352
+ msgstr ""
4353
+
4354
+ #: lib/wpplus.php:107
4355
  msgid ""
4356
+ "URL Access Control lets you permanently allow/block any access to one or "
4357
+ "more PHP scripts based on their <code>SCRIPT_NAME</code>."
4358
+ msgstr ""
4359
+
4360
+ #: lib/wpplus.php:116
4361
+ msgid "Bot Access Control"
4362
  msgstr ""
4363
 
4364
+ #: lib/wpplus.php:117
4365
  msgid ""
4366
+ "Bot Access Control allows you block bots, scanners and various annoying "
4367
+ "crawlers."
4368
  msgstr ""
4369
 
4370
+ #: lib/wpplus.php:133
4371
+ msgid "User Input Access Control"
4372
+ msgstr ""
4373
+
4374
+ #: lib/wpplus.php:134
4375
  msgid ""
4376
+ "User Input Access Control allows you to to ignore or block some specific "
4377
+ "user input."
4378
  msgstr ""
4379
 
4380
+ #: lib/wpplus.php:143
4381
  msgid ""
4382
+ "The Web Filter can hook the response body, i.e., the output of the HTML "
4383
+ "page, and search it for some specific keywords. Such filter can be useful to "
4384
+ "identify errors, hacked content and data leakage issues in the response body "
4385
+ "sent to your visitors."
 
 
 
 
4386
  msgstr ""
4387
 
4388
+ #: lib/wpplus.php:144
4389
  msgid ""
4390
  "In the case of a positive detection, NinjaFirewall will not block the "
4391
  "response body but will send you an alert by email. It can even attach the "
4392
+ "whole HTML source of the page for your review."
4393
  msgstr ""
4394
 
4395
+ #: lib/wpplus.php:160
4396
  msgid "Antispam"
4397
  msgstr ""
4398
 
4399
+ #: lib/wpplus.php:161
4400
  msgid ""
4401
+ "The Antispam can protect your blog comment and registration forms against "
4402
+ "spam. The protection is totally transparent to your visitors and does not "
4403
+ "require any interaction: no CAPTCHA, no math puzzles or trivia questions. "
4404
+ "Extremely easy to activate, but powerful enough to make spam bots life as "
4405
+ "miserable as possible."
4406
  msgstr ""
4407
 
4408
+ #: lib/wpplus.php:162
4409
  msgid ""
4410
  "NinjaFirewall antispam feature works only with WordPress built-in comment "
4411
  "and registration forms."
4412
  msgstr ""
4413
 
4414
+ #: lib/wpplus.php:171
4415
  #, php-format
4416
  msgid ""
4417
+ "Centralized Logging lets you remotely access the firewall log of all your "
4418
+ "NinjaFirewall protected websites from one single installation, using the <a "
4419
+ "href=\"%s\">Centralized Logging</a> feature. You do not need any longer to "
4420
+ "log in to individual servers to analyse your log data."
 
4421
  msgstr ""
4422
 
4423
+ #: lib/wpplus.php:173
4424
  msgid ""
4425
  "There is no limit to the number of websites you can connect to, and they can "
4426
  "be running any edition of NinjaFirewall: WP, <font color=\"#21759B\">WP+</"
4427
  "font>, Pro or <font color=\"red\">Pro+</font>."
4428
  msgstr ""
4429
 
4430
+ #: lib/wpplus.php:184
4431
  msgid "Improved features"
4432
  msgstr ""
4433
 
4434
+ #: lib/wpplus.php:189
4435
+ msgid "File uploads"
4436
  msgstr ""
4437
 
4438
+ #: lib/wpplus.php:190
4439
  msgid ""
4440
+ "You can allow uploads while rejecting potentially dangerous files: scripts "
4441
+ "(PHP, CGI, Ruby, Python, bash/shell), C/C++ source code, binaries (MZ/PE/NE "
4442
+ "and ELF formats), system files (.htaccess, .htpasswd and PHP INI) and SVG "
4443
+ "files containing Javascript/XML events. You can easily limit the size of "
4444
+ "each uploaded file too, without having to modify your PHP configuration."
 
 
 
 
 
4445
  msgstr ""
4446
 
4447
+ #: lib/wpplus.php:208
4448
  msgid ""
4449
  "The log menu has been revamped too. You can disable the firewall log, delete "
4450
  "the current one, enable its rotation based on the size of the file and, if "
4451
  "any, view each rotated log separately. Quick filtering options are easily "
4452
  "accessible from checkboxes and the log can be exported as a TSV (tab-"
4453
+ "separated values) text file. You can also easily add any IP to your Access "
4454
+ "Control whitelist or blacklist."
4455
  msgstr ""
4456
 
4457
+ #: lib/wpplus.php:209
4458
  msgid ""
4459
  "It is also possible to redirect all incidents and events to the Syslog "
4460
  "server:"
4461
  msgstr ""
4462
 
4463
+ #: lib/wpplus.php:219
4464
+ msgid ""
4465
+ "You can check for security rules updates <b>as often as every 15 minutes</"
4466
+ "b>, versus one hour for the free WP Edition. Don't leave your blog at risk!"
4467
  msgstr ""
4468
 
4469
+ #: lib/wpplus.php:233
4470
  msgid ""
4471
+ "This feature requires that PHP was compiled with the <code>--enable-shmop</"
4472
+ "code> parameter and that NinjaFirewall is running in \"Full WAF\" mode."
 
4473
  msgstr ""
4474
 
4475
+ #: lib/wpplus.php:236
4476
+ msgid "Shared Memory use"
4477
  msgstr ""
4478
 
4479
+ #: lib/wpplus.php:238
4480
  #, php-format
4481
  msgid ""
4482
  "Although NinjaFirewall is already <a href=\"%s\">much faster than other "
4485
  "order to speed things up even more."
4486
  msgstr ""
4487
 
4488
+ #: lib/wpplus.php:238
4489
  msgid ""
4490
  "This allows easier and faster inter-process communication between the "
4491
  "firewall and the plugin part of NinjaFirewall and, because its data and "
4493
  "need to connect to the database any longer."
4494
  msgstr ""
4495
 
4496
+ #: lib/wpplus.php:238
4497
  msgid ""
4498
  "This dramatically increases the processing speed (there is nothing faster "
4499
  "than RAM), prevents blocking I/O and MySQL slow queries. On a very busy "
4500
  "server like a multi-site network, the firewall processing speed will "
4501
  "increase from 25% to 30%. It can be enabled from the \"Firewall Options\" "
4502
+ "menu."
 
 
 
 
 
 
4503
  msgstr ""
4504
 
4505
+ #: lib/wpplus.php:245
4506
  msgid ""
4507
  "Learn more</a> about the <font color=\"#21759B\">WP+</font> Edition unique "
4508
  "features."
4509
  msgstr ""
4510
 
4511
+ #: lib/wpplus.php:246
4512
  msgid "Compare</a> the WP and <font color=\"#21759B\">WP+</font> Editions."
4513
  msgstr ""
4514
 
4593
  msgid "The PHP msqli extension is missing or not loaded."
4594
  msgstr ""
4595
 
4596
+ #: ninjafirewall.php:82
4597
+ msgid "Cannot retrieve user options from database (#4)"
4598
+ msgstr ""
4599
+
4600
+ #: ninjafirewall.php:83
4601
+ msgid "Cannot retrieve user rules from database (#4)"
4602
+ msgstr ""
4603
+
4604
+ #: ninjafirewall.php:109
4605
  msgid ""
4606
  "You do not have \"unfiltered_html\" capability. Please enable it in order to "
4607
  "run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
4608
  "in your wp-config.php script)."
4609
  msgstr ""
4610
 
4611
+ #: ninjafirewall.php:116
4612
  #, php-format
4613
  msgid ""
4614
  "NinjaFirewall requires WordPress 3.3 or greater but your current version is "
4615
  "%s."
4616
  msgstr ""
4617
 
4618
+ #: ninjafirewall.php:120
4619
  #, php-format
4620
  msgid ""
4621
  "NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
4622
  msgstr ""
4623
 
4624
+ #: ninjafirewall.php:124
4625
  #, php-format
4626
  msgid "NinjaFirewall requires the PHP %s extension."
4627
  msgstr ""
4628
 
4629
+ #: ninjafirewall.php:128
4630
  msgid ""
4631
  "You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
4632
  "5.3.0 (see http://php.net/safe-mode)."
4633
  msgstr ""
4634
 
4635
+ #: ninjafirewall.php:132
4636
  msgid "You are not allowed to activate NinjaFirewall."
4637
  msgstr ""
4638
 
4639
+ #: ninjafirewall.php:136
4640
  msgid "NinjaFirewall is not compatible with Microsoft Windows."
4641
  msgstr ""
4642
 
4643
+ #: ninjafirewall.php:288
4644
+ msgid ""
4645
+ "All fields will be restored to their default values and any changes you made "
4646
+ "will be lost. Continue?"
4647
+ msgstr ""
4648
+
4649
+ #: ninjafirewall.php:292
4650
+ msgid "Missing security nonce, try to reload the page."
4651
+ msgstr ""
4652
+
4653
+ #: ninjafirewall.php:294
4654
+ msgid "Please select the HTTP server in the list."
4655
+ msgstr ""
4656
+
4657
+ #: ninjafirewall.php:298
4658
+ msgid ""
4659
+ "This action will restore the selected configuration file and will override "
4660
+ "all your current firewall options, policies and rules. Continue?"
4661
+ msgstr ""
4662
+
4663
+ #: ninjafirewall.php:302
4664
+ msgid ""
4665
+ "Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
4666
+ "hyphen [-] or an underscore [_] will be removed from the filename and "
4667
+ "replaced with the substitution character. Continue?"
4668
+ msgstr ""
4669
+
4670
+ #: ninjafirewall.php:304
4671
+ msgid ""
4672
+ "Ensure that you can access your admin console over HTTPS before enabling "
4673
+ "this option, otherwise you will lock yourself out of your site. Continue?"
4674
+ msgstr ""
4675
+
4676
+ #: ninjafirewall.php:308
4677
+ msgid "Delete the current snapshot ?"
4678
+ msgstr ""
4679
+
4680
+ #: ninjafirewall.php:312
4681
+ msgid "Invalid character."
4682
+ msgstr ""
4683
+
4684
+ #: ninjafirewall.php:314
4685
+ msgid "\"admin\" is not acceptable, please choose another user name."
4686
+ msgstr ""
4687
+
4688
+ #: ninjafirewall.php:316
4689
+ msgid "Please enter max 1024 character only."
4690
+ msgstr ""
4691
+
4692
+ #: ninjafirewall.php:318
4693
+ msgid "Select when to enable the login protection."
4694
+ msgstr ""
4695
+
4696
+ #: ninjafirewall.php:320
4697
+ msgid "Enter a name and a password for the HTTP authentication."
4698
+ msgstr ""
4699
+
4700
+ #: ninjafirewall.php:324
4701
+ msgid "Your public key is not valid."
4702
+ msgstr ""
4703
+
4704
+ #: ninjafirewall.php:328
4705
+ msgid "No traffic yet, please wait"
4706
+ msgstr ""
4707
+
4708
+ #: ninjafirewall.php:330
4709
+ msgid "seconds..."
4710
+ msgstr ""
4711
+
4712
+ #: ninjafirewall.php:332
4713
+ msgid "Error: Live Log did not receive the expected response from your server:"
4714
+ msgstr ""
4715
+
4716
+ #: ninjafirewall.php:334
4717
+ msgid "Error: URL does not seem to exist (404 Not Found):"
4718
+ msgstr ""
4719
+
4720
+ #: ninjafirewall.php:336
4721
+ msgid "Error: Cannot find your log file. Try to reload this page."
4722
+ msgstr ""
4723
+
4724
+ #: ninjafirewall.php:338
4725
+ msgid "Error: The HTTP server returned the following error code:"
4726
+ msgstr ""
4727
+
4728
+ #: ninjafirewall.php:561
4729
+ msgid "Error: Security nonces do not match. Reload the page and try again."
4730
+ msgstr ""
4731
+
4732
+ #: ninjafirewall.php:567
4733
+ msgid "Error: NinjaFirewall is disabled"
4734
+ msgstr ""
4735
+
4736
+ #: ninjafirewall.php:572
4737
+ #, php-format
4738
+ msgid "Error: missing parameter (%s)."
4739
+ msgstr ""
4740
+
4741
+ #: ninjafirewall.php:715
4742
  msgid "NinjaFirewall: Overview"
4743
  msgstr ""
4744
 
4745
+ #: ninjafirewall.php:720
4746
  msgid "NinjaFirewall: Statistics"
4747
  msgstr ""
4748
 
4749
+ #: ninjafirewall.php:725
4750
  msgid "NinjaFirewall: Firewall Options"
4751
  msgstr ""
4752
 
4753
+ #: ninjafirewall.php:729
4754
  msgid "NinjaFirewall: Firewall Policies"
4755
  msgstr ""
4756
 
4757
+ #: ninjafirewall.php:733
4758
  msgid "NinjaFirewall: File Guard"
4759
  msgstr ""
4760
 
4761
+ #: ninjafirewall.php:737
4762
  msgid "NinjaFirewall: File Check"
4763
  msgstr ""
4764
 
4765
+ #: ninjafirewall.php:747
4766
  msgid "NinjaFirewall: Anti-Malware"
4767
  msgstr ""
4768
 
4769
+ #: ninjafirewall.php:751
4770
  msgid "NinjaFirewall: Network"
4771
  msgstr ""
4772
 
4773
+ #: ninjafirewall.php:755
4774
  msgid "NinjaFirewall: Event Notifications"
4775
  msgstr ""
4776
 
4777
+ #: ninjafirewall.php:759
4778
  msgid "NinjaFirewall: Log-in Protection"
4779
  msgstr ""
4780
 
4781
+ #: ninjafirewall.php:763
4782
  msgid "NinjaFirewall: Firewall Log"
4783
  msgstr ""
4784
 
4785
+ #: ninjafirewall.php:767
4786
  msgid "NinjaFirewall: Live Log"
4787
  msgstr ""
4788
 
4789
+ #: ninjafirewall.php:771
4790
  msgid "NinjaFirewall: Rules Editor"
4791
  msgstr ""
4792
 
4793
+ #: ninjafirewall.php:775
4794
  msgid "NinjaFirewall: Rules Update"
4795
  msgstr ""
4796
 
4797
+ #: ninjafirewall.php:782
4798
  msgid "NinjaFirewall: About"
4799
  msgstr ""
4800
 
4801
+ #: ninjafirewall.php:782
4802
  msgid "About..."
4803
  msgstr ""
4804
 
4805
+ #: ninjafirewall.php:822
4806
  msgid "NinjaFirewall Settings"
4807
  msgstr ""
4808
 
4809
+ #: ninjafirewall.php:830
4810
  msgid "NinjaFirewall is enabled"
4811
  msgstr ""
4812
 
4813
+ #: ninjafirewall.php:1010
4814
  msgid "Access Restricted"
4815
  msgstr ""
4816
 
4817
+ #: ninjafirewall.php:1016
4818
  msgid "Settings"
4819
  msgstr ""
4820
 
4821
+ #: ninjafirewall.php:1017
4822
  msgid "Upgrade to Premium"
4823
  msgstr ""
4824
 
4825
+ #: ninjafirewall.php:1018
4826
  msgid "Rate it!"
4827
  msgstr ""
lib/about.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -31,29 +31,11 @@ if ( $data = @file_get_contents( dirname( plugin_dir_path(__FILE__) ) . '/readme
31
  $changelog = __('Error : cannot find changelog :(', 'ninjafirewall');
32
  }
33
 
34
- // Hide/show the corresponding table when the user clicks a button
35
- // (e.g., changelog, privacy policy etc) :
36
- echo '<script>
37
- function show_table(table_id) {
38
- var av_table = [11, 12, 13, 14, 15];
39
- for (var i = 0; i < av_table.length; ++i) {
40
- if ( table_id == av_table[i] ) {
41
- jQuery("#" + table_id).slideDown();
42
- } else {
43
- jQuery("#" + av_table[i]).slideUp();
44
- }
45
- };
46
- }
47
- var dgs=0;
48
- function nfw_eg() {
49
- setTimeout("nfw_eg()",5);if(dgs<180){++dgs;document.body.style.webkitTransform = "rotate("+dgs+"deg)";document.body.style.msTransform = "rotate("+dgs+"deg)";document.body.style.transform = "rotate("+dgs+"deg)";}document.body.style.overflow="hidden";
50
- }
51
- </script>
52
  <div class="wrap">
53
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('About', 'ninjafirewall') . '</h1>
54
  <br />
55
- <center>';
56
- ?>
57
  <table border="0" width="80%" style="padding:10px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#749BBB;border:1px solid #638DB0;color:#fff;border-radius:6px">
58
  <tr>
59
  <td style="text-align:center">
@@ -62,7 +44,7 @@ function nfw_eg() {
62
  <font onContextMenu="nfw_eg();return false;">&copy;</font> 2012-<?php echo date( 'Y' ) ?> <a href="https://nintechnet.com/" target="_blank" title="The Ninja Technologies Network" style="color:#fcdc25"><strong>NinTechNet</strong></a>
63
  <br />
64
  The Ninja Technologies Network
65
- <p><a href="https://twitter.com/nintechnet"><img border="1" src="<?php echo plugins_url() ?>/ninjafirewall/images/twitter_ntn.png" width="116" height="28" target="_blank"></a></p>
66
  </td>
67
  </tr>
68
  <tr style="text-align:center">
@@ -97,17 +79,14 @@ function nfw_eg() {
97
  echo '
98
  <br />
99
  <br />
100
- <input class="button-secondary" type="button" value="' . __('Changelog', 'ninjafirewall') . '" onclick="show_table(12);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-primary" type="button" value="' . __('Spread the word!', 'ninjafirewall') . '" onclick="show_table(11);" active>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-secondary" type="button" value="' . __('Referral Program', 'ninjafirewall') . '" onclick="show_table(14);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-secondary" type="button" value="' . __('System Info', 'ninjafirewall') . '" onclick="show_table(13);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-secondary" type="button" value="' . __('GDPR Compliance', 'ninjafirewall') . '" onclick="show_table(15);">
101
  <br />
102
  <br />
103
-
104
  <div id="11">
105
  <table style="text-align:justify;border:2px #749BBB solid;padding:6px;border-radius:4px" border="0" width="600">
106
  <tr style="text-align:center;">
107
- <td><a href="http://www.facebook.com/sharer.php?u=https://nintechnet.com/" target="_blank"><img title="Share it" src="' . plugins_url() . '/ninjafirewall/images/facebook.png" width="90" height="90" style="border: 0px solid #DFDFDF;padding:0px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#FCFCFC;"></a></td>
108
- <td><a href="https://plus.google.com/share?url=https://nintechnet.com/" target="_blank"><img title="Share it" src="' . plugins_url() . '/ninjafirewall/images/google.png" width="90" height="90" style="border: 0px solid #DFDFDF;padding:0px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#FCFCFC;"></a></td>
109
- <td><a href="http://twitter.com/share?text=NinjaFirewall&url=https://nintechnet.com/" target="_blank"><img title="Share it" src="' . plugins_url() . '/ninjafirewall/images/twitter.png" width="90" height="90" style="border: 0px solid #DFDFDF;padding:0px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#FCFCFC;"></a></td>
110
- <td><a href="https://wordpress.org/support/view/plugin-reviews/ninjafirewall?rate=5#postform"><img title="Rate it" border="0" src="'. plugins_url() .'/ninjafirewall/images/rate.png" width="116" height="28" style="border: 0px solid #DFDFDF;padding:0px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#FCFCFC;"><br />Rate it on WordPress.org!</a>
111
  </td>
112
  </tr>
113
  </table>
@@ -203,5 +182,5 @@ echo '
203
  </center>
204
  </div>';
205
 
206
- /* ------------------------------------------------------------------ */
207
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
31
  $changelog = __('Error : cannot find changelog :(', 'ninjafirewall');
32
  }
33
 
34
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  <div class="wrap">
36
+ <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('About', 'ninjafirewall') ?></h1>
37
  <br />
38
+ <center>
 
39
  <table border="0" width="80%" style="padding:10px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#749BBB;border:1px solid #638DB0;color:#fff;border-radius:6px">
40
  <tr>
41
  <td style="text-align:center">
44
  <font onContextMenu="nfw_eg();return false;">&copy;</font> 2012-<?php echo date( 'Y' ) ?> <a href="https://nintechnet.com/" target="_blank" title="The Ninja Technologies Network" style="color:#fcdc25"><strong>NinTechNet</strong></a>
45
  <br />
46
  The Ninja Technologies Network
47
+ <br />&nbsp;
48
  </td>
49
  </tr>
50
  <tr style="text-align:center">
79
  echo '
80
  <br />
81
  <br />
82
+ <input class="button-secondary" type="button" value="' . __('Changelog', 'ninjafirewall') . '" onclick="nfwjs_about_table(12);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-primary" type="button" value="' . __('Spread the word!', 'ninjafirewall') . '" onclick="nfwjs_about_table(11);" active>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-secondary" type="button" value="' . __('Referral Program', 'ninjafirewall') . '" onclick="nfwjs_about_table(14);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-secondary" type="button" value="' . __('System Info', 'ninjafirewall') . '" onclick="nfwjs_about_table(13);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input class="button-secondary" type="button" value="' . __('GDPR Compliance', 'ninjafirewall') . '" onclick="nfwjs_about_table(15);">
83
  <br />
84
  <br />
 
85
  <div id="11">
86
  <table style="text-align:justify;border:2px #749BBB solid;padding:6px;border-radius:4px" border="0" width="600">
87
  <tr style="text-align:center;">
88
+ <td style="width:50%;vertical-align:top"><a href="https://twitter.com/nintechnet"><img border="1" src="'. plugins_url() .'/ninjafirewall/images/twitter_ntn.png" width="116" height="28" target="_blank"><br /><br />'. __('Stay informed about the latest vulnerabilities in WordPress plugins and themes.', 'ninjafirewall') .'</a></td>
89
+ <td style="width:50%;vertical-align:top"><a href="https://wordpress.org/support/view/plugin-reviews/ninjafirewall?rate=5#postform"><img title="Rate it" border="0" src="'. plugins_url() .'/ninjafirewall/images/rate.png" width="116" height="28" style="border: 0px solid #DFDFDF;padding:0px;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;background-color:#FCFCFC;"><br /><br />'. __('Rate it on WordPress.org!', 'ninjafirewall') .'</a>
 
 
90
  </td>
91
  </tr>
92
  </table>
182
  </center>
183
  </div>';
184
 
185
+ // ---------------------------------------------------------------------
186
  // EOF
lib/dashboard_widget.php CHANGED
@@ -83,7 +83,7 @@ function nfw_stats_widget(){
83
  </td>
84
  </tr>
85
  </table>
86
- <div align="right"><small><a href="admin.php?page=nfsublog">' . __('View firewall log', 'ninjafirewall') .'</a></small></div>';
87
  }
88
- /* ================================================================== */
89
  // EOF
83
  </td>
84
  </tr>
85
  </table>
86
+ <div align="right"><small><a href="admin.php?page=nfsubstat">' . __('View statistics', 'ninjafirewall') .'</a></small>&nbsp;&nbsp;-&nbsp;&nbsp;<small><a href="admin.php?page=nfsublog">' . __('View firewall log', 'ninjafirewall') .'</a></small></div>';
87
  }
88
+ // =====================================================================
89
  // EOF
lib/event_notifications.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -30,18 +30,7 @@ nf_not_allowed( 'block', __LINE__ );
30
 
31
  $nfw_options = nfw_get_option( 'nfw_options' );
32
 
33
- echo '<script>
34
- function ac_radio_toogle(on_off, rbutton) {
35
- var what = "nfw_options["+rbutton+"]";
36
- if (on_off) {
37
- document.nfwalerts.elements[what].disabled = false;
38
- document.nfwalerts.elements[what].focus();
39
- } else {
40
- document.nfwalerts.elements[what].disabled = true;
41
- }
42
- }
43
- </script>
44
- <div class="wrap">
45
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Event Notifications', 'ninjafirewall') . '</h1>';
46
 
47
  // Saved ?
@@ -61,9 +50,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
61
  <form method="post" name="nfwalerts">
62
  <?php wp_nonce_field('events_save', 'nfwnonce', 0); ?>
63
  <h3><?php _e('WordPress admin dashboard', 'ninjafirewall') ?></h3>
64
- <table class="form-table">
65
  <tr>
66
- <th scope="row"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
67
  <td>
68
  <p><label><input type="radio" name="nfw_options[a_0]" value="1"<?php checked( $nfw_options['a_0'], 1) ?>>&nbsp;<?php _e('An administrator logs in (default)', 'ninjafirewall') ?></label></p>
69
  <p><label><input type="radio" name="nfw_options[a_0]" value="2"<?php checked( $nfw_options['a_0'], 2) ?>>&nbsp;<?php _e('Someone - user, admin, editor, etc - logs in', 'ninjafirewall') ?></label></p>
@@ -75,9 +64,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
75
  <br />
76
 
77
  <h3><?php _e('Plugins', 'ninjafirewall') ?></h3>
78
- <table class="form-table">
79
  <tr>
80
- <th scope="row"><?php _e('Send me an alert whenever someone', 'ninjafirewall') ?></th>
81
  <td>
82
  <p><label><input type="checkbox" name="nfw_options[a_11]" value="1"<?php checked( $nfw_options['a_11'], 1) ?>>&nbsp;<?php _e('Uploads a plugin (default)', 'ninjafirewall') ?></label></p>
83
  <p><label><input type="checkbox" name="nfw_options[a_12]" value="1"<?php checked( $nfw_options['a_12'], 1) ?>>&nbsp;<?php _e('Installs a plugin (default)', 'ninjafirewall') ?></label></p>
@@ -92,9 +81,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
92
  <br />
93
 
94
  <h3><?php _e('Themes', 'ninjafirewall') ?></h3>
95
- <table class="form-table">
96
  <tr>
97
- <th scope="row"><?php _e('Send me an alert whenever someone', 'ninjafirewall') ?></th>
98
  <td>
99
  <p><label><input type="checkbox" name="nfw_options[a_21]" value="1"<?php checked( $nfw_options['a_21'], 1) ?>>&nbsp;<?php _e('Uploads a theme (default)', 'ninjafirewall') ?></label></p>
100
  <p><label><input type="checkbox" name="nfw_options[a_22]" value="1"<?php checked( $nfw_options['a_22'], 1) ?>>&nbsp;<?php _e('Installs a theme (default)', 'ninjafirewall') ?></label></p>
@@ -107,9 +96,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
107
  <br />
108
 
109
  <h3><?php _e('Core', 'ninjafirewall') ?></h3>
110
- <table class="form-table">
111
  <tr>
112
- <th scope="row"><?php _e('Send me an alert whenever someone', 'ninjafirewall') ?></th>
113
  <td>
114
  <p><label><input type="checkbox" name="nfw_options[a_31]" value="1"<?php checked( $nfw_options['a_31'], 1) ?>>&nbsp;<?php _e('Updates WordPress (default)', 'ninjafirewall') ?></label></p>
115
  </td>
@@ -130,9 +119,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
130
  }
131
  ?>
132
  <h3><?php _e('Administrator account', 'ninjafirewall') ?></h3>
133
- <table class="form-table">
134
  <tr>
135
- <th scope="row"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
136
  <td>
137
  <p><label><input type="checkbox" name="nfw_options[a_51]" value="1"<?php checked( $nfw_options['a_51'], 1) ?>>&nbsp;<?php _e('An administrator account is created, modified or deleted in the database (default)', 'ninjafirewall') ?></label></p>
138
  <p><label><input type="checkbox" name="nfw_options[a_53]" value="1"<?php checked( $nfw_options['a_53'], 1) ?>>&nbsp;<?php _e('A user attempts to gain administrative privileges (default)', 'ninjafirewall') ?></label></p>
@@ -143,11 +132,11 @@ if (! isset( $nfw_options['a_0'] ) ) {
143
  <br />
144
 
145
  <h3><?php _e('Daily report', 'ninjafirewall') ?></h3>
146
- <table class="form-table">
147
  <tr>
148
- <th scope="row"><?php _e('Send me a daily activity report', 'ninjafirewall') ?></th>
149
  <td>
150
- <p><label><input type="checkbox" name="nfw_options[a_52]" value="1"<?php checked( $nfw_options['a_52'], 1) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label></p>
151
  </td>
152
  </tr>
153
  </table>
@@ -155,11 +144,11 @@ if (! isset( $nfw_options['a_0'] ) ) {
155
  <br />
156
 
157
  <h3><?php _e('Log', 'ninjafirewall') ?></h3>
158
- <table class="form-table">
159
  <tr>
160
- <th scope="row"><?php _e('Write all events to the firewall log', 'ninjafirewall') ?></th>
161
  <td>
162
- <p><label><input type="checkbox" name="nfw_options[a_41]" value="1"<?php checked( $nfw_options['a_41'], 1) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label></p>
163
  </td>
164
  </tr>
165
  </table>
@@ -172,9 +161,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
172
  }
173
  ?>
174
  <h3><?php _e('PHP backtrace', 'ninjafirewall') ?></h3>
175
- <table class="form-table">
176
  <tr>
177
- <th scope="row"><?php _e('Attach a PHP backtrace to important notifications', 'ninjafirewall') ?></th>
178
  <td>
179
  <select name="nfw_options[a_61]">
180
  <option value="off"<?php selected( $nfw_options['a_61'], -1) ?>><?php _e('Disable backtrace', 'ninjafirewall') ?></option>
@@ -193,9 +182,9 @@ if (! isset( $nfw_options['a_0'] ) ) {
193
  if (! is_multisite() ) {
194
  ?>
195
  <h3><?php _e('Contact email', 'ninjafirewall') ?></h3>
196
- <table class="form-table">
197
- <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
198
- <th scope="row"><?php _e('Alerts should be sent to', 'ninjafirewall') ?></th>
199
  <td>
200
  <input class="regular-text" type="text" name="nfw_options[alert_email]" size="45" maxlength="250" value="<?php
201
  if ( empty( $nfw_options['alert_email'])) {
@@ -223,9 +212,9 @@ if (! is_multisite() ) {
223
  }
224
  ?>
225
  <h3><?php _e('Contact email', 'ninjafirewall') ?></h3>
226
- <table class="form-table">
227
- <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
228
- <th scope="row"><?php _e('Alerts should be sent to', 'ninjafirewall') ?></th>
229
  <td>
230
  <p><label><input type="radio" name="nfw_options[alert_sa_only]" value="1"<?php checked( $nfw_options['alert_sa_only'], 1 ) ?> onclick="ac_radio_toogle(0,'alert_multirec');" />&nbsp;<?php _e('Only to me, the Super Admin', 'ninjafirewall') ?>, <?php echo '<code>'. htmlspecialchars(get_option('admin_email')) . '</code>'; ?> (<?php _e('default', 'ninjafirewall') ?>)</label></p>
231
  <p><label><input type="radio" name="nfw_options[alert_sa_only]" value="2"<?php checked( $nfw_options['alert_sa_only'], 2) ?> onclick="ac_radio_toogle(0,'alert_multirec');" />&nbsp;<?php _e('To the administrator of the site where originated the alert', 'ninjafirewall') ?></label></p>
@@ -248,7 +237,7 @@ if (! is_multisite() ) {
248
  </div>
249
  <?php
250
 
251
- /* ------------------------------------------------------------------ */
252
 
253
  function nf_sub_event_save() {
254
 
@@ -397,7 +386,7 @@ function nf_sub_event_save() {
397
 
398
  }
399
 
400
- /* ------------------------------------------------------------------ */
401
 
402
  function nf_daily_report() {
403
 
@@ -422,7 +411,7 @@ function nf_daily_report() {
422
  nf_daily_report_email($recipient, $logstats);
423
 
424
  }
425
- /* ------------------------------------------------------------------ */
426
  function nf_daily_report_log() {
427
 
428
  nfw_get_blogtimezone();
@@ -465,7 +454,7 @@ function nf_daily_report_log() {
465
  return $logstats;
466
  }
467
 
468
- /* ------------------------------------------------------------------ */
469
 
470
  function nf_daily_report_email($recipient, $logstats) {
471
 
@@ -503,5 +492,5 @@ function nf_daily_report_email($recipient, $logstats) {
503
 
504
  }
505
 
506
- /* ------------------------------------------------------------------ */
507
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
30
 
31
  $nfw_options = nfw_get_option( 'nfw_options' );
32
 
33
+ echo '<div class="wrap">
 
 
 
 
 
 
 
 
 
 
 
34
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Event Notifications', 'ninjafirewall') . '</h1>';
35
 
36
  // Saved ?
50
  <form method="post" name="nfwalerts">
51
  <?php wp_nonce_field('events_save', 'nfwnonce', 0); ?>
52
  <h3><?php _e('WordPress admin dashboard', 'ninjafirewall') ?></h3>
53
+ <table class="form-table nfw-table">
54
  <tr>
55
+ <th scope="row" class="row-med"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
56
  <td>
57
  <p><label><input type="radio" name="nfw_options[a_0]" value="1"<?php checked( $nfw_options['a_0'], 1) ?>>&nbsp;<?php _e('An administrator logs in (default)', 'ninjafirewall') ?></label></p>
58
  <p><label><input type="radio" name="nfw_options[a_0]" value="2"<?php checked( $nfw_options['a_0'], 2) ?>>&nbsp;<?php _e('Someone - user, admin, editor, etc - logs in', 'ninjafirewall') ?></label></p>
64
  <br />
65
 
66
  <h3><?php _e('Plugins', 'ninjafirewall') ?></h3>
67
+ <table class="form-table nfw-table">
68
  <tr>
69
+ <th scope="row" class="row-med"><?php _e('Send me an alert whenever someone', 'ninjafirewall') ?></th>
70
  <td>
71
  <p><label><input type="checkbox" name="nfw_options[a_11]" value="1"<?php checked( $nfw_options['a_11'], 1) ?>>&nbsp;<?php _e('Uploads a plugin (default)', 'ninjafirewall') ?></label></p>
72
  <p><label><input type="checkbox" name="nfw_options[a_12]" value="1"<?php checked( $nfw_options['a_12'], 1) ?>>&nbsp;<?php _e('Installs a plugin (default)', 'ninjafirewall') ?></label></p>
81
  <br />
82
 
83
  <h3><?php _e('Themes', 'ninjafirewall') ?></h3>
84
+ <table class="form-table nfw-table">
85
  <tr>
86
+ <th scope="row" class="row-med"><?php _e('Send me an alert whenever someone', 'ninjafirewall') ?></th>
87
  <td>
88
  <p><label><input type="checkbox" name="nfw_options[a_21]" value="1"<?php checked( $nfw_options['a_21'], 1) ?>>&nbsp;<?php _e('Uploads a theme (default)', 'ninjafirewall') ?></label></p>
89
  <p><label><input type="checkbox" name="nfw_options[a_22]" value="1"<?php checked( $nfw_options['a_22'], 1) ?>>&nbsp;<?php _e('Installs a theme (default)', 'ninjafirewall') ?></label></p>
96
  <br />
97
 
98
  <h3><?php _e('Core', 'ninjafirewall') ?></h3>
99
+ <table class="form-table nfw-table">
100
  <tr>
101
+ <th scope="row" class="row-med"><?php _e('Send me an alert whenever someone', 'ninjafirewall') ?></th>
102
  <td>
103
  <p><label><input type="checkbox" name="nfw_options[a_31]" value="1"<?php checked( $nfw_options['a_31'], 1) ?>>&nbsp;<?php _e('Updates WordPress (default)', 'ninjafirewall') ?></label></p>
104
  </td>
119
  }
120
  ?>
121
  <h3><?php _e('Administrator account', 'ninjafirewall') ?></h3>
122
+ <table class="form-table nfw-table">
123
  <tr>
124
+ <th scope="row" class="row-med"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
125
  <td>
126
  <p><label><input type="checkbox" name="nfw_options[a_51]" value="1"<?php checked( $nfw_options['a_51'], 1) ?>>&nbsp;<?php _e('An administrator account is created, modified or deleted in the database (default)', 'ninjafirewall') ?></label></p>
127
  <p><label><input type="checkbox" name="nfw_options[a_53]" value="1"<?php checked( $nfw_options['a_53'], 1) ?>>&nbsp;<?php _e('A user attempts to gain administrative privileges (default)', 'ninjafirewall') ?></label></p>
132
  <br />
133
 
134
  <h3><?php _e('Daily report', 'ninjafirewall') ?></h3>
135
+ <table class="form-table nfw-table">
136
  <tr>
137
+ <th scope="row" class="row-med"><?php _e('Send me a daily activity report', 'ninjafirewall') ?></th>
138
  <td>
139
+ <?php nfw_toggle_switch( 'info', 'nfw_options[a_52]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $nfw_options['a_52'] ) ?>
140
  </td>
141
  </tr>
142
  </table>
144
  <br />
145
 
146
  <h3><?php _e('Log', 'ninjafirewall') ?></h3>
147
+ <table class="form-table nfw-table">
148
  <tr>
149
+ <th scope="row" class="row-med"><?php _e('Write all events to the firewall log', 'ninjafirewall') ?></th>
150
  <td>
151
+ <?php nfw_toggle_switch( 'info', 'nfw_options[a_41]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $nfw_options['a_41'] ) ?>
152
  </td>
153
  </tr>
154
  </table>
161
  }
162
  ?>
163
  <h3><?php _e('PHP backtrace', 'ninjafirewall') ?></h3>
164
+ <table class="form-table nfw-table">
165
  <tr>
166
+ <th scope="row" class="row-med"><?php _e('Attach a PHP backtrace to important notifications', 'ninjafirewall') ?></th>
167
  <td>
168
  <select name="nfw_options[a_61]">
169
  <option value="off"<?php selected( $nfw_options['a_61'], -1) ?>><?php _e('Disable backtrace', 'ninjafirewall') ?></option>
182
  if (! is_multisite() ) {
183
  ?>
184
  <h3><?php _e('Contact email', 'ninjafirewall') ?></h3>
185
+ <table class="form-table nfw-table">
186
+ <tr>
187
+ <th scope="row" class="row-med"><?php _e('Alerts should be sent to', 'ninjafirewall') ?></th>
188
  <td>
189
  <input class="regular-text" type="text" name="nfw_options[alert_email]" size="45" maxlength="250" value="<?php
190
  if ( empty( $nfw_options['alert_email'])) {
212
  }
213
  ?>
214
  <h3><?php _e('Contact email', 'ninjafirewall') ?></h3>
215
+ <table class="form-table nfw-table">
216
+ <tr>
217
+ <th scope="row" class="row-med"><?php _e('Alerts should be sent to', 'ninjafirewall') ?></th>
218
  <td>
219
  <p><label><input type="radio" name="nfw_options[alert_sa_only]" value="1"<?php checked( $nfw_options['alert_sa_only'], 1 ) ?> onclick="ac_radio_toogle(0,'alert_multirec');" />&nbsp;<?php _e('Only to me, the Super Admin', 'ninjafirewall') ?>, <?php echo '<code>'. htmlspecialchars(get_option('admin_email')) . '</code>'; ?> (<?php _e('default', 'ninjafirewall') ?>)</label></p>
220
  <p><label><input type="radio" name="nfw_options[alert_sa_only]" value="2"<?php checked( $nfw_options['alert_sa_only'], 2) ?> onclick="ac_radio_toogle(0,'alert_multirec');" />&nbsp;<?php _e('To the administrator of the site where originated the alert', 'ninjafirewall') ?></label></p>
237
  </div>
238
  <?php
239
 
240
+ // ---------------------------------------------------------------------
241
 
242
  function nf_sub_event_save() {
243
 
386
 
387
  }
388
 
389
+ // ---------------------------------------------------------------------
390
 
391
  function nf_daily_report() {
392
 
411
  nf_daily_report_email($recipient, $logstats);
412
 
413
  }
414
+ // ---------------------------------------------------------------------
415
  function nf_daily_report_log() {
416
 
417
  nfw_get_blogtimezone();
454
  return $logstats;
455
  }
456
 
457
+ // ---------------------------------------------------------------------
458
 
459
  function nf_daily_report_email($recipient, $logstats) {
460
 
492
 
493
  }
494
 
495
+ // ---------------------------------------------------------------------
496
  // EOF
lib/file_check.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -140,9 +140,9 @@ if (! file_exists($nfmon_snapshot) ) {
140
  <br />
141
  <form method="post" name="monitor_form">
142
  <?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
143
- <table class="form-table">
144
  <tr>
145
- <th scope="row"><?php _e('Create a snapshot of all files stored in that directory', 'ninjafirewall') ?></th>
146
  <td><input class="large-text" type="text" name="snapdir" value="<?php
147
  if (! empty($nfw_options['snapdir']) ) {
148
  echo htmlspecialchars($nfw_options['snapdir']);
@@ -150,18 +150,20 @@ if (! file_exists($nfmon_snapshot) ) {
150
  echo htmlspecialchars(ABSPATH);
151
  }
152
  ?>" required />
153
- <span class="description"><?php printf( __('Default: %s', 'ninjafirewall'), htmlentities( rtrim( ABSPATH, '/\\ ' ) ) ) ?></span>
154
  </td>
155
  </tr>
156
 
157
  <tr>
158
- <th scope="row"><?php _e('Exclude the following files/folders (optional)', 'ninjafirewall') ?></th>
159
- <td><input class="large-text" type="text" name="snapexclude" value="<?php echo htmlentities($nfw_options['snapexclude']); ?>" placeholder="<?php _e('e.g.,', 'ninjafirewall') ?> /wp-content/nfwlog/" maxlength="255"><br /><span class="description"><?php _e('Full or partial case-sensitive string(s). Multiple values must be comma-separated', 'ninjafirewall') ?> (<code>,</code>).</span></td>
160
  </tr>
161
 
162
  <tr>
163
- <th scope="row">&nbsp;</th>
164
- <td><label><input type="checkbox" name="snapnoslink" value="1" checked="checked" /><?php _e('Do not follow symbolic links (default)', 'ninjafirewall') ?></label></td>
 
 
165
  </tr>
166
 
167
  </table>
@@ -229,86 +231,12 @@ if (file_exists($nfmon_diff) ) {
229
  } else {
230
  $mod = 0;
231
  }
232
- ?>
233
- <script>
234
- <?php if ($mod) { ?>
235
- function file_info(what, where) {
236
- if ( what == '' ) { return false; }
237
-
238
- // Because we use a "multiple" select for aesthetic purposes
239
- // but don't want the user to select multiple files, we focus
240
- // only on the currently selected one:
241
- var current_item = jQuery('#select-'+ where ).prop('selectedIndex');
242
- jQuery('#select-'+ where ).prop('selectedIndex',current_item);
243
-
244
- // New file :
245
- if (where == 1) {
246
- <?php if ($new_file) { ?>
247
- var nfo = what.split(':');
248
- document.getElementById('new_size').innerHTML = nfo[3];
249
- document.getElementById('new_chmod').innerHTML = nfo[0];
250
- document.getElementById('new_uidgid').innerHTML = nfo[1] + ' / ' + nfo[2];
251
- document.getElementById('new_mtime').innerHTML = nfo[4].replace(/~/g, ':');
252
- document.getElementById('new_ctime').innerHTML = nfo[5].replace(/~/g, ':');
253
- document.getElementById('table_new').style.display = '';
254
- <?php } ?>
255
- // Modified file :
256
- } else if (where == 2) {
257
- <?php if ($mod_file) { ?>
258
- var all = what.split('::');
259
- var nfo = all[0].split(':');
260
- var nfo2 = all[1].split(':');
261
- document.getElementById('mod_size').innerHTML = nfo[3];
262
- if (nfo[3] != nfo2[3]) {
263
- document.getElementById('mod_size2').innerHTML = '<font color="red">'+ nfo2[3] +'</font>';
264
- } else {
265
- document.getElementById('mod_size2').innerHTML = nfo2[3];
266
- }
267
- document.getElementById('mod_chmod').innerHTML = nfo[0];
268
- if (nfo[0] != nfo2[0]) {
269
- document.getElementById('mod_chmod2').innerHTML = '<font color="red">'+ nfo2[0] +'</font>';
270
- } else {
271
- document.getElementById('mod_chmod2').innerHTML = nfo2[0];
272
- }
273
- document.getElementById('mod_uidgid').innerHTML = nfo[1] + ' / ' + nfo[2];
274
- if ( (nfo[1] != nfo2[1]) || (nfo[2] != nfo2[2]) ) {
275
- document.getElementById('mod_uidgid2').innerHTML = '<font color="red">'+ nfo2[1] + '/' + nfo2[2] +'</font>';
276
- } else {
277
- document.getElementById('mod_uidgid2').innerHTML = nfo2[1] + ' / ' + nfo2[2];
278
- }
279
- document.getElementById('mod_mtime').innerHTML = nfo[4].replace(/~/g, ':');
280
- if (nfo[4] != nfo2[4]) {
281
- document.getElementById('mod_mtime2').innerHTML = '<font color="red">'+ nfo2[4].replace(/~/g, ':') +'</font>';
282
- } else {
283
- document.getElementById('mod_mtime2').innerHTML = nfo2[4].replace(/~/g, ':');
284
- }
285
- document.getElementById('mod_ctime').innerHTML = nfo[5].replace(/~/g, ':');
286
- if (nfo[5] != nfo2[5]) {
287
- document.getElementById('mod_ctime2').innerHTML = '<font color="red">'+ nfo2[5].replace(/~/g, ':') +'</font>';
288
- } else {
289
- document.getElementById('mod_ctime2').innerHTML = nfo2[5].replace(/~/g, ':');
290
- }
291
- document.getElementById('table_mod').style.display = '';
292
- <?php } ?>
293
- }
294
- }
295
- <?php } ?>
296
- function delit() {
297
- if (confirm("<?php echo esc_js( __('Delete the current snapshot?', 'ninjafirewall') ) ?>") ) {
298
- return true;
299
- }
300
- return false;
301
- }
302
- function nftoogle() {
303
- jQuery("#changes_table").slideDown();
304
- document.getElementById('vcbtn').disabled = true;
305
- }
306
- </script>
307
  <br />
308
 
309
- <table class="form-table">
310
  <tr>
311
- <th scope="row"><?php _e('Last snapshot', 'ninjafirewall') ?></th>
312
  <td>
313
  <p><?php printf( __('Created on: %s', 'ninjafirewall'), date_i18n('M d, Y @ H:i:s O', $stat['ctime'])); ?></p>
314
  <p><?php printf( __('Total files: %s ', 'ninjafirewall'), number_format_i18n($count) ); ?></p>
@@ -336,12 +264,12 @@ if (file_exists($nfmon_diff) ) {
336
  ?>
337
  <form method="post">
338
  <?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
339
- <p><input type="submit" name="dlsnap" value="<?php _e('Download Snapshot', 'ninjafirewall') ?>" class="button-secondary" />&nbsp;&nbsp;&nbsp;<input type="submit" class="button-secondary" onClick="return delit();" value="<?php _e('Delete Snapshot', 'ninjafirewall') ?>" /><input type="hidden" name="nfw_act" value="delete" /></p>
340
  </form>
341
  </td>
342
  </tr>
343
  <tr>
344
- <th scope="row"><?php _e('Last changes', 'ninjafirewall') ?></th>
345
  <td>
346
 
347
  <?php
@@ -354,7 +282,7 @@ if (file_exists($nfmon_diff) ) {
354
 
355
  <form method="post">
356
  <?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
357
- <p><input type="button" value="<?php _e('View Changes', 'ninjafirewall') ?>" onClick="nftoogle();" class="button-secondary" id="vcbtn" <?php
358
  if (! empty($changes)) {
359
  echo 'disabled="disabled" ';
360
  }
@@ -374,32 +302,32 @@ if (file_exists($nfmon_diff) ) {
374
  if ($new_file) {
375
  echo '<tr><td>';
376
  echo __('New files:', 'ninjafirewall') . ' ' . count($new_file). '<br />';
377
- echo '<select id="select-1" name="sometext" multiple="multiple" style="width:100%;height:150px" onchange="file_info(this.value, 1);">';
378
  foreach($new_file as $k => $v) {
379
  echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
380
  }
381
  echo'</select>
382
- <p style="text-align:center"><span class="description">' . $more_info . '</span></p>
383
  <table id="table_new" style="width:100%;background-color:#F7F7F7;border:solid 1px #DFDFDF;display:none;">
384
  <tr>
385
- <th style="padding:0;width:25%;">' . __('Size', 'ninjafirewall') .'</th>
386
- <td style="padding:0" id="new_size"></td>
387
  </tr>
388
  <tr>
389
- <th style="padding:0;width:25%;">' . __('Access', 'ninjafirewall') .'</th>
390
- <td style="padding:0" id="new_chmod"></td>
391
  </tr>
392
  <tr>
393
- <th style="padding:0;width:25%;">' . __('Uid / Gid', 'ninjafirewall') .'</th>
394
- <td style="padding:0" id="new_uidgid"></td>
395
  </tr>
396
  <tr>
397
- <th style="padding:0;width:25%;">' . __('Modify', 'ninjafirewall') .'</th>
398
- <td style="padding:0" id="new_mtime"></td>
399
  </tr>
400
  <tr>
401
- <th style="padding:0;width:25%;">' . __('Change', 'ninjafirewall') .'</th>
402
- <td style="padding:0" id="new_ctime"></td>
403
  </tr>
404
  </table>
405
  </td></tr>';
@@ -422,42 +350,42 @@ if (file_exists($nfmon_diff) ) {
422
  echo '
423
  <tr>
424
  <td>' . __('Modified files:', 'ninjafirewall') .' '. count($mod_file). '<br />' .
425
- '<select id="select-2" name="sometext" multiple="multiple" style="width:100%;height:150px" onchange="file_info(this.value, 2);">';
426
  foreach($mod_file as $k => $v) {
427
  echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
428
  }
429
  echo'</select>
430
- <p style="text-align:center"><span class="description">' . $more_info . '</span></p>
431
  <table id="table_mod" style="width:100%;background-color:#F7F7F7;border:solid 1px #DFDFDF;display:none;">
432
  <tr>
433
- <th style="padding:0;width:25%;">&nbsp;</th>
434
- <td style="padding:0"><b>' . __('Old', 'ninjafirewall') .'</b></td>
435
- <td style="padding:0"><b>' . __('New', 'ninjafirewall') .'</b></td>
436
  </tr>
437
  <tr>
438
- <th style="padding:0;width:25%;">' . __('Size', 'ninjafirewall') .'</th>
439
- <td style="padding:0" id="mod_size"></td>
440
- <td style="padding:0" id="mod_size2"></td>
441
  </tr>
442
  <tr>
443
- <th style="padding:0;width:25%;">' . __('Access', 'ninjafirewall') .'</th>
444
- <td style="padding:0" id="mod_chmod"></td>
445
- <td style="padding:0" id="mod_chmod2"></td>
446
  </tr>
447
  <tr>
448
- <th style="padding:0;width:25%;">' . __('Uid / Gid', 'ninjafirewall') .'</th>
449
- <td style="padding:0" id="mod_uidgid"></td>
450
- <td style="padding:0" id="mod_uidgid2"></td>
451
  </tr>
452
  <tr>
453
- <th style="padding:0;width:25%;">' . __('Modify', 'ninjafirewall') .'</th>
454
- <td style="padding:0" id="mod_mtime"></td>
455
- <td style="padding:0" id="mod_mtime2"></td>
456
  </tr>
457
  <tr>
458
- <th style="padding:0;width:25%;">' . __('Change', 'ninjafirewall') .'</th>
459
- <td style="padding:0" id="mod_ctime"></td>
460
- <td style="padding:0" id="mod_ctime2"></td>
461
  </tr>
462
  </table>
463
  </td>
@@ -505,13 +433,13 @@ if (file_exists($nfmon_diff) ) {
505
  // If WP cron is disabled, we simply warn the user :
506
  if ( defined('DISABLE_WP_CRON') ) {
507
  ?>
508
- <p><img src="<?php echo plugins_url() ?>/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description"><?php printf( __('It seems that %s is enabled. Ensure you have another way to run WP-Cron, otherwise NinjaFirewall scheduled scans will not work.', 'ninjafirewall'), '<code>DISABLE_WP_CRON</code>' ) ?></span></p>
509
  <?php
510
  }
511
  ?>
512
- <table class="form-table">
513
  <tr>
514
- <th scope="row"><?php _e('Enable scheduled scans', 'ninjafirewall') ?></th>
515
  <td>
516
  <p><label><input type="radio" name="sched_scan" value="0"<?php checked($sched_scan, 0) ?> /><?php _e('No (default)', 'ninjafirewall') ?></label></p>
517
  <p><label><input type="radio" name="sched_scan" value="1"<?php checked($sched_scan, 1) ?> /><?php _e('Hourly', 'ninjafirewall') ?></label></p>
@@ -523,14 +451,14 @@ if (file_exists($nfmon_diff) ) {
523
  $now = new DateTime( date('M d, Y H:i:s', time() ) );
524
  $diff = $now->diff($sched);
525
  ?>
526
- <p><span class="description"><?php printf( __('Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) and %s second(s).', 'ninjafirewall'), $diff->format('%a') % 7, $diff->format('%h'), $diff->format('%i'), $diff->format('%s') ) ?></span></p>
527
  <?php
528
  // Ensure that the scheduled scan time is in the future,
529
  // not in the past, otherwise send a warning because wp-cron
530
  // is obviously not working as expected :
531
  if ( $nextscan < time() ) {
532
  ?>
533
- <p><img src="<?php echo plugins_url() ?>/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description"><?php _e('The next scheduled scan date is in the past! WordPress wp-cron may not be working or may have been disabled.', 'ninjafirewall'); ?></span>
534
  <?php
535
  }
536
  }
@@ -538,7 +466,7 @@ if (file_exists($nfmon_diff) ) {
538
  </td>
539
  </tr>
540
  <tr>
541
- <th scope="row"><?php _e('Scheduled scan report', 'ninjafirewall') ?></th>
542
  <td>
543
  <p><label><input type="radio" name="report_scan" value="0"<?php checked($report_scan, 0) ?> /><?php _e('Send me a report by email only if changes are detected (default)', 'ninjafirewall') ?></label></p>
544
  <p><label><input type="radio" name="report_scan" value="1"<?php checked($report_scan, 1) ?> /><?php _e('Always send me a report by email after a scheduled scan', 'ninjafirewall') ?></label></p>
@@ -552,7 +480,7 @@ if (file_exists($nfmon_diff) ) {
552
  </div>
553
  <?php
554
 
555
- /* ------------------------------------------------------------------ */
556
 
557
  function nf_sub_monitoring_create($nfmon_snapshot) {
558
 
@@ -613,7 +541,7 @@ function nf_sub_monitoring_create($nfmon_snapshot) {
613
  }
614
  }
615
 
616
- /* ------------------------------------------------------------------ */
617
 
618
  function scd($snapdir, $snapexclude, $fh, $snapnoslink) {
619
 
@@ -646,7 +574,7 @@ function scd($snapdir, $snapexclude, $fh, $snapnoslink) {
646
  }
647
  }
648
 
649
- /* ------------------------------------------------------------------ */
650
 
651
  function nf_sub_monitoring_scan($nfmon_snapshot, $nfmon_diff) {
652
 
@@ -755,7 +683,7 @@ function nf_sub_monitoring_scan($nfmon_snapshot, $nfmon_diff) {
755
  }
756
  }
757
 
758
- /* ------------------------------------------------------------------ */
759
 
760
  function nf_scheduled_scan() {
761
 
@@ -792,7 +720,7 @@ function nf_scheduled_scan() {
792
 
793
  }
794
 
795
- /* ------------------------------------------------------------------ */
796
 
797
  function nf_scan_email($nfmon_diff, $log_dir) {
798
 
@@ -883,5 +811,5 @@ function nf_scan_email($nfmon_diff, $log_dir) {
883
  }
884
  }
885
 
886
- /* ------------------------------------------------------------------ */
887
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
140
  <br />
141
  <form method="post" name="monitor_form">
142
  <?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
143
+ <table class="form-table nfw-table">
144
  <tr>
145
+ <th scope="row" class="row-med"><?php _e('Create a snapshot of all files stored in that directory', 'ninjafirewall') ?></th>
146
  <td><input class="large-text" type="text" name="snapdir" value="<?php
147
  if (! empty($nfw_options['snapdir']) ) {
148
  echo htmlspecialchars($nfw_options['snapdir']);
150
  echo htmlspecialchars(ABSPATH);
151
  }
152
  ?>" required />
153
+ <p class="description"><?php printf( __('Default: %s', 'ninjafirewall'), htmlentities( rtrim( ABSPATH, '/\\ ' ) ) ) ?></p>
154
  </td>
155
  </tr>
156
 
157
  <tr>
158
+ <th scope="row" class="row-med"><?php _e('Exclude the following files/folders (optional)', 'ninjafirewall') ?></th>
159
+ <td><input class="large-text" type="text" name="snapexclude" value="<?php echo htmlentities($nfw_options['snapexclude']); ?>" placeholder="<?php _e('e.g.,', 'ninjafirewall') ?> /wp-content/nfwlog/" maxlength="255"><br /><p class="description"><?php _e('Full or partial case-sensitive string(s). Multiple values must be comma-separated', 'ninjafirewall') ?> (<code>,</code>).</p></td>
160
  </tr>
161
 
162
  <tr>
163
+ <th scope="row" class="row-med">&nbsp;</th>
164
+ <td>
165
+ <label><input type="checkbox" name="snapnoslink" value="1" checked="checked" /><?php _e('Do not follow symbolic links (default)', 'ninjafirewall') ?></label>
166
+ </td>
167
  </tr>
168
 
169
  </table>
231
  } else {
232
  $mod = 0;
233
  }
234
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  <br />
236
 
237
+ <table class="form-table nfw-table">
238
  <tr>
239
+ <th scope="row" class="row-med"><?php _e('Last snapshot', 'ninjafirewall') ?></th>
240
  <td>
241
  <p><?php printf( __('Created on: %s', 'ninjafirewall'), date_i18n('M d, Y @ H:i:s O', $stat['ctime'])); ?></p>
242
  <p><?php printf( __('Total files: %s ', 'ninjafirewall'), number_format_i18n($count) ); ?></p>
264
  ?>
265
  <form method="post">
266
  <?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
267
+ <p><input type="submit" name="dlsnap" value="<?php _e('Download Snapshot', 'ninjafirewall') ?>" class="button-secondary" />&nbsp;&nbsp;&nbsp;<input type="submit" class="button-secondary" onClick="return nfwjs_del_snapshot();" value="<?php _e('Delete Snapshot', 'ninjafirewall') ?>" /><input type="hidden" name="nfw_act" value="delete" /></p>
268
  </form>
269
  </td>
270
  </tr>
271
  <tr>
272
+ <th scope="row" class="row-med"><?php _e('Last changes', 'ninjafirewall') ?></th>
273
  <td>
274
 
275
  <?php
282
 
283
  <form method="post">
284
  <?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
285
+ <p><input type="button" value="<?php _e('View Changes', 'ninjafirewall') ?>" onClick="nfwjs_show_changes();" class="button-secondary" id="vcbtn" <?php
286
  if (! empty($changes)) {
287
  echo 'disabled="disabled" ';
288
  }
302
  if ($new_file) {
303
  echo '<tr><td>';
304
  echo __('New files:', 'ninjafirewall') . ' ' . count($new_file). '<br />';
305
+ echo '<select id="select-1" name="sometext" multiple="multiple" style="width:100%;height:150px" onchange="nfwjs_file_info(this.value, 1);">';
306
  foreach($new_file as $k => $v) {
307
  echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
308
  }
309
  echo'</select>
310
+ <p class="description">' . $more_info . '</p>
311
  <table id="table_new" style="width:100%;background-color:#F7F7F7;border:solid 1px #DFDFDF;display:none;">
312
  <tr>
313
+ <th style="padding:2px;width:25%;">' . __('Size', 'ninjafirewall') .'</th>
314
+ <td style="padding:2px" id="new_size"></td>
315
  </tr>
316
  <tr>
317
+ <th style="padding:2px;width:25%;">' . __('Access', 'ninjafirewall') .'</th>
318
+ <td style="padding:2px" id="new_chmod"></td>
319
  </tr>
320
  <tr>
321
+ <th style="padding:2px;width:25%;">' . __('Uid / Gid', 'ninjafirewall') .'</th>
322
+ <td style="padding:2px" id="new_uidgid"></td>
323
  </tr>
324
  <tr>
325
+ <th style="padding:2px;width:25%;">' . __('Modify', 'ninjafirewall') .'</th>
326
+ <td style="padding:2px" id="new_mtime"></td>
327
  </tr>
328
  <tr>
329
+ <th style="padding:2px;width:25%;">' . __('Change', 'ninjafirewall') .'</th>
330
+ <td style="padding:2px" id="new_ctime"></td>
331
  </tr>
332
  </table>
333
  </td></tr>';
350
  echo '
351
  <tr>
352
  <td>' . __('Modified files:', 'ninjafirewall') .' '. count($mod_file). '<br />' .
353
+ '<select id="select-2" name="sometext" multiple="multiple" style="width:100%;height:150px" onchange="nfwjs_file_info(this.value, 2);">';
354
  foreach($mod_file as $k => $v) {
355
  echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
356
  }
357
  echo'</select>
358
+ <p class="description">' . $more_info . '</p>
359
  <table id="table_mod" style="width:100%;background-color:#F7F7F7;border:solid 1px #DFDFDF;display:none;">
360
  <tr>
361
+ <th style="padding:2px;width:25%;">&nbsp;</th>
362
+ <td style="padding:2px"><b>' . __('Old', 'ninjafirewall') .'</b></td>
363
+ <td style="padding:2px"><b>' . __('New', 'ninjafirewall') .'</b></td>
364
  </tr>
365
  <tr>
366
+ <th style="padding:2px;width:25%;">' . __('Size', 'ninjafirewall') .'</th>
367
+ <td style="padding:2px" id="mod_size"></td>
368
+ <td style="padding:2px" id="mod_size2"></td>
369
  </tr>
370
  <tr>
371
+ <th style="padding:2px;width:25%;">' . __('Access', 'ninjafirewall') .'</th>
372
+ <td style="padding:2px" id="mod_chmod"></td>
373
+ <td style="padding:2px" id="mod_chmod2"></td>
374
  </tr>
375
  <tr>
376
+ <th style="padding:2px;width:25%;">' . __('Uid / Gid', 'ninjafirewall') .'</th>
377
+ <td style="padding:2px" id="mod_uidgid"></td>
378
+ <td style="padding:2px" id="mod_uidgid2"></td>
379
  </tr>
380
  <tr>
381
+ <th style="padding:2px;width:25%;">' . __('Modify', 'ninjafirewall') .'</th>
382
+ <td style="padding:2px" id="mod_mtime"></td>
383
+ <td style="padding:2px" id="mod_mtime2"></td>
384
  </tr>
385
  <tr>
386
+ <th style="padding:2px;width:25%;">' . __('Change', 'ninjafirewall') .'</th>
387
+ <td style="padding:2px" id="mod_ctime"></td>
388
+ <td style="padding:2px" id="mod_ctime2"></td>
389
  </tr>
390
  </table>
391
  </td>
433
  // If WP cron is disabled, we simply warn the user :
434
  if ( defined('DISABLE_WP_CRON') ) {
435
  ?>
436
+ <p class="description" style="color:red"><?php printf( __('It seems that %s is set. Ensure you have another way to run WP-Cron, otherwise NinjaFirewall scheduled scans will not work.', 'ninjafirewall'), '<code>DISABLE_WP_CRON</code>' ) ?></p>
437
  <?php
438
  }
439
  ?>
440
+ <table class="form-table nfw-table">
441
  <tr>
442
+ <th scope="row" class="row-med"><?php _e('Enable scheduled scans', 'ninjafirewall') ?></th>
443
  <td>
444
  <p><label><input type="radio" name="sched_scan" value="0"<?php checked($sched_scan, 0) ?> /><?php _e('No (default)', 'ninjafirewall') ?></label></p>
445
  <p><label><input type="radio" name="sched_scan" value="1"<?php checked($sched_scan, 1) ?> /><?php _e('Hourly', 'ninjafirewall') ?></label></p>
451
  $now = new DateTime( date('M d, Y H:i:s', time() ) );
452
  $diff = $now->diff($sched);
453
  ?>
454
+ <p class="description"><?php printf( __('Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) and %s second(s).', 'ninjafirewall'), $diff->format('%a') % 7, $diff->format('%h'), $diff->format('%i'), $diff->format('%s') ) ?></p>
455
  <?php
456
  // Ensure that the scheduled scan time is in the future,
457
  // not in the past, otherwise send a warning because wp-cron
458
  // is obviously not working as expected :
459
  if ( $nextscan < time() ) {
460
  ?>
461
+ <p class="description" style="color:red"><?php _e('The next scheduled scan date is in the past! WordPress wp-cron may not be working or may have been disabled.', 'ninjafirewall'); ?></p>
462
  <?php
463
  }
464
  }
466
  </td>
467
  </tr>
468
  <tr>
469
+ <th scope="row" class="row-med"><?php _e('Scheduled scan report', 'ninjafirewall') ?></th>
470
  <td>
471
  <p><label><input type="radio" name="report_scan" value="0"<?php checked($report_scan, 0) ?> /><?php _e('Send me a report by email only if changes are detected (default)', 'ninjafirewall') ?></label></p>
472
  <p><label><input type="radio" name="report_scan" value="1"<?php checked($report_scan, 1) ?> /><?php _e('Always send me a report by email after a scheduled scan', 'ninjafirewall') ?></label></p>
480
  </div>
481
  <?php
482
 
483
+ // ---------------------------------------------------------------------
484
 
485
  function nf_sub_monitoring_create($nfmon_snapshot) {
486
 
541
  }
542
  }
543
 
544
+ // ---------------------------------------------------------------------
545
 
546
  function scd($snapdir, $snapexclude, $fh, $snapnoslink) {
547
 
574
  }
575
  }
576
 
577
+ // ---------------------------------------------------------------------
578
 
579
  function nf_sub_monitoring_scan($nfmon_snapshot, $nfmon_diff) {
580
 
683
  }
684
  }
685
 
686
+ // ---------------------------------------------------------------------
687
 
688
  function nf_scheduled_scan() {
689
 
720
 
721
  }
722
 
723
+ // ---------------------------------------------------------------------
724
 
725
  function nf_scan_email($nfmon_diff, $log_dir) {
726
 
811
  }
812
  }
813
 
814
+ // ---------------------------------------------------------------------
815
  // EOF
lib/file_guard.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -24,32 +24,6 @@ nf_not_allowed( 'block', __LINE__ );
24
  $nfw_options = nfw_get_option( 'nfw_options' );
25
 
26
  ?>
27
- <script>
28
- function toggle_table(off) {
29
- if ( off == 1 ) {
30
- jQuery("#fg_table").slideDown();
31
- } else if ( off == 2 ) {
32
- jQuery("#fg_table").slideUp();
33
- }
34
- return;
35
- }
36
- function is_number(id) {
37
- var e = document.getElementById(id);
38
- if (! e.value ) { return }
39
- if (! /^[1-9][0-9]?$/.test(e.value) ) {
40
- alert("<?php echo esc_js( __('Please enter a number from 1 to 99.', 'ninjafirewall') ) ?>");
41
- e.value = e.value.substring(0, e.value.length-1);
42
- }
43
- }
44
- function check_fields() {
45
- if (! document.nfwfilefuard.elements["nfw_options[fg_mtime]"]){
46
- alert("<?php echo esc_js( __('Please enter a number from 1 to 99.', 'ninjafirewall') ) ?>");
47
- return false;
48
- }
49
- return true;
50
- }
51
- </script>
52
-
53
  <div class="wrap">
54
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('File Guard', 'ninjafirewall') ?></h1>
55
  <?php
@@ -89,16 +63,13 @@ if ( empty($nfw_options['fg_exclude']) ) {
89
  }
90
  ?>
91
  <br />
92
- <form method="post" name="nfwfilefuard" onSubmit="return check_fields();">
93
  <?php wp_nonce_field('fileguard_save', 'nfwnonce', 0); ?>
94
- <table class="form-table">
95
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
96
- <th scope="row"><?php _e('Enable File Guard', 'ninjafirewall') ?></th>
97
  <td>
98
- <label><input type="radio" id="fgenable" name="nfw_options[fg_enable]" value="1"<?php checked($nfw_options['fg_enable'], 1) ?> onclick="toggle_table(1);">&nbsp;<?php _e('Yes (recommended)', 'ninjafirewall') ?></label>
99
- </td>
100
- <td>
101
- <label><input type="radio" name="nfw_options[fg_enable]" value="0"<?php checked($nfw_options['fg_enable'], 0) ?> onclick="toggle_table(2);">&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
102
  </td>
103
  </tr>
104
  </table>
@@ -106,17 +77,17 @@ if ( empty($nfw_options['fg_exclude']) ) {
106
  <br />
107
 
108
  <div id="fg_table"<?php echo $nfw_options['fg_enable'] == 1 ? '' : ' style="display:none"' ?>>
109
- <table class="form-table" border="0">
110
- <tr valign="top">
111
- <th scope="row"><?php _e('Real-time detection', 'ninjafirewall') ?></th>
112
  <td>
113
  <?php
114
- printf( __('Monitor file activity and send an alert when someone is accessing a PHP script that was modified or created less than %s hour(s) ago.', 'ninjafirewall'), '<input maxlength="2" size="2" value="'. $nfw_options['fg_mtime'] .'" name="nfw_options[fg_mtime]" id="mtime" onkeyup="is_number(\'mtime\')" class="small-text" type="number" />');
115
  ?>
116
  </td>
117
  </tr>
118
  <tr>
119
- <th scope="row"><?php _e('Exclude the following files/folders (optional)', 'ninjafirewall') ?></th>
120
  <td><input class="large-text" type="text" maxlength="255" name="nfw_options[fg_exclude]" value="<?php echo htmlspecialchars( $fg_exclude ); ?>" placeholder="<?php _e('e.g.,', 'ninjafirewall') ?> /foo/bar/cache/ <?php _e('or', 'ninjafirewall') ?> /cache/" /><br /><span class="description"><?php _e('Full or partial case-sensitive string(s), max. 255 characters. Multiple values must be comma-separated', 'ninjafirewall') ?> (<code>,</code>).</span></td>
121
  </tr>
122
  </table>
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
24
  $nfw_options = nfw_get_option( 'nfw_options' );
25
 
26
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  <div class="wrap">
28
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('File Guard', 'ninjafirewall') ?></h1>
29
  <?php
63
  }
64
  ?>
65
  <br />
66
+ <form method="post" name="nfwfilefuard">
67
  <?php wp_nonce_field('fileguard_save', 'nfwnonce', 0); ?>
68
+ <table class="form-table nfw-table">
69
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
70
+ <th scope="row" class="row-med"><?php _e('Enable File Guard', 'ninjafirewall') ?></th>
71
  <td>
72
+ <?php nfw_toggle_switch( 'green', 'nfw_options[fg_enable]', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', $nfw_options['fg_enable'], false, 'onclick="nfwjs_up_down(\'fg_table\');"' ) ?>
 
 
 
73
  </td>
74
  </tr>
75
  </table>
77
  <br />
78
 
79
  <div id="fg_table"<?php echo $nfw_options['fg_enable'] == 1 ? '' : ' style="display:none"' ?>>
80
+ <table class="form-table nfw-table">
81
+ <tr>
82
+ <th scope="row" class="row-med"><?php _e('Real-time detection', 'ninjafirewall') ?></th>
83
  <td>
84
  <?php
85
+ printf( __('Monitor file activity and send an alert when someone is accessing a PHP script that was modified or created less than %s hour(s) ago.', 'ninjafirewall'), '<input maxlength="2" size="2" value="'. $nfw_options['fg_mtime'] .'" name="nfw_options[fg_mtime]" id="mtime" class="small-text" type="number" />');
86
  ?>
87
  </td>
88
  </tr>
89
  <tr>
90
+ <th scope="row" class="row-med"><?php _e('Exclude the following files/folders (optional)', 'ninjafirewall') ?></th>
91
  <td><input class="large-text" type="text" maxlength="255" name="nfw_options[fg_exclude]" value="<?php echo htmlspecialchars( $fg_exclude ); ?>" placeholder="<?php _e('e.g.,', 'ninjafirewall') ?> /foo/bar/cache/ <?php _e('or', 'ninjafirewall') ?> /cache/" /><br /><span class="description"><?php _e('Full or partial case-sensitive string(s), max. 255 characters. Multiple values must be comma-separated', 'ninjafirewall') ?> (<code>,</code>).</span></td>
92
  </tr>
93
  </table>
lib/firewall.php CHANGED
@@ -26,10 +26,9 @@ $nfw_['fw_starttime'] = microtime(true);
26
  // ( see https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja ) :
27
  if ( @file_exists($nfw_['file'] = dirname($_SERVER['DOCUMENT_ROOT']) .'/.htninja') ||
28
  @file_exists($nfw_['file'] = $_SERVER['DOCUMENT_ROOT'] .'/.htninja') ) {
29
- $nfw_['res'] = @include $nfw_['file'];
30
  if ( $nfw_['res'] == 'ALLOW' ) {
31
- define( 'NFW_STATUS', 20 );
32
- unset($nfw_);
33
  return;
34
  }
35
  if ( $nfw_['res'] == 'BLOCK' ) {
@@ -71,105 +70,28 @@ if (empty ($wp_config)) {
71
  $wp_config = dirname($nfw_['wp_content']) . '/wp-config.php';
72
  }
73
 
74
- // Check if we have a SQL link that was defined in the .htninja.
75
- // See "Giving NinjaFirewall a MySQLi link identifier"
76
- // at https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja
77
- if (! empty( $GLOBALS['nfw_mysqli'] ) && ! empty( $GLOBALS['nfw_table_prefix'] ) ) {
78
- $nfw_['mysqli'] = $GLOBALS['nfw_mysqli'];
79
- $nfw_['table_prefix'] = $GLOBALS['nfw_table_prefix'];
80
-
81
- // No DB link:
82
- } else {
83
- if (! file_exists($wp_config) ) {
84
- if (! @file_exists( $wp_config = dirname( dirname($nfw_['wp_content']) ) . '/wp-config.php') ) {
85
- define( 'NFW_STATUS', 1 );
86
- unset($nfw_);
87
- unset($wp_config);
88
- return;
89
- }
90
- }
91
- if (! $nfw_['fh'] = fopen($wp_config, 'r') ) {
92
- define( 'NFW_STATUS', 2 );
93
- unset($nfw_);
94
- unset($wp_config);
95
- return;
96
- }
97
-
98
- while (! feof($nfw_['fh'])) {
99
- $nfw_['line'] = fgets($nfw_['fh']);
100
- if ( preg_match('/^\s*define\s*\(\s*[\'"]DB_NAME[\'"]\s*,\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
101
- $nfw_['DB_NAME'] = $nfw_['match'][1];
102
- } elseif ( preg_match('/^\s*define\s*\(\s*[\'"]DB_USER[\'"]\s*,\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
103
- $nfw_['DB_USER'] = $nfw_['match'][1];
104
- } elseif ( preg_match('/^\s*define\s*\(\s*[\'"]DB_PASSWORD[\'"]\s*,\s*([\'"])(.+?)\1\s*\);/', $nfw_['line'], $nfw_['match']) ) {
105
- $nfw_['DB_PASSWORD'] = stripcslashes( $nfw_['match'][2] );
106
- } elseif ( preg_match('/^\s*define\s*\(\s*[\'"]DB_HOST[\'"]\s*,\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
107
- $nfw_['DB_HOST'] = $nfw_['match'][1];
108
- } elseif ( preg_match('/^\s*\$table_prefix\s*=\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
109
- $nfw_['table_prefix'] = $nfw_['match'][1];
110
- }
111
- }
112
- fclose($nfw_['fh']);
113
- unset($wp_config);
114
- if ( (! isset($nfw_['DB_NAME'])) || (! isset($nfw_['DB_USER'])) || (! isset($nfw_['DB_PASSWORD'])) || (! isset($nfw_['DB_HOST'])) || (! isset($nfw_['table_prefix'])) ) {
115
- define( 'NFW_STATUS', 3 );
116
- unset($nfw_);
117
- return;
118
- }
119
-
120
- nfw_check_dbhost();
121
- // Make sure mysqli extension is loaded:
122
- if (! function_exists( 'mysqli_connect' ) ) {
123
- define( 'NFW_STATUS', 14 );
124
- unset($nfw_);
125
- return;
126
- }
127
- @$nfw_['mysqli'] = new mysqli($nfw_['DB_HOST'], $nfw_['DB_USER'], $nfw_['DB_PASSWORD'], $nfw_['DB_NAME'], $nfw_['port'], $nfw_['socket']);
128
- if ($nfw_['mysqli']->connect_error) {
129
- define( 'NFW_STATUS', 4 );
130
- unset($nfw_);
131
- return;
132
- }
133
- }
134
-
135
- if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "options` WHERE `option_name` = 'nfw_options'")) {
136
- // Maybe this is an old multisite install where the main site
137
- // options table is named 'wp_1_options' instead of 'wp_options'?
138
- if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "1_options` WHERE `option_name` = 'nfw_options'")) {
139
- define( 'NFW_STATUS', 5 );
140
- $nfw_['mysqli']->close();
141
- unset($nfw_);
142
- return;
143
- }
144
- // Change the table prefix to match 'wp_1_options':
145
- $nfw_['table_prefix'] = "{$nfw_['table_prefix']}1_";
146
- }
147
-
148
- if (! $nfw_['options'] = @$nfw_['result']->fetch_object() ) {
149
- define( 'NFW_STATUS', 6 );
150
- $nfw_['mysqli']->close();
151
- unset($nfw_);
152
  return;
153
  }
154
- $nfw_['result']->close();
155
 
156
- if (! $nfw_['nfw_options'] = @unserialize($nfw_['options']->option_value) ) {
157
- $nfw_['mysqli']->close();
158
- define( 'NFW_STATUS', 11 );
159
- unset($nfw_);
160
  return;
161
  }
162
 
163
  if (! empty($nfw_['nfw_options']['clogs_pubkey']) && isset($_POST['clogs_req']) ) {
164
- include 'fw_centlog.php';
165
  fw_centlog();
166
  exit;
167
  }
168
 
169
  if ( empty($nfw_['nfw_options']['enabled']) ) {
170
- $nfw_['mysqli']->close();
171
- define( 'NFW_STATUS', 20 );
172
- unset($nfw_);
173
  return;
174
  }
175
 
@@ -295,41 +217,27 @@ if ( isset( $_COOKIE[ $nfw_['session_name'] ] ) ) {
295
 
296
  if (! empty($_SESSION['nfw_goodguy']) ) {
297
 
 
298
  if (! empty($_SESSION['nfw_livelog']) && isset($_POST['livecls']) && isset($_POST['lines'])) {
299
- include 'fw_livelog.php';
300
  fw_livelog_show();
301
  }
302
 
303
- if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "options` WHERE `option_name` = 'nfw_rules'")) {
304
- nfw_quit(7);
305
- return;
306
- }
307
- if (! $nfw_['rules'] = @$nfw_['result']->fetch_object() ) {
308
- nfw_quit(8);
309
- return;
310
- }
311
- if (! $nfw_['nfw_rules'] = @unserialize($nfw_['rules']->option_value) ) {
312
- nfw_quit(12);
313
  return;
314
  }
 
315
 
316
- if (isset($nfw_['nfw_rules']['999']) ) {
317
- $nfw_['adm_rules'] = array();
318
- foreach ($nfw_['nfw_rules']['999'] as $key => $value) {
319
- if (empty($nfw_['nfw_rules'][$key]['ena']) ) { continue; }
320
- $nfw_['adm_rules'][$key] = $nfw_['nfw_rules'][$key];
321
- }
322
- if (! empty($nfw_['adm_rules'])) {
323
- nfw_check_request( $nfw_['adm_rules'], $nfw_['nfw_options'] );
324
- }
325
- }
326
- nfw_quit(20);
327
  return;
328
  }
329
  define('NFW_SWL', 1);
330
 
331
  if ( file_exists($nfw_['log_dir'] .'/cache/livelogrun.php')) {
332
- include 'fw_livelog.php';
333
  fw_livelog_record();
334
  }
335
 
@@ -338,7 +246,7 @@ if (! empty($nfw_['nfw_options']['php_errors']) ) {
338
  @ini_set('display_errors', 0);
339
  }
340
 
341
- if (! empty($nfw_['nfw_options']['allow_local_ip']) && ! filter_var(NFW_REMOTE_ADDR, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) ) {
342
  nfw_quit(20);
343
  return;
344
  }
@@ -353,7 +261,7 @@ if ( @$nfw_['nfw_options']['scan_protocol'] == 2 && NFW_IS_HTTPS == false ) {
353
  }
354
 
355
  if (! empty($nfw_['nfw_options']['fg_enable']) && ! defined('NFW_WPWAF') ) {
356
- include 'fw_fileguard.php';
357
  fw_fileguard();
358
  }
359
 
@@ -415,24 +323,24 @@ if (! empty($nfw_['nfw_options']['wp_dir']) && preg_match( '`' . $nfw_['nfw_opti
415
 
416
  nfw_check_upload();
417
 
418
- if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "options` WHERE `option_name` = 'nfw_rules'")) {
419
- nfw_quit(7);
420
- return;
421
  }
422
 
423
- if (! $nfw_['rules'] = @$nfw_['result']->fetch_object() ) {
424
- nfw_quit(8);
 
 
425
  return;
426
  }
427
- $nfw_['result']->close();
428
 
429
- if (! $nfw_['nfw_rules'] = @unserialize($nfw_['rules']->option_value) ) {
430
- nfw_quit(12);
431
- return;
 
432
  }
433
 
434
- nfw_check_request( $nfw_['nfw_rules'], $nfw_['nfw_options'] );
435
-
436
  if (! empty($nfw_['nfw_options']['get_sanitise']) && ! empty($_GET) ){
437
  $_GET = nfw_sanitise( $_GET, 1, 'GET');
438
  }
@@ -479,6 +387,173 @@ function nfw_quit( $status ) {
479
  $nfw_ = array();
480
  }
481
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
482
  // =====================================================================
483
  // Check for HTTPS.
484
 
@@ -544,6 +619,18 @@ function nfw_check_ip() {
544
  if (! defined('NFW_REMOTE_ADDR') ) {
545
  define('NFW_REMOTE_ADDR', htmlspecialchars($_SERVER['REMOTE_ADDR']) );
546
  }
 
 
 
 
 
 
 
 
 
 
 
 
547
  }
548
 
549
  // =====================================================================
@@ -665,6 +752,24 @@ function nfw_sanitize_filename( $array, $key, $value ) {
665
 
666
  // =====================================================================
667
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
668
  function nfw_check_request( $nfw_rules, $nfw_options ) {
669
 
670
  if ( defined('NFW_STATUS') ) { return; }
@@ -1166,7 +1271,14 @@ function nfw_sanitise( $str, $how, $msg ) {
1166
  if (is_string($str) ) {
1167
  if (get_magic_quotes_gpc() ) { $str = stripslashes($str); }
1168
  if ($how == 1) {
1169
- $str2 = $nfw_['mysqli']->real_escape_string($str);
 
 
 
 
 
 
 
1170
  $str2 = str_replace( array( '`', '<', '>'), array( '\\`', '&lt;', '&gt;'), $str2);
1171
  if ( $msg == 'GET' && strpos( $str2, '/') !== false ) {
1172
  $str2 = str_replace( array( '*', '?' ), array( '\*', '\?' ), $str2 );
@@ -1185,7 +1297,7 @@ function nfw_sanitise( $str, $how, $msg ) {
1185
  return $str;
1186
  }
1187
  if ($str2 != $str) {
1188
- nfw_log('Sanitising user input', $msg . ': ' . $str, 6, 0);
1189
  }
1190
  return $str2;
1191
 
@@ -1201,7 +1313,7 @@ function nfw_sanitise( $str, $how, $msg ) {
1201
  }
1202
  if ($occ) {
1203
  unset($str[$key]);
1204
- nfw_log('Sanitising user input', $msg . ': ' . $key, 6, 0);
1205
  }
1206
  $str[$key2] = nfw_sanitise($value, $how, $msg);
1207
  }
@@ -1336,7 +1448,7 @@ function nfw_log($loginfo, $logdata, $loglevel, $ruleid) {
1336
  $tmp . '[' . time() . '] ' . '[' . round( microtime(true) - $nfw_['fw_starttime'], 5) . '] ' .
1337
  '[' . $_SERVER['SERVER_NAME'] . '] ' . '[#' . $nfw_['num_incident'] . '] ' .
1338
  '[' . $ruleid . '] ' .
1339
- '[' . $loglevel . '] ' . '[' . nfw_anonymize_ip( NFW_REMOTE_ADDR ) . '] ' .
1340
  '[' . $http_ret_code . '] ' . '[' . $_SERVER['REQUEST_METHOD'] . '] ' .
1341
  '[' . $_SERVER['SCRIPT_NAME'] . '] ' . '[' . $loginfo . '] ' .
1342
  $encoding . "\n", FILE_APPEND | LOCK_EX );
@@ -1344,16 +1456,15 @@ function nfw_log($loginfo, $logdata, $loglevel, $ruleid) {
1344
 
1345
  // =====================================================================
1346
 
1347
- function nfw_anonymize_ip( $ip ) {
1348
 
1349
  global $nfw_;
1350
 
1351
- if (! empty( $nfw_['nfw_options']['anon_ip'] ) &&
1352
- filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
1353
- return substr( $ip, 0, -3 ) .'xxx';
1354
  }
1355
 
1356
- return $ip;
1357
  }
1358
 
1359
  // =====================================================================
@@ -1564,9 +1675,9 @@ function nfw_check_auth( $auth_name, $auth_pass, $auth_msgtxt, $bf_rand, $b64, $
1564
  $bf_nosig = '';
1565
  }
1566
  if ( $bf_type == 0 ) {
1567
- $message = '<html><head><title>'. $bf_nosig .'</title><link rel="stylesheet" href="./wp-includes/css/buttons.min.css" type="text/css"><link rel="stylesheet" href="./wp-admin/css/login.min.css" type="text/css"></head><body class="login wp-core-ui" style="color:#444"><div id="login"><center><h2>' . $auth_msgtxt . '</h2><form method="post"><label>'. $bf_nosig .'</label><br><br><p><input class="input" type="text" name="u" placeholder="Username"></p><p><input class="input" type="password" name="p" placeholder="Password"></p><p align="right"><input type="submit" value="Login Page&nbsp;&#187;" class="button-secondary"></p></form></center></div></body></html>';
1568
  } else {
1569
- $message = '<html><head><title>'. $bf_nosig .'</title><link rel="stylesheet" href="./wp-includes/css/buttons.min.css" type="text/css"><link rel="stylesheet" href="./wp-admin/css/login.min.css" type="text/css"></head><body class="login wp-core-ui" style="color:#444"><div id="login"><center><form method="post"><p><label>'. base64_decode( $captcha_text ) .'</label></p><br><p>' . nfw_get_captcha() . '</p><p><input class="input" type="text" name="c" autofocus></p><p align="right"><input type="submit" value="Login Page&nbsp;&#187;" class="button-secondary"></p></form><br><label>'. $bf_nosig .'</label></center></div></body></html>';
1570
  }
1571
  if ( $bf_allow_bot == 0 ) {
1572
  ini_set('zlib.output_compression','Off');
26
  // ( see https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja ) :
27
  if ( @file_exists($nfw_['file'] = dirname($_SERVER['DOCUMENT_ROOT']) .'/.htninja') ||
28
  @file_exists($nfw_['file'] = $_SERVER['DOCUMENT_ROOT'] .'/.htninja') ) {
29
+ $nfw_['res'] = @include_once $nfw_['file'];
30
  if ( $nfw_['res'] == 'ALLOW' ) {
31
+ nfw_quit( 20 );
 
32
  return;
33
  }
34
  if ( $nfw_['res'] == 'BLOCK' ) {
70
  $wp_config = dirname($nfw_['wp_content']) . '/wp-config.php';
71
  }
72
 
73
+ // Connection
74
+ $ret = nfw_connect();
75
+ if ( $ret !== true ) {
76
+ nfw_quit( $ret );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  return;
78
  }
 
79
 
80
+ // Fetch options
81
+ $ret = nfw_get_data( 'nfw_options' );
82
+ if ( $ret !== true ) {
83
+ nfw_quit( $ret );
84
  return;
85
  }
86
 
87
  if (! empty($nfw_['nfw_options']['clogs_pubkey']) && isset($_POST['clogs_req']) ) {
88
+ include_once 'fw_centlog.php';
89
  fw_centlog();
90
  exit;
91
  }
92
 
93
  if ( empty($nfw_['nfw_options']['enabled']) ) {
94
+ nfw_quit( 20 );
 
 
95
  return;
96
  }
97
 
217
 
218
  if (! empty($_SESSION['nfw_goodguy']) ) {
219
 
220
+ // Look for Live Log AJAX request:
221
  if (! empty($_SESSION['nfw_livelog']) && isset($_POST['livecls']) && isset($_POST['lines'])) {
222
+ include_once 'fw_livelog.php';
223
  fw_livelog_show();
224
  }
225
 
226
+ // Fetch admin rules
227
+ $ret = nfw_get_data( 'nfw_rules' );
228
+ if ( $ret !== true ) {
229
+ nfw_quit( $ret );
 
 
 
 
 
 
230
  return;
231
  }
232
+ nfw_check_admin_request();
233
 
234
+ nfw_quit( 20 );
 
 
 
 
 
 
 
 
 
 
235
  return;
236
  }
237
  define('NFW_SWL', 1);
238
 
239
  if ( file_exists($nfw_['log_dir'] .'/cache/livelogrun.php')) {
240
+ include_once 'fw_livelog.php';
241
  fw_livelog_record();
242
  }
243
 
246
  @ini_set('display_errors', 0);
247
  }
248
 
249
+ if ( empty($nfw_['nfw_options']['allow_local_ip']) && ! filter_var(NFW_REMOTE_ADDR, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) ) {
250
  nfw_quit(20);
251
  return;
252
  }
261
  }
262
 
263
  if (! empty($nfw_['nfw_options']['fg_enable']) && ! defined('NFW_WPWAF') ) {
264
+ include_once 'fw_fileguard.php';
265
  fw_fileguard();
266
  }
267
 
323
 
324
  nfw_check_upload();
325
 
326
+ $nfw_['user_can'] = false;
327
+ if ( isset( $_SESSION['nfw_user_can'] ) ) {
328
+ $nfw_['user_can'] = nfw_check_postpage();
329
  }
330
 
331
+ // Fetch rules
332
+ $ret = nfw_get_data( 'nfw_rules' );
333
+ if ( $ret !== true ) {
334
+ nfw_quit( $ret );
335
  return;
336
  }
 
337
 
338
+ if ( $nfw_['user_can'] == false ) {
339
+ nfw_check_request( $nfw_['nfw_rules'], $nfw_['nfw_options'] );
340
+ } else {
341
+ nfw_check_admin_request();
342
  }
343
 
 
 
344
  if (! empty($nfw_['nfw_options']['get_sanitise']) && ! empty($_GET) ){
345
  $_GET = nfw_sanitise( $_GET, 1, 'GET');
346
  }
387
  $nfw_ = array();
388
  }
389
 
390
+ // =====================================================================
391
+ // Connect to the DB.
392
+
393
+ function nfw_connect() {
394
+
395
+ global $nfw_, $wp_config;
396
+
397
+ // WPWAF mode?
398
+ if ( defined('NFW_WPWAF') && NFW_WPWAF == 2 ) {
399
+ $nfw_['wp_waf'] = 2;
400
+ return true;
401
+ }
402
+
403
+ // Check if we have a SQL link that was defined in the .htninja.
404
+ // See "Giving NinjaFirewall a MySQLi link identifier"
405
+ // at https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja
406
+ if (! empty( $GLOBALS['nfw_mysqli'] ) && ! empty( $GLOBALS['nfw_table_prefix'] ) ) {
407
+ $nfw_['mysqli'] = $GLOBALS['nfw_mysqli'];
408
+ $nfw_['table_prefix'] = $GLOBALS['nfw_table_prefix'];
409
+ return true;
410
+ }
411
+
412
+ // DB
413
+ if (! file_exists( $wp_config ) ) {
414
+ if (! @file_exists( $wp_config = dirname( dirname($nfw_['wp_content']) ) . '/wp-config.php') ) {
415
+ return 1;
416
+ }
417
+ }
418
+ if (! $nfw_['fh'] = fopen($wp_config, 'r') ) {
419
+ return 2;
420
+ }
421
+ while (! feof($nfw_['fh'])) {
422
+ $nfw_['line'] = fgets($nfw_['fh']);
423
+ if ( preg_match('/^\s*define\s*\(\s*[\'"]DB_NAME[\'"]\s*,\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
424
+ $nfw_['DB_NAME'] = $nfw_['match'][1];
425
+ } elseif ( preg_match('/^\s*define\s*\(\s*[\'"]DB_USER[\'"]\s*,\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
426
+ $nfw_['DB_USER'] = $nfw_['match'][1];
427
+ } elseif ( preg_match('/^\s*define\s*\(\s*[\'"]DB_PASSWORD[\'"]\s*,\s*([\'"])(.+?)\1\s*\);/', $nfw_['line'], $nfw_['match']) ) {
428
+ $nfw_['DB_PASSWORD'] = stripcslashes( $nfw_['match'][2] );
429
+ } elseif ( preg_match('/^\s*define\s*\(\s*[\'"]DB_HOST[\'"]\s*,\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
430
+ $nfw_['DB_HOST'] = $nfw_['match'][1];
431
+ } elseif ( preg_match('/^\s*\$table_prefix\s*=\s*[\'"](.+?)[\'"]/', $nfw_['line'], $nfw_['match']) ) {
432
+ $nfw_['table_prefix'] = $nfw_['match'][1];
433
+ }
434
+ }
435
+ fclose($nfw_['fh']);
436
+ unset($wp_config);
437
+ if ( (! isset($nfw_['DB_NAME'])) || (! isset($nfw_['DB_USER'])) || (! isset($nfw_['DB_PASSWORD'])) || (! isset($nfw_['DB_HOST'])) || (! isset($nfw_['table_prefix'])) ) {
438
+ return 3;
439
+ }
440
+
441
+ nfw_check_dbhost();
442
+ // Make sure mysqli extension is loaded
443
+ if (! function_exists( 'mysqli_connect' ) ) {
444
+ return 14;
445
+ }
446
+ @$nfw_['mysqli'] = new mysqli($nfw_['DB_HOST'], $nfw_['DB_USER'], $nfw_['DB_PASSWORD'], $nfw_['DB_NAME'], $nfw_['port'], $nfw_['socket']);
447
+ if ($nfw_['mysqli']->connect_error) {
448
+ return 4;
449
+ }
450
+
451
+ return true;
452
+ }
453
+
454
+ // =====================================================================
455
+ // Fetch rules and options.
456
+
457
+ function nfw_get_data( $what ) {
458
+
459
+ global $nfw_;
460
+
461
+ if ( $what != 'nfw_rules' ) {
462
+ $what = 'nfw_options';
463
+ }
464
+
465
+ // WP API
466
+ if ( isset( $nfw_['wp_waf'] ) && $nfw_['wp_waf'] == 2 ) {
467
+ $nfw_[ $what ] = get_option( $what );
468
+ return true;
469
+
470
+ // DB
471
+ } else {
472
+ // Rules
473
+ if ( $what == 'nfw_rules' ) {
474
+ if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "options` WHERE `option_name` = 'nfw_rules'") ) {
475
+ return 7;
476
+ }
477
+ if (! $nfw_['rules'] = @$nfw_['result']->fetch_object() ) {
478
+ return 8;
479
+ }
480
+ if (! $nfw_['nfw_rules'] = @unserialize( $nfw_['rules']->option_value ) ) {
481
+ return 12;
482
+ }
483
+ // Options
484
+ } else {
485
+ if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "options` WHERE `option_name` = 'nfw_options'") ) {
486
+
487
+ // Maybe this is an old multisite install where the main site
488
+ // options table is named 'wp_1_options' instead of 'wp_options'
489
+ if (! $nfw_['result'] = @$nfw_['mysqli']->query('SELECT * FROM `' . $nfw_['mysqli']->real_escape_string($nfw_['table_prefix']) . "1_options` WHERE `option_name` = 'nfw_options'") ) {
490
+ return 5;
491
+ }
492
+ // Change the table prefix to match 'wp_1_options'
493
+ $nfw_['table_prefix'] = "{$nfw_['table_prefix']}1_";
494
+ }
495
+ if (! $nfw_['options'] = @$nfw_['result']->fetch_object() ) {
496
+ return 6;
497
+ }
498
+ if (! $nfw_['nfw_options'] = @unserialize( $nfw_['options']->option_value ) ) {
499
+ return 11;
500
+ }
501
+ }
502
+
503
+ // Make sure we have something or return an error
504
+ if ( $what == 'nfw_rules' && ! isset( $nfw_['nfw_rules']['1'] ) ) {
505
+ return 16;
506
+ } elseif ( $what == 'nfw_options' && ! isset( $nfw_['nfw_options']['enabled'] ) ) {
507
+ return 15;
508
+ }
509
+
510
+ // All good
511
+ return true;
512
+ }
513
+ }
514
+
515
+ // =====================================================================
516
+
517
+ function nfw_check_postpage() {
518
+
519
+ if ( empty( $_SERVER['REQUEST_URI'] ) || $_SERVER['REQUEST_METHOD'] != 'POST' ||
520
+ ! in_array( $_SESSION['nfw_user_can'], array( 'edit_pages', 'edit_posts' ) ) ) {
521
+
522
+ return false;
523
+ }
524
+ $path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
525
+ if ( $path == null ) {
526
+
527
+ return false;
528
+ }
529
+
530
+ if ( $path == '/wp-admin/post.php' ) {
531
+ if ( isset( $_POST['post_type'] ) && isset( $_POST['action'] ) && $_POST['action'] == 'editpost' ) {
532
+ if ( $_POST['post_type'] == 'page' && $_SESSION['nfw_user_can'] == 'edit_pages' ) {
533
+ return true;
534
+ }
535
+ if ( $_POST['post_type'] == 'post' && ( $_SESSION['nfw_user_can'] == 'edit_posts' || $_SESSION['nfw_user_can'] == 'edit_pages' ) ) {
536
+ return true;
537
+ }
538
+ }
539
+ return false;
540
+ }
541
+
542
+ if ( strpos( $path, '/wp-json/wp/v2/pages/' ) === 0 ) {
543
+ if ( $_SESSION['nfw_user_can'] == 'edit_pages' ) {
544
+ return true;
545
+ }
546
+ return false;
547
+ }
548
+ if ( strpos( $path, '/wp-json/wp/v2/posts/' ) === 0 ) {
549
+ if ( $_SESSION['nfw_user_can'] == 'edit_posts' ) {
550
+ return true;
551
+ }
552
+ }
553
+
554
+ return false;
555
+ }
556
+
557
  // =====================================================================
558
  // Check for HTTPS.
559
 
619
  if (! defined('NFW_REMOTE_ADDR') ) {
620
  define('NFW_REMOTE_ADDR', htmlspecialchars($_SERVER['REMOTE_ADDR']) );
621
  }
622
+
623
+ if ( filter_var( NFW_REMOTE_ADDR, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
624
+ define( 'NFW_REMOTE_ADDR_IPV6', true );
625
+ } else {
626
+ define( 'NFW_REMOTE_ADDR_IPV6', false );
627
+ }
628
+
629
+ if (filter_var( NFW_REMOTE_ADDR, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
630
+ define( 'NFW_REMOTE_ADDR_PRIVATE', false );
631
+ } else {
632
+ define( 'NFW_REMOTE_ADDR_PRIVATE', true );
633
+ }
634
  }
635
 
636
  // =====================================================================
752
 
753
  // =====================================================================
754
 
755
+ function nfw_check_admin_request() {
756
+
757
+ global $nfw_;
758
+
759
+ if ( isset( $nfw_['nfw_rules']['999'] ) ) {
760
+ $nfw_['adm_rules'] = array();
761
+ foreach ( $nfw_['nfw_rules']['999'] as $key => $value ) {
762
+ if ( empty( $nfw_['nfw_rules'][$key]['ena'] ) ) { continue; }
763
+ $nfw_['adm_rules'][$key] = $nfw_['nfw_rules'][$key];
764
+ }
765
+ if (! empty( $nfw_['adm_rules'] ) ) {
766
+ nfw_check_request( $nfw_['adm_rules'], $nfw_['nfw_options'] );
767
+ }
768
+ }
769
+ }
770
+
771
+ // =====================================================================
772
+
773
  function nfw_check_request( $nfw_rules, $nfw_options ) {
774
 
775
  if ( defined('NFW_STATUS') ) { return; }
1271
  if (is_string($str) ) {
1272
  if (get_magic_quotes_gpc() ) { $str = stripslashes($str); }
1273
  if ($how == 1) {
1274
+ // Full WAF
1275
+ if (! empty( $nfw_['mysqli'] ) ) {
1276
+ $str2 = $nfw_['mysqli']->real_escape_string($str);
1277
+ // WP WAF
1278
+ } else {
1279
+ global $wpdb;
1280
+ $str2 = @$wpdb->_real_escape($str);
1281
+ }
1282
  $str2 = str_replace( array( '`', '<', '>'), array( '\\`', '&lt;', '&gt;'), $str2);
1283
  if ( $msg == 'GET' && strpos( $str2, '/') !== false ) {
1284
  $str2 = str_replace( array( '*', '?' ), array( '\*', '\?' ), $str2 );
1297
  return $str;
1298
  }
1299
  if ($str2 != $str) {
1300
+ nfw_log('Sanitising user input', $msg . ': ' . $str, 7, 0);
1301
  }
1302
  return $str2;
1303
 
1313
  }
1314
  if ($occ) {
1315
  unset($str[$key]);
1316
+ nfw_log('Sanitising user input', $msg . ': ' . $key, 7, 0);
1317
  }
1318
  $str[$key2] = nfw_sanitise($value, $how, $msg);
1319
  }
1448
  $tmp . '[' . time() . '] ' . '[' . round( microtime(true) - $nfw_['fw_starttime'], 5) . '] ' .
1449
  '[' . $_SERVER['SERVER_NAME'] . '] ' . '[#' . $nfw_['num_incident'] . '] ' .
1450
  '[' . $ruleid . '] ' .
1451
+ '[' . $loglevel . '] ' . '[' . nfw_anonymize_ip() . '] ' .
1452
  '[' . $http_ret_code . '] ' . '[' . $_SERVER['REQUEST_METHOD'] . '] ' .
1453
  '[' . $_SERVER['SCRIPT_NAME'] . '] ' . '[' . $loginfo . '] ' .
1454
  $encoding . "\n", FILE_APPEND | LOCK_EX );
1456
 
1457
  // =====================================================================
1458
 
1459
+ function nfw_anonymize_ip() {
1460
 
1461
  global $nfw_;
1462
 
1463
+ if (! empty( $nfw_['nfw_options']['anon_ip'] ) && NFW_REMOTE_ADDR_PRIVATE === false ) {
1464
+ return substr( NFW_REMOTE_ADDR, 0, -3 ) .'xxx';
 
1465
  }
1466
 
1467
+ return NFW_REMOTE_ADDR;
1468
  }
1469
 
1470
  // =====================================================================
1675
  $bf_nosig = '';
1676
  }
1677
  if ( $bf_type == 0 ) {
1678
+ $message = '<html><head><title>'. $bf_nosig .'</title><link rel="stylesheet" href="./wp-includes/css/buttons.min.css" type="text/css"><link rel="stylesheet" href="./wp-admin/css/login.min.css" type="text/css"></head><body class="login wp-core-ui" style="color:#444"><div id="login"><center><h2>' . $auth_msgtxt . '</h2><form method="post"><label>'. $bf_nosig .'</label><br><br><p><input class="input" type="text" name="u" placeholder="Username"></p><p><input class="input" type="password" name="p" placeholder="Password"></p><p align="right"><input type="submit" value="Login Page&nbsp;&#187;" class="button-secondary"></p><input type="hidden" name="reauth" value="1"></form></center></div></body></html>';
1679
  } else {
1680
+ $message = '<html><head><title>'. $bf_nosig .'</title><link rel="stylesheet" href="./wp-includes/css/buttons.min.css" type="text/css"><link rel="stylesheet" href="./wp-admin/css/login.min.css" type="text/css"></head><body class="login wp-core-ui" style="color:#444"><div id="login"><center><form method="post"><p><label>'. base64_decode( $captcha_text ) .'</label></p><br><p>' . nfw_get_captcha() . '</p><p><input class="input" type="text" name="c" autofocus></p><p align="right"><input type="submit" value="Login Page&nbsp;&#187;" class="button-secondary"></p><input type="hidden" name="reauth" value="1"></form><br><label>'. $bf_nosig .'</label></center></div></body></html>';
1681
  }
1682
  if ( $bf_allow_bot == 0 ) {
1683
  ini_set('zlib.output_compression','Off');
lib/firewall_log.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -76,9 +76,6 @@ if ( isset( $_GET['nfw_logname'] ) && ! empty( $available_logs[$_GET['nfw_lognam
76
  $selected_log = $monthly_log;
77
  $data = nf_sub_log_read_local( $monthly_log, $log_dir, $max_lines-1 );
78
  }
79
-
80
- nf_sub_log_js_header();
81
-
82
  ?>
83
  <div class="wrap">
84
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Firewall Log', 'ninjafirewall') ?></h1>
@@ -151,9 +148,8 @@ if ( defined('NFW_TEXTAREA_HEIGHT') ) {
151
  }
152
  }
153
  ?></textarea>
154
- <br />
155
  <center>
156
- <span class="description"><?php _e('The log shows all threats that were blocked by the firewall, unless stated otherwise. It is rotated monthly.', 'ninjafirewall') ?></span>
157
  </center>
158
  </td>
159
  </tr>
@@ -168,16 +164,15 @@ if ( empty( $nfw_options['auto_del_log'] ) ) {
168
  ?>
169
  <h3><?php _e('Log Options', 'ninjafirewall') ?></h3>
170
  <form method="post" action="?page=nfsublog"><?php wp_nonce_field('log_save', 'nfwnonce', 0); ?>
171
- <table class="form-table">
172
  <tr>
173
- <th scope="row"><?php _e('Auto-delete log', 'ninjafirewall') ?></th>
174
  <td>
175
  <?php
176
  $input = '<input type="number" name="nfw_options[auto_del_log]" min="0" value="'. (int) $nfw_options['auto_del_log'] .'" class="small-text" />';
177
  printf( __('Automatically delete logs older than %s days', 'ninjafirewall' ), $input );
178
  ?>
179
- <br />
180
- <p><span class="description"><?php _e('Set this option to 0 to disable it.', 'ninjafirewall' ) ?></span></p>
181
  </td>
182
  </tr>
183
  </table>
@@ -187,7 +182,7 @@ if ( empty( $nfw_options['auto_del_log'] ) ) {
187
  </form>
188
 
189
  <a name="clogs"></a>
190
- <form name="frmlog2" method="post" action="?page=nfsublog" onsubmit="return check_key();">
191
  <?php
192
 
193
  wp_nonce_field('clogs_pubkey', 'nfwnonce', 0);
@@ -200,48 +195,27 @@ if ( empty( $nfw_options['auto_del_log'] ) ) {
200
 
201
  <a name="clogs"></a>
202
  <h3><?php _e('Centralized Logging', 'ninjafirewall') ?></h3>
203
- <table class="form-table">
204
  <tr>
205
- <th scope="row"><?php _e('Enter your public key (optional)', 'ninjafirewall') ?></th>
206
  <td>
207
- <input class="large-text" type="text" maxlength="80" name="nfw_options[clogs_pubkey]" value="<?php echo htmlspecialchars( $nfw_options['clogs_pubkey'] ) ?>" autocomplete="off" />
208
- <p><span class="description"><?php printf( __('<a href="%s">Consult our blog</a> if you want to enable centralized logging.', 'ninjafirewall'), 'https://blog.nintechnet.com/centralized-logging-with-ninjafirewall/' ) ?></span></p>
209
  </td>
210
  </tr>
211
  </table>
212
 
213
  <br />
214
  <input type="hidden" name="nfw_act" value="pubkey" />
215
- <input class="button-primary" name="save_pubkey" onclick="what=0" value="<?php _e('Save Public Key', 'ninjafirewall') ?>" type="submit" />
216
  &nbsp;&nbsp;&nbsp;&nbsp;
217
- <input class="button-secondary" name="delete_pubkey" onclick="what=1" value="<?php _e('Delete Public Key', 'ninjafirewall') ?>" type="submit"<?php disabled($nfw_options['clogs_pubkey'], '' ) ?> />
218
 
219
  </form>
220
-
221
  <?php
222
- echo '
223
- </div>';
224
-
225
- /* ------------------------------------------------------------------ */
226
-
227
- function nf_sub_log_js_header() {
228
-
229
- echo '<script>
230
- var what;
231
- function check_key() {
232
- if (what == 1) { return true; }
233
- var pubkey = document.frmlog2.elements["nfw_options[clogs_pubkey]"];
234
- if (! pubkey.value.match( /^[a-f0-9]{40}:(?:[a-f0-9:.]{3,39}|\*)$/) ) {
235
- pubkey.focus();
236
- alert("'. esc_js( __('Your public key is not valid.', 'ninjafirewall') ) . '");
237
- return false;
238
- }
239
- }
240
- </script>';
241
-
242
- }
243
 
244
- /* ------------------------------------------------------------------ */
245
 
246
  function nf_sub_log_save_options( $nfw_options ) {
247
 
@@ -255,7 +229,7 @@ function nf_sub_log_save_options( $nfw_options ) {
255
 
256
  }
257
 
258
- /* ------------------------------------------------------------------ */
259
 
260
  function nf_sub_log_create( $log ) {
261
 
@@ -263,7 +237,7 @@ function nf_sub_log_create( $log ) {
263
 
264
  }
265
 
266
- /* ------------------------------------------------------------------ */
267
 
268
  function nf_sub_log_find_local( $log_dir ) {
269
 
@@ -283,7 +257,7 @@ function nf_sub_log_find_local( $log_dir ) {
283
  return $available_logs;
284
  }
285
 
286
- /* ------------------------------------------------------------------ */
287
 
288
  function nf_sub_log_save_pubkey( $nfw_options ) {
289
 
@@ -298,7 +272,7 @@ function nf_sub_log_save_pubkey( $nfw_options ) {
298
 
299
  }
300
 
301
- /* ------------------------------------------------------------------ */
302
 
303
  function nf_sub_log_read_local( $log, $log_dir, $max_lines ) {
304
 
@@ -338,5 +312,5 @@ function nf_sub_log_read_local( $log, $log_dir, $max_lines ) {
338
 
339
  }
340
 
341
- /* ------------------------------------------------------------------ */
342
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
76
  $selected_log = $monthly_log;
77
  $data = nf_sub_log_read_local( $monthly_log, $log_dir, $max_lines-1 );
78
  }
 
 
 
79
  ?>
80
  <div class="wrap">
81
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Firewall Log', 'ninjafirewall') ?></h1>
148
  }
149
  }
150
  ?></textarea>
 
151
  <center>
152
+ <p class="description"><?php _e('The log shows all threats that were blocked by the firewall, unless stated otherwise. It is rotated monthly.', 'ninjafirewall') ?></p>
153
  </center>
154
  </td>
155
  </tr>
164
  ?>
165
  <h3><?php _e('Log Options', 'ninjafirewall') ?></h3>
166
  <form method="post" action="?page=nfsublog"><?php wp_nonce_field('log_save', 'nfwnonce', 0); ?>
167
+ <table class="form-table nfw-table">
168
  <tr>
169
+ <th scope="row" class="row-med"><?php _e('Auto-delete log', 'ninjafirewall') ?></th>
170
  <td>
171
  <?php
172
  $input = '<input type="number" name="nfw_options[auto_del_log]" min="0" value="'. (int) $nfw_options['auto_del_log'] .'" class="small-text" />';
173
  printf( __('Automatically delete logs older than %s days', 'ninjafirewall' ), $input );
174
  ?>
175
+ <p class="description"><?php _e('Set this option to 0 to disable it.', 'ninjafirewall' ) ?></p>
 
176
  </td>
177
  </tr>
178
  </table>
182
  </form>
183
 
184
  <a name="clogs"></a>
185
+ <form name="frmlog2" method="post" action="?page=nfsublog" onsubmit="return nfwjs_check_key();">
186
  <?php
187
 
188
  wp_nonce_field('clogs_pubkey', 'nfwnonce', 0);
195
 
196
  <a name="clogs"></a>
197
  <h3><?php _e('Centralized Logging', 'ninjafirewall') ?></h3>
198
+ <table class="form-table nfw-table">
199
  <tr>
200
+ <th scope="row" class="row-med"><?php _e('Enter your public key (optional)', 'ninjafirewall') ?></th>
201
  <td>
202
+ <input id="clogs-pubkey" class="large-text" type="text" maxlength="80" name="nfw_options[clogs_pubkey]" value="<?php echo htmlspecialchars( $nfw_options['clogs_pubkey'] ) ?>" autocomplete="off" />
203
+ <p class="description"><?php printf( __('<a href="%s">Consult our blog</a> if you want to enable centralized logging.', 'ninjafirewall'), 'https://blog.nintechnet.com/centralized-logging-with-ninjafirewall/' ) ?></p>
204
  </td>
205
  </tr>
206
  </table>
207
 
208
  <br />
209
  <input type="hidden" name="nfw_act" value="pubkey" />
210
+ <input class="button-primary" name="save_pubkey" value="<?php _e('Save Public Key', 'ninjafirewall') ?>" type="submit" />
211
  &nbsp;&nbsp;&nbsp;&nbsp;
212
+ <input class="button-secondary" name="delete_pubkey" value="<?php _e('Delete Public Key', 'ninjafirewall') ?>" type="submit"<?php disabled($nfw_options['clogs_pubkey'], '' ) ?> />
213
 
214
  </form>
215
+ </div>
216
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
218
+ // ---------------------------------------------------------------------
219
 
220
  function nf_sub_log_save_options( $nfw_options ) {
221
 
229
 
230
  }
231
 
232
+ // ---------------------------------------------------------------------
233
 
234
  function nf_sub_log_create( $log ) {
235
 
237
 
238
  }
239
 
240
+ // ---------------------------------------------------------------------
241
 
242
  function nf_sub_log_find_local( $log_dir ) {
243
 
257
  return $available_logs;
258
  }
259
 
260
+ // ---------------------------------------------------------------------
261
 
262
  function nf_sub_log_save_pubkey( $nfw_options ) {
263
 
272
 
273
  }
274
 
275
+ // ---------------------------------------------------------------------
276
 
277
  function nf_sub_log_read_local( $log, $log_dir, $max_lines ) {
278
 
312
 
313
  }
314
 
315
+ // ---------------------------------------------------------------------
316
  // EOF
lib/firewall_options.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -24,55 +24,14 @@ nf_not_allowed( 'block', __LINE__ );
24
 
25
  $nfw_options = nfw_get_option( 'nfw_options' );
26
 
27
- echo '
28
- <script>
29
- var restoreconf = 0;
30
- function save_options() {
31
- if ( restoreconf > 0 ) {
32
- if ( confirm( "'. esc_js( __('This action will restore the selected configuration file and will override all your current firewall options, policies and rules. Continue?', 'ninjafirewall') ) .'" ) ) {
33
- return true;
34
- }
35
- return false;
36
- }
37
- return true;
38
- }
39
- function select_backup( what ) {
40
- if ( what == 0 ) {
41
- restoreconf = 0;
42
- } else {
43
- restoreconf = 1;
44
- }
45
- }
46
- function preview_msg() {
47
- var t1 = document.option_form.elements[\'nfw_options[blocked_msg]\'].value.replace(\'%%REM_ADDRESS%%\',\'' . htmlspecialchars(NFW_REMOTE_ADDR) . '\');
48
- var t2 = t1.replace(\'%%NUM_INCIDENT%%\',\'1234567\');
49
- var t3 = t2.replace(\'%%NINJA_LOGO%%\',\'<img src="' . plugins_url() . '/ninjafirewall/images/ninjafirewall_75.png" width="75" height="75" title="NinjaFirewall">\');
50
- var ns;
51
- if ( t3.match(/<style/i) ) {
52
- ns = "'. esc_js( __('CSS style sheets', 'ninjafirewall') ) .'";
53
- }
54
- if ( t3.match(/<script/i) ) {
55
- ns = "'. esc_js( __('Javascript code', 'ninjafirewall') ) .'";
56
- }
57
- if ( ns ) {
58
- alert("'. sprintf( esc_js( __('Your message seems to contain %s. For security reasons, it cannot be previewed from the admin dashboard.', 'ninjafirewall') ), '"+ ns +"'). '");
59
- return false;
60
- }
61
- document.getElementById(\'out_msg\').innerHTML = t3;
62
- jQuery("#td_msg").slideDown();
63
- document.getElementById(\'btn_msg\').value = \'' . esc_js( __('Refresh preview', 'ninjafirewall') ) . '\';
64
- }
65
- function default_msg() {
66
- document.option_form.elements[\'nfw_options[blocked_msg]\'].value = "' . preg_replace( '/[\r\n]/', '\n', NFW_DEFAULT_MSG) .'";
67
- }
68
- </script>
69
-
70
  <div class="wrap">
71
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Firewall Options', 'ninjafirewall') . '</h1>';
 
72
 
73
  // Saved options ?
74
- if ( isset( $_POST['nfw_options']) ) {
75
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'options_save') ) {
76
  wp_nonce_ays('options_save');
77
  }
78
  $res = nf_sub_options_save();
@@ -84,142 +43,124 @@ if ( isset( $_POST['nfw_options']) ) {
84
  }
85
  }
86
 
87
- ?><br />
88
- <form method="post" name="option_form" enctype="multipart/form-data" onsubmit="return save_options();">
 
 
89
  <?php wp_nonce_field('options_save', 'nfwnonce', 0); ?>
90
- <table class="form-table">
 
 
 
 
 
 
 
 
 
91
  <tr>
92
- <th scope="row"><?php _e('Firewall protection', 'ninjafirewall') ?></th>
93
- <?php
94
- // Enabled :
95
- if (! empty( $nfw_options['enabled']) ) {
96
- echo '
97
- <td width="20" align="left">&nbsp;</td>
98
  <td>
99
- <select name="nfw_options[enabled]" style="width:200px">
100
- <option value="1" selected>' . __('Enabled', 'ninjafirewall') . '</option>
101
- <option value="0">' . __('Disabled', 'ninjafirewall') . '</option>
102
- </select>';
103
- // Disabled :
104
- } else {
105
- echo '
106
- <td width="20" align="left"><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-error.png"></td>
107
- <td>
108
- <select name="nfw_options[enabled]" style="width:200px">
109
- <option value="1">' . __('Enabled', 'ninjafirewall') . '</option>
110
- <option value="0" selected>' . __('Disabled', 'ninjafirewall') . '</option>
111
- </select>&nbsp;<span class="description">&nbsp;' . __('Warning: your site is not protected!', 'ninjafirewall') . '</span>';
112
- }
113
- echo '
114
  </td>
115
  </tr>
116
- <tr>
117
- <th scope="row">' . __('Debugging mode', 'ninjafirewall') . '</th>';
118
 
119
- // Debugging enabled ?
120
- if (! empty( $nfw_options['debug']) ) {
121
- echo '<td width="20" align="left"><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-error.png"></td>
122
- <td>
123
- <select name="nfw_options[debug]" style="width:200px">
124
- <option value="1" selected>' . __('Enabled', 'ninjafirewall') . '</option>
125
- <option value="0">' . __('Disabled (default)', 'ninjafirewall') . '</option>
126
- </select>&nbsp;<span class="description">&nbsp;' . __('Warning: your site is not protected!', 'ninjafirewall') . '</span>
127
- </td>';
128
-
129
- } else {
130
- // Debugging disabled ?
131
- echo '<td width="20">&nbsp;</td>
132
  <td>
133
- <select name="nfw_options[debug]" style="width:200px">
134
- <option value="1">' . __('Enabled', 'ninjafirewall') . '</option>
135
- <option value="0" selected>' . __('Disabled (default)', 'ninjafirewall') . '</option>
136
- </select>
137
- </td>';
138
- }
139
-
140
- // Get the HTTP error code to return :
141
- if (! @preg_match( '/^(?:4(?:0[0346]|18)|50[03])$/', $nfw_options['ret_code']) ) {
142
- $nfw_options['ret_code'] = '403';
143
- }
144
- ?>
145
  </tr>
 
 
 
 
 
 
 
146
  <tr>
147
- <th scope="row"><?php _e('HTTP error code to return', 'ninjafirewall') ?></th>
148
- <td width="20">&nbsp;</td>
149
  <td>
150
- <select name="nfw_options[ret_code]" style="width:200px">
151
- <option value="400"<?php selected($nfw_options['ret_code'], 400) ?>><?php _e('400 Bad Request', 'ninjafirewall') ?></option>
152
- <option value="403"<?php selected($nfw_options['ret_code'], 403) ?>><?php _e('403 Forbidden (default)', 'ninjafirewall') ?></option>
153
- <option value="404"<?php selected($nfw_options['ret_code'], 404) ?>><?php _e('404 Not Found', 'ninjafirewall') ?></option>
154
- <option value="406"<?php selected($nfw_options['ret_code'], 406) ?>><?php _e('406 Not Acceptable', 'ninjafirewall') ?></option>
155
- <option value="418"<?php selected($nfw_options['ret_code'], 418) ?>><?php _e("418 I'm a teapot", 'ninjafirewall') ?></option>
156
- <option value="500"<?php selected($nfw_options['ret_code'], 500) ?>><?php _e('500 Internal Server Error', 'ninjafirewall') ?></option>
157
- <option value="503"<?php selected($nfw_options['ret_code'], 503) ?>><?php _e('503 Service Unavailable', 'ninjafirewall') ?></option>
158
- </select>
159
  </td>
160
  </tr>
161
 
162
- <?php
163
- if ( empty( $nfw_options['anon_ip'] ) ) {
164
- $nfw_options['anon_ip'] = 0;
165
- } else {
166
- $nfw_options['anon_ip'] = 1;
167
- }
168
- ?>
169
  <tr>
170
- <th scope="row"><?php _e('IP anonymization', 'ninjafirewall') ?></th>
171
- <td width="20">&nbsp;</td>
172
  <td>
173
- <p><label><input type="checkbox"<?php checked($nfw_options['anon_ip'], 1) ?> name="nfw_options[anon_ip]" /> <?php _e('Anonymize IP addresses by removing the last 3 characters.', 'ninjafirewall') ?></label></p>
174
- <p><span class="description"><?php printf( __('Does not apply to private IP addresses and the <a href="%s">Login Protection</a>.', 'ninjafirewall'), '?page=nfsubloginprot' ) ?></span></p>
175
  </td>
176
  </tr>
177
 
178
- <?php
179
- echo '
 
 
 
 
 
 
 
180
  <tr>
181
- <th scope="row">' . __('Blocked user message', 'ninjafirewall') . '</th>
182
- <td width="20">&nbsp;</td>
183
  <td>
184
- <textarea name="nfw_options[blocked_msg]" class="small-text code" cols="60" rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">';
185
-
186
- if (! empty( $nfw_options['blocked_msg']) ) {
187
- echo htmlentities(base64_decode($nfw_options['blocked_msg']));
188
- } else {
189
- echo NFW_DEFAULT_MSG;
190
- }
191
- ?></textarea>
192
- <p><input class="button-secondary" type="button" id="btn_msg" value="<?php _e('Preview message', 'ninjafirewall') ?>" onclick="javascript:preview_msg();" />&nbsp;&nbsp;<input class="button-secondary" type="button" id="btn_msg" value="<?php _e('Default message', 'ninjafirewall') ?>" onclick="javascript:default_msg();" /></p>
193
  </td>
194
  </tr>
195
  </table>
196
 
197
- <div id="td_msg" style="display:none">
198
- <table class="form-table" border="1">
199
- <tr><td id="out_msg" style="border:1px solid #DFDFDF;background-color:#ffffff;" width="100%"></td></tr>
200
- </table>
201
- </div>
202
 
203
  <h3><?php _e('Firewall configuration', 'ninjafirewall') ?></h3>
204
 
205
- <table class="form-table">
206
  <tr>
207
- <th scope="row"><?php _e('Export configuration', 'ninjafirewall') ?></th>
208
- <td width="20">&nbsp;</td>
209
- <td><input class="button-secondary" type="submit" name="nf_export" value="<?php _e('Download', 'ninjafirewall') ?>" /><br /><span class="description"><?php _e( 'File Check configuration will not be exported/imported.', 'ninjafirewall') ?></span></td>
 
 
210
  </tr>
211
  <tr>
212
- <th scope="row"><?php _e('Import configuration', 'ninjafirewall') ?></th>
213
- <td width="20">&nbsp;</td>
214
- <td><input type="file" name="nf_imp" /><br /><span class="description"><?php
 
215
  list ( $major_current ) = explode( '.', NFW_ENGINE_VERSION );
216
  printf( __( 'Imported configuration must match plugin version %s.', 'ninjafirewall'), (int) $major_current .'.x' );
217
  echo '<br />'. __('It will override all your current firewall options and rules.', 'ninjafirewall')
218
- ?></span></td>
 
219
  </tr>
220
  <tr>
221
- <th scope="row"><?php _e('Configuration backup', 'ninjafirewall') ?></th>
222
- <td width="20">&nbsp;</td>
223
  <td><?php echo nf_sub_options_confbackup(); ?></td>
224
  </tr>
225
  </table>
@@ -230,9 +171,10 @@ if (! empty( $nfw_options['blocked_msg']) ) {
230
  </div>
231
 
232
  <?php
 
233
  return;
234
 
235
- /* ------------------------------------------------------------------ */
236
 
237
  function nf_sub_options_confbackup() {
238
 
@@ -243,7 +185,7 @@ function nf_sub_options_confbackup() {
243
 
244
  if ( is_array( $glob ) && ! empty( $glob[0] ) ) {
245
  sort( $glob );
246
- $res .= '<select name="backup_file" onchange="select_backup(this.value)"><option selected value="">'.
247
  __('Available backup files', 'ninjafirewall') .'</option>';
248
  foreach( $glob as $file ) {
249
  if ( preg_match( '`/(backup_(\d{10})_.+\.php)$`', $file, $match ) ) {
@@ -253,7 +195,7 @@ function nf_sub_options_confbackup() {
253
  }
254
  }
255
  $res .= '</select>';
256
- $res .= '<br /><span class="description">'. sprintf( __( "To restore NinjaFirewall's configuration to an earlier date, select it in the list and click '%s'.", 'ninjafirewall'), __('Save Firewall Options', 'ninjafirewall') ) . '</span>';
257
 
258
  } else {
259
  // No backup files yet:
@@ -263,7 +205,7 @@ function nf_sub_options_confbackup() {
263
 
264
  }
265
 
266
- /* ------------------------------------------------------------------ */
267
 
268
  function nf_sub_options_save() {
269
 
@@ -388,7 +330,7 @@ function nf_sub_options_save() {
388
  nfw_update_option( 'nfw_options', $nfw_options);
389
 
390
  }
391
- /* ------------------------------------------------------------------ */
392
 
393
  function nf_sub_options_import( $file ) {
394
 
@@ -399,18 +341,18 @@ function nf_sub_options_import( $file ) {
399
  if (! $data) {
400
  return sprintf($err_msg, 1);
401
  }
402
- @list ($options, $rules, $bf) = @explode("\n:-:\n", $data . "\n:-:\n");
403
 
404
  // Detect and remove potential Unicode BOM:
405
- if ( preg_match( '/^\xef\xbb\xbf/', $options ) ) {
406
- $options = preg_replace( '/^\xef\xbb\xbf/', '', $options );
407
  }
408
 
409
- if (! $options || ! $rules) {
410
  return sprintf($err_msg, 2);
411
  }
412
 
413
- $nfw_options = @json_decode( $options, true );
414
  $nfw_rules = @json_decode( $rules, true );
415
  if (! empty( $bf ) ) {
416
  $bf_conf = json_decode( $bf, true );
@@ -420,11 +362,21 @@ function nf_sub_options_import( $file ) {
420
  return sprintf($err_msg, 3);
421
  }
422
 
 
423
  // Make sure the major version numbers match (3.x, 4.x etc):
424
- list ( $major_current ) = explode( '.', NFW_ENGINE_VERSION );
 
425
  list ( $major_import ) = explode( '.', $nfw_options['engine_version'] );
426
- if ( $major_current != $major_import ) {
427
- return __('The imported file is not compatible with that version of NinjaFirewall', 'ninjafirewall');
 
 
 
 
 
 
 
 
428
  }
429
 
430
  // We cannot import WP+ config :
@@ -526,7 +478,7 @@ function nf_sub_options_import( $file ) {
526
  return;
527
  }
528
 
529
- /* ------------------------------------------------------------------ */
530
 
531
  function nf_sub_options_alert( $what ) {
532
 
@@ -579,5 +531,5 @@ function nf_sub_options_alert( $what ) {
579
  wp_mail( $recipient, $subject, $message );
580
  }
581
 
582
- /* ------------------------------------------------------------------ */
583
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
24
 
25
  $nfw_options = nfw_get_option( 'nfw_options' );
26
 
27
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  <div class="wrap">
29
+ <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Firewall Options', 'ninjafirewall') ?></h1>
30
+ <?php
31
 
32
  // Saved options ?
33
+ if ( isset( $_POST['nfw_options'] ) ) {
34
+ if ( empty( $_POST['nfwnonce'] ) || ! wp_verify_nonce( $_POST['nfwnonce'], 'options_save' ) ) {
35
  wp_nonce_ays('options_save');
36
  }
37
  $res = nf_sub_options_save();
43
  }
44
  }
45
 
46
+ ?>
47
+ <br />
48
+ <form method="post" name="option_form" enctype="multipart/form-data" onsubmit="return nfwjs_save_options();">
49
+
50
  <?php wp_nonce_field('options_save', 'nfwnonce', 0); ?>
51
+
52
+ <table class="form-table nfw-table">
53
+
54
+ <?php
55
+ if ( empty( $nfw_options['enabled'] ) ) {
56
+ $nfw_options['enabled'] = 0;
57
+ } else {
58
+ $nfw_options['enabled'] = 1;
59
+ }
60
+ ?>
61
  <tr>
62
+ <th scope="row" class="row-med"><?php _e('Firewall protection', 'ninjafirewall') ?></th>
 
 
 
 
 
63
  <td>
64
+ <?php nfw_toggle_switch( 'danger', 'nfw_options[enabled]', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', $nfw_options['enabled'] ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  </td>
66
  </tr>
 
 
67
 
68
+ <?php
69
+ if ( empty( $nfw_options['debug'] ) ) {
70
+ $nfw_options['debug'] = 0;
71
+ } else {
72
+ $nfw_options['debug'] = 1;
73
+ }
74
+ ?>
75
+ <tr>
76
+ <th scope="row" class="row-med"><?php _e('Debugging mode', 'ninjafirewall') ?></th>
 
 
 
 
77
  <td>
78
+ <?php nfw_toggle_switch( 'warning', 'nfw_options[debug]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $nfw_options['debug'] ) ?>
79
+ </td>
 
 
 
 
 
 
 
 
 
 
80
  </tr>
81
+
82
+ <?php
83
+ // Get the HTTP error code to return
84
+ if ( empty( $nfw_options['ret_code'] ) || ! preg_match( '/^(?:4(?:0[0346]|18)|50[03])$/', $nfw_options['ret_code'] ) ) {
85
+ $nfw_options['ret_code'] = '403';
86
+ }
87
+ ?>
88
  <tr>
89
+ <th scope="row" class="row-med"><?php _e('HTTP error code to return', 'ninjafirewall') ?></th>
 
90
  <td>
91
+ <select name="nfw_options[ret_code]">
92
+ <option value="400"<?php selected( $nfw_options['ret_code'], 400 ) ?>><?php _e('400 Bad Request', 'ninjafirewall') ?></option>
93
+ <option value="403"<?php selected( $nfw_options['ret_code'], 403 ) ?>><?php _e('403 Forbidden (default)', 'ninjafirewall') ?></option>
94
+ <option value="404"<?php selected( $nfw_options['ret_code'], 404 ) ?>><?php _e('404 Not Found', 'ninjafirewall') ?></option>
95
+ <option value="406"<?php selected( $nfw_options['ret_code'], 406 ) ?>><?php _e('406 Not Acceptable', 'ninjafirewall') ?></option>
96
+ <option value="418"<?php selected( $nfw_options['ret_code'], 418 ) ?>><?php _e("418 I'm a teapot", 'ninjafirewall') ?></option>
97
+ <option value="500"<?php selected( $nfw_options['ret_code'], 500 ) ?>><?php _e('500 Internal Server Error', 'ninjafirewall') ?></option>
98
+ <option value="503"<?php selected( $nfw_options['ret_code'], 503 ) ?>><?php _e('503 Service Unavailable', 'ninjafirewall') ?></option>
99
+ </select>
100
  </td>
101
  </tr>
102
 
103
+ <?php
104
+ if ( empty( $nfw_options['anon_ip'] ) ) {
105
+ $nfw_options['anon_ip'] = 0;
106
+ } else {
107
+ $nfw_options['anon_ip'] = 1;
108
+ }
109
+ ?>
110
  <tr>
111
+ <th scope="row" class="row-med"><?php _e('IP anonymization', 'ninjafirewall') ?></th>
 
112
  <td>
113
+ <?php nfw_toggle_switch( 'info', 'nfw_options[anon_ip]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $nfw_options['anon_ip'] ) ?>
114
+ <p class="description"><?php printf( __('Does not apply to private IP addresses and the <a href="%s">Login Protection</a>.', 'ninjafirewall'), '?page=nfsubloginprot' ) ?></p>
115
  </td>
116
  </tr>
117
 
118
+ <?php
119
+ if (! empty( $nfw_options['blocked_msg'] ) ) {
120
+ $msg = base64_decode( $nfw_options['blocked_msg'] );
121
+ } else {
122
+ $msg = NFW_DEFAULT_MSG;
123
+ }
124
+
125
+ $logo_uri = rawurlencode( '<img src="' . plugins_url() . '/ninjafirewall/images/ninjafirewall_75.png" width="75" height="75" />' );
126
+ ?>
127
  <tr>
128
+ <th scope="row" class="row-med"><?php _e('Blocked user message', 'ninjafirewall') ?></th>
 
129
  <td>
130
+ <textarea id="blocked-msg" name="nfw_options[blocked_msg]" class="small-text code" cols="70" rows="14" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php echo htmlspecialchars( $msg ) ?></textarea>
131
+ <p class="description"><?php _e('HTML code, including CSS and JS, is allowed.', 'ninjafirewall') ?></p>
132
+ <input type="hidden" id="default-msg" value="<?php echo htmlspecialchars( NFW_DEFAULT_MSG ) ?>" />
133
+ <p><input class="button-secondary" type="button" value="<?php _e('Default message', 'ninjafirewall') ?>" onclick="nfwjs_default_msg();" /></p>
 
 
 
 
 
134
  </td>
135
  </tr>
136
  </table>
137
 
138
+ <br />
139
+ <br />
 
 
 
140
 
141
  <h3><?php _e('Firewall configuration', 'ninjafirewall') ?></h3>
142
 
143
+ <table class="form-table nfw-table">
144
  <tr>
145
+ <th scope="row" class="row-med"><?php _e('Export configuration', 'ninjafirewall') ?></th>
146
+ <td>
147
+ <input class="button-secondary" type="submit" name="nf_export" value="<?php _e('Download', 'ninjafirewall') ?>" />
148
+ <p class="description"><?php _e( 'File Check configuration will not be exported/imported.', 'ninjafirewall') ?></p>
149
+ </td>
150
  </tr>
151
  <tr>
152
+ <th scope="row" class="row-med"><?php _e('Import configuration', 'ninjafirewall') ?></th>
153
+ <td>
154
+ <input type="file" name="nf_imp" />
155
+ <p class="description"><?php
156
  list ( $major_current ) = explode( '.', NFW_ENGINE_VERSION );
157
  printf( __( 'Imported configuration must match plugin version %s.', 'ninjafirewall'), (int) $major_current .'.x' );
158
  echo '<br />'. __('It will override all your current firewall options and rules.', 'ninjafirewall')
159
+ ?></p>
160
+ </td>
161
  </tr>
162
  <tr>
163
+ <th scope="row" class="row-med"><?php _e('Configuration backup', 'ninjafirewall') ?></th>
 
164
  <td><?php echo nf_sub_options_confbackup(); ?></td>
165
  </tr>
166
  </table>
171
  </div>
172
 
173
  <?php
174
+
175
  return;
176
 
177
+ // ---------------------------------------------------------------------
178
 
179
  function nf_sub_options_confbackup() {
180
 
185
 
186
  if ( is_array( $glob ) && ! empty( $glob[0] ) ) {
187
  sort( $glob );
188
+ $res .= '<select name="backup_file" onchange="nfwjs_select_backup(this.value)"><option selected value="">'.
189
  __('Available backup files', 'ninjafirewall') .'</option>';
190
  foreach( $glob as $file ) {
191
  if ( preg_match( '`/(backup_(\d{10})_.+\.php)$`', $file, $match ) ) {
195
  }
196
  }
197
  $res .= '</select>';
198
+ $res .= '<p class="description">'. sprintf( __( "To restore NinjaFirewall's configuration to an earlier date, select it in the list and click '%s'.", 'ninjafirewall'), __('Save Firewall Options', 'ninjafirewall') ) . '</p>';
199
 
200
  } else {
201
  // No backup files yet:
205
 
206
  }
207
 
208
+ // ---------------------------------------------------------------------
209
 
210
  function nf_sub_options_save() {
211
 
330
  nfw_update_option( 'nfw_options', $nfw_options);
331
 
332
  }
333
+ // ---------------------------------------------------------------------
334
 
335
  function nf_sub_options_import( $file ) {
336
 
341
  if (! $data) {
342
  return sprintf($err_msg, 1);
343
  }
344
+ @list ($nfw_options, $rules, $bf) = @explode("\n:-:\n", $data . "\n:-:\n");
345
 
346
  // Detect and remove potential Unicode BOM:
347
+ if ( preg_match( '/^\xef\xbb\xbf/', $nfw_options ) ) {
348
+ $nfw_options = preg_replace( '/^\xef\xbb\xbf/', '', $nfw_options );
349
  }
350
 
351
+ if (! $nfw_options || ! $rules) {
352
  return sprintf($err_msg, 2);
353
  }
354
 
355
+ $nfw_options = @json_decode( $nfw_options, true );
356
  $nfw_rules = @json_decode( $rules, true );
357
  if (! empty( $bf ) ) {
358
  $bf_conf = json_decode( $bf, true );
362
  return sprintf($err_msg, 3);
363
  }
364
 
365
+
366
  // Make sure the major version numbers match (3.x, 4.x etc):
367
+ //~ 2019-06-26: **temporary**: disabled while updating from version 3.x to 4.x
368
+ //~ list ( $major_current ) = explode( '.', NFW_ENGINE_VERSION );
369
  list ( $major_import ) = explode( '.', $nfw_options['engine_version'] );
370
+ //~ if ( $major_current != $major_import ) {
371
+ //~ return __('The imported file is not compatible with that version of NinjaFirewall', 'ninjafirewall');
372
+ //~ }
373
+ //~ 2019-06-26: **temporary**: version 3.x to 4.x update
374
+ if ( $major_import < '4' ) {
375
+ if ( empty( $nfw_options['allow_local_ip'] ) ) {
376
+ $nfw_options['allow_local_ip'] = 1;
377
+ } else {
378
+ $nfw_options['allow_local_ip'] = 0;
379
+ }
380
  }
381
 
382
  // We cannot import WP+ config :
478
  return;
479
  }
480
 
481
+ // ---------------------------------------------------------------------
482
 
483
  function nf_sub_options_alert( $what ) {
484
 
531
  wp_mail( $recipient, $subject, $message );
532
  }
533
 
534
+ // ---------------------------------------------------------------------
535
  // EOF
lib/firewall_policies.php CHANGED
@@ -14,19 +14,20 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
- // Block immediately if user is not allowed :
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
-
26
  $yes = __('Yes', 'ninjafirewall');
27
  $no = __('No', 'ninjafirewall');
28
- $default = ' ' . __('(default)', 'ninjafirewall');
29
- $full_waf_msg = '<br /><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description">' . sprintf( __('This feature is only available when NinjaFirewall is running in %s mode.', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/">Full WAF</a>') . '</span>';
 
 
30
  if ( defined('NFW_WPWAF') ) {
31
  $option_disabled = 1;
32
  } else {
@@ -36,76 +37,30 @@ if ( defined('NFW_WPWAF') ) {
36
  $nfw_options = nfw_get_option( 'nfw_options' );
37
  $nfw_rules = nfw_get_option( 'nfw_rules' );
38
 
39
- echo '
40
- <script>
41
- function restore() {
42
- if (confirm("' . esc_js( __('All fields will be restored to their default values. Go ahead?', 'ninjafirewall') ) . '")){
43
- return true;
44
- }else{
45
- return false;
46
- }
47
- }
48
- function chksubmenu() {
49
- if (document.fwrules.elements[\'nfw_options[uploads]\'].value > 0) {
50
- document.fwrules.san.disabled = false;
51
- document.fwrules.subs.disabled = false;
52
- document.getElementById("sanitize-fn").style.color = "#444";
53
- } else {
54
- document.fwrules.san.disabled = true;
55
- document.fwrules.subs.disabled = true;
56
- document.getElementById("sanitize-fn").style.color = "#bbbbbb";
57
- }
58
- }
59
- function csp_onoff(what, csp) {
60
- if (what == 0) {
61
- document.getElementById(csp).readOnly = true;
62
- } else {
63
- document.getElementById(csp).readOnly = false;
64
- document.getElementById(csp).focus();
65
- }
66
- }
67
- function ssl_warn() {';
68
- if ( NFW_IS_HTTPS == true ) {
69
- echo 'return true;';
70
  } else {
71
- echo '
72
- if (confirm("' . esc_js( __('WARNING: ensure that you can access your admin console over HTTPS before enabling this option, otherwise you will lock yourself out of your site. Go ahead?', 'ninjafirewall') ) . '")){
73
- return true;
74
- }
75
- return false;';
76
- }
77
- echo '
78
  }
79
- function sanitise_fn(cbox) {
80
- if(cbox.checked) {
81
- if (confirm("' . esc_js( __('Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a hyphen [-] or an underscore [_] will be removed from the filename and replaced with the substitution character. Continue?', 'ninjafirewall') ) . '")){
82
- return true;
83
- }
84
- return false;
85
- }
86
- }
87
- function nfw_switch_tabs(tab) {
88
- if ( tab == 1 ) {
89
- jQuery("#basic-options").show(); jQuery("#tab-1").addClass("nav-tab-active");
90
- jQuery("#intermediate-options").hide(); jQuery("#tab-2").removeClass("nav-tab-active");
91
- jQuery("#advanced-options").hide(); jQuery("#tab-3").removeClass("nav-tab-active");
92
-
93
- } else if ( tab == 2 ) {
94
- jQuery("#basic-options").hide(); jQuery("#tab-1").removeClass("nav-tab-active");
95
- jQuery("#intermediate-options").show(); jQuery("#tab-2").addClass("nav-tab-active");
96
- jQuery("#advanced-options").hide(); jQuery("#tab-3").removeClass("nav-tab-active");
97
-
98
- } else if ( tab ==3 ) {
99
- jQuery("#basic-options").hide(); jQuery("#tab-1").removeClass("nav-tab-active");
100
- jQuery("#intermediate-options").hide(); jQuery("#tab-2").removeClass("nav-tab-active");
101
- jQuery("#advanced-options").show(); jQuery("#tab-3").addClass("nav-tab-active");
102
- }
103
- }
104
- </script>
105
 
 
106
  <div class="wrap">
107
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Firewall Policies', 'ninjafirewall') . '</h1>';
108
-
109
 
110
  if ( isset( $_POST['nfw_options']) ) {
111
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'policies_save') ) {
@@ -127,9 +82,9 @@ if ( isset( $_POST['nfw_options']) ) {
127
  ?>
128
  <br />
129
  <h2 class="nav-tab-wrapper wp-clearfix" style="cursor:pointer">
130
- <a id="tab-1" class="nav-tab nav-tab-active" onClick="nfw_switch_tabs(1)"><?php _e( 'Basic Policies', 'ninjafirewall' ) ?></a>
131
- <a id="tab-2" class="nav-tab" onClick="nfw_switch_tabs(2)"><?php _e( 'Intermediate Policies', 'ninjafirewall' ) ?></a>
132
- <a id="tab-3" class="nav-tab" onClick="nfw_switch_tabs(3)"><?php _e( 'Advanced Policies', 'ninjafirewall' ) ?></a>
133
  </h2>
134
  <br />
135
  <?php
@@ -137,10 +92,10 @@ if ( isset( $_POST['nfw_options']) ) {
137
  echo '<form method="post" name="fwrules">';
138
  wp_nonce_field('policies_save', 'nfwnonce', 0);
139
 
140
- // ==========================================================================
141
  // Basic options:
142
  ?>
143
- <div id="basic-options">
144
  <?php
145
  if ( ( isset( $nfw_options['scan_protocol']) ) &&
146
  ( preg_match( '/^[123]$/', $nfw_options['scan_protocol']) ) ) {
@@ -151,18 +106,20 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
151
 
152
  ?>
153
  <h3>HTTP / HTTPS</h3>
154
- <table class="form-table">
155
  <tr>
156
- <th scope="row"><?php _e('Enable NinjaFirewall for', 'ninjafirewall') ?></th>
157
- <td width="20">&nbsp;</td>
158
  <td>
159
- <p><label><input type="radio" name="nfw_options[scan_protocol]" value="3"<?php checked($scan_protocol, 3 ) ?>>&nbsp;<?php _e('HTTP and HTTPS traffic (default)', 'ninjafirewall') ?></label></p>
160
- <p><label><input type="radio" name="nfw_options[scan_protocol]" value="1"<?php checked($scan_protocol, 1 ) ?>>&nbsp;<?php _e('HTTP traffic only', 'ninjafirewall') ?></label></p>
161
- <p><label><input type="radio" name="nfw_options[scan_protocol]" value="2"<?php checked($scan_protocol, 2 ) ?>>&nbsp;<?php _e('HTTPS traffic only', 'ninjafirewall') ?></label></p>
162
  </td>
163
  </tr>
164
  </table>
165
 
 
 
 
166
  <?php
167
  if ( empty( $nfw_options['sanitise_fn']) ) {
168
  $sanitise_fn = 0;
@@ -181,43 +138,45 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
181
  $substitute = htmlspecialchars( $nfw_options['substitute'] );
182
  }
183
  ?>
184
- <br />
185
  <h3><?php _e('Uploads', 'ninjafirewall') ?></h3>
186
- <table class="form-table">
187
  <tr>
188
- <th scope="row"><?php _e('File Uploads', 'ninjafirewall') ?></th>
189
- <td width="20">&nbsp;</td>
190
  <td>
191
- <select name="nfw_options[uploads]" onchange="chksubmenu();">
192
  <option value="1"<?php selected( $uploads, 1 ) ?>><?php echo __('Allow uploads', 'ninjafirewall') .' '. __('(default)', 'ninjafirewall') ?></option>
193
  <option value="0"<?php selected( $uploads, 0 ) ?>><?php _e('Disallow uploads', 'ninjafirewall') ?></option>
194
  </select>
195
- <p id="sanitize-fn"<?php if (! $uploads) { echo ' style="color:#bbbbbb;"'; }?>>
196
- <label><input type="checkbox" onclick='return sanitise_fn(this);' name="nfw_options[sanitise_fn]"<?php checked( $sanitise_fn, 1 ); disabled( $uploads, 0 ) ?> id="san">&nbsp;<?php _e('Sanitise filenames', 'ninjafirewall') ?> (<?php _e('substitution character:', 'ninjafirewall') ?></label> <input id="subs" maxlength="1" size="1" value="<?php echo $substitute ?>" name="nfw_options[substitute]" type="text" <?php disabled( $uploads, 0 ) ?>/> )
197
- </p>
198
  </td>
199
  </tr>
200
  </table>
201
 
 
202
  <br />
203
 
204
  <?php
205
- if ( @strpos( $nfw_options['wp_dir'], 'wp-admin' ) !== FALSE ) {
 
 
 
206
  $wp_admin = 1;
207
  } else {
208
  $wp_admin = 0;
209
  }
210
- if ( @strpos( $nfw_options['wp_dir'], 'wp-includes' ) !== FALSE ) {
211
  $wp_inc = 1;
212
  } else {
213
  $wp_inc = 0;
214
  }
215
- if ( @strpos( $nfw_options['wp_dir'], 'uploads' ) !== FALSE ) {
216
  $wp_upl = 1;
217
  } else {
218
  $wp_upl = 0;
219
  }
220
- if ( @strpos( $nfw_options['wp_dir'], 'cache' ) !== FALSE ) {
221
  $wp_cache = 1;
222
  } else {
223
  $wp_cache = 0;
@@ -312,16 +271,15 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
312
  }
313
  ?>
314
  <h3>WordPress</h3>
315
- <table class="form-table">
316
  <tr>
317
- <th scope="row"><?php
318
- _e('Block direct access to any PHP file located in one of these directories', 'ninjafirewall');
 
319
  if ( defined('NFW_WPWAF') ) {
320
- echo '<br /><font style="font-weight:400">' . $full_waf_msg . '</font>';
321
  }
322
- ?></th>
323
- <td width="20">&nbsp;</td>
324
- <td>
325
  <table class="form-table">
326
  <tr style="border: solid 1px #DFDFDF;">
327
  <td align="center" width="10"><input type="checkbox" name="nfw_options[wp_admin]" id="wp_01"<?php checked( $wp_admin, 1 ); disabled( $option_disabled, 1) ?>></td>
@@ -345,7 +303,7 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
345
  <p><code>/wp-includes/theme-compat/*</code></p>
346
  </label>
347
  <br />
348
- <span class="description"><?php _e('NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if this option is enabled.', 'ninjafirewall') ?></span>
349
  </td>
350
  </tr>
351
  <tr style="border: solid 1px #DFDFDF;">
@@ -360,36 +318,20 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
360
  <td style="vertical-align:top"><label for="wp_04"><code>*/cache/*</code></label>
361
  <br />
362
  <br />
363
- <span class="description"><?php _e('Unless you have PHP scripts in a "/cache/" folder that need to be accessed by your visitors, we recommend to enable this option.', 'ninjafirewall') ?></span>
364
  </td>
365
  </tr>
366
  </table>
367
  <br />&nbsp;
368
  </td>
369
  </tr>
370
- </table>
371
 
372
- <?php
373
- if ( is_dir( WP_PLUGIN_DIR . '/jetpack' ) ) {
374
- $is_JetPack = '<p><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description">' . sprintf( __('If you are using the %s plugin, blocking <code>system.multicall</code> may prevent it from working correctly.', 'ninjafirewall'), 'Jetpack') . '</span></p>';
375
- } else {
376
- $is_JetPack = '';
377
- }
378
- if ( is_dir( WP_PLUGIN_DIR . '/contact-form-7' ) ) {
379
- $is_CF7 = '<p><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description">' . sprintf( __('If you are using the %s plugin, blocking <code>system.multicall</code> may prevent it from working correctly.', 'ninjafirewall'), 'Contact Form 7') . '</span></p>';
380
- } else {
381
- $is_CF7 = '';
382
- }
383
- ?>
384
-
385
- <table class="form-table">
386
  <tr>
387
- <th scope="row"><?php _e('General', 'ninjafirewall') ?></th>
388
- <td width="20">&nbsp;</td>
389
  <td>
390
- <p><label><input type="checkbox" name="nfw_options[disallow_settings]" value="1"<?php checked( $disallow_settings, 1 ) ?>>&nbsp;<?php echo __('Block attempts to modify important WordPress settings', 'ninjafirewall') .' '. __('(default)', 'ninjafirewall') ?></label></p>
391
  <p><label><input type="checkbox" name="nfw_options[disallow_creation]" value="1"<?php checked( $disallow_creation, 1 ) ?>>&nbsp;<?php _e('Block user accounts creation', 'ninjafirewall') ?></label></p>
392
- <span class="description"><?php _e('Do not enable this policy if you allow user registration.', 'ninjafirewall') ?></span>
393
  </td>
394
  </tr>
395
 
@@ -401,16 +343,15 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
401
  }
402
  ?>
403
  <tr>
404
- <th scope="row"><?php _e('WordPress AJAX', 'ninjafirewall') ?></th>
405
- <td width="20">&nbsp;</td>
406
  <td>
407
  <p><label><input type="checkbox" name="nfw_options[admin_ajax]" value="1"<?php checked( $admin_ajax, 1 ) ?>>&nbsp;<?php _e('Protect <code>admin-ajax.php</code> against suspicious bots', 'ninjafirewall') ?></label></p>
 
408
  </td>
409
  </tr>
410
 
411
  <tr>
412
- <th scope="row"><?php _e('Protect against username enumeration', 'ninjafirewall') ?></th>
413
- <td width="20">&nbsp;</td>
414
  <td>
415
  <p><label><input type="checkbox" name="nfw_options[enum_archives]" value="1"<?php checked( $enum_archives, 1 ) ?>>&nbsp;<?php _e('Through the author archives', 'ninjafirewall') ?></label></p>
416
  <p><label><input type="checkbox" name="nfw_options[enum_login]" value="1"<?php checked( $enum_login, 1 ) ?>>&nbsp;<?php _e('Through the login page', 'ninjafirewall') ?></label></p>
@@ -418,95 +359,55 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
418
  </td>
419
  </tr>
420
 
421
- <?php
422
- global $wp_version;
423
- if ( version_compare( $wp_version, '4.7', '<' ) ) {
424
- $restapi_error = '1';
425
- $restapi_msg = '<p><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description">' . __('This feature is only available when running WordPress 4.7 or above.', 'ninjafirewall') . '</span></p>';
426
- } else {
427
- $restapi_msg = '';
428
- $restapi_error = 0;
429
- }
430
- ?>
431
  <tr>
432
- <th scope="row"><?php _e('WordPress REST API', 'ninjafirewall') ?></th>
433
- <td width="20">&nbsp;</td>
434
  <td>
435
- <p><label><input type="checkbox" name="nfw_options[no_restapi]" value="1"<?php checked( $no_restapi, 1 );disabled( $restapi_error, 1) ?>>&nbsp;<?php _e('Block any access to the API', 'ninjafirewall') ?></label> *</p>
436
- <?php echo $restapi_msg; ?>
437
  </td>
438
  </tr>
439
- <tr>
440
- <th scope="row"><?php _e('WordPress XML-RPC API', 'ninjafirewall') ?></th>
441
- <td width="20">&nbsp;</td>
442
  <td>
443
  <p><label><input type="checkbox" name="nfw_options[no_xmlrpc]" value="1"<?php checked( $no_xmlrpc, 1 ) ?>>&nbsp;<?php _e('Block any access to the API', 'ninjafirewall') ?></label> *</p>
444
-
445
  <p><label><input type="checkbox" name="nfw_options[no_xmlrpc_multi]" value="1"<?php checked( $no_xmlrpc_multi, 1 ) ?>>&nbsp;<?php _e('Block <code>system.multicall</code> method', 'ninjafirewall') ?></label> *</p>
446
-
447
- <p><label><input type="checkbox" name="nfw_options[no_xmlrpc_pingback]" value="1"<?php checked( $no_xmlrpc_pingback, 1 ) ?>>&nbsp;<?php _e('Block Pingbacks', 'ninjafirewall') ?></label> *</p>
448
-
449
- <?php echo $is_JetPack; echo $is_CF7; ?>
450
  </td>
451
  </tr>
452
- </table>
453
-
454
- <span class="description">* <?php _e('Disabling access to the REST or XML-RPC API may break some functionality on your blog, its themes or plugins.', 'ninjafirewall') ?></span>
455
 
456
- <table class="form-table">
457
  <tr valign="top">
458
- <th scope="row" style="vertical-align:top"><?php _e('Block <code>POST</code> requests in the themes folder', 'ninjafirewall') ?> <code>/<?php echo basename(WP_CONTENT_DIR); ?>/themes</code></th>
459
- <td width="20">&nbsp;</td>
460
- <td width="120" style="vertical-align:top">
461
- <label><input type="radio" name="nfw_options[no_post_themes]" value="1"<?php checked( $no_post_themes, 1 ); disabled( $option_disabled, 1) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
462
- </td>
463
- <td style="vertical-align:top">
464
- <label><input type="radio" name="nfw_options[no_post_themes]" value="0"<?php checked( $no_post_themes, 0 ); disabled( $option_disabled, 1) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
465
- <?php
466
  if ( defined('NFW_WPWAF') ) {
467
- echo '<br />'. $full_waf_msg;
468
  }
469
- ?>
470
  </td>
471
  </tr>
472
  <tr valign="top">
473
- <th scope="row"><a name="builtinconstants"></a><?php _e('Force SSL for admin and logins', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Require_SSL_for_Admin_and_Logins" target="_blank">FORCE_SSL_ADMIN</a></code></th>
474
- <td width="20">&nbsp;</td>
475
- <td width="120">
476
- <label><input type="radio" name="nfw_options[force_ssl]" value="1"<?php checked( $force_ssl, 1 ) ?> onclick="return ssl_warn();" <?php disabled( $force_ssl_already_enabled, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
477
- </td>
478
  <td>
479
- <label><input type="radio" id="ssl_0" name="nfw_options[force_ssl]" value="0"<?php checked( $force_ssl, 0 ) ?> <?php disabled( $force_ssl_already_enabled, 1 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
480
  </td>
481
  </tr>
482
  <tr valign="top">
483
- <th scope="row"><?php _e('Disable the plugin and theme editor', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Disable_the_Plugin_and_Theme_Editor" target="_blank">DISALLOW_FILE_EDIT</a></code></th>
484
- <td width="20">&nbsp;</td>
485
- <td width="120">
486
- <label><input type="radio" name="nfw_options[disallow_edit]" value="1"<?php checked( $disallow_edit, 1 ) ?> <?php disabled( $disallow_edit_already_enabled, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
487
- </td>
488
  <td>
489
- <label><input type="radio" name="nfw_options[disallow_edit]" value="0"<?php checked( $disallow_edit, 0 ) ?> <?php disabled( $disallow_edit_already_enabled, 1 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
490
  </td>
491
  </tr>
492
  <tr valign="top">
493
- <th scope="row"><?php _e('Disable plugin and theme update/installation', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Disable_Plugin_and_Theme_Update_and_Installation" target="_blank">DISALLOW_FILE_MODS</a></code></th>
494
- <td width="20">&nbsp;</td>
495
- <td width="120">
496
- <label><input type="radio" name="nfw_options[disallow_mods]" value="1"<?php checked( $disallow_mods, 1 ) ?> <?php disabled( $disallow_mods_already_enabled, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
497
- </td>
498
  <td>
499
- <label><input type="radio" name="nfw_options[disallow_mods]" value="0"<?php checked( $disallow_mods, 0 ) ?> <?php disabled( $disallow_mods_already_enabled, 1 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
500
  </td>
501
  </tr>
502
  <tr valign="top">
503
- <th scope="row"><?php _e('Disable the fatal error handler', 'ninjafirewall') ?> <code><a href="https://make.wordpress.org/core/2019/01/14/php-site-health-mechanisms-in-5-1/" target="_blank">WP_Fatal_Error_Handler</a></code></th>
504
- <td width="20">&nbsp;</td>
505
- <td width="120">
506
- <label><input type="radio" name="nfw_options[disable_error_handler]" value="1"<?php checked( $disable_error_handler, 1 ) ?> <?php disabled( $disable_error_handler_already_enabled, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
507
- </td>
508
  <td>
509
- <label><input type="radio" name="nfw_options[disable_error_handler]" value="0"<?php checked( $disable_error_handler, 0 ) ?> <?php disabled( $disable_error_handler_already_enabled, 1 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
510
  </td>
511
  </tr>
512
 
@@ -524,15 +425,14 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
524
  $wl_admin = 1;
525
  }
526
  ?>
527
- <table class="form-table">
528
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
529
- <th scope="row"><?php _e('Users Whitelist', 'ninjafirewall') ?></th>
530
- <td width="20">&nbsp;</td>
531
  <td>
532
- <p><label><input type="radio" name="nfw_options[wl_admin]" value="1"<?php checked( $wl_admin, 1 ) ?>>&nbsp;<?php _e('Add the Administrator to the whitelist (default).', 'ninjafirewall') ?></label></p>
533
- <p><label><input type="radio" name="nfw_options[wl_admin]" value="2"<?php checked( $wl_admin, 2 ) ?>>&nbsp;<?php _e('Add all logged in users to the whitelist.', 'ninjafirewall') ?></label></p>
534
- <p><label><input type="radio" name="nfw_options[wl_admin]" value="0"<?php checked( $wl_admin, 0 ) ?>>&nbsp;<?php _e('Disable users whitelist.', 'ninjafirewall') ?></label></p>
535
- <p><span class="description"><?php _e('Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, <code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and <code>WP_DISABLE_FATAL_ERROR_HANDLER</code> options which, if enabled, are always enforced.', 'ninjafirewall') ?></span></p>
536
  </td>
537
  </tr>
538
  </table>
@@ -541,10 +441,10 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
541
 
542
 
543
  <?php
544
- // ==========================================================================
545
  // Intermediate options:
546
  ?>
547
- <div id="intermediate-options" style="display:none">
548
  <?php
549
  if ( empty( $nfw_options['get_scan']) ) {
550
  $get_scan = 0;
@@ -558,25 +458,17 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
558
  }
559
  ?>
560
  <h3><?php _e('HTTP GET variable', 'ninjafirewall') ?></h3>
561
- <table class="form-table">
562
  <tr>
563
- <th scope="row"><?php _e('Scan <code>GET</code> variable', 'ninjafirewall') ?></th>
564
- <td width="20">&nbsp;</td>
565
- <td width="120">
566
- <label><input type="radio" name="nfw_options[get_scan]" value="1"<?php checked( $get_scan, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
567
- </td>
568
  <td>
569
- <label><input type="radio" name="nfw_options[get_scan]" value="0"<?php checked( $get_scan, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
570
  </td>
571
  </tr>
572
  <tr>
573
- <th scope="row"><?php _e('Sanitise <code>GET</code> variable', 'ninjafirewall') ?></th>
574
- <td width="20">&nbsp;</td>
575
- <td width="120">
576
- <label><input type="radio" name="nfw_options[get_sanitise]" value="1"<?php checked( $get_sanitise, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
577
- </td>
578
  <td>
579
- <label><input type="radio" name="nfw_options[get_sanitise]" value="0"<?php checked( $get_sanitise, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
580
  </td>
581
  </tr>
582
  </table>
@@ -601,35 +493,24 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
601
  }
602
  ?>
603
  <h3><?php _e('HTTP POST variable', 'ninjafirewall') ?></h3>
604
- <table class="form-table">
605
  <tr valign="top">
606
- <th scope="row"><?php _e('Scan <code>POST</code> variable', 'ninjafirewall') ?></th>
607
- <td width="20">&nbsp;</td>
608
- <td width="120">
609
- <label><input type="radio" name="nfw_options[post_scan]" value="1"<?php checked( $post_scan, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
610
- </td>
611
  <td>
612
- <label><input type="radio" name="nfw_options[post_scan]" value="0"<?php checked( $post_scan, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
613
  </td>
614
  </tr>
615
  <tr valign="top">
616
- <th scope="row"><?php _e('Sanitise <code>POST</code> variable', 'ninjafirewall') ?></th>
617
- <td width="20">&nbsp;</td>
618
- <td width="120" style="vertical-align:top;">
619
- <label><input type="radio" name="nfw_options[post_sanitise]" value="1"<?php checked( $post_sanitise, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
620
- </td>
621
  <td>
622
- <label><input type="radio" name="nfw_options[post_sanitise]" value="0"<?php checked( $post_sanitise, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label><br /><span class="description">&nbsp;<?php _e('Do not enable this option unless you know what you are doing!', 'ninjafirewall') ?></span>
 
623
  </td>
624
  </tr>
625
  <tr valign="top">
626
- <th scope="row"><?php _e('Decode Base64-encoded <code>POST</code> variable', 'ninjafirewall') ?></th>
627
- <td width="20">&nbsp;</td>
628
- <td width="120">
629
- <label><input type="radio" name="nfw_options[post_b64]" value="1"<?php checked( $post_b64, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
630
- </td>
631
  <td>
632
- <label><input type="radio" name="nfw_options[post_b64]" value="0"<?php checked( $post_b64, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
633
  </td>
634
  </tr>
635
  </table>
@@ -643,15 +524,12 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
643
  }
644
  ?>
645
  <h3><?php _e('HTTP REQUEST variable', 'ninjafirewall') ?></h3>
646
- <table class="form-table">
647
  <tr>
648
- <th scope="row"><?php _e('Sanitise <code>REQUEST</code> variable', 'ninjafirewall') ?></th>
649
- <td width="20">&nbsp;</td>
650
- <td width="120" style="vertical-align:top;">
651
- <label><input type="radio" name="nfw_options[request_sanitise]" value="1"<?php checked( $request_sanitise, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
652
- </td>
653
  <td>
654
- <label><input type="radio" name="nfw_options[request_sanitise]" value="0"<?php checked( $request_sanitise, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label><br /><span class="description">&nbsp;<?php _e('Do not enable this option unless you know what you are doing!', 'ninjafirewall') ?></span>
 
655
  </td>
656
  </tr>
657
  </table>
@@ -671,25 +549,17 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
671
  }
672
  ?>
673
  <h3><?php _e('Cookies', 'ninjafirewall') ?></h3>
674
- <table class="form-table">
675
  <tr>
676
- <th scope="row"><?php _e('Scan cookies', 'ninjafirewall') ?></th>
677
- <td width="20">&nbsp;</td>
678
- <td width="120">
679
- <label><input type="radio" name="nfw_options[cookies_scan]" value="1"<?php checked( $cookies_scan, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
680
- </td>
681
  <td>
682
- <label><input type="radio" name="nfw_options[cookies_scan]" value="0"<?php checked( $cookies_scan, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
683
  </td>
684
  </tr>
685
  <tr>
686
- <th scope="row"><?php _e('Sanitise cookies', 'ninjafirewall') ?></th>
687
- <td width="20">&nbsp;</td>
688
- <td width="120">
689
- <label><input type="radio" name="nfw_options[cookies_sanitise]" value="1"<?php checked( $cookies_sanitise, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
690
- </td>
691
  <td>
692
- <label><input type="radio" name="nfw_options[cookies_sanitise]" value="0"<?php checked( $cookies_sanitise, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
693
  </td>
694
  </tr>
695
  </table>
@@ -707,8 +577,6 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
707
  } else {
708
  $ua_sanitise = 1;
709
  }
710
-
711
-
712
  if ( empty( $nfw_rules[NFW_SCAN_BOTS]['ena']) ) {
713
  $block_bots = 0;
714
  } else {
@@ -716,35 +584,23 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
716
  }
717
  ?>
718
  <h3><?php _e('HTTP_USER_AGENT server variable', 'ninjafirewall') ?></h3>
719
- <table class="form-table">
720
  <tr>
721
- <th scope="row"><?php _e('Scan <code>HTTP_USER_AGENT</code>', 'ninjafirewall') ?></th>
722
- <td width="20">&nbsp;</td>
723
- <td width="120">
724
- <label><input type="radio" name="nfw_options[ua_scan]" value="1"<?php checked( $ua_scan, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
725
- </td>
726
  <td>
727
- <label><input type="radio" name="nfw_options[ua_scan]" value="0"<?php checked( $ua_scan, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
728
  </td>
729
  </tr>
730
  <tr>
731
- <th scope="row"><?php _e('Sanitise <code>HTTP_USER_AGENT</code>', 'ninjafirewall') ?></th>
732
- <td width="20">&nbsp;</td>
733
- <td width="120">
734
- <label><input type="radio" name="nfw_options[ua_sanitise]" value="1"<?php checked( $ua_sanitise, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
735
- </td>
736
  <td>
737
- <label><input type="radio" name="nfw_options[ua_sanitise]" value="0"<?php checked( $ua_sanitise, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
738
  </td>
739
  </tr>
740
  <tr>
741
- <th scope="row"><?php _e('Block suspicious bots/scanners', 'ninjafirewall') ?></th>
742
- <td width="20">&nbsp;</td>
743
- <td width="120">
744
- <label><input type="radio" name="nfw_rules[block_bots]" value="1"<?php checked( $block_bots, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
745
- </td>
746
  <td>
747
- <label><input type="radio" name="nfw_rules[block_bots]" value="0"<?php checked( $block_bots, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
748
  </td>
749
  </tr>
750
  </table>
@@ -769,35 +625,24 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
769
  }
770
  ?>
771
  <h3><?php _e('HTTP_REFERER server variable', 'ninjafirewall') ?></h3>
772
- <table class="form-table">
773
  <tr>
774
- <th scope="row"><?php _e('Scan <code>HTTP_REFERER</code>', 'ninjafirewall') ?></th>
775
- <td width="20">&nbsp;</td>
776
- <td width="120">
777
- <label><input type="radio" name="nfw_options[referer_scan]" value="1"<?php checked( $referer_scan, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
778
- </td>
779
  <td>
780
- <label><input type="radio" name="nfw_options[referer_scan]" value="0"<?php checked( $referer_scan, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
781
  </td>
782
  </tr>
783
  <tr>
784
- <th scope="row"><?php _e('Sanitise <code>HTTP_REFERER</code>', 'ninjafirewall') ?></th>
785
- <td width="20">&nbsp;</td>
786
- <td width="120">
787
- <label><input type="radio" name="nfw_options[referer_sanitise]" value="1"<?php checked( $referer_sanitise, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
788
- </td>
789
  <td>
790
- <label><input type="radio" name="nfw_options[referer_sanitise]" value="0"<?php checked( $referer_sanitise, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
791
  </td>
792
  </tr>
793
  <tr valign="top">
794
- <th scope="row"><?php _e('Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</code> header', 'ninjafirewall') ?></th>
795
- <td width="20">&nbsp;</td>
796
- <td width="120" style="vertical-align:top;">
797
- <label><input type="radio" name="nfw_options[referer_post]" value="1"<?php checked( $referer_post, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
798
- </td>
799
- <td style="vertical-align:top;">
800
- <label><input type="radio" name="nfw_options[referer_post]" value="0"<?php checked( $referer_post, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label><br /><span class="description">&nbsp;<?php _e('Keep this option disabled if you are using scripts like Paypal IPN, WordPress WP-Cron etc', 'ninjafirewall') ?>.</span>
801
  </td>
802
  </tr>
803
  </table>
@@ -822,35 +667,23 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
822
  }
823
  ?>
824
  <h3>IP</h3>
825
- <table class="form-table" border=0>
826
  <tr>
827
- <th scope="row"><?php _e('Block localhost IP in <code>GET/POST</code> request', 'ninjafirewall') ?></th>
828
- <td width="20">&nbsp;</td>
829
- <td width="120" style="vertical-align:top">
830
- <label><input type="radio" name="nfw_rules[no_localhost_ip]" value="1"<?php checked( $no_localhost_ip, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
831
- </td>
832
- <td style="vertical-align:top">
833
- <label><input type="radio" name="nfw_rules[no_localhost_ip]" value="0"<?php checked( $no_localhost_ip, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
834
  </td>
835
  </tr>
836
  <tr>
837
- <th scope="row"><?php _e('Block HTTP requests with an IP in the <code>HTTP_HOST</code> header', 'ninjafirewall') ?></th>
838
- <td width="20">&nbsp;</td>
839
- <td width="120" style="vertical-align:top">
840
- <label><input type="radio" name="nfw_options[no_host_ip]" value="1"<?php checked( $no_host_ip, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
841
- </td>
842
- <td style="vertical-align:top">
843
- <label><input type="radio" name="nfw_options[no_host_ip]" value="0"<?php checked( $no_host_ip, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
844
  </td>
845
  </tr>
846
  <tr>
847
- <th scope="row"><?php _e('Scan traffic coming from localhost and private IP address spaces', 'ninjafirewall') ?></th>
848
- <td width="20">&nbsp;</td>
849
- <td width="120" style="vertical-align:top">
850
- <label><input type="radio" name="nfw_options[allow_local_ip]" value="0"<?php checked( $allow_local_ip, 0 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
851
- </td>
852
- <td style="vertical-align:top">
853
- <label><input type="radio" name="nfw_options[allow_local_ip]" value="1"<?php checked( $allow_local_ip, 1 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
854
  </td>
855
  </tr>
856
  </table>
@@ -858,96 +691,107 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
858
  </div>
859
 
860
  <?php
861
- // ==========================================================================
862
  // Advanced options:
863
  ?>
864
- <div id="advanced-options" style="display:none">
865
-
866
  <?php
867
- $err_msg = $err = '';
868
- $err_img = '<p><span class="description"><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;';
869
- $msg = __('This option is disabled because the %s PHP function is not available on your server.', 'ninjafirewall');
870
- if (! function_exists('header_register_callback') ) {
871
- $err_msg = $err_img . sprintf($msg, '<code>header_register_callback()</code>') . '</span></p>';
 
 
872
  $err = 1;
873
- } elseif (! function_exists('headers_list') ) {
874
- $err_msg = $err_img . sprintf($msg, '<code>headers_list()</code>') . '</span></p>';
 
875
  $err = 1;
876
- } elseif (! function_exists('header_remove') ) {
877
- $err_msg = $err_img . sprintf($msg, '<code>header_remove()</code>') . '</span></p>';
 
878
  $err = 1;
879
  }
880
- if ( empty($nfw_options['response_headers']) || ! preg_match( '/^\d+$/', $nfw_options['response_headers'] ) || $err_msg ) {
 
 
881
  $nfw_options['response_headers'] = '000000000';
882
  }
883
  ?>
 
884
  <h3><?php _e('HTTP response headers', 'ninjafirewall') ?></h3>
885
- <table class="form-table">
 
 
 
 
 
886
  <tr>
887
- <th scope="row"><?php printf( __('Set %s to protect against MIME type confusion attacks', 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">X-Content-Type-Options</a>') ?></th>
888
- <td width="20">&nbsp;</td>
889
- <td width="120">
890
- <label><input type="radio" name="nfw_options[x_content_type_options]" value="1"<?php checked( $nfw_options['response_headers'][1], 1 ); disabled($err, 1); ?>><?php echo $yes; ?></label>
891
- </td>
892
  <td>
893
- <label><input type="radio" name="nfw_options[x_content_type_options]" value="0"<?php checked( $nfw_options['response_headers'][1], 0 ); disabled($err, 1); ?>><?php echo $no . $default; ?></label><?php echo $err_msg ?>
894
  </td>
895
  </tr>
896
  <tr>
897
- <th scope="row"><?php printf( __('Set %s to protect against clickjacking attempts', 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">X-Frame-Options</a>') ?></th>
898
- <td width="20">&nbsp;</td>
899
- <td width="120" style="vertical-align:top;">
900
- <p><label><input type="radio" name="nfw_options[x_frame_options]" value="1"<?php checked( $nfw_options['response_headers'][2], 1 ); disabled($err, 1); ?>><code>SAMEORIGIN</code></label></p>
901
- <p><label><input type="radio" name="nfw_options[x_frame_options]" value="2"<?php checked( $nfw_options['response_headers'][2], 2 ); disabled($err, 1); ?>><code>DENY</code></label></p>
 
 
 
902
  </td>
903
- <td style="vertical-align:top;"><p><label><input type="radio" name="nfw_options[x_frame_options]" value="0"<?php checked( $nfw_options['response_headers'][2], 0 ); disabled($err, 1); ?>><?php echo $no . $default; ?></label><?php echo $err_msg ?></p></td>
904
  </tr>
905
- <tr>
906
- <th scope="row"><?php printf( __("Set %s (IE/Edge, Chrome, Opera and Safari browsers)", 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">X-XSS-Protection</a>') ?></th>
907
- <td width="20"></td>
908
 
909
- <td width="120">
910
- <p><label><input type="radio" name="nfw_options[x_xss_protection]" value="0"<?php checked( $nfw_options['response_headers'][3], 0 ); disabled($err, 1); ?> /><?php printf( __("Set to %s", "ninjafirewall"), '<code>0</code>' ) ?></label></p>
911
- <p><label><input type="radio" name="nfw_options[x_xss_protection]" value="2"<?php checked( $nfw_options['response_headers'][3], 2 ); disabled($err, 1); ?> /><?php printf( __("Set to %s", "ninjafirewall"), '<code>1</code>' ) ?></label></p>
912
- </td>
913
  <td>
914
- <p><label><input type="radio" name="nfw_options[x_xss_protection]" value="1"<?php checked( $nfw_options['response_headers'][3], 1 ); disabled($err, 1); ?> /><?php printf( __("Set to %s", "ninjafirewall"), '<code>1; mode=block</code>' ); ?></label></p>
915
- <p><label><input type="radio" name="nfw_options[x_xss_protection]" value="3"<?php checked( $nfw_options['response_headers'][3], 3 ); disabled($err, 1); ?> /><?php _e('No', 'ninjafirewall'); echo $default; ?></label></p>
 
 
 
 
916
  </td>
917
  </tr>
918
  <tr>
919
- <th scope="row"><?php printf( __('Force %s flag on all cookies to mitigate XSS attacks', 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">HttpOnly</a>') ?></th>
920
- <td width="20">&nbsp;</td>
921
- <td width="120" style="vertical-align:top;">
922
- <label><input type="radio" name="nfw_options[cookies_httponly]" value="1"<?php checked( $nfw_options['response_headers'][0], 1 ); disabled($err, 1); ?> >&nbsp;<?php echo $yes ?></label>
923
- </td>
924
- <td style="vertical-align:top;">
925
- <label><input type="radio" name="nfw_options[cookies_httponly]" value="0"<?php checked( $nfw_options['response_headers'][0], 0 ); disabled($err, 1); ?>>&nbsp;<?php echo $no . $default; ?></label><br /><span class="description"><?php _e('If your PHP scripts use cookies that need to be accessed from JavaScript, you should disable this option.', 'ninjafirewall') ?></span><?php echo $err_msg ?>
926
  </td>
927
  </tr>
928
  <?php
 
 
 
929
  if ( NFW_IS_HTTPS == false && ! $err ) {
930
  $hsts_err = 1;
931
- $hsts_msg = '<br /><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description">' . __('HSTS headers can only be set when you are accessing your site over HTTPS.', 'ninjafirewall') . '</span>';
932
  } else {
933
  $hsts_msg = '';
934
  $hsts_err = 0;
935
  }
 
936
  ?>
937
  <tr>
938
- <th scope="row"><?php printf( __('Set %s (HSTS) to enforce secure connections to the server', 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">Strict-Transport-Security</a>') ?></th>
939
- <td width="20">&nbsp;</td>
940
- <td width="120" style="vertical-align:top;">
941
- <p><label><input type="radio" name="nfw_options[strict_transport]" value="1"<?php checked( $nfw_options['response_headers'][4], 1 ); disabled($hsts_err, 1); ?>><?php _e('1 month', 'ninjafirewall') ?></label></p>
942
- <p><label><input type="radio" name="nfw_options[strict_transport]" value="2"<?php checked( $nfw_options['response_headers'][4], 2 ); disabled($hsts_err, 1); ?>><?php _e('6 months', 'ninjafirewall') ?></label></p>
943
- <p><label><input type="radio" name="nfw_options[strict_transport]" value="3"<?php checked( $nfw_options['response_headers'][4], 3 ); disabled($hsts_err, 1); ?>><?php _e('1 year', 'ninjafirewall') ?></label></p>
944
- <br />
945
- <label><input type="checkbox" name="nfw_options[strict_transport_sub]" value="1"<?php checked( $nfw_options['response_headers'][5], 1 ); disabled($hsts_err, 1); ?>><?php _e('Apply to subdomains', 'ninjafirewall') ?></label>
946
- </td>
947
- <td style="vertical-align:top;">
948
- <p><label><input type="radio" name="nfw_options[strict_transport]" value="0"<?php checked( $nfw_options['response_headers'][4], 0 ); disabled($hsts_err, 1); ?>><?php echo $no . $default; ?></label></p>
949
- <p><label><input type="radio" name="nfw_options[strict_transport]" value="4"<?php checked( $nfw_options['response_headers'][4], 4 ); disabled($hsts_err, 1); ?>><?php _e('Set <code>max-age</code> to 0', 'ninjafirewall'); ?></label><?php echo $err_msg ?></p>
950
- <?php echo $hsts_msg; ?>
 
 
951
  </td>
952
  </tr>
953
 
@@ -956,7 +800,7 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
956
  $nfw_options['csp_frontend_data'] = '';
957
  }
958
  if (! isset( $nfw_options['csp_backend_data'] ) ) {
959
- $nfw_options['csp_backend_data'] = nf_sub_policies_csp();
960
  }
961
  if (! isset( $nfw_options['response_headers'][6] ) ) {
962
  $nfw_options['response_headers'][6] = 0;
@@ -966,29 +810,21 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
966
  }
967
  ?>
968
  <tr>
969
- <th scope="row"><?php printf( __('Set %s for the website frontend', 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">Content-Security-Policy</a>') ?></th>
970
- <td width="20">&nbsp;</td>
971
- <td width="120" style="vertical-align:top;">
972
- <p><label><input type="radio" onclick="csp_onoff(1, 'csp_frontend')" name="nfw_options[csp_frontend]" value="1"<?php checked( $nfw_options['response_headers'][6], 1 ); disabled($err, 1); ?>><?php _e('Yes', 'ninjafirewall') ?></label></p>
973
- <p><label><input type="radio" onclick="csp_onoff(0, 'csp_frontend')" name="nfw_options[csp_frontend]" value="0"<?php checked( $nfw_options['response_headers'][6], 0 ); disabled($err, 1); ?>><?php _e('No (default)', 'ninjafirewall') ?></label></p>
974
- </td>
975
- <td style="vertical-align:top;">
976
- <textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_frontend_data]" id="csp_frontend" class="large-text code" rows="4"<?php __checked_selected_helper($err, 1, true, 'readonly'); __checked_selected_helper($nfw_options['response_headers'][6], 0, true, 'readonly') ?>><?php echo htmlspecialchars( $nfw_options['csp_frontend_data'] ) ?></textarea>
977
- <span class="description"><?php _e('This CSP header will apply to the website frontend only.', 'ninjafirewall') ?></span>
978
- <?php echo $err_msg ?>
979
  </td>
980
  </tr>
981
-
982
  <tr>
983
- <th scope="row"><?php printf( __('Set %s for the WordPress admin dashboard', 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">Content-Security-Policy</a>') ?></th>
984
- <td width="20">&nbsp;</td>
985
- <td width="120" style="vertical-align:top;">
986
- <p><label><input type="radio" onclick="csp_onoff(1, 'csp_backend')" name="nfw_options[csp_backend]" value="1"<?php checked( $nfw_options['response_headers'][7], 1 ); disabled($err, 1); ?>><?php _e('Yes', 'ninjafirewall') ?></label></p>
987
- <p><label><input type="radio" onclick="csp_onoff(0, 'csp_backend')" name="nfw_options[csp_backend]" value="0"<?php checked( $nfw_options['response_headers'][7], 0 ); disabled($err, 1); ?>><?php _e('No (default)', 'ninjafirewall') ?></label></p>
988
- </td>
989
- <td style="vertical-align:top;">
990
- <textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_backend_data]" id="csp_backend" class="large-text code" rows="4"<?php __checked_selected_helper($err, 1, true, 'readonly'); __checked_selected_helper($nfw_options['response_headers'][7], 0, true, 'readonly') ?>><?php echo htmlspecialchars( $nfw_options['csp_backend_data'] ) ?></textarea>
991
- <span class="description"><?php _e('This CSP header will apply to the WordPress admin dashboard only.', 'ninjafirewall') ?></span>
992
  <?php echo $err_msg ?>
993
  </td>
994
  </tr>
@@ -1004,14 +840,10 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
1004
  }
1005
  ?>
1006
  <tr>
1007
- <th scope="row"><?php printf( __("Set %s (Chrome, Opera and Firefox browsers)", 'ninjafirewall'), '<a href="https://nintechnet.com/ninjafirewall/wp-edition/doc/#responseheaders" target="_blank">Referrer-Policy</a>') ?></th>
1008
- <td width="20"></td>
1009
- <td width="120" style="vertical-align:top;">
1010
-
1011
- <p><label><input onclick="document.getElementById('rp_select').disabled=false" type="radio" name="nfw_options[referrer_policy_enabled]" value="1"<?php checked($nfw_options['referrer_policy_enabled'], 1) ?> /><?php _e('Yes', 'ninjafirewall') ?></label></p>
1012
- <p><label><input onclick="document.getElementById('rp_select').disabled=true" type="radio" name="nfw_options[referrer_policy_enabled]" value="0"<?php checked($nfw_options['referrer_policy_enabled'], 0) ?> /><?php _e('No (default)', 'ninjafirewall') ?></label></p>
1013
- </td>
1014
- <td style="vertical-align:top;">
1015
  <select id="rp_select" name="nfw_options[referrer_policy]"<?php disabled($nfw_options['referrer_policy_enabled'], 0) ?>>
1016
  <option value="1"<?php selected($nfw_options['response_headers'][8], 1) ?>>no-referrer</option>
1017
  <option value="2"<?php selected($nfw_options['response_headers'][8], 2) ?>>no-referrer-when-downgrade</option>
@@ -1056,15 +888,11 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
1056
  }
1057
  ?>
1058
  <h3>PHP</h3>
1059
- <table class="form-table">
1060
  <tr>
1061
- <th scope="row"><?php _e('Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies', 'ninjafirewall') ?></th>
1062
- <td width="20">&nbsp;</td>
1063
- <td width="120" style="vertical-align:top">
1064
- <label><input type="radio" name="nfw_rules[php_wrappers]" value="1"<?php checked( $php_wrappers, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1065
- </td>
1066
- <td style="vertical-align:top">
1067
- <label><input type="radio" name="nfw_rules[php_wrappers]" value="0"<?php checked( $php_wrappers, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
1068
  </td>
1069
  </tr>
1070
 
@@ -1101,56 +929,37 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
1101
  }
1102
  ?>
1103
  <tr>
1104
- <th scope="row"><?php _e('Block serialized PHP objects in the following global variables', 'ninjafirewall') ?></th>
1105
- <td width="20">&nbsp;</td>
1106
- <td width="120" style="vertical-align:top">
1107
- <p><label><input type="checkbox" name="nfw_rules[php_objects_get]" value="1"<?php echo $NFW_OBJECTS_GET ?>><code>GET</code><?php echo $default ?></label><p>
1108
- <p><label><input type="checkbox" name="nfw_rules[php_objects_post]" value="1"<?php echo $NFW_OBJECTS_POST ?>><code>POST</code><?php echo $default ?></label><p>
1109
  <p><label><input type="checkbox" name="nfw_rules[php_objects_cookie]" value="1"<?php echo $NFW_OBJECTS_COOKIE ?>><code>COOKIE</code></label><p>
1110
- </td>
1111
- <td style="vertical-align:top">
1112
- <p><label><input type="checkbox" name="nfw_rules[php_objects_http_user_agent]" value="1"<?php echo $NFW_OBJECTS_HTTP_USER_AGENT ?>><code>HTTP_USER_AGENT</code><?php echo $default ?></label><p>
1113
- <p><label><input type="checkbox" name="nfw_rules[php_objects_http_referer]" value="1"<?php echo $NFW_OBJECTS_HTTP_REFERER ?>><code>HTTP_REFERER</code><?php echo $default ?></label><p>
1114
  </td>
1115
  </tr>
1116
  <tr>
1117
- <th scope="row"><?php _e('Hide PHP notice and error messages', 'ninjafirewall') ?></th>
1118
- <td width="20">&nbsp;</td>
1119
- <td width="120">
1120
- <label><input type="radio" name="nfw_options[php_errors]" value="1"<?php checked( $php_errors, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1121
- </td>
1122
  <td>
1123
- <label><input type="radio" name="nfw_options[php_errors]" value="0"<?php checked( $php_errors, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
1124
  </td>
1125
  </tr>
1126
  <tr>
1127
- <th scope="row"><?php _e('Sanitise <code>PHP_SELF</code>', 'ninjafirewall') ?></th>
1128
- <td width="20">&nbsp;</td>
1129
- <td width="120">
1130
- <label><input type="radio" name="nfw_options[php_self]" value="1"<?php checked( $php_self, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1131
- </td>
1132
  <td>
1133
- <label><input type="radio" name="nfw_options[php_self]" value="0"<?php checked( $php_self, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
1134
  </td>
1135
  </tr>
1136
  <tr>
1137
- <th scope="row"><?php _e('Sanitise <code>PATH_TRANSLATED</code>', 'ninjafirewall') ?></th>
1138
- <td width="20">&nbsp;</td>
1139
- <td width="120">
1140
- <label><input type="radio" name="nfw_options[php_path_t]" value="1"<?php checked( $php_path_t, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1141
- </td>
1142
  <td>
1143
- <label><input type="radio" name="nfw_options[php_path_t]" value="0"<?php checked( $php_path_t, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
1144
  </td>
1145
  </tr>
1146
  <tr>
1147
- <th scope="row"><?php _e('Sanitise <code>PATH_INFO</code>', 'ninjafirewall') ?></th>
1148
- <td width="20">&nbsp;</td>
1149
- <td width="120">
1150
- <label><input type="radio" name="nfw_options[php_path_i]" value="1"<?php checked( $php_path_i, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1151
- </td>
1152
  <td>
1153
- <label><input type="radio" name="nfw_options[php_path_i]" value="0"<?php checked( $php_path_i, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
1154
  </td>
1155
  </tr>
1156
  </table>
@@ -1158,17 +967,13 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
1158
  <br /><br />
1159
 
1160
  <?php
1161
-
1162
  if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) < 5 ) {
1163
  $nfw_rules[NFW_DOC_ROOT]['ena'] = 0;
1164
- $greyed = 'style="color:#bbbbbb"';
1165
- $disabled = 'disabled ';
1166
- $disabled_msg = '<br /><span class="description">&nbsp;' .
1167
  __('This option is not compatible with your actual configuration.', 'ninjafirewall') .
1168
- '</span>';
1169
  } else {
1170
- $greyed = '';
1171
- $disabled = '';
1172
  $disabled_msg = '';
1173
  }
1174
 
@@ -1189,35 +994,24 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
1189
  }
1190
  ?>
1191
  <h3><?php _e('Various', 'ninjafirewall') ?></h3>
1192
- <table class="form-table">
1193
- <tr valign="top">
1194
- <th scope="row"><?php _e('Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request', 'ninjafirewall') ?></th>
1195
- <td width="20">&nbsp;</td>
1196
- <td width="120">
1197
- <label <?php echo $greyed ?>><input type="radio" name="nfw_rules[block_doc_root]" value="1"<?php checked( $block_doc_root, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1198
- </td>
1199
  <td>
1200
- <label <?php echo $greyed ?>><input <?php echo $disabled ?>type="radio" name="nfw_rules[block_doc_root]" value="0"<?php checked( $block_doc_root, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label><?php echo $disabled_msg ?>
 
1201
  </td>
1202
  </tr>
1203
  <tr>
1204
- <th scope="row"><?php _e('Block ASCII character 0x00 (NULL byte)', 'ninjafirewall') ?></th>
1205
- <td width="20">&nbsp;</td>
1206
- <td width="120">
1207
- <label><input type="radio" name="nfw_rules[block_null_byte]" value="1"<?php checked( $block_null_byte, 1 ) ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
1208
- </td>
1209
  <td>
1210
- <label><input type="radio" name="nfw_rules[block_null_byte]" value="0"<?php checked( $block_null_byte, 0 ) ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
1211
  </td>
1212
  </tr>
1213
  <tr>
1214
- <th scope="row"><?php _e('Block ASCII control characters 1 to 8 and 14 to 31', 'ninjafirewall') ?></th>
1215
- <td width="20">&nbsp;</td>
1216
  <td>
1217
- <label><input type="radio" name="nfw_rules[block_ctrl_chars]" value="1"<?php checked( $block_ctrl_chars, 1 ) ?>>&nbsp;<?php _e('Yes', 'ninjafirewall') ?></label>
1218
- </td>
1219
- <td>
1220
- <label><input type="radio" name="nfw_rules[block_ctrl_chars]" value="0"<?php checked( $block_ctrl_chars, 0 ) ?>>&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
1221
  </td>
1222
  </tr>
1223
  </table>
@@ -1227,9 +1021,10 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
1227
  <br />
1228
  <br />
1229
 
 
1230
  <input class="button-primary" type="submit" name="Save" value="<?php _e('Save Firewall Policies', 'ninjafirewall') ?>" />
1231
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1232
- <input class="button-secondary" type="submit" name="Default" value="<?php _e('Restore Default Values', 'ninjafirewall') ?>" onclick="return restore();" />
1233
  </form>
1234
  </div>
1235
 
@@ -1660,12 +1455,6 @@ function nf_sub_policies_save() {
1660
 
1661
  }
1662
 
1663
- // ---------------------------------------------------------------------
1664
-
1665
- function nf_sub_policies_csp() {
1666
- return "script-src 'self' 'unsafe-inline' 'unsafe-eval' *.videopress.com *.google.com *.wp.com; style-src 'self' 'unsafe-inline' *.googleapis.com *.google.com *.jquery.com; connect-src 'self'; media-src 'self' *.youtube.com *.w.org; child-src 'self' *.videopress.com *.google.com; object-src 'self'; form-action 'self'; img-src 'self' *.gravatar.com *.wp.com *.w.org *.cldup.com woocommerce.com data:;";
1667
- }
1668
-
1669
  // ---------------------------------------------------------------------
1670
  // Restore default firewall policies.
1671
 
@@ -1688,7 +1477,7 @@ function nf_sub_policies_default() {
1688
  if ( function_exists('header_register_callback') && function_exists('headers_list') && function_exists('header_remove') ) {
1689
  $nfw_options['response_headers'] = '000300000';
1690
  $nfw_options['referrer_policy_enabled'] = 0;
1691
- $nfw_options['csp_backend_data'] = nf_sub_policies_csp();
1692
  $nfw_options['csp_frontend_data'] = '';
1693
  }
1694
  $nfw_options['cookies_scan'] = 1;
@@ -1699,7 +1488,7 @@ function nf_sub_policies_default() {
1699
  $nfw_options['referer_sanitise'] = 1;
1700
  $nfw_options['referer_post'] = 0;
1701
  $nfw_options['no_host_ip'] = 0;
1702
- $nfw_options['allow_local_ip'] = 0;
1703
  $nfw_options['php_errors'] = 1;
1704
  $nfw_options['php_self'] = 1;
1705
  $nfw_options['php_path_t'] = 1;
@@ -1733,15 +1522,16 @@ function nf_sub_policies_default() {
1733
  $nfw_rules[NFW_OBJECTS]['ena'] = 1;
1734
  $nfw_rules[NFW_OBJECTS]['cha'][1]['whe'] = 'GET|POST|SERVER:HTTP_USER_AGENT|SERVER:HTTP_REFERER';
1735
 
 
1736
  if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) > 5 ) {
1737
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', $_SERVER['DOCUMENT_ROOT'] );
1738
  $nfw_rules[NFW_DOC_ROOT]['ena'] = 1;
1739
  } elseif ( strlen( getenv( 'DOCUMENT_ROOT' ) ) > 5 ) {
1740
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', getenv( 'DOCUMENT_ROOT' ) );
1741
  $nfw_rules[NFW_DOC_ROOT]['ena'] = 1;
1742
- } else {
1743
- $nfw_rules[NFW_DOC_ROOT]['ena'] = 0;
1744
  }
 
 
1745
 
1746
  $nfw_rules[NFW_NULL_BYTE]['ena'] = 1;
1747
  $nfw_rules[NFW_ASCII_CTRL]['ena'] = 0;
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
+ // Block immediately if user is not allowed
23
  nf_not_allowed( 'block', __LINE__ );
24
 
 
25
  $yes = __('Yes', 'ninjafirewall');
26
  $no = __('No', 'ninjafirewall');
27
+
28
+ $full_waf_msg = '<p class="description" style="color:red">' .
29
+ sprintf( __('This feature is only available when NinjaFirewall is running in %s mode.', 'ninjafirewall'),
30
+ '<a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/">Full WAF</a>') . '</p>';
31
  if ( defined('NFW_WPWAF') ) {
32
  $option_disabled = 1;
33
  } else {
37
  $nfw_options = nfw_get_option( 'nfw_options' );
38
  $nfw_rules = nfw_get_option( 'nfw_rules' );
39
 
40
+ // Tab and div display
41
+ if ( empty( $_REQUEST['tab'] ) ) { $_REQUEST['tab'] = 'basic'; }
42
+
43
+ if ( $_REQUEST['tab'] == 'intermediate' ) {
44
+ $basic_tab = ''; $basic_div = ' style="display:none"';
45
+ $intermediate_tab = ' nav-tab-active'; $intermediate_div = '';
46
+ $advanced_tab = ''; $advanced_div = ' style="display:none"';
47
+
48
+ } elseif ( $_REQUEST['tab'] == 'advanced' ) {
49
+ $basic_tab = ''; $basic_div = ' style="display:none"';
50
+ $intermediate_tab = ''; $intermediate_div = ' style="display:none"';
51
+ $advanced_tab = ' nav-tab-active'; $advanced_div = '';
52
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  } else {
54
+ $_REQUEST['tab'] = 'basic';
55
+ $basic_tab = ' nav-tab-active'; $basic_div = '';
56
+ $intermediate_tab = ''; $intermediate_div = ' style="display:none"';
57
+ $advanced_tab = ''; $advanced_div = ' style="display:none"';
 
 
 
58
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ ?>
61
  <div class="wrap">
62
+ <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Firewall Policies', 'ninjafirewall') ?></h1>
63
+ <?php
64
 
65
  if ( isset( $_POST['nfw_options']) ) {
66
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'policies_save') ) {
82
  ?>
83
  <br />
84
  <h2 class="nav-tab-wrapper wp-clearfix" style="cursor:pointer">
85
+ <a id="tab-basic" class="nav-tab<?php echo $basic_tab ?>" onClick="nfwjs_switch_tabs('basic', 'basic:intermediate:advanced')"><?php _e( 'Basic Policies', 'ninjafirewall' ) ?></a>
86
+ <a id="tab-intermediate" class="nav-tab<?php echo $intermediate_tab ?>" onClick="nfwjs_switch_tabs('intermediate', 'basic:intermediate:advanced')"><?php _e( 'Intermediate Policies', 'ninjafirewall' ) ?></a>
87
+ <a id="tab-advanced" class="nav-tab<?php echo $advanced_tab ?>" onClick="nfwjs_switch_tabs('advanced', 'basic:intermediate:advanced')"><?php _e( 'Advanced Policies', 'ninjafirewall' ) ?></a>
88
  </h2>
89
  <br />
90
  <?php
92
  echo '<form method="post" name="fwrules">';
93
  wp_nonce_field('policies_save', 'nfwnonce', 0);
94
 
95
+ // ---------------------------------------------------------------------
96
  // Basic options:
97
  ?>
98
+ <div id="basic-options"<?php echo $basic_div ?>>
99
  <?php
100
  if ( ( isset( $nfw_options['scan_protocol']) ) &&
101
  ( preg_match( '/^[123]$/', $nfw_options['scan_protocol']) ) ) {
106
 
107
  ?>
108
  <h3>HTTP / HTTPS</h3>
109
+ <table class="form-table nfw-table">
110
  <tr>
111
+ <th scope="row" class="row-med"><?php _e('Enable NinjaFirewall for', 'ninjafirewall') ?></th>
 
112
  <td>
113
+ <p><label><input type="radio" name="nfw_options[scan_protocol]" value="3"<?php checked($scan_protocol, 3 ) ?>>&nbsp;<?php _e('HTTP and HTTPS traffic (default)', 'ninjafirewall') ?></label></p>
114
+ <p><label><input type="radio" name="nfw_options[scan_protocol]" value="1"<?php checked($scan_protocol, 1 ) ?>>&nbsp;<?php _e('HTTP traffic only', 'ninjafirewall') ?></label></p>
115
+ <p><label><input type="radio" name="nfw_options[scan_protocol]" value="2"<?php checked($scan_protocol, 2 ) ?>>&nbsp;<?php _e('HTTPS traffic only', 'ninjafirewall') ?></label></p>
116
  </td>
117
  </tr>
118
  </table>
119
 
120
+ <br />
121
+ <br />
122
+
123
  <?php
124
  if ( empty( $nfw_options['sanitise_fn']) ) {
125
  $sanitise_fn = 0;
138
  $substitute = htmlspecialchars( $nfw_options['substitute'] );
139
  }
140
  ?>
 
141
  <h3><?php _e('Uploads', 'ninjafirewall') ?></h3>
142
+ <table class="form-table nfw-table">
143
  <tr>
144
+ <th scope="row" class="row-med"><?php _e('File Uploads', 'ninjafirewall') ?></th>
 
145
  <td>
146
+ <select name="nfw_options[uploads]" onchange="nfwjs_upload_onoff(this);">
147
  <option value="1"<?php selected( $uploads, 1 ) ?>><?php echo __('Allow uploads', 'ninjafirewall') .' '. __('(default)', 'ninjafirewall') ?></option>
148
  <option value="0"<?php selected( $uploads, 0 ) ?>><?php _e('Disallow uploads', 'ninjafirewall') ?></option>
149
  </select>
150
+ <br />
151
+ <label><input type="checkbox" onclick='return nfwjs_sanitise(this);' name="nfw_options[sanitise_fn]"<?php checked( $sanitise_fn, 1 ); disabled( $uploads, 0 ) ?> id="san">
152
+ <?php _e('Sanitise filenames', 'ninjafirewall') ?> (<?php _e('substitution character:', 'ninjafirewall') ?></label> <input id="subs" maxlength="1" size="1" value="<?php echo $substitute ?>" name="nfw_options[substitute]" type="text" <?php disabled( $uploads, 0 ) ?>/> )
153
  </td>
154
  </tr>
155
  </table>
156
 
157
+ <br />
158
  <br />
159
 
160
  <?php
161
+ if (! isset( $nfw_options['wp_dir'] ) ) {
162
+ $nfw_options['wp_dir'] = '';
163
+ }
164
+ if ( strpos( $nfw_options['wp_dir'], 'wp-admin' ) !== FALSE ) {
165
  $wp_admin = 1;
166
  } else {
167
  $wp_admin = 0;
168
  }
169
+ if ( strpos( $nfw_options['wp_dir'], 'wp-includes' ) !== FALSE ) {
170
  $wp_inc = 1;
171
  } else {
172
  $wp_inc = 0;
173
  }
174
+ if ( strpos( $nfw_options['wp_dir'], 'uploads' ) !== FALSE ) {
175
  $wp_upl = 1;
176
  } else {
177
  $wp_upl = 0;
178
  }
179
+ if ( strpos( $nfw_options['wp_dir'], 'cache' ) !== FALSE ) {
180
  $wp_cache = 1;
181
  } else {
182
  $wp_cache = 0;
271
  }
272
  ?>
273
  <h3>WordPress</h3>
274
+ <table class="form-table nfw-table">
275
  <tr>
276
+ <th scope="row" class="row-med"><?php _e('Block direct access to any PHP file located in one of these directories', 'ninjafirewall') ?></th>
277
+ <td>
278
+ <?php
279
  if ( defined('NFW_WPWAF') ) {
280
+ echo $full_waf_msg;
281
  }
282
+ ?>
 
 
283
  <table class="form-table">
284
  <tr style="border: solid 1px #DFDFDF;">
285
  <td align="center" width="10"><input type="checkbox" name="nfw_options[wp_admin]" id="wp_01"<?php checked( $wp_admin, 1 ); disabled( $option_disabled, 1) ?>></td>
303
  <p><code>/wp-includes/theme-compat/*</code></p>
304
  </label>
305
  <br />
306
+ <p class="description"><?php _e('NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if this option is enabled.', 'ninjafirewall') ?></p>
307
  </td>
308
  </tr>
309
  <tr style="border: solid 1px #DFDFDF;">
318
  <td style="vertical-align:top"><label for="wp_04"><code>*/cache/*</code></label>
319
  <br />
320
  <br />
321
+ <p class="description"><?php _e('Unless you have PHP scripts in a "/cache/" folder that need to be accessed by your visitors, we recommend to enable this option.', 'ninjafirewall') ?></p>
322
  </td>
323
  </tr>
324
  </table>
325
  <br />&nbsp;
326
  </td>
327
  </tr>
 
328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  <tr>
330
+ <th scope="row" class="row-med"><?php _e('General', 'ninjafirewall') ?></th>
 
331
  <td>
332
+ <p><label><input type="checkbox" name="nfw_options[disallow_settings]" value="1"<?php checked( $disallow_settings, 1 ) ?>>&nbsp;<?php echo _e('Block attempts to modify important WordPress settings', 'ninjafirewall') ?></label></p>
333
  <p><label><input type="checkbox" name="nfw_options[disallow_creation]" value="1"<?php checked( $disallow_creation, 1 ) ?>>&nbsp;<?php _e('Block user accounts creation', 'ninjafirewall') ?></label></p>
334
+ <p class="description"><?php _e('Do not enable this policy if you allow user registration.', 'ninjafirewall') ?></p>
335
  </td>
336
  </tr>
337
 
343
  }
344
  ?>
345
  <tr>
346
+ <th scope="row" class="row-med"><?php _e('WordPress AJAX', 'ninjafirewall') ?></th>
 
347
  <td>
348
  <p><label><input type="checkbox" name="nfw_options[admin_ajax]" value="1"<?php checked( $admin_ajax, 1 ) ?>>&nbsp;<?php _e('Protect <code>admin-ajax.php</code> against suspicious bots', 'ninjafirewall') ?></label></p>
349
+ <p class="description"><?php printf( __('Your server IP (%s), localhost and private IP addresses will not be affected by this policy.', 'ninjafirewall'), htmlspecialchars( NFW_REMOTE_ADDR ) ) ?></p>
350
  </td>
351
  </tr>
352
 
353
  <tr>
354
+ <th scope="row" class="row-med"><?php _e('Protect against username enumeration', 'ninjafirewall') ?></th>
 
355
  <td>
356
  <p><label><input type="checkbox" name="nfw_options[enum_archives]" value="1"<?php checked( $enum_archives, 1 ) ?>>&nbsp;<?php _e('Through the author archives', 'ninjafirewall') ?></label></p>
357
  <p><label><input type="checkbox" name="nfw_options[enum_login]" value="1"<?php checked( $enum_login, 1 ) ?>>&nbsp;<?php _e('Through the login page', 'ninjafirewall') ?></label></p>
359
  </td>
360
  </tr>
361
 
 
 
 
 
 
 
 
 
 
 
362
  <tr>
363
+ <th scope="row" class="row-med"><?php _e('WordPress REST API', 'ninjafirewall') ?></th>
 
364
  <td>
365
+ <p><label><input type="checkbox" name="nfw_options[no_restapi]" value="1"<?php checked( $no_restapi, 1 ) ?>>&nbsp;<?php _e('Block any access to the API', 'ninjafirewall') ?></label> *</p>
 
366
  </td>
367
  </tr>
368
+ <tr>
369
+ <th scope="row" class="row-med"><?php _e('WordPress XML-RPC API', 'ninjafirewall') ?></th>
 
370
  <td>
371
  <p><label><input type="checkbox" name="nfw_options[no_xmlrpc]" value="1"<?php checked( $no_xmlrpc, 1 ) ?>>&nbsp;<?php _e('Block any access to the API', 'ninjafirewall') ?></label> *</p>
 
372
  <p><label><input type="checkbox" name="nfw_options[no_xmlrpc_multi]" value="1"<?php checked( $no_xmlrpc_multi, 1 ) ?>>&nbsp;<?php _e('Block <code>system.multicall</code> method', 'ninjafirewall') ?></label> *</p>
373
+ <p><label><input type="checkbox" name="nfw_options[no_xmlrpc_pingback]" value="1"<?php checked( $no_xmlrpc_pingback, 1 ) ?>>&nbsp;<?php _e('Block Pingbacks', 'ninjafirewall') ?></label></p>
374
+ <br />
375
+ <p class="description" style="font-size:14px">* <?php _e('Disabling access to the REST or XML-RPC API may break some functionality on your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact Form 7 etc).', 'ninjafirewall') ?></p>
 
376
  </td>
377
  </tr>
 
 
 
378
 
 
379
  <tr valign="top">
380
+ <th scope="row" class="row-med" style="vertical-align:top"><?php _e('Block <code>POST</code> requests in the themes folder', 'ninjafirewall') ?> <code>/<?php echo basename(WP_CONTENT_DIR); ?>/themes</code></th>
381
+ <td>
382
+ <?php nfw_toggle_switch( 'info', 'nfw_options[no_post_themes]', $yes, $no, 'small', $no_post_themes, $option_disabled );
 
 
 
 
 
383
  if ( defined('NFW_WPWAF') ) {
384
+ echo $full_waf_msg;
385
  }
386
+ ?>
387
  </td>
388
  </tr>
389
  <tr valign="top">
390
+ <th scope="row" class="row-med"><a name="builtinconstants"></a><?php _e('Force SSL for admin and logins', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Require_SSL_for_Admin_and_Logins" target="_blank">FORCE_SSL_ADMIN</a></code></th>
 
 
 
 
391
  <td>
392
+ <?php nfw_toggle_switch( 'info', 'nfw_options[force_ssl]', $yes, $no, 'small', $force_ssl, $force_ssl_already_enabled, 'onclick="return nfwjs_ssl_warn(this,'. NFW_IS_HTTPS .');"' ) ?>
393
  </td>
394
  </tr>
395
  <tr valign="top">
396
+ <th scope="row" class="row-med"><?php _e('Disable the plugin and theme editor', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Disable_the_Plugin_and_Theme_Editor" target="_blank">DISALLOW_FILE_EDIT</a></code></th>
 
 
 
 
397
  <td>
398
+ <?php nfw_toggle_switch( 'info', 'nfw_options[disallow_edit]', $yes, $no, 'small', $disallow_edit, $disallow_edit_already_enabled ) ?>
399
  </td>
400
  </tr>
401
  <tr valign="top">
402
+ <th scope="row" class="row-med"><?php _e('Disable plugin and theme update/installation', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Disable_Plugin_and_Theme_Update_and_Installation" target="_blank">DISALLOW_FILE_MODS</a></code></th>
 
 
 
 
403
  <td>
404
+ <?php nfw_toggle_switch( 'info', 'nfw_options[disallow_mods]', $yes, $no, 'small', $disallow_mods, $disallow_mods_already_enabled ) ?>
405
  </td>
406
  </tr>
407
  <tr valign="top">
408
+ <th scope="row" class="row-med"><?php _e('Disable the fatal error handler', 'ninjafirewall') ?> <code><a href="https://make.wordpress.org/core/2019/01/14/php-site-health-mechanisms-in-5-1/" target="_blank">WP_DISABLE_FATAL_ERROR_HANDLER</a></code></th>
 
 
 
 
409
  <td>
410
+ <?php nfw_toggle_switch( 'info', 'nfw_options[disable_error_handler]', $yes, $no, 'small', $disable_error_handler, $disable_error_handler_already_enabled ) ?>
411
  </td>
412
  </tr>
413
 
425
  $wl_admin = 1;
426
  }
427
  ?>
428
+ <table class="form-table nfw-table">
429
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
430
+ <th scope="row" class="row-med"><?php _e('Users Whitelist', 'ninjafirewall') ?></th>
 
431
  <td>
432
+ <p><label><input type="radio" name="nfw_options[wl_admin]" value="1"<?php checked( $wl_admin, 1 ) ?>>&nbsp;<?php _e('Add the Administrator to the whitelist (default).', 'ninjafirewall') ?></label></p>
433
+ <p><label><input type="radio" name="nfw_options[wl_admin]" value="2"<?php checked( $wl_admin, 2 ) ?>>&nbsp;<?php _e('Add all logged in users to the whitelist.', 'ninjafirewall') ?></label></p>
434
+ <p><label><input type="radio" name="nfw_options[wl_admin]" value="0"<?php checked( $wl_admin, 0 ) ?>>&nbsp;<?php _e('Disable users whitelist.', 'ninjafirewall') ?></label></p>
435
+ <p class="description"><?php _e('Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, <code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and <code>WP_DISABLE_FATAL_ERROR_HANDLER</code> options which, if enabled, are always enforced.', 'ninjafirewall') ?></p>
436
  </td>
437
  </tr>
438
  </table>
441
 
442
 
443
  <?php
444
+ // ---------------------------------------------------------------------
445
  // Intermediate options:
446
  ?>
447
+ <div id="intermediate-options"<?php echo $intermediate_div ?>>
448
  <?php
449
  if ( empty( $nfw_options['get_scan']) ) {
450
  $get_scan = 0;
458
  }
459
  ?>
460
  <h3><?php _e('HTTP GET variable', 'ninjafirewall') ?></h3>
461
+ <table class="form-table nfw-table">
462
  <tr>
463
+ <th scope="row" class="row-med"><?php _e('Scan <code>GET</code> variable', 'ninjafirewall') ?></th>
 
 
 
 
464
  <td>
465
+ <?php nfw_toggle_switch( 'info', 'nfw_options[get_scan]', $yes, $no, 'small', $get_scan ) ?>
466
  </td>
467
  </tr>
468
  <tr>
469
+ <th scope="row" class="row-med"><?php _e('Sanitise <code>GET</code> variable', 'ninjafirewall') ?></th>
 
 
 
 
470
  <td>
471
+ <?php nfw_toggle_switch( 'info', 'nfw_options[get_sanitise]', $yes, $no, 'small', $get_sanitise ) ?>
472
  </td>
473
  </tr>
474
  </table>
493
  }
494
  ?>
495
  <h3><?php _e('HTTP POST variable', 'ninjafirewall') ?></h3>
496
+ <table class="form-table nfw-table">
497
  <tr valign="top">
498
+ <th scope="row" class="row-med"><?php _e('Scan <code>POST</code> variable', 'ninjafirewall') ?></th>
 
 
 
 
499
  <td>
500
+ <?php nfw_toggle_switch( 'info', 'nfw_options[post_scan]', $yes, $no, 'small', $post_scan ) ?>
501
  </td>
502
  </tr>
503
  <tr valign="top">
504
+ <th scope="row" class="row-med"><?php _e('Sanitise <code>POST</code> variable', 'ninjafirewall') ?></th>
 
 
 
 
505
  <td>
506
+ <?php nfw_toggle_switch( 'warning', 'nfw_options[post_sanitise]', $yes, $no, 'small', $post_sanitise ) ?>
507
+ <p class="description">&nbsp;<?php _e('Do not enable this option unless you know what you are doing!', 'ninjafirewall') ?></p>
508
  </td>
509
  </tr>
510
  <tr valign="top">
511
+ <th scope="row" class="row-med"><?php _e('Decode Base64-encoded <code>POST</code> variable', 'ninjafirewall') ?></th>
 
 
 
 
512
  <td>
513
+ <?php nfw_toggle_switch( 'info', 'nfw_options[post_b64]', $yes, $no, 'small', $post_b64 ) ?>
514
  </td>
515
  </tr>
516
  </table>
524
  }
525
  ?>
526
  <h3><?php _e('HTTP REQUEST variable', 'ninjafirewall') ?></h3>
527
+ <table class="form-table nfw-table">
528
  <tr>
529
+ <th scope="row" class="row-med"><?php _e('Sanitise <code>REQUEST</code> variable', 'ninjafirewall') ?></th>
 
 
 
 
530
  <td>
531
+ <?php nfw_toggle_switch( 'warning', 'nfw_options[request_sanitise]', $yes, $no, 'small', $request_sanitise ) ?>
532
+ <p class="description">&nbsp;<?php _e('Do not enable this option unless you know what you are doing!', 'ninjafirewall') ?></p>
533
  </td>
534
  </tr>
535
  </table>
549
  }
550
  ?>
551
  <h3><?php _e('Cookies', 'ninjafirewall') ?></h3>
552
+ <table class="form-table nfw-table">
553
  <tr>
554
+ <th scope="row" class="row-med"><?php _e('Scan cookies', 'ninjafirewall') ?></th>
 
 
 
 
555
  <td>
556
+ <?php nfw_toggle_switch( 'info', 'nfw_options[cookies_scan]', $yes, $no, 'small', $cookies_scan ) ?>
557
  </td>
558
  </tr>
559
  <tr>
560
+ <th scope="row" class="row-med"><?php _e('Sanitise cookies', 'ninjafirewall') ?></th>
 
 
 
 
561
  <td>
562
+ <?php nfw_toggle_switch( 'info', 'nfw_options[cookies_sanitise]', $yes, $no, 'small', $cookies_sanitise ) ?>
563
  </td>
564
  </tr>
565
  </table>
577
  } else {
578
  $ua_sanitise = 1;
579
  }
 
 
580
  if ( empty( $nfw_rules[NFW_SCAN_BOTS]['ena']) ) {
581
  $block_bots = 0;
582
  } else {
584
  }
585
  ?>
586
  <h3><?php _e('HTTP_USER_AGENT server variable', 'ninjafirewall') ?></h3>
587
+ <table class="form-table nfw-table">
588
  <tr>
589
+ <th scope="row" class="row-med"><?php _e('Scan <code>HTTP_USER_AGENT</code>', 'ninjafirewall') ?></th>
 
 
 
 
590
  <td>
591
+ <?php nfw_toggle_switch( 'info', 'nfw_options[ua_scan]', $yes, $no, 'small', $ua_scan ) ?>
592
  </td>
593
  </tr>
594
  <tr>
595
+ <th scope="row" class="row-med"><?php _e('Sanitise <code>HTTP_USER_AGENT</code>', 'ninjafirewall') ?></th>
 
 
 
 
596
  <td>
597
+ <?php nfw_toggle_switch( 'info', 'nfw_options[ua_sanitise]', $yes, $no, 'small', $ua_sanitise ) ?>
598
  </td>
599
  </tr>
600
  <tr>
601
+ <th scope="row" class="row-med"><?php _e('Block suspicious bots/scanners', 'ninjafirewall') ?></th>
 
 
 
 
602
  <td>
603
+ <?php nfw_toggle_switch( 'info', 'nfw_rules[block_bots]', $yes, $no, 'small', $block_bots ) ?>
604
  </td>
605
  </tr>
606
  </table>
625
  }
626
  ?>
627
  <h3><?php _e('HTTP_REFERER server variable', 'ninjafirewall') ?></h3>
628
+ <table class="form-table nfw-table">
629
  <tr>
630
+ <th scope="row" class="row-med"><?php _e('Scan <code>HTTP_REFERER</code>', 'ninjafirewall') ?></th>
 
 
 
 
631
  <td>
632
+ <?php nfw_toggle_switch( 'info', 'nfw_options[referer_scan]', $yes, $no, 'small', $referer_scan ) ?>
633
  </td>
634
  </tr>
635
  <tr>
636
+ <th scope="row" class="row-med"><?php _e('Sanitise <code>HTTP_REFERER</code>', 'ninjafirewall') ?></th>
 
 
 
 
637
  <td>
638
+ <?php nfw_toggle_switch( 'info', 'nfw_options[referer_sanitise]', $yes, $no, 'small', $referer_sanitise ) ?>
639
  </td>
640
  </tr>
641
  <tr valign="top">
642
+ <th scope="row" class="row-med"><?php _e('Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</code> header', 'ninjafirewall') ?></th>
643
+ <td>
644
+ <?php nfw_toggle_switch( 'info', 'nfw_options[referer_post]', $yes, $no, 'small', $referer_post ) ?>
645
+ <p class="description">&nbsp;<?php _e('Keep this option disabled if you are using scripts like Paypal IPN, WordPress WP-Cron etc', 'ninjafirewall') ?>.</p>
 
 
 
646
  </td>
647
  </tr>
648
  </table>
667
  }
668
  ?>
669
  <h3>IP</h3>
670
+ <table class="form-table nfw-table" border=0>
671
  <tr>
672
+ <th scope="row" class="row-med"><?php _e('Block localhost IP in <code>GET/POST</code> request', 'ninjafirewall') ?></th>
673
+ <td>
674
+ <?php nfw_toggle_switch( 'info', 'nfw_rules[no_localhost_ip]', $yes, $no, 'small', $no_localhost_ip ) ?>
 
 
 
 
675
  </td>
676
  </tr>
677
  <tr>
678
+ <th scope="row" class="row-med"><?php _e('Block HTTP requests with an IP in the <code>HTTP_HOST</code> header', 'ninjafirewall') ?></th>
679
+ <td>
680
+ <?php nfw_toggle_switch( 'info', 'nfw_options[no_host_ip]', $yes, $no, 'small', $no_host_ip ) ?>
 
 
 
 
681
  </td>
682
  </tr>
683
  <tr>
684
+ <th scope="row" class="row-med"><?php _e('Scan traffic coming from localhost and private IP address spaces', 'ninjafirewall') ?></th>
685
+ <td>
686
+ <?php nfw_toggle_switch( 'info', 'nfw_options[allow_local_ip]', $yes, $no, 'small', $allow_local_ip ) ?>
 
 
 
 
687
  </td>
688
  </tr>
689
  </table>
691
  </div>
692
 
693
  <?php
694
+ // ---------------------------------------------------------------------
695
  // Advanced options:
696
  ?>
697
+ <div id="advanced-options"<?php echo $advanced_div ?>>
 
698
  <?php
699
+ $err_msg = ''; $err = 0;
700
+ // Some compatibility checks:
701
+ // 1. header_register_callback(): requires PHP >=5.4
702
+ // 2. headers_list() and header_remove(): some hosts may disable them.
703
+ $tpl = __('The "HTTP response headers" options below are disabled because the %s PHP function is not available on your server.', 'ninjafirewall');
704
+ if (! function_exists( 'header_register_callback' ) ) {
705
+ $err_msg = sprintf( $tpl, 'header_register_callback()' );
706
  $err = 1;
707
+
708
+ } elseif (! function_exists( 'headers_list' ) ) {
709
+ $err_msg = sprintf( $tpl, 'headers_list()' );
710
  $err = 1;
711
+
712
+ } elseif (! function_exists( 'header_remove' ) ) {
713
+ $err_msg = sprintf( $tpl, 'header_remove()' );
714
  $err = 1;
715
  }
716
+ if ( empty( $nfw_options['response_headers'] ) || ! empty( $err_msg ) ||
717
+ ! preg_match( '/^\d+$/', $nfw_options['response_headers'] ) ) {
718
+
719
  $nfw_options['response_headers'] = '000000000';
720
  }
721
  ?>
722
+
723
  <h3><?php _e('HTTP response headers', 'ninjafirewall') ?></h3>
724
+ <?php
725
+ if (! empty( $err_msg ) ) {
726
+ echo '<p class="description" style="color:red;font-size:14px">'. $err_msg .'</p>';
727
+ }
728
+ ?>
729
+ <table class="form-table nfw-table">
730
  <tr>
731
+ <th scope="row" class="row-med"><?php printf( __('Set %s to protect against MIME type confusion attacks', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">X-Content-Type-Options</a>') ?></th>
 
 
 
 
732
  <td>
733
+ <?php nfw_toggle_switch( 'info', 'nfw_options[x_content_type_options]', $yes, $no, 'small', $nfw_options['response_headers'][1], $err ) ?>
734
  </td>
735
  </tr>
736
  <tr>
737
+ <th scope="row" class="row-med"><?php printf( __('Set %s to protect against clickjacking attempts', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">X-Frame-Options</a>') ?></th>
738
+ <td>
739
+ <select name="nfw_options[x_frame_options]" <?php disabled( $err, 1 ) ?>>
740
+ <option value="0"<?php selected( $nfw_options['response_headers'][2], 0 ) ?>><?php echo $no; ?></option>
741
+ <option value="1"<?php selected( $nfw_options['response_headers'][2], 1 ) ?>>SAMEORIGIN</option>
742
+ <option value="2"<?php selected( $nfw_options['response_headers'][2], 2 ) ?>>DENY</option>
743
+ </select>
744
+ <p class="description"><?php _e('Setting this option to <code>DENY</code> may break some functionality on your blog, its themes or plugins.', 'ninjafirewall') ?></p>
745
  </td>
 
746
  </tr>
 
 
 
747
 
748
+ <tr>
749
+ <th scope="row" class="row-med"><?php printf( __("Set %s (IE/Edge, Chrome, Opera and Safari browsers)", 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">X-XSS-Protection</a>') ?></th>
 
 
750
  <td>
751
+ <select name="nfw_options[x_xss_protection]" <?php disabled( $err, 1 ) ?>>
752
+ <option value="3"<?php selected( $nfw_options['response_headers'][3], 3 ) ?>><?php echo $no; ?></option>
753
+ <option value="0"<?php selected( $nfw_options['response_headers'][3], 0 ) ?>><?php printf( __('Set to %s', 'ninjafirewall'), '"0"'); ?></option>
754
+ <option value="2"<?php selected( $nfw_options['response_headers'][3], 2 ) ?>><?php printf( __('Set to %s', 'ninjafirewall'), '"1"'); ?></option>
755
+ <option value="1"<?php selected( $nfw_options['response_headers'][3], 1 ) ?>><?php printf( __('Set to %s', 'ninjafirewall'), '"1; mode=block"') ?></option>
756
+ </select>
757
  </td>
758
  </tr>
759
  <tr>
760
+ <th scope="row" class="row-med"><?php printf( __('Force %s flag on all cookies to mitigate XSS attacks', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">HttpOnly</a>') ?></th>
761
+ <td>
762
+ <?php nfw_toggle_switch( 'info', 'nfw_options[cookies_httponly]', $yes, $no, 'small', $nfw_options['response_headers'][0], $err ) ?>
763
+ <p class="description"><?php _e('If your PHP scripts use cookies that need to be accessed from JavaScript, you should not enable this option.', 'ninjafirewall') ?></p>
 
 
 
764
  </td>
765
  </tr>
766
  <?php
767
+ // We don't send HSTS headers over HTTP (only display this message if there
768
+ // is no other warning to display, $err==0 ):
769
+ $hsts_err = 0;
770
  if ( NFW_IS_HTTPS == false && ! $err ) {
771
  $hsts_err = 1;
772
+ $hsts_msg = __('HSTS headers can only be set when you are accessing your site over HTTPS.', 'ninjafirewall');
773
  } else {
774
  $hsts_msg = '';
775
  $hsts_err = 0;
776
  }
777
+ if ( $err == 1 ) { $hsts_err = 1; }//$hsts_msg = '';
778
  ?>
779
  <tr>
780
+ <th scope="row" class="row-med"><?php printf( __('Set %s (HSTS) to enforce secure connections to the server', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">Strict-Transport-Security</a>') ?></th>
781
+ <td>
782
+ <select name="nfw_options[strict_transport]" <?php disabled( $hsts_err, 1 ) ?>>
783
+ <option value="0"<?php selected( $nfw_options['response_headers'][4], 0 ) ?>><?php echo $no; ?></option>
784
+ <option value="4"<?php selected( $nfw_options['response_headers'][4], 4 ) ?>><?php _e('Set "max-age" to 0', 'ninjafirewall') ?></option>
785
+ <option value="1"<?php selected( $nfw_options['response_headers'][4], 1 ) ?>><?php _e('1 month', 'ninjafirewall') ?></option>
786
+ <option value="2"<?php selected( $nfw_options['response_headers'][4], 2 ) ?>><?php _e('6 months', 'ninjafirewall') ?></option>
787
+ <option value="3"<?php selected( $nfw_options['response_headers'][4], 3 ) ?>><?php _e('1 year', 'ninjafirewall') ?></option>
788
+ </select>
789
+ <p><label><input type="checkbox" name="nfw_options[strict_transport_sub]" value="1"<?php checked( $nfw_options['response_headers'][5], 1 );disabled($hsts_err, 1) ?>>&nbsp;<?php _e('Apply to subdomains', 'ninjafirewall') ?></label></p>
790
+ <?php
791
+ if (! empty( $hsts_msg ) ) {
792
+ echo '<i class="description" style="color:red">'. $hsts_msg .'</i>';
793
+ }
794
+ ?>
795
  </td>
796
  </tr>
797
 
800
  $nfw_options['csp_frontend_data'] = '';
801
  }
802
  if (! isset( $nfw_options['csp_backend_data'] ) ) {
803
+ $nfw_options['csp_backend_data'] = '';
804
  }
805
  if (! isset( $nfw_options['response_headers'][6] ) ) {
806
  $nfw_options['response_headers'][6] = 0;
810
  }
811
  ?>
812
  <tr>
813
+ <th scope="row" class="row-med"><?php printf( __('Set %s for the website frontend', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">Content-Security-Policy</a>') ?></th>
814
+ <td>
815
+ <?php nfw_toggle_switch( 'info', 'nfw_options[csp_frontend]', $yes, $no, 'small', $nfw_options['response_headers'][6], $err, 'onclick="nfwjs_csp_onoff(\'csp1_switch\',\'csp1\');"', 'csp1_switch' ) ?>
816
+ <br />
817
+ <textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_frontend_data]" id="csp1" class="large-text code" rows="8"<?php readonly( $err, 1 ); readonly( $nfw_options['response_headers'][6], 0 ) ?> style="resize: vertical;"><?php echo htmlspecialchars( $nfw_options['csp_frontend_data'] ) ?></textarea>
818
+ <p class="description"><?php _e('This CSP header will apply to the website frontend only.', 'ninjafirewall') ?></p>
 
 
 
 
819
  </td>
820
  </tr>
 
821
  <tr>
822
+ <th scope="row" class="row-med"><?php printf( __('Set %s for the WordPress admin dashboard', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">Content-Security-Policy</a>') ?></th>
823
+ <td>
824
+ <?php nfw_toggle_switch( 'info', 'nfw_options[csp_backend]', $yes, $no, 'small', $nfw_options['response_headers'][7], $err, 'onclick="nfwjs_csp_onoff(\'csp2_switch\',\'csp2\');"', 'csp2_switch' ) ?>
825
+ <br />
826
+ <textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_backend_data]" id="csp2" class="large-text code" rows="8"<?php readonly( $err, 1 ); readonly( $nfw_options['response_headers'][7], 0 ) ?> style="resize: vertical;"><?php echo htmlspecialchars( $nfw_options['csp_backend_data'] ) ?></textarea>
827
+ <p class="description"><?php _e('This CSP header will apply to the WordPress admin dashboard only.', 'ninjafirewall') ?></p>
 
 
 
828
  <?php echo $err_msg ?>
829
  </td>
830
  </tr>
840
  }
841
  ?>
842
  <tr>
843
+ <th scope="row"><?php printf( __("Set %s (Chrome, Opera and Firefox browsers)", 'ninjafirewall'), '<a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/#advanced-policies" target="_blank">Referrer-Policy</a>') ?></th>
844
+ <td>
845
+ <?php nfw_toggle_switch( 'info', 'nfw_options[referrer_policy_enabled]', $yes, $no, 'small', $nfw_options['referrer_policy_enabled'], $err, 'onclick="nfwjs_referrer_onoff();"', 'referrer_switch' ) ?>
846
+ <br />
 
 
 
 
847
  <select id="rp_select" name="nfw_options[referrer_policy]"<?php disabled($nfw_options['referrer_policy_enabled'], 0) ?>>
848
  <option value="1"<?php selected($nfw_options['response_headers'][8], 1) ?>>no-referrer</option>
849
  <option value="2"<?php selected($nfw_options['response_headers'][8], 2) ?>>no-referrer-when-downgrade</option>
888
  }
889
  ?>
890
  <h3>PHP</h3>
891
+ <table class="form-table nfw-table">
892
  <tr>
893
+ <th scope="row" class="row-med"><?php _e('Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies', 'ninjafirewall') ?></th>
894
+ <td>
895
+ <?php nfw_toggle_switch( 'info', 'nfw_rules[php_wrappers]', $yes, $no, 'small', $php_wrappers ) ?>
 
 
 
 
896
  </td>
897
  </tr>
898
 
929
  }
930
  ?>
931
  <tr>
932
+ <th scope="row" class="row-mid"><?php _e('Block serialized PHP objects in the following global variables', 'ninjafirewall') ?></th>
933
+ <td>
934
+ <p><label><input type="checkbox" name="nfw_rules[php_objects_get]" value="1"<?php echo $NFW_OBJECTS_GET ?>><code>GET</code></label><p>
935
+ <p><label><input type="checkbox" name="nfw_rules[php_objects_post]" value="1"<?php echo $NFW_OBJECTS_POST ?>><code>POST</code></label><p>
 
936
  <p><label><input type="checkbox" name="nfw_rules[php_objects_cookie]" value="1"<?php echo $NFW_OBJECTS_COOKIE ?>><code>COOKIE</code></label><p>
937
+ <p><label><input type="checkbox" name="nfw_rules[php_objects_http_user_agent]" value="1"<?php echo $NFW_OBJECTS_HTTP_USER_AGENT ?>><code>HTTP_USER_AGENT</code></label><p>
938
+ <p><label><input type="checkbox" name="nfw_rules[php_objects_http_referer]" value="1"<?php echo $NFW_OBJECTS_HTTP_REFERER ?>><code>HTTP_REFERER</code></label><p>
 
 
939
  </td>
940
  </tr>
941
  <tr>
942
+ <th scope="row" class="row-mid"><?php _e('Hide PHP notice and error messages', 'ninjafirewall') ?></th>
 
 
 
 
943
  <td>
944
+ <?php nfw_toggle_switch( 'info', 'nfw_options[php_errors]', $yes, $no, 'small', $php_errors ) ?>
945
  </td>
946
  </tr>
947
  <tr>
948
+ <th scope="row" class="row-mid"><?php _e('Sanitise <code>PHP_SELF</code>', 'ninjafirewall') ?></th>
 
 
 
 
949
  <td>
950
+ <?php nfw_toggle_switch( 'info', 'nfw_options[php_self]', $yes, $no, 'small', $php_self ) ?>
951
  </td>
952
  </tr>
953
  <tr>
954
+ <th scope="row" class="row-mid"><?php _e('Sanitise <code>PATH_TRANSLATED</code>', 'ninjafirewall') ?></th>
 
 
 
 
955
  <td>
956
+ <?php nfw_toggle_switch( 'info', 'nfw_options[php_path_t]', $yes, $no, 'small', $php_path_t ) ?>
957
  </td>
958
  </tr>
959
  <tr>
960
+ <th scope="row" class="row-mid"><?php _e('Sanitise <code>PATH_INFO</code>', 'ninjafirewall') ?></th>
 
 
 
 
961
  <td>
962
+ <?php nfw_toggle_switch( 'info', 'nfw_options[php_path_i]', $yes, $no, 'small', $php_path_i ) ?>
963
  </td>
964
  </tr>
965
  </table>
967
  <br /><br />
968
 
969
  <?php
970
+ // If the document root is < 5 characters, disable the option
971
  if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) < 5 ) {
972
  $nfw_rules[NFW_DOC_ROOT]['ena'] = 0;
973
+ $disabled_msg = '<p class="description">' .
 
 
974
  __('This option is not compatible with your actual configuration.', 'ninjafirewall') .
975
+ '</p>';
976
  } else {
 
 
977
  $disabled_msg = '';
978
  }
979
 
994
  }
995
  ?>
996
  <h3><?php _e('Various', 'ninjafirewall') ?></h3>
997
+ <table class="form-table nfw-table">
998
+ <tr>
999
+ <th scope="row" class="row-med"><?php _e('Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request', 'ninjafirewall') ?></th>
 
 
 
 
1000
  <td>
1001
+ <?php nfw_toggle_switch( 'info', 'nfw_rules[block_doc_root]', $yes, $no, 'small', $block_doc_root ) ?>
1002
+ <?php echo $disabled_msg ?>
1003
  </td>
1004
  </tr>
1005
  <tr>
1006
+ <th scope="row" class="row-med"><?php _e('Block ASCII character 0x00 (NULL byte)', 'ninjafirewall') ?></th>
 
 
 
 
1007
  <td>
1008
+ <?php nfw_toggle_switch( 'info', 'nfw_rules[block_null_byte]', $yes, $no, 'small', $block_null_byte ) ?>
1009
  </td>
1010
  </tr>
1011
  <tr>
1012
+ <th scope="row" class="row-med"><?php _e('Block ASCII control characters 1 to 8 and 14 to 31', 'ninjafirewall') ?></th>
 
1013
  <td>
1014
+ <?php nfw_toggle_switch( 'info', 'nfw_rules[block_ctrl_chars]', $yes, $no, 'small', $block_ctrl_chars ) ?>
 
 
 
1015
  </td>
1016
  </tr>
1017
  </table>
1021
  <br />
1022
  <br />
1023
 
1024
+ <input type="hidden" name="tab" id="tab-selected" value="<?php echo htmlspecialchars( $_REQUEST['tab'] ) ?>" />
1025
  <input class="button-primary" type="submit" name="Save" value="<?php _e('Save Firewall Policies', 'ninjafirewall') ?>" />
1026
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1027
+ <input class="button-secondary" type="submit" name="Default" value="<?php _e('Restore Default Values', 'ninjafirewall') ?>" onclick="return nfwjs_restore_default();" />
1028
  </form>
1029
  </div>
1030
 
1455
 
1456
  }
1457
 
 
 
 
 
 
 
1458
  // ---------------------------------------------------------------------
1459
  // Restore default firewall policies.
1460
 
1477
  if ( function_exists('header_register_callback') && function_exists('headers_list') && function_exists('header_remove') ) {
1478
  $nfw_options['response_headers'] = '000300000';
1479
  $nfw_options['referrer_policy_enabled'] = 0;
1480
+ $nfw_options['csp_backend_data'] = '';
1481
  $nfw_options['csp_frontend_data'] = '';
1482
  }
1483
  $nfw_options['cookies_scan'] = 1;
1488
  $nfw_options['referer_sanitise'] = 1;
1489
  $nfw_options['referer_post'] = 0;
1490
  $nfw_options['no_host_ip'] = 0;
1491
+ $nfw_options['allow_local_ip'] = 1; // 1 == no !
1492
  $nfw_options['php_errors'] = 1;
1493
  $nfw_options['php_self'] = 1;
1494
  $nfw_options['php_path_t'] = 1;
1522
  $nfw_rules[NFW_OBJECTS]['ena'] = 1;
1523
  $nfw_rules[NFW_OBJECTS]['cha'][1]['whe'] = 'GET|POST|SERVER:HTTP_USER_AGENT|SERVER:HTTP_REFERER';
1524
 
1525
+ // Create but disable the rule by default
1526
  if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) > 5 ) {
1527
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', $_SERVER['DOCUMENT_ROOT'] );
1528
  $nfw_rules[NFW_DOC_ROOT]['ena'] = 1;
1529
  } elseif ( strlen( getenv( 'DOCUMENT_ROOT' ) ) > 5 ) {
1530
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', getenv( 'DOCUMENT_ROOT' ) );
1531
  $nfw_rules[NFW_DOC_ROOT]['ena'] = 1;
 
 
1532
  }
1533
+ $nfw_rules[NFW_DOC_ROOT]['ena'] = 0;
1534
+
1535
 
1536
  $nfw_rules[NFW_NULL_BYTE]['ena'] = 1;
1537
  $nfw_rules[NFW_ASCII_CTRL]['ena'] = 0;
lib/fw_livelog.php CHANGED
@@ -62,7 +62,6 @@ function fw_livelog_show() {
62
  // Something went wrong :
63
  header('HTTP/1.0 503 Service Unavailable');
64
  }
65
- $nfw_['mysqli']->close();
66
  exit;
67
  }
68
 
62
  // Something went wrong :
63
  header('HTTP/1.0 503 Service Unavailable');
64
  }
 
65
  exit;
66
  }
67
 
lib/help.php CHANGED
@@ -35,17 +35,80 @@ function help_nfsubmain() {
35
  get_current_screen()->add_help_tab( array(
36
  'id' => 'main01',
37
  'title' => __('Overview', 'ninjafirewall'),
38
- 'content' => '<br />' . __('This is the Overview page; it shows information about the firewall status. We recommend you keep an eye on it because, in case of problems, all possible errors and warnings will be displayed here.', 'ninjafirewall') . '<br />&nbsp;'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  ) );
40
  get_current_screen()->set_help_sidebar(
41
  '<p><strong>' . __( 'For more information:', 'ninjafirewall') . '</strong></p>' .
42
-
43
- '<p><a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/">'. __('Securing WordPress with NinjaFirewall.', 'ninjafirewall') . '</a></p>' .
44
-
45
- '<p><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/">'. __('Installation, help and troubleshooting', 'ninjafirewall') . '</a></p>' .
46
-
47
- '<p><a href="http://wordpress.org/support/plugin/ninjafirewall/">' . __( 'Support Forum', 'ninjafirewall') . '</a></p>' .
48
- '<p>'. __('Updates via Twitter', 'ninjafirewall') . '<br /><a href="https://twitter.com/nintechnet"><img border="0" src="' . plugins_url( '/images/twitter_ntn.png', __DIR__ ) . '" width="116" height="28"></a></p>'
49
  );
50
 
51
  }
@@ -114,7 +177,7 @@ get_current_screen()->add_help_tab( array(
114
  'title' => __('Export/import configuration', 'ninjafirewall'),
115
  'content' => '<br />' .
116
  sprintf( __('This options lets you export you current configuration or import it from another NinjaFirewall (WP Edition) installation. The imported file must match the major version of your current version (%s) otherwise it will be rejected. Note that importing will override all firewall rules and options.', 'ninjafirewall'), (int) $major_current .'.x' ) .
117
- '<p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">' .
118
  __('"File Check" configuration will not be exported/imported.', 'ninjafirewall') . '</span></p>'
119
  ) );
120
 
@@ -161,7 +224,7 @@ function help_nfsubpolicies() {
161
  __('This action will be performed when the filtering process is over, right before NinjaFirewall forwards the request to your PHP script.', 'ninjafirewall') . '
162
  <br />
163
  <br />
164
- <img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">'. __('If you enabled <code>POST</code> requests sanitising, articles and messages posted by your visitors could be corrupted with excessive backslashes or substitution characters.', 'ninjafirewall'). '</span></li>'
165
  ) );
166
  get_current_screen()->add_help_tab( array(
167
  'id' => 'policies04',
@@ -191,7 +254,7 @@ function help_nfsubpolicies() {
191
  <li>' . __('Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:', 'ninjafirewall'). '<span class="description"> ' . __('enable this option when you want to secure logins and the admin area so that both passwords and cookies are never sent in the clear. Ensure that you can access your admin console from HTTPS before enabling this option, otherwise you will lock yourself out of your site!', 'ninjafirewall'). '</span></li>
192
  <li>' . __('Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:', 'ninjafirewall'). '<span class="description"> ' . __('disabling the plugin and theme editor provides an additional layer of security if a hacker gains access to a well-privileged user account.', 'ninjafirewall'). '</span></li>
193
  <li>' . __('Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option will block users being able to use the plugin and theme installation/update functionality from the WordPress admin area. Setting this constant also disables the Plugin and Theme editor.', 'ninjafirewall'). '</span></li>
194
- <li>' . __('Disable the fatal error handler <code>WP_Fatal_Error_Handler</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option will disable the WSOD protection introduced in WordPress 5.1.', 'ninjafirewall'). '</span></li>
195
 
196
  <br />
197
 
@@ -244,10 +307,10 @@ function help_nfsubpolicies() {
244
  <br />' .
245
  __('Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the administrator and the login page only.', 'ninjafirewall'). '</li>
246
  <li>' . __('Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari browsers):', 'ninjafirewall'). '<span class="description"> ' . __('this header allows browsers to identify and block XSS attacks by preventing malicious scripts from executing. It is enabled by default on all compatible browsers.', 'ninjafirewall'). '</span></li>'.
247
- '<p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">' . __("If a visitor disabled their browser's XSS filter, you cannot re-enable it with that option.", 'ninjafirewall'). '</span></p>'.
248
 
249
  '<li>' . __('Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:', 'ninjafirewall'). '<span class="description"> ' . __('adding this flag to cookies helps to mitigate the risk of cross-site scripting by preventing them from being accessed through client-side scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins or any other PHP script, add the <code>HttpOnly</code> flag if it is missing, and re-inject those cookies back into your server HTTP response headers right before they are sent to your visitors. Note that WordPress sets that flag on the logged in user cookies only.', 'ninjafirewall'). '</span></li>
250
- <p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">' . __('If your PHP scripts send cookies that need to be accessed from JavaScript, you should keep that option disabled.', 'ninjafirewall'). '</span></p>
251
  <li>' . __('Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure connections to the server:', 'ninjafirewall'). '<span class="description"> ' . __('this policy enforces secure HTTPS connections to the server. Web browsers will not allow the user to access the web application over insecure HTTP protocol. It helps to defend against cookie hijacking and Man-in-the-middle attacks. Most recent browsers support HSTS headers.', 'ninjafirewall'). '</span></li>
252
  <li>' . __('Set <code>Content-Security-Policy</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this policy helps to mitigate threats such as XSS, phishing and clickjacking attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, objects (Java, ActiveX, audio and video files), and other HTML5 features.', 'ninjafirewall'). ' ' . __('NinjaFirewall lets you configure the CSP policy separately for the frontend (blog, website) and the backend (WordPress admin dashboard).', 'ninjafirewall') . '</span></li>
253
  <li>' . __('Set <code>Referrer-Policy</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this HTTP header governs which referrer information, sent in the Referer header, should be included with requests made.', 'ninjafirewall') . '</span></li>
@@ -289,7 +352,7 @@ function help_nfsubfileguard() {
289
  __('If a hacker uploaded a shell script to your site (or injected a backdoor into an already existing file) and tried to directly access that file using his browser or a script, NinjaFirewall would hook the HTTP request and immediately detect that the file was recently modified/created. It would send you a detailed alert (script name, IP, request, date and time). Alerts will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall') .
290
  '<p>' . __('If you do not want to monitor a folder, you can exclude its full path or a part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</code> etc). NinjaFirewall will compare this value to the <code>$_SERVER["SCRIPT_FILENAME"]</code> server variable and, if it matches, will ignore it.', 'ninjafirewall') . '</p>' .
291
  __('Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</code>).', 'ninjafirewall') .'</li>' .
292
- '<p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">' . __('File Guard real-time detection is a totally unique feature, because NinjaFirewall is the only plugin for WordPress that can hook HTTP requests sent to any PHP script, even if that script is not part of the WordPress package (third-party software, shell script, backdoor etc).', 'ninjafirewall') . '</span></p>'
293
  ) );
294
  }
295
  /* ------------------------------------------------------------------ */ // i18n+
@@ -334,7 +397,7 @@ function help_nfsubfilecheck() {
334
  '<br />'.
335
  __('Reports will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall'). '</p>'.
336
 
337
- '<p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">'. sprintf( __('Scheduled scans rely on <a href="%s">WordPress pseudo cron</a> which works only if your site gets sufficient traffic.', 'ninjafirewall'), 'http://codex.wordpress.org/Category:WP-Cron_Functions') . '</span></p>'
338
  ) );
339
 
340
  }
@@ -407,7 +470,7 @@ function help_nfsublogin() {
407
  __('Sample loglines:', 'ninjafirewall') .
408
  '<br />
409
  <textarea class="small-text code" style="width:100%;height:80px;" wrap="off">Aug 31 01:40:35 www ninjafirewall[6191]: Possible brute-force attack from 172.16.0.1 on mysite.com (wp-login.php). Blocking access for 5mn.'. "\n" . 'Aug 31 01:45:28 www ninjafirewall[6192]: Possible brute-force attack from fe80::6e88:14ff:fe3e:86f0 on blog.domain.com (XML-RPC API). Blocking access for 25mn.</textarea>
410
- <p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">' . sprintf( __('Be careful if you are behind a load balancer, reverse-proxy or CDN because the Login Protection feature will always record the <code>REMOTE_ADDR</code> IP. If you have an application parsing the AUTH log in order to ban IPs (e.g. Fail2ban), you <strong>must</strong> setup your HTTP server to forward the correct IP (or use the <code><a href="%s">.htninja</a></code> file), otherwise you will likely block legitimate users.', 'ninjafirewall'), 'https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja') . '</span></p>
411
  </div>'
412
  ) );
413
 
@@ -447,7 +510,7 @@ function help_nfsublog() {
447
  '<p>'. __('Centralized Logging lets you remotely access the firewall log of all your NinjaFirewall protected websites from one single installation. You do not need any longer to log in to individual servers to analyse your log data.', 'ninjafirewall') . ' ' . sprintf( __('<a href="%s">Consult our blog</a> for more info about it.', 'ninjafirewall'), 'https://blog.nintechnet.com/centralized-logging-with-ninjafirewall/' ) . '</p>' .
448
  '<li>' . __('Enter your public key (optional): This is the public key that was created from your main server.', 'ninjafirewall') . '</li>' .
449
 
450
- '<p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">'.
451
  __('Centralized Logging will keep working even if NinjaFirewall is disabled. Delete your public key below if you want to disable it.', 'ninjafirewall') .
452
  '</span></p>'
453
  ) );
@@ -479,7 +542,7 @@ function help_nfsublivelog() {
479
 
480
  <p>' . __('Live Log does not make use of any WordPress core file (e.g., <code>admin-ajax.php</code>). It communicates directly with the firewall without loading WordPress bootstrap. Consequently, it is fast, lightweight and it should not affect your server load, even if you set its refresh rate to the lowest value.', 'ninjafirewall') . '</p>
481
 
482
- <p><img src="' . plugins_url( '/images/glyphicons-warning.png', __DIR__ ) . '">&nbsp;<span class="description">' . __('If you are using the optional <code>.htninja</code> configuration file to whitelist your IP, the Live Log feature will not work.', 'ninjafirewall') . '
483
  </span></p>'
484
  ) );
485
  get_current_screen()->add_help_tab( array(
@@ -521,7 +584,7 @@ function help_nfsubedit() {
521
  'id' => 'editor02',
522
  'title' => __('Credits', 'ninjafirewall'),
523
  'content' =>
524
- '<p>' . __('NinjaFirewall security rules protect against many vulnerabilities. Some of them were reported by the following companies, individuals or mailing lists:', 'ninjafirewall') . '<p>
525
  <table cellpadding="2" cellspacing="3">
526
  <tr>
527
  <th scope="row" style="text-align:left">g0blin Research</th><td>https://g0blin.co.uk/</td>
@@ -559,8 +622,7 @@ function help_nfsubedit() {
559
  <tr>
560
  <th scope="row" style="text-align:left">WordPress Hütte</th><td>http://wphutte.com/</td>
561
  </tr>
562
- </table>
563
- </span>'
564
  ) );
565
 
566
  }
35
  get_current_screen()->add_help_tab( array(
36
  'id' => 'main01',
37
  'title' => __('Overview', 'ninjafirewall'),
38
+ 'content' =>
39
+ '<div style="height:400px;">' .
40
+ '<br />' .
41
+ '<strong>'. __('Quick Start, FAQ, Support and Troubleshooting Guide.', 'ninjafirewall') .'</strong>'.
42
+ '<p>'. __('Below are some helpful info and links you may consider reading before using NinjaFirewall:', 'ninjafirewall') .'</p>'.
43
+
44
+ '1. '. __('Must Read', 'ninjafirewall') .
45
+ '<ul>'.
46
+ '<li><a href="https://blog.nintechnet.com/securing-wordpress-with-a-web-application-firewall-ninjafirewall/" target="_blank">'. __('Securing WordPress with NinjaFirewall: A step by step tutorial.', 'ninjafirewall') .'</a></li>'.
47
+ '<li><a href="https://blog.nintechnet.com/introduction-to-ninjafirewall-filtering-engine/" target="_blank">'. __('An introduction to NinjaFirewall filtering engine.', 'ninjafirewall') .'</a></li>'.
48
+ '<li><a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/" target="_blank">'. __('NinjaFirewall Full WAF vs WordPress WAF mode.', 'ninjafirewall') .'</a></li>'.
49
+ '<li><a href="https://blog.nintechnet.com/testing-ninjafirewall-without-blocking-your-visitors/" target="_blank">'. __('Testing NinjaFirewall without blocking your visitors.', 'ninjafirewall') .'</a></li>'.
50
+ '<li><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja" target="_blank">'. __('Add your own code to the firewall: the ".htninja" file.', 'ninjafirewall') .'</a></li>'.
51
+ '<li><a href="https://blog.nintechnet.com/restricting-access-to-ninjafirewall-wp-edition-settings/" target="_blank">'. __('Restricting access to NinjaFirewall settings.', 'ninjafirewall') .'</a></li>'.
52
+ '<li><a href="https://blog.nintechnet.com/upgrading-to-php-7-with-ninjafirewall-installed/" target="_blank">'. __('Upgrading to PHP 7 with NinjaFirewall installed.', 'ninjafirewall') .'</a></li>'.
53
+ '<li><a href="https://blog.nintechnet.com/ninjafirewall-wpwp-introduces-automatic-updates-for-security-rules" target="_blank">'. __('Keep your blog protected against the latest vulnerabilities.', 'ninjafirewall') .'</a></li>'.
54
+ '<li><a href="https://webscanner.nintechnet.com/" target="_blank">'. __('Test your website security with our online scanner.', 'ninjafirewall') .'</a></li>'.
55
+ '<li><a href="https://nintechnet.com/referral/" target="_blank">'. __('NinjaFirewall Referral Program.', 'ninjafirewall') .'</a></li>'.
56
+ '<li><a href="https://twitter.com/nintechnet" target="_blank">'. __('Stay informed about the latest vulnerabilities in WordPress plugins and themes.', 'ninjafirewall') .'</a></li>'.
57
+ '<li><a href="https://blog.nintechnet.com/" target="_blank">'. __('Our blog.', 'ninjafirewall') .'</a></li>'.
58
+ '</ul>'.
59
+
60
+ '2. '. __('Troubleshooting', 'ninjafirewall') .
61
+ '<ul>'.
62
+ '<li>'. __('Locked out of your site / Fatal error / WordPress crash?', 'ninjafirewall') .'</li>'.
63
+ '<li>'. __('Failed installation ("Error: The firewall is not loaded")?', 'ninjafirewall') .'</li>'.
64
+ '<li>'. __('Blank page after INSTALLING NinjaFirewall?', 'ninjafirewall') .'</li>'.
65
+ '<li>'. __('Blank page after UNINSTALLING NinjaFirewall?', 'ninjafirewall') .'</li>'.
66
+ '<li>'. __('500 Internal Server Error?', 'ninjafirewall') .'</li>'.
67
+ '<li>'. __('"Cannot connect to WordPress database" error message?', 'ninjafirewall') .'</li>'.
68
+ '<li>'. __('How to disable NinjaFirewall?', 'ninjafirewall') .'</li>'.
69
+ '<li>'. __('Lost password (brute-force protection)?', 'ninjafirewall') .'</li>'.
70
+ '<li>'. __('Blocked visitors?', 'ninjafirewall') .'</li>'.
71
+ '<li>'. __('Exporting NinjaFirewall\'s configuration', 'ninjafirewall') .'</li>'.
72
+ '<li><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?troubleshooting">'. __('Click here.', 'ninjafirewall' ) .'</a></li>'.
73
+ '</ul>'.
74
+
75
+ '3. '. __('NinjaFirewall troubleshooter script', 'ninjafirewall') .
76
+ '<ul>'.
77
+ '<li><a href="https://nintechnet.com/share/wp-check.txt" target="_blank">'. __('Click to download.', 'ninjafirewall') .'</a></li>'.
78
+ '<li>'. __('Rename this file to "wp-check.php".', 'ninjafirewall') .'</li>'.
79
+ '<li>'. __('Upload it into your WordPress root folder.', 'ninjafirewall') .'</li>'.
80
+ '<li>'. __('Goto http://YOUR WEBSITE/wp-check.php.', 'ninjafirewall') .'</li>'.
81
+ '<li>'. __('Delete it afterwards.', 'ninjafirewall') .'</li>'.
82
+ '</ul>'.
83
+
84
+ '4. '. __('FAQ', 'ninjafirewall') .
85
+ '<ul>'.
86
+ '<li>'. __('Why is NinjaFirewall different from other security plugins for WordPress?', 'ninjafirewall') .'</li>'.
87
+ '<li>'. __('Do I need root privileges to install NinjaFirewall?', 'ninjafirewall') .'</li>'.
88
+ '<li>'. __('Does it work with Nginx?', 'ninjafirewall') .'</li>'.
89
+ '<li>'. __('Do I need to alter my PHP scripts?', 'ninjafirewall') .'</li>'.
90
+ '<li>'. __('Will NinjaFirewall detect the correct IP of my visitors if I am behind a CDN service like Cloudflare or Incapsula?', 'ninjafirewall') .'</li>'.
91
+ '<li>'. __('I moved my wp-config.php file to another directory. Will it work with NinjaFirewall?', 'ninjafirewall') .'</li>'.
92
+ '<li>'. __('Will it slow down my site?', 'ninjafirewall') .'</li>'.
93
+ '<li>'. __('Is there a Microsoft Windows version?', 'ninjafirewall') .'</li>'.
94
+ '<li>'. __('Can I add/write my own security rules?', 'ninjafirewall') .'</li>'.
95
+ '<li>'. __('Can I migrate my site(s) with NinjaFirewall installed?', 'ninjafirewall') .'</li>'.
96
+ '<li><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?faq">'. __('Click here.', 'ninjafirewall' ) .'</a></li>'.
97
+ '</ul>'.
98
+
99
+ '5. '. __('Help and Support', 'ninjafirewall') .
100
+ '<ul>'.
101
+ '<li>'. __('WordPress forum: ', 'ninjafirewall') .'<a href="https://wordpress.org/support/plugin/ninjafirewall/">https://wordpress.org/support/plugin/ninjafirewall/</a></li>'.
102
+ '<li>'. __('Online support (Premium customers only): ', 'ninjafirewall') .'<a href="https://nintechnet.com/helpdesk/">https://nintechnet.com/helpdesk/</a></li>'.
103
+ '</ul>'.
104
+
105
+ '<br />&nbsp;'.
106
+
107
+ '</div>'
108
  ) );
109
  get_current_screen()->set_help_sidebar(
110
  '<p><strong>' . __( 'For more information:', 'ninjafirewall') . '</strong></p>' .
111
+ '<p>'. __('NinTechNet\'s updates and security announcements:', 'ninjafirewall') . '<br /><a href="https://twitter.com/nintechnet"><img border="0" src="' . plugins_url( '/images/twitter_ntn.png', __DIR__ ) . '" width="116" height="28"></a></p>'
 
 
 
 
 
 
112
  );
113
 
114
  }
177
  'title' => __('Export/import configuration', 'ninjafirewall'),
178
  'content' => '<br />' .
179
  sprintf( __('This options lets you export you current configuration or import it from another NinjaFirewall (WP Edition) installation. The imported file must match the major version of your current version (%s) otherwise it will be rejected. Note that importing will override all firewall rules and options.', 'ninjafirewall'), (int) $major_current .'.x' ) .
180
+ '<p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">' .
181
  __('"File Check" configuration will not be exported/imported.', 'ninjafirewall') . '</span></p>'
182
  ) );
183
 
224
  __('This action will be performed when the filtering process is over, right before NinjaFirewall forwards the request to your PHP script.', 'ninjafirewall') . '
225
  <br />
226
  <br />
227
+ <span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">'. __('If you enabled <code>POST</code> requests sanitising, articles and messages posted by your visitors could be corrupted with excessive backslashes or substitution characters.', 'ninjafirewall'). '</span></li>'
228
  ) );
229
  get_current_screen()->add_help_tab( array(
230
  'id' => 'policies04',
254
  <li>' . __('Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:', 'ninjafirewall'). '<span class="description"> ' . __('enable this option when you want to secure logins and the admin area so that both passwords and cookies are never sent in the clear. Ensure that you can access your admin console from HTTPS before enabling this option, otherwise you will lock yourself out of your site!', 'ninjafirewall'). '</span></li>
255
  <li>' . __('Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:', 'ninjafirewall'). '<span class="description"> ' . __('disabling the plugin and theme editor provides an additional layer of security if a hacker gains access to a well-privileged user account.', 'ninjafirewall'). '</span></li>
256
  <li>' . __('Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option will block users being able to use the plugin and theme installation/update functionality from the WordPress admin area. Setting this constant also disables the Plugin and Theme editor.', 'ninjafirewall'). '</span></li>
257
+ <li>' . __('Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option will disable the WSOD protection introduced in WordPress 5.1.', 'ninjafirewall'). '</span></li>
258
 
259
  <br />
260
 
307
  <br />' .
308
  __('Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the administrator and the login page only.', 'ninjafirewall'). '</li>
309
  <li>' . __('Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari browsers):', 'ninjafirewall'). '<span class="description"> ' . __('this header allows browsers to identify and block XSS attacks by preventing malicious scripts from executing. It is enabled by default on all compatible browsers.', 'ninjafirewall'). '</span></li>'.
310
+ '<p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">' . __("If a visitor disabled their browser's XSS filter, you cannot re-enable it with that option.", 'ninjafirewall'). '</span></p>'.
311
 
312
  '<li>' . __('Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:', 'ninjafirewall'). '<span class="description"> ' . __('adding this flag to cookies helps to mitigate the risk of cross-site scripting by preventing them from being accessed through client-side scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins or any other PHP script, add the <code>HttpOnly</code> flag if it is missing, and re-inject those cookies back into your server HTTP response headers right before they are sent to your visitors. Note that WordPress sets that flag on the logged in user cookies only.', 'ninjafirewall'). '</span></li>
313
+ <p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">' . __('If your PHP scripts send cookies that need to be accessed from JavaScript, you should keep that option disabled.', 'ninjafirewall'). '</span></p>
314
  <li>' . __('Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure connections to the server:', 'ninjafirewall'). '<span class="description"> ' . __('this policy enforces secure HTTPS connections to the server. Web browsers will not allow the user to access the web application over insecure HTTP protocol. It helps to defend against cookie hijacking and Man-in-the-middle attacks. Most recent browsers support HSTS headers.', 'ninjafirewall'). '</span></li>
315
  <li>' . __('Set <code>Content-Security-Policy</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this policy helps to mitigate threats such as XSS, phishing and clickjacking attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, objects (Java, ActiveX, audio and video files), and other HTML5 features.', 'ninjafirewall'). ' ' . __('NinjaFirewall lets you configure the CSP policy separately for the frontend (blog, website) and the backend (WordPress admin dashboard).', 'ninjafirewall') . '</span></li>
316
  <li>' . __('Set <code>Referrer-Policy</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this HTTP header governs which referrer information, sent in the Referer header, should be included with requests made.', 'ninjafirewall') . '</span></li>
352
  __('If a hacker uploaded a shell script to your site (or injected a backdoor into an already existing file) and tried to directly access that file using his browser or a script, NinjaFirewall would hook the HTTP request and immediately detect that the file was recently modified/created. It would send you a detailed alert (script name, IP, request, date and time). Alerts will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall') .
353
  '<p>' . __('If you do not want to monitor a folder, you can exclude its full path or a part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</code> etc). NinjaFirewall will compare this value to the <code>$_SERVER["SCRIPT_FILENAME"]</code> server variable and, if it matches, will ignore it.', 'ninjafirewall') . '</p>' .
354
  __('Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</code>).', 'ninjafirewall') .'</li>' .
355
+ '<p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">' . __('File Guard real-time detection is a totally unique feature, because NinjaFirewall is the only plugin for WordPress that can hook HTTP requests sent to any PHP script, even if that script is not part of the WordPress package (third-party software, shell script, backdoor etc).', 'ninjafirewall') . '</span></p>'
356
  ) );
357
  }
358
  /* ------------------------------------------------------------------ */ // i18n+
397
  '<br />'.
398
  __('Reports will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall'). '</p>'.
399
 
400
+ '<p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">'. sprintf( __('Scheduled scans rely on <a href="%s">WordPress pseudo cron</a> which works only if your site gets sufficient traffic.', 'ninjafirewall'), 'http://codex.wordpress.org/Category:WP-Cron_Functions') . '</span></p>'
401
  ) );
402
 
403
  }
470
  __('Sample loglines:', 'ninjafirewall') .
471
  '<br />
472
  <textarea class="small-text code" style="width:100%;height:80px;" wrap="off">Aug 31 01:40:35 www ninjafirewall[6191]: Possible brute-force attack from 172.16.0.1 on mysite.com (wp-login.php). Blocking access for 5mn.'. "\n" . 'Aug 31 01:45:28 www ninjafirewall[6192]: Possible brute-force attack from fe80::6e88:14ff:fe3e:86f0 on blog.domain.com (XML-RPC API). Blocking access for 25mn.</textarea>
473
+ <p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">' . sprintf( __('Be careful if you are behind a load balancer, reverse-proxy or CDN because the Login Protection feature will always record the <code>REMOTE_ADDR</code> IP. If you have an application parsing the AUTH log in order to ban IPs (e.g. Fail2ban), you <strong>must</strong> setup your HTTP server to forward the correct IP (or use the <code><a href="%s">.htninja</a></code> file), otherwise you will likely block legitimate users.', 'ninjafirewall'), 'https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja') . '</span></p>
474
  </div>'
475
  ) );
476
 
510
  '<p>'. __('Centralized Logging lets you remotely access the firewall log of all your NinjaFirewall protected websites from one single installation. You do not need any longer to log in to individual servers to analyse your log data.', 'ninjafirewall') . ' ' . sprintf( __('<a href="%s">Consult our blog</a> for more info about it.', 'ninjafirewall'), 'https://blog.nintechnet.com/centralized-logging-with-ninjafirewall/' ) . '</p>' .
511
  '<li>' . __('Enter your public key (optional): This is the public key that was created from your main server.', 'ninjafirewall') . '</li>' .
512
 
513
+ '<p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">'.
514
  __('Centralized Logging will keep working even if NinjaFirewall is disabled. Delete your public key below if you want to disable it.', 'ninjafirewall') .
515
  '</span></p>'
516
  ) );
542
 
543
  <p>' . __('Live Log does not make use of any WordPress core file (e.g., <code>admin-ajax.php</code>). It communicates directly with the firewall without loading WordPress bootstrap. Consequently, it is fast, lightweight and it should not affect your server load, even if you set its refresh rate to the lowest value.', 'ninjafirewall') . '</p>
544
 
545
+ <p><span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<span class="description">' . __('If you are using the optional <code>.htninja</code> configuration file to whitelist your IP, the Live Log feature will not work.', 'ninjafirewall') . '
546
  </span></p>'
547
  ) );
548
  get_current_screen()->add_help_tab( array(
584
  'id' => 'editor02',
585
  'title' => __('Credits', 'ninjafirewall'),
586
  'content' =>
587
+ '<p>' . __('NinjaFirewall security rules protect against many vulnerabilities. Some of them were reported by the following companies, individuals or mailing lists:', 'ninjafirewall') . '</p>
588
  <table cellpadding="2" cellspacing="3">
589
  <tr>
590
  <th scope="row" style="text-align:left">g0blin Research</th><td>https://g0blin.co.uk/</td>
622
  <tr>
623
  <th scope="row" style="text-align:left">WordPress Hütte</th><td>http://wphutte.com/</td>
624
  </tr>
625
+ </table>'
 
626
  ) );
627
 
628
  }
lib/init_update.php CHANGED
@@ -123,6 +123,14 @@ if (! empty($nfw_options['engine_version']) && version_compare($nfw_options['eng
123
  }
124
  @rmdir( $update_dir );
125
  }
 
 
 
 
 
 
 
 
126
  // -------------------------------------------------------------
127
  // All versions:
128
  // Old upgrades from 1.3.x to 1.4 didn't initialize the security
@@ -146,6 +154,8 @@ if (! empty($nfw_options['engine_version']) && version_compare($nfw_options['eng
146
  // Update options:
147
  nfw_update_option( 'nfw_options', $nfw_options);
148
  }
 
 
149
  }
150
 
151
  // ---------------------------------------------------------------------
123
  }
124
  @rmdir( $update_dir );
125
  }
126
+ // v4.0 update ---------------------------------------------------
127
+ if ( version_compare( $nfw_options['engine_version'], '3.9.2', '<' ) ) {
128
+ if ( empty( $nfw_options['allow_local_ip'] ) ) {
129
+ $nfw_options['allow_local_ip'] = 1;
130
+ } else {
131
+ $nfw_options['allow_local_ip'] = 0;
132
+ }
133
+ }
134
  // -------------------------------------------------------------
135
  // All versions:
136
  // Old upgrades from 1.3.x to 1.4 didn't initialize the security
154
  // Update options:
155
  nfw_update_option( 'nfw_options', $nfw_options);
156
  }
157
+
158
+ // ------------------------------------------------------------------
159
  }
160
 
161
  // ---------------------------------------------------------------------
lib/install.php ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ +---------------------------------------------------------------------+
4
+ | NinjaFirewall (WP Edition) |
5
+ | |
6
+ | (c) NinTechNet - https://nintechnet.com/ |
7
+ +---------------------------------------------------------------------+
8
+ | This program is free software: you can redistribute it and/or |
9
+ | modify it under the terms of the GNU General Public License as |
10
+ | published by the Free Software Foundation, either version 3 of |
11
+ | the License, or (at your option) any later version. |
12
+ | |
13
+ | This program is distributed in the hope that it will be useful, |
14
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
+ | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa
18
+ */
19
+
20
+ if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
+
22
+ // ---------------------------------------------------------------------
23
+ // Installation constants.
24
+
25
+ function nfw_get_constants() {
26
+
27
+ if ( defined('NFW_HTACCESS_BEGIN') ) { return; }
28
+
29
+ define( 'NFW_HTACCESS_BEGIN', '# BEGIN NinjaFirewall' );
30
+ define( 'NFW_HTACCESS_DATA', '<IfModule mod_php'. PHP_MAJOR_VERSION .'.c>' ."\n" .
31
+ ' php_value auto_prepend_file '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php' ."\n" .
32
+ '</IfModule>');
33
+ define( 'NFW_LITESPEED_DATA', 'php_value auto_prepend_file '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php');
34
+ define( 'NFW_SUPHP_DATA', '<IfModule mod_suphp.c>' ."\n" .
35
+ ' suPHP_ConfigPath '. rtrim( ABSPATH, '/') ."\n" .
36
+ '</IfModule>');
37
+ define( 'NFW_HTACCESS_END', '# END NinjaFirewall' );
38
+ define( 'NFW_PHPINI_BEGIN', '; BEGIN NinjaFirewall' );
39
+ define( 'NFW_PHPINI_DATA', 'auto_prepend_file = '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php' );
40
+ define( 'NFW_PHPINI_END', '; END NinjaFirewall' );
41
+
42
+ // WordPress WAF in NinjaFirewall < 4.0
43
+ define( 'NFW_WP_CONFIG_BEGIN', '// BEGIN NinjaFirewall' );
44
+ define( 'NFW_WP_CONFIG_END', '// END NinjaFirewall' );
45
+ }
46
+
47
+ // ---------------------------------------------------------------------
48
+ // Add firewall's directive to the .htaccess.
49
+
50
+ function nfw_fullwaf_htaccess( $httpserver ) {
51
+
52
+ nfw_get_constants();
53
+
54
+ $htaccess_content = '';
55
+
56
+ // Back-up existing .htaccess
57
+ if ( file_exists( ABSPATH .'.htaccess' ) ) {
58
+ if (! is_writable( ABSPATH .'.htaccess' ) ) {
59
+ return sprintf(
60
+ __('Error: Your .htaccess file is not writable, please change its permissions: %s', 'ninjafirewall' ),
61
+ htmlspecialchars( ABSPATH .'.htaccess' )
62
+ );
63
+ }
64
+ $backup_file = time();
65
+ @copy( ABSPATH .'.htaccess', ABSPATH .".htaccess.ninja{$backup_file}" );
66
+
67
+ // Remove potential NF directives
68
+ nfw_remove_directives();
69
+
70
+ $htaccess_content = file_get_contents( ABSPATH .'.htaccess' );
71
+ }
72
+
73
+ // Write new content depending on HTTP server type
74
+
75
+ if ( $httpserver == 1 ) { // Apache mod_php
76
+ $data = NFW_HTACCESS_BEGIN ."\n". NFW_HTACCESS_DATA ."\n". NFW_HTACCESS_END ."\n\n". $htaccess_content;
77
+
78
+ } elseif ( $httpserver == 5 ) { // LiteSpeed
79
+ $data = NFW_HTACCESS_BEGIN ."\n". NFW_LITESPEED_DATA ."\n". NFW_HTACCESS_END ."\n\n". $htaccess_content;
80
+
81
+ } elseif ( $httpserver == 3 ) { // Apache + suPHP
82
+ $data = NFW_HTACCESS_BEGIN ."\n". NFW_SUPHP_DATA ."\n". NFW_HTACCESS_END ."\n\n". $htaccess_content;
83
+
84
+ } else {
85
+ return sprintf( __('Error: wrong parameter value (%s).', 'ninjafirewall'), 'HTTP server' );
86
+ }
87
+
88
+ // Write content
89
+ $res = @file_put_contents( ABSPATH .'.htaccess', $data, LOCK_EX );
90
+ if ( $res === false ) {
91
+ return sprintf(
92
+ __('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
93
+ htmlspecialchars( ABSPATH .'.htaccess' )
94
+ );
95
+ }
96
+
97
+ // Sandbox
98
+ $res = nfw_waf_sandbox();
99
+ if ( $res !== true ) {
100
+ // Undo
101
+ @file_put_contents( ABSPATH .'.htaccess', $htaccess_content, LOCK_EX );
102
+ return $res;
103
+ }
104
+
105
+ return true;
106
+ }
107
+
108
+ // ---------------------------------------------------------------------
109
+ // Sandbox.
110
+
111
+ function nfw_waf_sandbox() {
112
+
113
+ @session_write_close();
114
+
115
+ $sandbox_error = __('NinjaFirewall detected that the requested changes seemed to crash your blog. %s', 'ninjafirewall') ."\n".
116
+ __('Changes have been undone. You may need to modify your selection and try again.', 'ninjafirewall' );
117
+ $headers['Cache-Control'] = 'no-cache';
118
+ $url = home_url( '/' ) .'?'. time();
119
+ $res = wp_remote_get( $url );
120
+ if (! is_wp_error( $res ) ) {
121
+ // Look for HTTP error
122
+ if ( $res['response']['code'] >= 400 ) {
123
+ $error_msg = sprintf(
124
+ $sandbox_error,
125
+ sprintf(
126
+ __('The website front-end returned: HTTP %s %s.', 'ninjafirewall'),
127
+ (int) $res['response']['code'],
128
+ esc_js( $res['response']['message'] )
129
+ )
130
+ );
131
+ return $error_msg;
132
+ }
133
+
134
+ } else {
135
+ $error_msg = sprintf(
136
+ $sandbox_error,
137
+ sprintf(
138
+ __('The website front-end returned a fatal error: %s.', 'ninjafirewall'),
139
+ esc_js( $res->get_error_message() )
140
+ )
141
+ );
142
+ return $error_msg;
143
+ }
144
+
145
+ return true;
146
+ }
147
+
148
+ // ---------------------------------------------------------------------
149
+
150
+ function nfw_fullwaf_ini( $httpserver, $initype ) {
151
+
152
+ nfw_get_constants();
153
+
154
+ $ini_content = '';
155
+
156
+ // [1] .user.ini
157
+ // [2] php.ini
158
+ if ( $initype == 2 ) {
159
+ $initype = 'php.ini';
160
+ } else {
161
+ $initype = '.user.ini';
162
+ }
163
+
164
+ // Back-up existing INI file
165
+ if ( file_exists( ABSPATH . $initype ) ) {
166
+ if (! is_writable( ABSPATH . $initype ) ) {
167
+ return sprintf(
168
+ __('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
169
+ htmlspecialchars( ABSPATH . $initype )
170
+ );
171
+ }
172
+ $backup_file = time();
173
+ @copy( ABSPATH .$initype, ABSPATH ."{$initype}.ninja{$backup_file}" );
174
+
175
+ // Remove potential NF directives
176
+ nfw_remove_directives();
177
+
178
+ $ini_content = file_get_contents( ABSPATH . $initype );
179
+ }
180
+
181
+ // Write new content
182
+ $res = @file_put_contents(
183
+ ABSPATH . $initype,
184
+ NFW_PHPINI_BEGIN . "\n" . NFW_PHPINI_DATA . "\n" . NFW_PHPINI_END . "\n\n" . $ini_content,
185
+ LOCK_EX
186
+ );
187
+ if ( $res === false ) {
188
+ return sprintf(
189
+ __('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
190
+ htmlspecialchars( ABSPATH . $initype )
191
+ );
192
+ }
193
+ return true;
194
+ }
195
+
196
+ // ---------------------------------------------------------------------
197
+ // Remove all directives from .htaccess, INI files and wp-config.php.
198
+
199
+ function nfw_remove_directives( $ini = true, $htaccess = true, $wp_config = true ) {
200
+
201
+ if ( defined('NFW_REMOVED_DIRECTIVES') ) { return; }
202
+
203
+ define('NFW_REMOVED_DIRECTIVES', true);
204
+
205
+ $res = array( 'ini' => true, 'htaccess' => true, 'wp-config' => true );
206
+
207
+ // wp-config.php
208
+ if ( $wp_config == true ) {
209
+ $wp_config = ABSPATH .'wp-config.php';
210
+ if ( file_exists( $wp_config ) ) {
211
+ if ( is_writable( $wp_config ) ) {
212
+ $wp_config_content = file_get_contents( $wp_config );
213
+ if ( preg_match( '`'. NFW_WP_CONFIG_BEGIN .'.+?'. NFW_WP_CONFIG_END .'`s', $wp_config_content ) ) {
214
+ $wp_config_content = preg_replace( '`\s?'. NFW_WP_CONFIG_BEGIN .'.+?'. NFW_WP_CONFIG_END .'[^\r\n]*\s?`s' , "\n", $wp_config_content);
215
+ file_put_contents( $wp_config, $wp_config_content, LOCK_EX );
216
+ }
217
+ } else {
218
+ $res['wp-config'] = __('File is not writable', 'ninjafirewall');
219
+ }
220
+ }
221
+ }
222
+
223
+ // .htaccess
224
+ if ( $htaccess == true ) {
225
+ $htaccess = ABSPATH .'.htaccess';
226
+ $mods = 0;
227
+ if ( file_exists( $htaccess ) ) {
228
+ if ( is_writable( $htaccess ) ) {
229
+ $htaccess_content = file_get_contents( $htaccess );
230
+ if ( preg_match( '`'. NFW_HTACCESS_BEGIN .'.+?'. NFW_HTACCESS_END .'`s', $htaccess_content ) ) {
231
+ $htaccess_content = preg_replace( '`\s?'. NFW_HTACCESS_BEGIN .'.+?'. NFW_HTACCESS_END .'[^\r\n]*\s?`s' , "\n", $htaccess_content);
232
+ $mods = 1;
233
+ }
234
+ // Comment out existing directive(s) left:
235
+ if ( preg_match( '`[^#]php_value\s*auto_prepend_file`', $htaccess_content ) ) {
236
+ $htaccess_content = preg_replace( '`php_value\s*auto_prepend_file`' , '#php_value auto_prepend_file', $htaccess_content);
237
+ $mods = 1;
238
+ }
239
+ if ( $mods == 1 ) {
240
+ @file_put_contents( $htaccess, $htaccess_content, LOCK_EX );
241
+ }
242
+ } else {
243
+ $res['htaccess'] = __('File is not writable', 'ninjafirewall');
244
+ }
245
+ }
246
+ }
247
+
248
+ // .ini
249
+ if ( $ini == true ) {
250
+ $ini = ABSPATH .'php.ini';
251
+ $mods = 0;
252
+ if ( file_exists( $ini ) ) {
253
+ if ( is_writable( $ini ) ) {
254
+ $ini_content = file_get_contents( $ini );
255
+ if ( preg_match( '`'. NFW_PHPINI_BEGIN .'.+?'. NFW_PHPINI_END .'`s', $ini_content ) ) {
256
+ $ini_content = preg_replace( '`\s?'. NFW_PHPINI_BEGIN .'.+?'. NFW_PHPINI_END .'[^\r\n]*\s?`s' , "\n", $ini_content);
257
+ $mods = 1;
258
+ }
259
+ // Comment out existing directive(s) left:
260
+ if ( preg_match( '`[^;]auto_prepend_file`', $ini_content ) ) {
261
+ $ini_content = preg_replace( '`auto_prepend_file`' , ';auto_prepend_file', $ini_content);
262
+ $mods = 1;
263
+ }
264
+ if ( $mods == 1 ) {
265
+ @file_put_contents( $ini, $ini_content, LOCK_EX );
266
+ }
267
+ } else {
268
+ $res['ini'] = __('File is not writable', 'ninjafirewall');
269
+ }
270
+ }
271
+ $ini = ABSPATH .'.user.ini';
272
+ $mods = 0;
273
+ if ( file_exists( $ini ) ) {
274
+ if ( is_writable( $ini ) ) {
275
+ $ini_content = file_get_contents( $ini );
276
+ if ( preg_match( '`'. NFW_PHPINI_BEGIN .'.+?'. NFW_PHPINI_END .'`s', $ini_content ) ) {
277
+ $ini_content = preg_replace( '`\s?'. NFW_PHPINI_BEGIN .'.+?'. NFW_PHPINI_END .'[^\r\n]*\s?`s' , "\n", $ini_content);
278
+ $mods = 1;
279
+ }
280
+ // Comment out existing directive(s) left:
281
+ if ( preg_match( '`[^;]auto_prepend_file`', $ini_content ) ) {
282
+ $ini_content = preg_replace( '`auto_prepend_file`' , ';auto_prepend_file', $ini_content);
283
+ $mods = 1;
284
+ }
285
+ if ( $mods == 1 ) {
286
+ @file_put_contents( $ini, $ini_content, LOCK_EX );
287
+ }
288
+ } else {
289
+ $res['ini'] = __('File is not writable', 'ninjafirewall');
290
+ }
291
+ }
292
+ }
293
+ }
294
+
295
+ // ---------------------------------------------------------------------
296
+ // EOF //
lib/install_default.php CHANGED
@@ -19,7 +19,7 @@
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
- /* ------------------------------------------------------------------ */
23
  // Load and save default config
24
 
25
  function nfw_load_default_conf() {
@@ -40,12 +40,6 @@ function nfw_load_default_conf() {
40
  wp_clear_scheduled_hook('nfdailyreport');
41
  }
42
 
43
- if (! empty( $_SESSION['temp_admin_email'] ) ) {
44
- $alert_email = $_SESSION['temp_admin_email'];
45
- } else {
46
- $alert_email = get_option('admin_email');
47
- }
48
-
49
  $nfw_options = array(
50
  // ---------------------------------------------------------------
51
  // The next 6 keys must always be present because they are used
@@ -73,7 +67,7 @@ function nfw_load_default_conf() {
73
  'referer_sanitise'=> 1,
74
  'referer_post' => 0,
75
  'no_host_ip' => 0,
76
- 'allow_local_ip' => 0,
77
  'php_errors' => 1,
78
  'php_self' => 1,
79
  'php_path_t' => 1,
@@ -115,7 +109,7 @@ function nfw_load_default_conf() {
115
  // v3.8.3 :
116
  'a_61' => 1,
117
 
118
- 'alert_email' => $alert_email,
119
  // v1.1.0 :
120
  'alert_sa_only' => 1,
121
  'nt_show_status' => 1,
@@ -167,22 +161,22 @@ function nfw_load_default_conf() {
167
  @nf_sub_updates();
168
 
169
  if (! $nfw_rules = @unserialize(NFW_RULES) ) {
170
- $err_msg = '<p><strong>'. __('Error: The installer cannot download the security rules from wordpress.org website.', 'ninjafirewall') . '</strong></p>';
171
  $err_msg.= '<ol><li>'. __('The server may be temporarily down or you may have network connectivity problems? Please try again in a few minutes.', 'ninjafirewall') . '</li>';
172
  $err_msg.= '<li>'. __('NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe your server does not support SSL? You can force NinjaFirewall to use a non-secure HTTP connection by adding the following directive to your <strong>wp-config.php</strong> file:', 'ninjafirewall') . '<p><code>define("NFW_DONT_USE_SSL", 1);</code></p></li></ol>';
173
- exit("<br /><div class='error notice is-dismissible'>{$err_msg}</div></div></div></div></div></body></html>");
174
  }
175
 
176
  $nfw_options['engine_version'] = NFW_ENGINE_VERSION;
177
  $nfw_options['rules_version'] = NFW_NEWRULES_VERSION; // downloaded rules
178
 
 
179
  if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) > 5 ) {
180
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', $_SERVER['DOCUMENT_ROOT'] );
181
  } elseif ( strlen( getenv( 'DOCUMENT_ROOT' ) ) > 5 ) {
182
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', getenv( 'DOCUMENT_ROOT' ) );
183
- } else {
184
- $nfw_rules[NFW_DOC_ROOT]['ena'] = 0;
185
  }
 
186
 
187
  // Enable PHP object injection rules (since v3.5.3):
188
  $nfw_rules[NFW_OBJECTS]['ena'] = 1;
@@ -198,8 +192,73 @@ function nfw_load_default_conf() {
198
  wp_schedule_event( time() + 3600, 'hourly', 'nfsecupdates');
199
  wp_schedule_event( time() + 1800, 'hourly', 'nfwgccron' );
200
 
201
- $_SESSION['default_conf'] = 1;
202
 
203
  }
204
- /* ------------------------------------------------------------------ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  // EOF //
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
+ // ---------------------------------------------------------------------
23
  // Load and save default config
24
 
25
  function nfw_load_default_conf() {
40
  wp_clear_scheduled_hook('nfdailyreport');
41
  }
42
 
 
 
 
 
 
 
43
  $nfw_options = array(
44
  // ---------------------------------------------------------------
45
  // The next 6 keys must always be present because they are used
67
  'referer_sanitise'=> 1,
68
  'referer_post' => 0,
69
  'no_host_ip' => 0,
70
+ 'allow_local_ip' => 1, // 1 == no !
71
  'php_errors' => 1,
72
  'php_self' => 1,
73
  'php_path_t' => 1,
109
  // v3.8.3 :
110
  'a_61' => 1,
111
 
112
+ 'alert_email' => get_option('admin_email'),
113
  // v1.1.0 :
114
  'alert_sa_only' => 1,
115
  'nt_show_status' => 1,
161
  @nf_sub_updates();
162
 
163
  if (! $nfw_rules = @unserialize(NFW_RULES) ) {
164
+ $err_msg = __('Error: The installer cannot download the security rules from wordpress.org website.', 'ninjafirewall');
165
  $err_msg.= '<ol><li>'. __('The server may be temporarily down or you may have network connectivity problems? Please try again in a few minutes.', 'ninjafirewall') . '</li>';
166
  $err_msg.= '<li>'. __('NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe your server does not support SSL? You can force NinjaFirewall to use a non-secure HTTP connection by adding the following directive to your <strong>wp-config.php</strong> file:', 'ninjafirewall') . '<p><code>define("NFW_DONT_USE_SSL", 1);</code></p></li></ol>';
167
+ exit( '<font style="font-size:14px;">'. $err_msg .'</font>' );
168
  }
169
 
170
  $nfw_options['engine_version'] = NFW_ENGINE_VERSION;
171
  $nfw_options['rules_version'] = NFW_NEWRULES_VERSION; // downloaded rules
172
 
173
+ // Create but disable by default "Block the DOCUMENT_ROOT server variable in HTTP request" rule
174
  if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) > 5 ) {
175
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', $_SERVER['DOCUMENT_ROOT'] );
176
  } elseif ( strlen( getenv( 'DOCUMENT_ROOT' ) ) > 5 ) {
177
  $nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', getenv( 'DOCUMENT_ROOT' ) );
 
 
178
  }
179
+ $nfw_rules[NFW_DOC_ROOT]['ena'] = 0;
180
 
181
  // Enable PHP object injection rules (since v3.5.3):
182
  $nfw_rules[NFW_OBJECTS]['ena'] = 1;
192
  wp_schedule_event( time() + 3600, 'hourly', 'nfsecupdates');
193
  wp_schedule_event( time() + 1800, 'hourly', 'nfwgccron' );
194
 
195
+ nfw_create_log_dir();
196
 
197
  }
198
+ // ---------------------------------------------------------------------
199
+ // Create NinjaFirewall's log & cache folders.
200
+
201
+ function nfw_create_log_dir() {
202
+
203
+ $deny_rules = "<Files \"*\">
204
+ <IfModule mod_version.c>
205
+ <IfVersion < 2.4>
206
+ Order Deny,Allow
207
+ Deny from All
208
+ </IfVersion>
209
+ <IfVersion >= 2.4>
210
+ Require all denied
211
+ </IfVersion>
212
+ </IfModule>
213
+ <IfModule !mod_version.c>
214
+ <IfModule !mod_authz_core.c>
215
+ Order Deny,Allow
216
+ Deny from All
217
+ </IfModule>
218
+ <IfModule mod_authz_core.c>
219
+ Require all denied
220
+ </IfModule>
221
+ </IfModule>
222
+ </Files>";
223
+
224
+ if (! is_writable(NFW_LOG_DIR) ) {
225
+ $err_msg = sprintf( __('NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; please make sure that the <code>%s</code> directory is writable', 'ninjafirewall'), htmlspecialchars( NFW_LOG_DIR ) );
226
+ exit( '<font style="font-size:14px;">'. $err_msg .'</font>' );
227
+ }
228
+
229
+ if (! file_exists( NFW_LOG_DIR . '/nfwlog' ) ) {
230
+ mkdir( NFW_LOG_DIR . '/nfwlog', 0755 );
231
+ }
232
+ if (! file_exists( NFW_LOG_DIR . '/nfwlog/cache' ) ) {
233
+ mkdir( NFW_LOG_DIR . '/nfwlog/cache', 0755 );
234
+ }
235
+
236
+ touch( NFW_LOG_DIR . '/nfwlog/index.html' );
237
+ touch( NFW_LOG_DIR . '/nfwlog/cache/index.html' );
238
+ @file_put_contents(NFW_LOG_DIR . '/nfwlog/.htaccess', $deny_rules, LOCK_EX);
239
+ @file_put_contents(NFW_LOG_DIR . '/nfwlog/cache/.htaccess', $deny_rules, LOCK_EX);
240
+ @file_put_contents(
241
+ NFW_LOG_DIR . '/nfwlog/readme.txt',
242
+ "This is NinjaFirewall's logs, loader and cache directory. DO NOT alter or remove it as long as NinjaFirewall is running!\n\nIf you just uninstalled NinjaFirewall, WAIT 5 MINUTES before deleting this folder, otherwise your site will likely crash.",
243
+ LOCK_EX
244
+ );
245
+
246
+ // Firewall loader:
247
+ $loader = "<?php
248
+ // ===============================================================//
249
+ // NinjaFirewall's loader. //
250
+ // DO NOT alter or remove it as long as NinjaFirewall is running! //
251
+ // ===============================================================//
252
+ if ( file_exists('". __DIR__ .'/firewall.php' . "') ) {
253
+ @include_once '". __DIR__ .'/firewall.php' . "';
254
+ }
255
+ // EOF
256
+ ";
257
+ file_put_contents( NFW_LOG_DIR .'/nfwlog/ninjafirewall.php', $loader, LOCK_EX );
258
+
259
+ return;
260
+
261
+ }
262
+
263
+ // ---------------------------------------------------------------------
264
  // EOF //
lib/install_fullwaf.php DELETED
@@ -1,648 +0,0 @@
1
- <?php
2
- /*
3
- +---------------------------------------------------------------------+
4
- | NinjaFirewall (WP Edition) |
5
- | |
6
- | (c) NinTechNet - https://nintechnet.com/ |
7
- +---------------------------------------------------------------------+
8
- | This program is free software: you can redistribute it and/or |
9
- | modify it under the terms of the GNU General Public License as |
10
- | published by the Free Software Foundation, either version 3 of |
11
- | the License, or (at your option) any later version. |
12
- | |
13
- | This program is distributed in the hope that it will be useful, |
14
- | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
- | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
- */
19
-
20
- if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
-
22
- /* ------------------------------------------------------------------ */
23
-
24
- function nfw_get_abspath( $err = 0 ) {
25
-
26
- if ( $_SERVER['DOCUMENT_ROOT'] . '/' == ABSPATH ) {
27
- $_POST['abspath'] = htmlspecialchars(ABSPATH);
28
- nfw_presave();
29
- return;
30
- }
31
- echo '
32
- <div class="wrap">
33
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Firewall Policies', 'ninjafirewall') . '</h1>';
34
- if ( $err ) {
35
- echo '<div class="error settings-error"><p>' . __('Error:', 'ninjafirewall') .' '. $err . '</p></div>';
36
- }
37
- echo '
38
- <form method="post">
39
- <p>' . sprintf(__('Your WordPress directory (%s) is different from your website document root (%s). Because it is possible to install WordPress into a subdirectory, but have the blog exist in the site root, NinjaFirewall needs to know the exact location of the site root.', 'ninjafirewall'), '<code>' . htmlspecialchars(ABSPATH) . '</code>', '<code>' . htmlspecialchars( $_SERVER['DOCUMENT_ROOT'] ) . '/</code>') . '</p>
40
- <p>' . sprintf( __('Please edit the path below only if you have manually modified your WordPress root directory as described in the <a href="%s">Giving WordPress Its Own Directory</a> article.', 'ninjafirewall'), 'http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory') .'</p>
41
- <p><strong style="color:red">'. __('Most users should not change this value.', 'ninjafirewall') .'</strong></p>
42
- <p>'. __('Path to WordPress site root directory:', 'ninjafirewall') .' <input class="regular-text code" type="text" name="abspath" value="' . htmlspecialchars(ABSPATH) . '"></p>
43
- <br />
44
- <br />
45
- <input class="button-primary" type="submit" name="Save" value="'. __('Next Step', 'ninjafirewall') .' &#187;" />
46
- <input type="hidden" name="nfw_act" value="presave" />' . wp_nonce_field('presave', 'nfwnonce', 0) . '
47
- </form>
48
- </div>';
49
-
50
- }
51
-
52
- /* ------------------------------------------------------------------ */
53
-
54
- function nfw_presave( $err = '' ) {
55
-
56
- if (empty ($_POST['abspath']) ) {
57
- nfw_get_abspath( __('please enter the full path to WordPress folder.', 'ninjafirewall') );
58
- return;
59
- }
60
- $abspath = htmlspecialchars( rtrim( $_POST['abspath'], '/' ) );
61
- if (! file_exists( $abspath . '/index.php' ) ) {
62
- nfw_get_abspath( sprintf( __('cannot find the %s directory! Please correct the full path to WordPress site root directory.', 'ninjafirewall'), '<code>' . $abspath . '/index.php</code>') );
63
- return;
64
- }
65
-
66
- $_SESSION['abspath'] = $abspath . '/';
67
-
68
- if ( empty($_SESSION['default_conf']) ) {
69
- nfw_default_conf();
70
-
71
- welcome_email();
72
- }
73
-
74
- $s1 = ''; $s2 = ''; $s3 = ''; $s4 = ''; $s5 = ''; $s7 = '';
75
- $recommended = ' ' . __('(recommended)', 'ninjafirewall');
76
- if ( defined('HHVM_VERSION') ) {
77
- $http_server = 7;
78
- $s7 = $recommended;
79
- $htaccess = 0;
80
- $php_ini = 0;
81
- } elseif ( preg_match('/apache/i', PHP_SAPI) ) {
82
- $http_server = 1;
83
- $s1 = $recommended;
84
- $htaccess = 1;
85
- $php_ini = 0;
86
- } elseif ( preg_match( '/litespeed/i', PHP_SAPI ) ) {
87
- $http_server = 4;
88
- $php_ini = 1;
89
- $htaccess = 1;
90
- $s4 = $recommended;
91
- } else {
92
- $php_ini = 1;
93
- $htaccess = 0;
94
- if ( preg_match('/apache/i', $_SERVER['SERVER_SOFTWARE']) ) {
95
- $http_server = 2;
96
- $s2 = $recommended;
97
- } elseif ( preg_match('/nginx/i', $_SERVER['SERVER_SOFTWARE']) ) {
98
- $http_server = 3;
99
- $s3 = $recommended;
100
- } else {
101
- $http_server = 5;
102
- $s5 = $recommended;
103
- }
104
- }
105
-
106
- ?>
107
- <script>
108
- function popup(url,width,height,scroll_bar) {height=height+20;width=width+20;var str = "height=" + height + ",innerHeight=" + height;str += ",width=" + width + ",innerWidth=" + width;if (window.screen){var ah = screen.availHeight - 30;var aw = screen.availWidth -10;var xc = (aw - width) / 2;var yc = (ah - height) / 2;str += ",left=" + xc + ",screenX=" + xc;str += ",top=" + yc + ",screenY=" + yc;if (scroll_bar) {str += ",scrollbars=no";}else {str += ",scrollbars=yes";}str += ",status=no,location=no,resizable=yes";}win = open(url, "nfpop", str);setTimeout("win.window.focus()",1300);}
109
- function check_fields() {
110
- var ischecked = 0;
111
- for (var i = 0; i < document.presave_form.php_ini_type.length; ++i) {
112
- if(document.presave_form.php_ini_type[i].checked) {
113
- ischecked = 1;
114
- break;
115
- }
116
- }
117
- if (! ischecked && document.presave_form.http_server.value != 1 && document.presave_form.http_server.value != 7) {
118
- alert('<?php echo esc_js( __('Please select the PHP initialization file supported by your server.', 'ninjafirewall') ) ?>');
119
- return false;
120
- }
121
- return true;
122
- }
123
- function ini_toogle(what) {
124
- if (what == 1) {
125
- document.getElementById('trini').style.display = 'none';
126
- document.getElementById('hhvm').style.display = 'none';
127
- } else if(what == 7) {
128
- document.getElementById('trini').style.display = 'none';
129
- document.getElementById('hhvm').style.display = '';
130
- } else {
131
- document.getElementById('trini').style.display = '';
132
- document.getElementById('hhvm').style.display = 'none';
133
- }
134
- }
135
- </script>
136
-
137
- <?php
138
-
139
- echo '
140
- <div class="wrap">
141
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Firewall Policies', 'ninjafirewall') . '</h1>';
142
-
143
- if (! is_writable( NFW_LOG_DIR . '/nfwlog' ) ) {
144
- echo '<div class="error settings-error"><p>'. sprintf( __('Error: NinjaFirewall log directory is not writable (%s). Please chmod it to 0777 and reload this page.', 'ninjafirewall'), '<code>' . htmlspecialchars(NFW_LOG_DIR) . '/nfwlog/</code>') .'</p></div></div>';
145
- return;
146
- }
147
-
148
- if ( $err ) {
149
- echo '<div class="error settings-error"><p>'. __('Error:', 'ninjafirewall') . ' ' . $err . '</p></div>';
150
- }
151
-
152
- ?>
153
- <h3><?php _e('System configuration', 'ninjafirewall') ?></h3>
154
- <?php
155
- // auto_prepend_file already being used?
156
- if ( $apf = ini_get('auto_prepend_file') ) {
157
- ?>
158
- <div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
159
- <p><?php printf( __('NinjaFirewall detected that the PHP <code>auto_prepend_file</code> directive seems to be used by another application: %s.', 'ninjafirewall'), '<code>'. htmlspecialchars($apf) .'</code>' ); echo ' '; _e('Because NinjaFirewall needs to use that directive, it will override it.', 'ninjafirewall') ?></p>
160
- </div>
161
- <?php
162
- }
163
- if ( is_multisite() ) {
164
- ?>
165
- <div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:green;">
166
- <p><?php _e('Multisite network detected:', 'ninjafirewall'); echo ' '; _e('NinjaFirewall will protect all sites from your network and its configuration interface will be accessible only to the Super Admin from the network main site.', 'ninjafirewall') ?></p>
167
- </div>
168
- <?php
169
- }
170
- ?>
171
- <form method="post" name="presave_form" onSubmit="return check_fields();">
172
- <table class="form-table">
173
-
174
- <tr>
175
- <th scope="row"><?php _e('Select your HTTP server and your PHP server API', 'ninjafirewall') ?> (<code>SAPI</code>)</th>
176
- <td width="20">&nbsp;</td>
177
- <td>
178
- <select class="input" name="http_server" onchange="ini_toogle(this.value);">
179
- <option value="1"<?php selected($http_server, 1) ?>>Apache + PHP<?php echo PHP_MAJOR_VERSION ?> module<?php echo $s1 ?></option>
180
- <option value="2"<?php selected($http_server, 2) ?>>Apache + CGI/FastCGI<?php echo $s2 ?></option>
181
- <option value="6"<?php selected($http_server, 6) ?>>Apache + suPHP</option>
182
- <option value="3"<?php selected($http_server, 3) ?>>Nginx + <?php _e('CGI or PHP-FPM', 'ninjafirewall') ?><?php echo $s3 ?></option>
183
- <option value="4"<?php selected($http_server, 4) ?>>Litespeed<?php echo $s4 ?></option>
184
- <option value="5"<?php selected($http_server, 5) ?>><?php _e('Other webserver + CGI/FastCGI', 'ninjafirewall') ?><?php echo $s5 ?></option>
185
- <option value="7"<?php selected($http_server, 7) ?>><?php _e('Other webserver + HHVM', 'ninjafirewall') ?><?php echo $s7 ?></option>
186
- </select>&nbsp;&nbsp;&nbsp;<span class="description"><a class="links" href="javascript:popup('<?php echo wp_nonce_url( '?page=NinjaFirewall&nfw_act=99', 'show_phpinfo', 'nfwnonce' ); ?>',700,500,0);"><?php _e('view PHPINFO', 'ninjafirewall') ?></a></span>
187
- <?php
188
- if ($http_server == 7) {
189
- echo '<p id="hhvm">';
190
- } else {
191
- echo '<p id="hhvm" style="display:none;">';
192
- }
193
- ?>
194
- <?php sprintf( __('Please <a href="%s">check our blog</a> if you want to install NinjaFirewall on HHVM.', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/installing-ninjafirewall-with-hhvm-hiphop-virtual-machine/">') ?></p>
195
- </td>
196
- </tr>
197
-
198
- <?php
199
- $f1 = ''; $f2 = ''; $f3 = ''; $php_ini_type = '';
200
- if ( file_exists( $_SESSION['abspath'] . 'php.ini') ) {
201
- if (empty($_SESSION['php_ini_type']) ) {
202
- $f1 = $recommended;
203
- }
204
- $php_ini_type = 1;
205
- } elseif ( file_exists( $_SESSION['abspath'] . '.user.ini') ) {
206
- if (empty($_SESSION['php_ini_type']) ) {
207
- $f2 = $recommended;
208
- }
209
- $php_ini_type = 2;
210
- } elseif ( file_exists( $_SESSION['abspath'] . 'php5.ini') ) {
211
- if (empty($_SESSION['php_ini_type']) ) {
212
- $f3 = $recommended;
213
- }
214
- $php_ini_type = 3;
215
- }
216
-
217
- if ($http_server == 1 || $http_server == 7) {
218
- echo '<tr id="trini" style="display:none;">';
219
- } else {
220
- echo '<tr id="trini">';
221
- }
222
- ?>
223
- <th scope="row"><?php _e('Select the PHP initialization file supported by your server', 'ninjafirewall') ?></th>
224
- <td width="20">&nbsp;</td>
225
- <td>
226
- <p><label><input type="radio" name="php_ini_type" value="1"<?php checked($php_ini_type, 1) ?>><code>php.ini</code></label><?php echo $f1 ?><br /><span class="description"><?php _e('Used by most shared hosting accounts.', 'ninjafirewall') ?></span></p>
227
-
228
- <p><label><input type="radio" name="php_ini_type" value="2"<?php checked($php_ini_type, 2) ?>><code>.user.ini</code></label><?php echo $f2 ?><br /><span class="description"><?php _e('The default PHP INI file since PHP 5.3.0', 'ninjafirewall') ?> (<a href="http://php.net/manual/en/configuration.file.per-user.php"><?php _e('more info', 'ninjafirewall') ?></a>).</span></p>
229
-
230
- <p><label><input type="radio" name="php_ini_type" value="3"<?php checked($php_ini_type, 3) ?>><code>php5.ini</code></label><?php echo $f3 ?><br /><span class="description"><?php _e('A few shared hosting accounts. Seldom used.', 'ninjafirewall') ?></span></p>
231
- </td>
232
- </tr>
233
-
234
- </table>
235
- <input type="submit" class="button-primary" name="next" value="<?php _e('Next Step', 'ninjafirewall') ?> &#187;">
236
- <input type="hidden" name="nfw_act" value="integration">
237
- <input type="hidden" name="abspath" value="<?php echo $_SESSION['abspath'] ?>">
238
- <?php wp_nonce_field('integration', 'nfwnonce', 0); ?>
239
- </form>
240
- </div>
241
- <?php
242
- }
243
-
244
- /* ------------------------------------------------------------------ */
245
-
246
- function nfw_integration( $err = '' ) {
247
-
248
- if ( empty($_SESSION['abspath']) ) {
249
- nfw_get_abspath( __('please enter the full path to WordPress folder.', 'ninjafirewall') );
250
- return;
251
- }
252
-
253
- if ( empty($_POST['http_server']) || ! preg_match('/^[1-7]$/', $_POST['http_server']) ) {
254
- nfw_presave( __('select your HTTP server and PHP SAPI.', 'ninjafirewall') );
255
- return;
256
- }
257
-
258
- if ( preg_match('/^[2-6]$/', $_POST['http_server']) ) {
259
- if ( empty($_POST['php_ini_type']) || ! preg_match('/^[1-3]$/', $_POST['php_ini_type']) ) {
260
- nfw_presave( __('select the PHP initialization file supported by your server.', 'ninjafirewall') );
261
- return;
262
- }
263
- } else {
264
- $_POST['php_ini_type'] = 0;
265
- }
266
-
267
- nfw_ini_data();
268
-
269
- $_SESSION['http_server'] = $_POST['http_server'];
270
- $_SESSION['php_ini_type'] = @$_POST['php_ini_type'];
271
-
272
- $_SESSION['ini_write'] = $_SESSION['htaccess_write'] = 1;
273
-
274
- if ($_SESSION['php_ini_type'] == 1) {
275
- $php_file = 'php.ini';
276
- } elseif ($_SESSION['php_ini_type'] == 2) {
277
- $php_file = '.user.ini';
278
- } elseif ($_SESSION['php_ini_type'] == 3) {
279
- $php_file = 'php5.ini';
280
- } else {
281
- $php_file = 0;
282
- }
283
- if ( is_writable($_SESSION['abspath']) ) {
284
- $_SESSION['abspath_writable'] = 1;
285
- } else {
286
- $_SESSION['abspath_writable'] = 0;
287
- }
288
- ?>
289
- <script>
290
- function diy_chg(what) {
291
- if (what == 'nfw') {
292
- jQuery('#lmd').slideDown();
293
- jQuery('#diy').slideUp();
294
- } else {
295
- jQuery('#lmd').slideUp();
296
- jQuery('#diy').slideDown();
297
- }
298
- }
299
- </script>
300
- <div class="wrap">
301
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
302
- <?php
303
- if ( $err ) {
304
- echo '<div class="error settings-error"><p>' . __('Error:', 'ninjafirewall') .' '. $err . '</p></div>';
305
- }
306
- ?>
307
- <h3><?php _e('Firewall Integration', 'ninjafirewall') ?> (Full WAF)</h3>
308
- <?php
309
-
310
- $fdata = $height = '';
311
-
312
- $createfile = '<p>'. __('The <code>%s</code> file must be created, and the following lines of code added to it:', 'ninjafirewall') . '</p>';
313
- $add2file = '<p>'. __('The following <font color="green">green lines</font> of code must be added to your <code>%s</code> file.', 'ninjafirewall') .' '. __('All other lines, if any, are the actual content of the file:', 'ninjafirewall') .'</p>';
314
- $not_writable = '<div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
315
- <p>' . __('The file is not writable, I cannot edit it for you.', 'ninjafirewall') . '</p>
316
- </div>';
317
-
318
-
319
- if ($_SESSION['http_server'] == 1) {
320
- if ( file_exists($_SESSION['abspath'] . '.htaccess') ) {
321
- if (! is_writable($_SESSION['abspath'] . '.htaccess') ) {
322
- $_SESSION['htaccess_write'] = $_SESSION['abspath_writable'] = 0;
323
- }
324
-
325
- printf( $add2file, $_SESSION['abspath'] . '.htaccess');
326
- $fdata = file_get_contents($_SESSION['abspath'] . '.htaccess');
327
- $fdata = preg_replace( '`\s?'. HTACCESS_BEGIN .'.+?'. HTACCESS_END .'[^\r\n]*\s?`s' , "\n", $fdata);
328
- $fdata = "\n<font color='#444'>" . htmlentities($fdata) . '</font>';
329
- $height = 'height:150px;';
330
- } else {
331
-
332
- printf( $createfile, $_SESSION['abspath'] . '.htaccess');
333
- }
334
- echo '<pre style="cursor:text;background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;' .
335
- $height . '">' . "\n" .
336
- '<font color="green">' . HTACCESS_BEGIN . "\n" . htmlentities(HTACCESS_DATA) . "\n" . HTACCESS_END . "\n" .
337
- '</font>' . $fdata . "\n" .
338
- '</pre><br />';
339
- if (empty($_SESSION['htaccess_write']) ) {
340
- echo $not_writable;
341
- }
342
-
343
-
344
- } elseif ($_SESSION['http_server'] == 4) {
345
- if ( file_exists($_SESSION['abspath'] . '.htaccess') ) {
346
-
347
- if (! is_writable($_SESSION['abspath'] . '.htaccess') ) {
348
- $_SESSION['htaccess_write'] = $_SESSION['abspath_writable'] = 0;
349
- }
350
- printf( $add2file, $_SESSION['abspath'] . '.htaccess');
351
- $fdata = file_get_contents($_SESSION['abspath'] . '.htaccess');
352
- $fdata = preg_replace( '`\s?'. HTACCESS_BEGIN .'.+?'. HTACCESS_END .'[^\r\n]*\s?`s' , "\n", $fdata);
353
- $fdata = "\n<font color='#444'>" . htmlentities($fdata) . '</font>';
354
- $height = 'height:150px;';
355
- } else {
356
-
357
- printf( $createfile, $_SESSION['abspath'] . '.htaccess');
358
- }
359
- echo '<pre style="cursor:text;background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;' .
360
- $height . '">' . "\n" .
361
- '<font color="green">' . HTACCESS_BEGIN . "\n" . LITESPEED_DATA . "\n" . HTACCESS_END . "\n" .
362
- '</font>' . $fdata . "\n" .
363
- '</pre><br />';
364
- if (empty($_SESSION['htaccess_write']) ) {
365
- echo $not_writable;
366
- }
367
- echo '<br /><br />';
368
-
369
- $fdata = $height = '';
370
- if ( file_exists($_SESSION['abspath'] . $php_file) ) {
371
- if (! is_writable($_SESSION['abspath'] . $php_file) ) {
372
- $_SESSION['ini_write'] = $_SESSION['abspath_writable'] = 0;
373
- }
374
-
375
- printf( $add2file, $_SESSION['abspath'] . $php_file);
376
- $fdata = file_get_contents($_SESSION['abspath'] . $php_file);
377
- $fdata = preg_replace( '`\s?'. PHPINI_BEGIN .'.+?'. PHPINI_END .'[^\r\n]*\s?`s' , "\n", $fdata);
378
- $fdata = "\n<font color='#444'>" . htmlentities($fdata) . '</font>';
379
- $height = 'height:150px;';
380
- } else {
381
-
382
- printf( $createfile, $_SESSION['abspath'] . $php_file);
383
- }
384
-
385
- echo '<pre style="cursor:text;background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;' .
386
- $height . '">' . "\n" .
387
- '<font color="green">' . PHPINI_BEGIN . "\n" . PHPINI_DATA . "\n" . PHPINI_END . "\n" .
388
- '</font>' . $fdata . "\n" .
389
- '</pre><br />';
390
- if (empty($_SESSION['ini_write']) ) {
391
- echo $not_writable;
392
- }
393
-
394
-
395
- } elseif ($_SESSION['http_server'] == 7) {
396
- ?>
397
- <li><?php _e('Add the following code to your <code>/etc/hhvm/php.ini</code> file, and restart HHVM afterwards:', 'ninjafirewall') ?></li>
398
- <pre style="background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;height:70px;"><font color="green"><?php echo PHPINI_DATA ?></font></pre>
399
- <br />
400
- <?php
401
-
402
-
403
- } else {
404
-
405
- if ($_SESSION['http_server'] == 6) {
406
- if ( file_exists($_SESSION['abspath'] . '.htaccess') ) {
407
-
408
- if (! is_writable($_SESSION['abspath'] . '.htaccess') ) {
409
- $_SESSION['htaccess_write'] = $_SESSION['abspath_writable'] = 0;
410
- }
411
- printf( $add2file, $_SESSION['abspath'] . '.htaccess');
412
- $fdata = file_get_contents($_SESSION['abspath'] . '.htaccess');
413
- $fdata = preg_replace( '`\s?'. HTACCESS_BEGIN .'.+?'. HTACCESS_END .'[^\r\n]*\s?`s' , "\n", $fdata);
414
- $fdata = "\n<font color='#444'>" . htmlentities($fdata) . '</font>';
415
- $height = 'height:150px;';
416
- } else {
417
-
418
- printf( $createfile, $_SESSION['abspath'] . '.htaccess');
419
- }
420
- echo '<pre style="cursor:text;background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;' .
421
- $height . '">' . "\n" .
422
- '<font color="green">' . HTACCESS_BEGIN . "\n" . htmlentities(SUPHP_DATA) . "\n" . HTACCESS_END . "\n" .
423
- '</font>' . $fdata . "\n" .
424
- '</pre><br />';
425
- if (empty($_SESSION['htaccess_write']) ) {
426
- echo $not_writable;
427
- }
428
- echo '<br /><br />';
429
- $fdata = $height = '';
430
- }
431
-
432
-
433
- if ( file_exists($_SESSION['abspath'] . $php_file) ) {
434
- if (! is_writable($_SESSION['abspath'] . $php_file) ) {
435
- $_SESSION['ini_write'] = $_SESSION['abspath_writable'] = 0;
436
- }
437
-
438
- printf( $add2file, $_SESSION['abspath'] . $php_file);
439
- $fdata = file_get_contents($_SESSION['abspath'] . $php_file);
440
- $fdata = preg_replace( '`\s?'. PHPINI_BEGIN .'.+?'. PHPINI_END .'[^\r\n]*\s?`s' , "\n", $fdata);
441
- $fdata = "\n<font color='#444'>" . htmlentities($fdata) . '</font>';
442
- $height = 'height:150px;';
443
- } else {
444
-
445
- printf( $createfile, $_SESSION['abspath'] . $php_file);
446
- }
447
-
448
- echo '<pre style="cursor:text;background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;' .
449
- $height . '">' . "\n" .
450
- '<font color="green">' . PHPINI_BEGIN . "\n" . PHPINI_DATA . "\n" . PHPINI_END . "\n" .
451
- '</font>' . $fdata . "\n" .
452
- '</pre><br />';
453
- if (empty($_SESSION['ini_write']) ) {
454
- echo $not_writable;
455
- }
456
- }
457
-
458
- echo '<form method="post" name="integration_form">';
459
-
460
-
461
- if ($_SESSION['http_server'] != 7) {
462
- $chg_str = __('Please make those changes, then click on button below.', 'ninjafirewall');
463
- if (! empty($_SESSION['abspath_writable']) ) {
464
-
465
-
466
- echo '<p><label><input type="radio" name="makechange" onClick="diy_chg(this.value)" value="nfw" checked="checked">'.
467
- __('Let NinjaFirewall make the above changes (recommended).', 'ninjafirewall') .'</label></p>
468
- <div id="lmd">
469
- <div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
470
- <p>' . __('Ensure that you have FTP access to your website so that, if there were a problem during the installation of the firewall, you could easily undo the changes.', 'ninjafirewall') .'</p>
471
- </div>
472
- </div>
473
-
474
- <p><label><input type="radio" name="makechange" onClick="diy_chg(this.value)" value="usr">'.
475
- __('I want to make the changes myself.', 'ninjafirewall') .'</label></p>
476
- <p id="diy" style="display:none;">' . $chg_str . '</p>';
477
- } else {
478
- echo '<p>'. $chg_str .'</p>';
479
- }
480
- } else {
481
-
482
- $_SESSION['php_ini_type'] = 1;
483
- echo '<input type="hidden" name="makechange" value="usr">
484
- <a href="https://blog.nintechnet.com/installing-ninjafirewall-with-hhvm-hiphop-virtual-machine/">' . __('Please check our blog if you want to install NinjaFirewall on HHVM.', 'ninjafirewall') . '</a>
485
- <br />';
486
- }
487
- ?>
488
- <br />
489
- <input type="submit" class="button-primary" name="next" value="<?php _e('Next Step', 'ninjafirewall') ?> &#187;">
490
- <input type="hidden" name="nfw_act" value="postsave">
491
- <input type="hidden" name="nfw_firstrun" value="1" />
492
- <?php wp_nonce_field('postsave', 'nfwnonce', 0); ?>
493
- </form>
494
- </div>
495
-
496
- <?php
497
- }
498
-
499
- /* ------------------------------------------------------------------ */
500
-
501
- function nfw_postsave() {
502
-
503
- if ( @$_POST['makechange'] != 'usr' && @$_POST['makechange'] != 'nfw' ) {
504
- $err = __('you must select how to make changes to your files.', 'ninjafirewall');
505
- NFW_INTEGRATION:
506
- $_POST['abspath'] = $_SESSION['abspath'];
507
- $_POST['http_server'] = $_SESSION['http_server'];
508
- $_POST['php_ini_type'] = $_SESSION['php_ini_type'];
509
- nfw_integration($err);
510
- return;
511
- }
512
- if ( empty($_SESSION['http_server']) || ! preg_match('/^[1-7]$/', $_SESSION['http_server']) ) {
513
- $_POST['abspath'] = $_SESSION['abspath'];
514
- nfw_presave( __('select your HTTP server and PHP SAPI.', 'ninjafirewall') );
515
- return;
516
- }
517
- if ($_SESSION['http_server'] != 1) {
518
- if ( empty($_SESSION['php_ini_type']) || ! preg_match('/^[1-3]$/', $_SESSION['php_ini_type']) ) {
519
- $_POST['abspath'] = $_SESSION['abspath'];
520
- nfw_presave( __('select the PHP initialization file supported by your server.', 'ninjafirewall') );
521
- return;
522
- }
523
- }
524
-
525
- if ( $_POST['makechange'] == 'usr' ) {
526
- goto DOITYOURSELF;
527
- }
528
-
529
- if ( empty($_SESSION['abspath_writable']) ) {
530
- $err = __('your WordPress root directory is not writable, I cannot make those changes for you.', 'ninjafirewall');
531
- goto NFW_INTEGRATION;
532
- exit;
533
- }
534
-
535
- nfw_ini_data();
536
-
537
- $bakup_file = time();
538
-
539
- $nfw_install['htaccess'] = $nfw_install['phpini'] = 0;
540
-
541
- if ($_SESSION['http_server'] == 1 || $_SESSION['http_server'] == 4 || $_SESSION['http_server'] == 6 ) {
542
- $fdata = '';
543
- if ( file_exists($_SESSION['abspath'] . '.htaccess') ) {
544
- if (! is_writable($_SESSION['abspath'] . '.htaccess') ) {
545
- $err = sprintf(__('cannot write to <code>%s</code>, it is read-only.', 'ninjafirewall'), $_SESSION['abspath'] . '.htaccess');
546
- goto NFW_INTEGRATION;
547
- exit;
548
- }
549
- $fdata = file_get_contents($_SESSION['abspath'] . '.htaccess');
550
-
551
- // Comment out any existing 'auto_prepend_file' directive:
552
- $fdata = preg_replace( '`^(\s*php_value\s*auto_prepend_file.+?)$`m' , '#\1', $fdata);
553
-
554
- $fdata = preg_replace( '`\s?'. HTACCESS_BEGIN .'.+?'. HTACCESS_END .'[^\r\n]*\s?`s' , "\n", $fdata);
555
- copy( $_SESSION['abspath'] . '.htaccess', $_SESSION['abspath'] . '.htaccess.ninja' . $bakup_file );
556
- }
557
- if ($_SESSION['http_server'] == 6) {
558
- @file_put_contents($_SESSION['abspath'] . '.htaccess',
559
- HTACCESS_BEGIN . "\n" . SUPHP_DATA . "\n" . HTACCESS_END . "\n\n" . $fdata, LOCK_EX );
560
- } else {
561
- if ($_SESSION['http_server'] == 4) {
562
- @file_put_contents($_SESSION['abspath'] . '.htaccess',
563
- HTACCESS_BEGIN . "\n" . LITESPEED_DATA . "\n" . HTACCESS_END . "\n\n" . $fdata, LOCK_EX );
564
-
565
- } else {
566
- @file_put_contents($_SESSION['abspath'] . '.htaccess',
567
- HTACCESS_BEGIN . "\n" . HTACCESS_DATA . "\n" . HTACCESS_END . "\n\n" . $fdata, LOCK_EX );
568
- }
569
- }
570
- @chmod( $_SESSION['abspath'] . '.htaccess', 0644 );
571
- $nfw_install['htaccess'] = $_SESSION['abspath'] . '.htaccess';
572
- }
573
-
574
- if ($_SESSION['http_server'] != 1) {
575
- $fdata = '';
576
- $ini_array = array('php.ini', '.user.ini','php5.ini');
577
-
578
- if ($_SESSION['php_ini_type'] == 1) {
579
- $php_file = 'php.ini';
580
- } elseif ($_SESSION['php_ini_type'] == 2) {
581
- $php_file = '.user.ini';
582
- } else {
583
- $php_file = 'php5.ini';
584
- }
585
-
586
- if ( file_exists($_SESSION['abspath'] . $php_file) ) {
587
- if (! is_writable($_SESSION['abspath'] . $php_file) ) {
588
- $err = sprintf(__('cannot write to <code>%s</code>, it is read-only.', 'ninjafirewall'), $_SESSION['abspath'] . $php_file);
589
- goto NFW_INTEGRATION;
590
- exit;
591
- }
592
- $fdata = file_get_contents($_SESSION['abspath'] . $php_file);
593
- $fdata = preg_replace( '`auto_prepend_file`' , ";auto_prepend_file", $fdata);
594
- $fdata = preg_replace( '`\s?'. PHPINI_BEGIN .'.+?'. PHPINI_END .'[^\r\n]*\s?`s' , "\n", $fdata);
595
- copy( $_SESSION['abspath'] . $php_file, $_SESSION['abspath'] . $php_file . '.ninja' . $bakup_file );
596
- }
597
- @file_put_contents($_SESSION['abspath'] . $php_file,
598
- PHPINI_BEGIN . "\n" . PHPINI_DATA . "\n" . PHPINI_END . "\n\n" . $fdata, LOCK_EX );
599
- @chmod( $_SESSION['abspath'] . $php_file, 0644 );
600
- $nfw_install['phpini'] = $_SESSION['abspath'] . $php_file;
601
-
602
- foreach ( $ini_array as $ini_file ) {
603
- if ($ini_file == $php_file) { continue; }
604
- if ( file_exists($_SESSION['abspath'] . $ini_file) ) {
605
- if ( is_writable($_SESSION['abspath'] . $ini_file) ) {
606
- $ini_data = file_get_contents($_SESSION['abspath'] . $ini_file);
607
- $ini_data = preg_replace( '`auto_prepend_file`' , ";auto_prepend_file", $ini_data);
608
- $ini_data = preg_replace( '`\s?'. PHPINI_BEGIN .'.+?'. PHPINI_END .'[^\r\n]*\s?`s' , "\n", $ini_data);
609
- @file_put_contents($_SESSION['abspath'] . $ini_file, $ini_data, LOCK_EX );
610
- }
611
- }
612
- }
613
- }
614
- nfw_update_option( 'nfw_install', $nfw_install);
615
-
616
- ?>
617
- <div class="wrap">
618
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
619
- <br />
620
- <div class="updated settings-error"><p><?php _e('Your configuration was saved.', 'ninjafirewall') ?>
621
- <?php
622
- if (! empty($_SESSION['email_install']) ) {
623
-
624
- echo '<br />';
625
- printf( __('A "Quick Start, FAQ & Troubleshooting Guide" email was sent to %s.', 'ninjafirewall'), '<code>' . htmlspecialchars( $_SESSION['email_install'] ) . '</code>' );
626
- unset($_SESSION['email_install']);
627
- }
628
- ?>
629
- </p></div>
630
- <?php _e('Please click the button below to test if the firewall integration was successful.', 'ninjafirewall') ?>
631
- <form method="POST" action="?page=NinjaFirewall&nfw_firstrun=1&rnd=<?php echo time() ?>">
632
- <p><input type="submit" class="button-primary" value="<?php _e('Test Firewall', 'ninjafirewall') ?> &#187;" /></p>
633
- <input type="hidden" name="nfw_act" value="postsave" />
634
- <input type="hidden" name="makechange" value="usr" />
635
- <?php wp_nonce_field('postsave', 'nfwnonce', 0); ?>
636
- </form>
637
-
638
- </div>
639
- <?php
640
- return;
641
-
642
- DOITYOURSELF:
643
- nfw_firewalltest();
644
- return;
645
- }
646
-
647
- /* ------------------------------------------------------------------ */
648
- // EOF //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/install_wpwaf.php DELETED
@@ -1,243 +0,0 @@
1
- <?php
2
- /*
3
- +---------------------------------------------------------------------+
4
- | NinjaFirewall (WP Edition) |
5
- | |
6
- | (c) NinTechNet - https://nintechnet.com/ |
7
- +---------------------------------------------------------------------+
8
- | This program is free software: you can redistribute it and/or |
9
- | modify it under the terms of the GNU General Public License as |
10
- | published by the Free Software Foundation, either version 3 of |
11
- | the License, or (at your option) any later version. |
12
- | |
13
- | This program is distributed in the hope that it will be useful, |
14
- | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
- | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
- */
19
-
20
- if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
-
22
- /* ------------------------------------------------------------------ */
23
-
24
- function nfw_integration_wpwaf( $err_msg = null ) {
25
-
26
- // Look for the wp-config.php file:
27
- $wp_config = '';
28
- if ( file_exists( ABSPATH . 'wp-config.php') ) {
29
- $wp_config = ABSPATH . 'wp-config.php';
30
-
31
- } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) ) {
32
- $wp_config = dirname( ABSPATH ) . '/wp-config.php';
33
- }
34
-
35
- ?>
36
- <script>
37
- function diy_chg(what) {
38
- if (what == 'nfw') {
39
- jQuery('#lmd').slideDown();
40
- jQuery('#diy').slideUp();
41
- } else {
42
- jQuery('#lmd').slideUp();
43
- jQuery('#diy').slideDown();
44
- }
45
- }
46
- </script>
47
- <div class="wrap">
48
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
49
- <?php
50
-
51
- $wp_config_content = @file_get_contents( $wp_config );
52
- if ( empty( $wp_config_content ) ) {
53
- $err = __('Error:', 'ninjafirewall') . ' ' .
54
- sprintf( __('Unable to read the wp-config.php file (%s). Make sure it is readable and try again.', 'ninjafirewall' ),
55
- '<code>'. htmlspecialchars( $wp_config ) .'</code>' );
56
- ?>
57
- <div class="error settings-error"><p> <?php echo $err ?></p></div>
58
- <?php
59
- return;
60
- }
61
-
62
- if (! empty( $err_msg) ) {
63
- $err = __('Error:', 'ninjafirewall') . ' ' . $err_msg;
64
- ?>
65
- <div class="error settings-error"><p> <?php echo $err; ?></p></div>
66
- <?php
67
- }
68
-
69
- if (! $wp_config ) {
70
- $err = __('Error:', 'ninjafirewall') . ' ' . sprintf(
71
- __('Unable to find the wp-config.php file in the %s or %s directories.', 'ninjafirewall' ),
72
- '<code>'. htmlspecialchars( ABSPATH ) .'</code>',
73
- '<code>'. htmlspecialchars( dirname( ABSPATH ) ) .'</code>' );
74
- ?>
75
- <div class="error settings-error"><p> <?php echo $err ?></p></div>
76
- </div>
77
- <?php
78
- return;
79
- }
80
-
81
- // Fetch rules, options and send welcome email:
82
- if ( empty($_SESSION['default_conf']) ) {
83
- nfw_default_conf();
84
- welcome_email();
85
- }
86
- $nfw_install['wp_config'] = $wp_config;
87
- nfw_update_option( 'nfw_install', $nfw_install);
88
-
89
- ?><h3><?php _e('Firewall Integration', 'ninjafirewall') ?> (WordPress WAF)</h3>
90
-
91
- <?php
92
- if ( is_multisite() ) {
93
- ?>
94
- <div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:green;">
95
- <p><?php _e('Multisite network detected:', 'ninjafirewall'); echo ' '; _e('NinjaFirewall will protect all sites from your network and its configuration interface will be accessible only to the Super Admin from the network main site.', 'ninjafirewall') ?></p>
96
- </div>
97
- <?php
98
- }
99
- ?>
100
-
101
- <p><?php printf( __('The following <font color="green">green lines</font> of code must be added to your %s file.', 'ninjafirewall'), '<code>'. htmlentities( $wp_config ) . '</code>' ) ?> <?php _e('All other lines, if any, are the actual content of the file:', 'ninjafirewall') ?>
102
- </p>
103
-
104
- <?php
105
- nfw_wpconfig_data();
106
- $wp_config_content = preg_replace( '`<\?php(.+)`s', '$1', $wp_config_content );
107
- $wp_config_content = preg_replace( '`\s?'. WP_CONFIG_BEGIN .'.+?'. WP_CONFIG_END .'[^\r\n]*\s?`s' , "\n", $wp_config_content);
108
-
109
- echo '<pre style="cursor:text;background-color:#FFF;border:1px solid #ccc;margin:0px;padding:6px;overflow:auto;height:180px;">' . "\n" .
110
- "<font color='#777'>&lt;?php\n" .
111
- '<font color="green">' . WP_CONFIG_BEGIN . "\n" . htmlentities(WP_CONFIG_DATA) . "\n" . WP_CONFIG_END . "\n" .
112
- '</font>' . htmlspecialchars( $wp_config_content ) . "\n" .
113
- '</font></pre><br />';
114
-
115
- echo '<form method="post" name="integration_form">';
116
-
117
- if (! is_writable( $wp_config ) ) {
118
- ?>
119
- <div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
120
- <p><?php _e('The file is not writable, I cannot edit it for you. Please make those changes, then click on button below.', 'ninjafirewall'); ?></p>
121
- </div>
122
- <?php
123
-
124
- } else {
125
-
126
- ?>
127
- <p><label><input type="radio" name="makechange" onClick="diy_chg(this.value)" value="nfw" checked="checked"><strong><?php _e('Let NinjaFirewall make the above changes (recommended).', 'ninjafirewall'); ?></strong></label></p>
128
- <div id="lmd">
129
- <label><input type="checkbox" name="conf_backup" checked="checked" /><?php _e('Back up the file (wp-config.bak.php) before editing it.', 'ninjafirewall') ?></label>
130
- <div style="background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
131
- <p><?php _e('Ensure that you have FTP access to your website so that, if there were a problem during the installation of the firewall, you could easily undo the changes.', 'ninjafirewall') ?></p>
132
- </div>
133
- </div>
134
- <p><label><input type="radio" name="makechange" onClick="diy_chg(this.value)" value="usr"><strong><?php _e('I want to make the changes myself.', 'ninjafirewall'); ?></strong></label></p>
135
- <p id="diy" style="display:none;"><?php _e('Please make those changes, then click on button below.', 'ninjafirewall') ?></p>
136
- <?php
137
- }
138
- ?>
139
- <br />
140
- <input type="submit" class="button-primary" name="next" value="<?php _e('Next Step', 'nfwplus') ?> &#187;">
141
- <input type="hidden" name="nfw_act" value="save_changes_wpwaf">
142
- <?php wp_nonce_field('save_changes_wpwaf', 'nfwnonce', 0); ?>
143
- </form>
144
- </div>
145
-
146
- <?php
147
- $_SESSION['wp_config'] = $wp_config;
148
- }
149
-
150
- /* ------------------------------------------------------------------ */
151
-
152
- function nfw_save_changes_wpwaf() {
153
-
154
- if ( empty( $_SESSION['wp_config'] ) || ! file_exists( $_SESSION['wp_config'] ) ) {
155
- $err = sprintf( __('Unable to find the wp-config.php file (#%s).', 'ninjafirewall' ), __LINE__ );
156
- nfw_integration_wpwaf( $err );
157
- return;
158
- }
159
-
160
- $wp_config = $_SESSION['wp_config'];
161
-
162
- // Let NinjaFirewall do the changes:
163
- if ( isset( $_POST['makechange'] ) && $_POST['makechange'] == 'nfw' ) {
164
-
165
- // Back up the wp-config.php?
166
- if ( isset( $_POST['conf_backup'] ) ) {
167
- $dirname = dirname( $_SESSION['wp_config'] );
168
- if (! file_exists( $dirname . '/wp-config.bak.php' ) ) {
169
- @copy( $_SESSION['wp_config'], $dirname . '/wp-config.bak.php' );
170
- }
171
- }
172
-
173
- // Clean-up any PHP INI:
174
- $_SESSION['abspath'] = ABSPATH;
175
- nfw_ini_data();
176
- $php_ini = array( ABSPATH . 'php.ini', ABSPATH . 'php5.ini', ABSPATH . '.user.ini' );
177
- foreach ( $php_ini as $file ) {
178
- if ( file_exists( $file ) ) {
179
- $data = file_get_contents( $file );
180
- $data = preg_replace( '`\s?'. PHPINI_BEGIN .'.+?'. PHPINI_END .'[^\r\n]*\s?`s' , "\n", $data);
181
- @file_put_contents( $file, $data, LOCK_EX );
182
- }
183
- }
184
- // Clean-up .htaccess:
185
- $htaccess_file = ABSPATH . '.htaccess';
186
- if ( file_exists( $htaccess_file ) ) {
187
- $data = file_get_contents( $htaccess_file );
188
- $data = preg_replace( '`\s?'. HTACCESS_BEGIN .'.+?'. HTACCESS_END .'[^\r\n]*\s?`s' , "\n", $data);
189
- @file_put_contents( $htaccess_file, $data, LOCK_EX );
190
- }
191
-
192
- $wp_config_content = @file_get_contents( $wp_config );
193
-
194
- nfw_wpconfig_data();
195
- $wp_config_content = preg_replace( '`<\?php(.+)`s', '$1', $wp_config_content );
196
- $wp_config_content = preg_replace( '`\s?'. WP_CONFIG_BEGIN .'.+?'. WP_CONFIG_END .'[^\r\n]*\s?`s' , "\n", $wp_config_content);
197
- @file_put_contents( $wp_config, "<?php\n". WP_CONFIG_BEGIN ."\n". WP_CONFIG_DATA ."\n". WP_CONFIG_END ."\n$wp_config_content", LOCK_EX );
198
-
199
- ?>
200
- <div class="wrap">
201
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
202
- <br />
203
- <div class="updated settings-error"><p><?php _e('Your configuration was saved.', 'ninjafirewall') ?>
204
- <?php
205
- if (! empty($_SESSION['email_install']) ) {
206
-
207
- echo '<br />';
208
- printf( __('A "Quick Start, FAQ & Troubleshooting Guide" email was sent to %s.', 'ninjafirewall'), '<code>' . htmlspecialchars( $_SESSION['email_install'] ) . '</code>' );
209
- unset($_SESSION['email_install']);
210
- }
211
- ?>
212
- </p></div>
213
- <?php _e('Please click the button below to test if the firewall integration was successful.', 'ninjafirewall') ?>
214
- <form method="POST" action="?page=NinjaFirewall&nfw_firstrun=1&rnd=<?php echo time() ?>">
215
- <p><input type="submit" class="button-primary" value="<?php _e('Test Firewall', 'ninjafirewall') ?> &#187;" /></p>
216
-
217
- <input type="hidden" name="nfw_act" value="save_changes_wpwaf" />
218
- <input type="hidden" name="makechange" value="usr" />
219
- <?php wp_nonce_field('save_changes_wpwaf', 'nfwnonce', 0); ?>
220
-
221
- </form>
222
- </div>
223
- <?php
224
- return;
225
- }
226
-
227
- nfw_test_wpwaf();
228
- return;
229
- }
230
-
231
- /* ------------------------------------------------------------------ */
232
-
233
- function nfw_test_wpwaf() {
234
-
235
- if (! defined('NFW_STATUS') || NFW_STATUS != 20 ) {
236
- $err = __('The firewall is not loaded. Make sure that the required lines of code were added to your wp-config.php file.', 'ninjafirewall' );
237
- nfw_integration_wpwaf( $err );
238
- }
239
- return;
240
- }
241
-
242
- /* ------------------------------------------------------------------ */
243
- // EOF //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/live_log.php CHANGED
@@ -22,16 +22,16 @@ if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
22
  // Block immediately if user is not allowed :
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
- if (! defined('NF_DISABLED') ) {
26
  is_nfw_enabled();
27
  }
28
- if (NF_DISABLED) {
29
  $err_msg = __('Error: NinjaFirewall must be enabled and working in order to use this feature.', 'ninjafirewall');
30
  }
31
- if ( empty($_SESSION['nfw_goodguy']) ) {
32
  $err_msg = sprintf( __('Error: You must be whitelisted in order to use that feature: click on the <a href="%s">Firewall Policies</a> menu and ensure that the "Add the Administrator to the whitelist" option is enabled.', 'ninjafirewall'), '?page=nfsubpolicies' );
33
  }
34
- if (! empty($err_msg) ) {
35
  ?>
36
  <div class="wrap">
37
  <h1><img style="vertical-align:top;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Live Log', 'ninjafirewall') ?></h1>
@@ -43,182 +43,41 @@ if (! empty($err_msg) ) {
43
  return;
44
  }
45
 
46
- // Create an empty log :
47
- $fh = fopen( NFW_LOG_DIR . '/nfwlog/cache/livelog.php', 'w');
48
- fclose($fh);
49
  $_SESSION['nfw_livelog'] = 1;
50
 
51
- ?>
52
- <script>
53
- var count = 0;
54
- var lines = 0;
55
- var liveon = 1;
56
- <?php
57
  if (! isset($_COOKIE['nfwscroll']) || ! empty($_COOKIE['nfwscroll']) ) {
58
- // Default
59
- echo 'var scroll = 1;';
60
  $nfwscroll = 1;
61
  } else {
62
- echo 'var scroll = 0;';
63
  $nfwscroll = 0;
64
  }
65
- if ( isset($_COOKIE['nfwintval']) && preg_match('/^(5|10|20|45)000$/', $_COOKIE['nfwintval']) ) {
66
- echo "var liveint = {$_COOKIE['nfwintval']};";
67
- $nfwintval = $_COOKIE['nfwintval'];
68
  } else {
69
- echo 'var liveint = 10000;';
70
  $nfwintval = 10000;
71
  }
72
- ?>
73
- var livecls = 0;
74
- var myinterval;
75
- var ajaxURL = '<?php
76
  if ( NFW_IS_HTTPS == true ) {
77
- echo site_url( '', 'https' );
78
  } else {
79
- echo site_url();
80
- }
81
- ?>/index.php';
82
- function getHTTPObject(){
83
- var http;
84
- if(window.XMLHttpRequest){
85
- http = new XMLHttpRequest();
86
- } else if(window.ActiveXObject){
87
- http = new ActiveXObject("Microsoft.XMLHTTP");
88
- }
89
- return http;
90
- }
91
- var http = getHTTPObject();
92
- function live_fetch() {
93
- if (count) {
94
- document.getElementById("loading").innerHTML = "<?php echo esc_js( __('Loading...', 'ninjafirewall') ) ?>";
95
- document.getElementById('radioon').style.background = 'orange';
96
- document.getElementById('radiooff').disabled = true;
97
- }
98
- http.open("POST", ajaxURL, true);
99
- http.onreadystatechange = live_fetchRes;
100
- http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
101
- http.send('livecls=' + livecls + '&lines=' + lines);
102
- count = 1;
103
- livecls = 0;
104
- }
105
- live_fetch();
106
- myinterval = setInterval(live_fetch, liveint);
107
-
108
- function live_fetchRes() {
109
- if (http.readyState == 4) {
110
- if (http.status == 200) {
111
- if (http.responseText == '') {
112
- document.liveform.txtlog.value = '<?php echo esc_js( __('No traffic yet, please wait...', 'ninjafirewall') ) ?>' + "\n";
113
- } else if (http.responseText != '*') {
114
- if ( http.responseText.charAt(0) != '^' ) {
115
- document.liveform.txtlog.value = '<?php echo esc_js( __('Error: Live Log did not receive the expected response from your server:', 'ninjafirewall') ) ?>' + "\n\n" + http.responseText;
116
- } else {
117
- var line = http.responseText.substr(1);
118
- // Get number of lines :
119
- var res = line.split(/\n/).length - 1;
120
- // Work around for old IE bug :
121
- if (! res) { res = 1; }
122
- if (lines == 0) {
123
- document.liveform.txtlog.value = line;
124
- } else {
125
- document.liveform.txtlog.value += line;
126
- }
127
- lines += res;
128
- if (scroll) {
129
- document.getElementById("idtxtlog").scrollTop = document.getElementById("idtxtlog").scrollHeight;
130
- }
131
- }
132
- }
133
- } else if (http.status == 404) {
134
- document.liveform.txtlog.value += '<?php echo esc_js( __('Error: URL does not seem to exist:', 'ninjafirewall') ) ?> ' + ajaxURL + "\n";
135
- } else if (http.status == 503) {
136
- document.liveform.txtlog.value += '<?php echo esc_js( __('Error: cannot find your log file. Try to reload this page.', 'ninjafirewall') ) ?>' + "\n";
137
- } else {
138
- document.liveform.txtlog.value += '<?php echo esc_js( __('Error: the HTTP server returned the following error code:', 'ninjafirewall') ) ?> ' + http.status + "\n";
139
- }
140
- if (document.liveform.txtlog.value == '') {
141
- document.liveform.txtlog.value = '<?php echo esc_js( __('No traffic yet, please wait...', 'ninjafirewall') ) ?>' + "\n";
142
- }
143
- document.getElementById('loading').innerHTML = "<?php echo esc_js( __('Sleeping', 'ninjafirewall') ) ?> " + liveint/1000 + " <?php echo esc_js( __('seconds', 'ninjafirewall') ) ?>...";
144
- document.getElementById('radioon').style.background = 'green';
145
- document.getElementById('radiooff').disabled = false;
146
- return false;
147
- }
148
- }
149
- function on_off(onoff) {
150
- if (onoff == 1 && liveon != 1) {
151
- liveon = 1;
152
- live_fetch();
153
- if (scroll == 1) {
154
- document.getElementById("idtxtlog").scrollTop = document.getElementById("idtxtlog").scrollHeight;
155
- }
156
- document.getElementById("loading").innerHTML = "<?php echo esc_js( __('Sleeping', 'ninjafirewall') ) ?> " + liveint/1000 + " <?php echo esc_js( __('seconds', 'ninjafirewall') ) ?>...";
157
- document.getElementById("liveint").disabled = false;
158
- document.getElementById("livescroll").disabled = false;
159
- document.getElementById('radioon').style.background = 'green';
160
- document.getElementById('radioon').style.color = 'white';
161
- myinterval = setInterval(live_fetch, liveint);
162
- } else if (onoff != 1 && liveon == 1) {
163
- liveon = 0;
164
- lines = 0;
165
- document.getElementById("loading").innerHTML = "&nbsp;";
166
- document.getElementById("liveint").disabled = true;
167
- document.getElementById("livescroll").disabled = true;
168
- clearInterval(myinterval);
169
- document.getElementById('radioon').style.background = '';
170
- document.getElementById('radioon').style.color = '';
171
- }
172
- }
173
- function change_int(intv) {
174
- clearInterval(myinterval);
175
- liveint = intv;
176
- document.getElementById("loading").innerHTML = "<?php echo esc_js( __('Sleeping', 'ninjafirewall') ) ?> " + liveint/1000 + " <?php echo esc_js( __('seconds', 'ninjafirewall') ) ?>...";
177
- myinterval = setInterval(live_fetch, liveint);
178
- // Add cookie so that we remember the user choice for 365 days:
179
- create_cookie('nfwintval', intv);
180
- }
181
- function cls() {
182
- document.liveform.txtlog.value = '';
183
- livecls = 1;
184
- lines = 0;
185
- }
186
- function is_scroll() {
187
- if (document.liveform.livescroll.checked == true) {
188
- scroll = 1;
189
- if (liveon == 1) {
190
- document.getElementById("idtxtlog").scrollTop = document.getElementById("idtxtlog").scrollHeight;
191
- }
192
- } else {
193
- scroll = 0;
194
- }
195
- // Add cookie so that we remember the user choice for 365 days:
196
- create_cookie('nfwscroll', scroll);
197
- }
198
- function create_cookie(name, value) {
199
- // Add cookie so that we remember the user choice for 365 days:
200
- var d = new Date();
201
- d.setTime(d.getTime() + ( 365 * 24 * 60 * 60 * 1000) );
202
- var expires = "expires=" + d.toUTCString();
203
- document.cookie = name +'=' + value + "; " + expires;
204
- }
205
- function lv_select( value ) {
206
- if ( value > 0 ) {
207
- document.getElementById('lr-disabled').disabled = false;
208
- document.getElementById('lr-disabled').focus();
209
- } else {
210
- document.getElementById('lr-disabled').disabled = true;
211
- }
212
  }
 
 
 
 
 
213
  </script>
214
-
215
  <div class="wrap">
216
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Live Log', 'ninjafirewall') ?></h1>
217
  <?php
218
- if ( isset($_POST['lf']) ) {
219
  $res = nf_sub_liveloge_save();
220
- if ($res) {
221
- echo '<div class="error notice is-dismissible"><p>' . $res . '</p></div>';
222
  } else {
223
  echo '<div class="updated notice is-dismissible"><p>'. __('Your changes have been saved.', 'ninjafirewall') .'</p></div>';
224
  }
@@ -235,45 +94,50 @@ if ( defined('NFW_TEXTAREA_HEIGHT') ) {
235
  <table class="form-table">
236
  <tr>
237
  <td style="width:100%;text-align:center;">
238
- <span class="description" id="loading">&nbsp;</span><br />
239
- <textarea name="txtlog" id="idtxtlog" class="small-text code" style="width:100%;height:<?php echo $th; ?>px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php _e('No traffic yet, please wait...', 'ninjafirewall'); echo "\n"; ?></textarea>
 
240
  <br />
241
- <center>
242
- <p>
243
- <label><input type="radio" name="liveon" value="1" onclick="on_off(1)" checked="checked"><font style="color:white;background-color:green;padding:3px;border-radius:15px;" id="radioon"><?php _e('On', 'ninjafirewall') ?></font></label>&nbsp;&nbsp;<label><input type="radio" name="liveon" value="0" onclick="on_off(0)" id="radiooff"><?php _e('Off', 'ninjafirewall') ?></label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php _e('Refresh rate:', 'ninjafirewall') ?>
244
- <select name="liveint" id="liveint" onchange="change_int(this.value);">
245
- <option value="5000"<?php selected($nfwintval, 5000) ?>><?php _e('5 seconds', 'ninjafirewall') ?></option>
246
- <option value="10000"<?php selected($nfwintval, 10000) ?>><?php _e('10 seconds', 'ninjafirewall') ?></option>
247
- <option value="20000"<?php selected($nfwintval, 20000) ?>><?php _e('20 seconds', 'ninjafirewall') ?></option>
248
- <option value="45000"<?php selected($nfwintval, 45000) ?>><?php _e('45 seconds', 'ninjafirewall') ?></option>
249
- </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" class="button-secondary" name="livecls" value="<?php _e('Clear screen', 'ninjafirewall') ?>" onClick="cls()"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<label><input type="checkbox" name="livescroll" id="livescroll" value="1" onchange="is_scroll()" <?php checked($nfwscroll, 1)?>><?php _e('Autoscrolling', 'ninjafirewall') ?></label>
250
- </p>
251
- </center>
 
 
 
252
  </td>
253
  </tr>
254
  </table>
255
- <div align="right"><span class="description"><?php _e('Live Log will not display whitelisted users and brute-force attacks.', 'ninjafirewall') ?></span></div>
256
  </form>
257
  <?php
258
- if ( empty($nfw_options['liveformat']) ) {
 
259
  $lf = 0;
260
  $liveformat = '';
261
  } else {
262
  $lf = 1;
263
- $liveformat = htmlspecialchars($nfw_options['liveformat']);
264
  }
265
 
266
- if ( empty($nfw_options['liveport']) || ! preg_match('/^[1-2]$/', $nfw_options['liveport']) ) {
267
  $liveport = 0;
268
  } else {
269
  $liveport = $nfw_options['liveport'];
270
  }
271
- if ( empty($nfw_options['livetz']) || preg_match('/[^\w\/]/', $nfw_options['livetz']) ) {
272
  $livetz = 'UTC';
273
  } else {
274
  $livetz = $nfw_options['livetz'];
275
  }
276
- if ( empty( $nfw_options['liverules'] ) || ! preg_match('/^[0-2]$/', $nfw_options['liverules']) ) {
277
  $liverules = 0;
278
  $lr_disabled = 'disabled="disabled" ';
279
  } else {
@@ -286,41 +150,43 @@ if ( empty( $nfw_options['liverulespath'] ) ) {
286
  $liverulespath = $nfw_options['liverulespath'];
287
  }
288
  ?>
 
289
  <form method="post">
290
- <h3><?php _e('Live Log options', 'ninjafirewall') ?></h3>
291
- <table class="form-table">
292
  <tr>
293
- <th scope="row"><?php _e('Inclusion and exclusion filters (REQUEST_URI)', 'ninjafirewall') ?></th>
294
  <td>
295
- <select name="liverules" onchange="lv_select(this.value);">
296
  <option value="0"<?php selected($liverules, 0) ?>><?php _e('None', 'ninjafirewall') ?></option>
297
  <option value="1"<?php selected($liverules, 1) ?>><?php _e('Must include', 'ninjafirewall') ?></option>
298
  <option value="2"<?php selected($liverules, 2) ?>><?php _e('Must not include', 'ninjafirewall') ?></option>
299
- </select>&nbsp;<input <?php echo $lr_disabled; ?>type="text" id="lr-disabled" class="regular-text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="liverulespath" value="<?php echo htmlentities( $liverulespath ) ?>" placeholder="<?php _e('e.g.,', 'nfwplus') ?> /blog <?php _e('or', 'ninjafirewall') ?> admin.php <?php _e('or', 'ninjafirewall') ?> index.php,/blog" />
 
300
  <br />
301
- <span class="description"><?php _e('Full or partial case-sensitive REQUEST_URI string. Multiple values must be comma-separated.', 'ninjafirewall') ?></span>
302
  </td>
303
  </tr>
304
  <tr>
305
- <th scope="row"><?php _e('Format', 'ninjafirewall') ?></th>
306
  <td>
307
  <p><label><input type="radio" name="lf" value="0"<?php checked($lf, 0) ?> onclick="document.getElementById('liveformat').disabled=true"><code>[%time] %name %client &quot;%method %uri&quot; &quot;%referrer&quot; &quot;%ua&quot; &quot;%forward&quot; &quot;%host&quot;</code></label></p>
308
  <p><label><input type="radio" name="lf" value="1"<?php checked($lf, 1) ?> onclick="document.getElementById('liveformat').disabled=false;document.getElementById('liveformat').focus()"><?php _e('Custom', 'ninjafirewall') ?> </label><input id="liveformat" type="text" class="regular-text" name="liveformat" value="<?php echo $liveformat ?>"<?php disabled($lf, 0) ?> autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /></p>
309
- <span class="description"><?php _e('See contextual help for available log format.', 'ninjafirewall') ?></span>
310
  </td>
311
  </tr>
312
  <tr>
313
- <th scope="row"><?php _e('Display', 'ninjafirewall') ?></th>
314
  <td>
315
  <select name="liveport">
316
- <option value="0"<?php selected($liveport, 0) ?>><?php _e('HTTP and HTTPS traffic (default)', 'ninjafirewall') ?></option>
317
- <option value="1"<?php selected($liveport, 1) ?>><?php _e('HTTP traffic only', 'ninjafirewall') ?></option>
318
- <option value="2"<?php selected($liveport, 2) ?>><?php _e('HTTPS traffic only', 'ninjafirewall') ?></option>
319
  </select>
320
  </td>
321
  </tr>
322
  <tr>
323
- <th scope="row"><?php _e('Timezone', 'ninjafirewall') ?></th>
324
  <td>
325
  <select name="livetz">
326
  <?php
@@ -341,7 +207,7 @@ if ( empty( $nfw_options['liverulespath'] ) ) {
341
  </div>
342
  <?php
343
 
344
- /* ------------------------------------------------------------------ */
345
  function nf_sub_liveloge_save() {
346
 
347
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'livelog_save') ) {
@@ -370,7 +236,7 @@ function nf_sub_liveloge_save() {
370
  } else {
371
  if (! empty($_POST['liveformat']) ) {
372
  $tmp = stripslashes($_POST['liveformat']);
373
- // Keep only the allowed characters :
374
  $nfw_options['liveformat'] = preg_replace('`[^a-z%[\]"\x20]`', '', $tmp);
375
  }
376
  if (empty($_POST['liveformat']) ) {
@@ -393,11 +259,11 @@ function nf_sub_liveloge_save() {
393
  $nfw_options = nfw_update_option('nfw_options', $nfw_options);
394
  }
395
 
396
- /* ------------------------------------------------------------------ */
397
 
398
  function nfw_timezone_choice() {
399
  return array('UTC', 'Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap');
400
  }
401
 
402
- /* ------------------------------------------------------------------ */
403
  // EOF
22
  // Block immediately if user is not allowed :
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
+ if (! defined( 'NF_DISABLED' ) ) {
26
  is_nfw_enabled();
27
  }
28
+ if ( NF_DISABLED ) {
29
  $err_msg = __('Error: NinjaFirewall must be enabled and working in order to use this feature.', 'ninjafirewall');
30
  }
31
+ if ( empty( $_SESSION['nfw_goodguy'] ) ) {
32
  $err_msg = sprintf( __('Error: You must be whitelisted in order to use that feature: click on the <a href="%s">Firewall Policies</a> menu and ensure that the "Add the Administrator to the whitelist" option is enabled.', 'ninjafirewall'), '?page=nfsubpolicies' );
33
  }
34
+ if (! empty( $err_msg ) ) {
35
  ?>
36
  <div class="wrap">
37
  <h1><img style="vertical-align:top;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Live Log', 'ninjafirewall') ?></h1>
43
  return;
44
  }
45
 
46
+ // Create an empty log et set the required session
47
+ $fh = fopen( NFW_LOG_DIR .'/nfwlog/cache/livelog.php', 'w' );
48
+ fclose( $fh );
49
  $_SESSION['nfw_livelog'] = 1;
50
 
51
+
 
 
 
 
 
52
  if (! isset($_COOKIE['nfwscroll']) || ! empty($_COOKIE['nfwscroll']) ) {
53
+ // Default, if not set
 
54
  $nfwscroll = 1;
55
  } else {
 
56
  $nfwscroll = 0;
57
  }
58
+ if ( isset( $_COOKIE['nfwintval']) && preg_match('/^(5|10|20|45)000$/', $_COOKIE['nfwintval'] ) ) {
59
+ $nfwintval = (int) $_COOKIE['nfwintval'];
 
60
  } else {
 
61
  $nfwintval = 10000;
62
  }
 
 
 
 
63
  if ( NFW_IS_HTTPS == true ) {
64
+ $nfwsite = site_url( '/index.php', 'https' );
65
  } else {
66
+ $nfwsite = site_url( '/index.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
+ ?>
69
+ <script>
70
+ var liveinterval = <?php echo $nfwintval ?>;
71
+ var scroll = <?php echo $nfwscroll ?>;
72
+ var site_url = '<?php echo esc_js( $nfwsite ) ?>';
73
  </script>
 
74
  <div class="wrap">
75
+ <h1><img style="vertical-align:top;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Live Log', 'ninjafirewall') ?></h1>
76
  <?php
77
+ if ( isset( $_POST['lf'] ) ) {
78
  $res = nf_sub_liveloge_save();
79
+ if ( $res ) {
80
+ echo '<div class="error notice is-dismissible"><p>'. $res .'</p></div>';
81
  } else {
82
  echo '<div class="updated notice is-dismissible"><p>'. __('Your changes have been saved.', 'ninjafirewall') .'</p></div>';
83
  }
94
  <table class="form-table">
95
  <tr>
96
  <td style="width:100%;text-align:center;">
97
+ <progress id="nfw-progress" value="1" max="<?php echo ($nfwintval/1000) ?>" class="nfw-progress" style="display:none"></progress>
98
+ <br />
99
+ <textarea disabled name="txtlog" id="idtxtlog" class="small-text code" style="width:100%;height:<?php echo $th; ?>px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"></textarea>
100
  <br />
101
+ <div style="float:left;width:40%;padding-top:10px;" class="nfw-right">
102
+ <?php nfw_toggle_switch( 'danger', 'nfw_options[wf_case]', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', 0, false, 'onclick="nfwjs_livelog()"', 'livelog-switch', 'right' ) ?>
103
+ </div>
104
+ <div style="float:right;width:60%;text-align:left;padding-top:10px;" class="nfw-left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
105
+ <?php _e('Refresh rate:', 'ninjafirewall') ?>
106
+ <select name="liveint" id="liveint" onchange="nfwjs_change_int(this.value);">
107
+ <option value="5000"<?php selected( $nfwintval, 5000 ) ?>><?php _e('5 seconds', 'ninjafirewall') ?></option>
108
+ <option value="10000"<?php selected( $nfwintval, 10000 ) ?>><?php _e('10 seconds', 'ninjafirewall') ?></option>
109
+ <option value="20000"<?php selected( $nfwintval, 20000 ) ?>><?php _e('20 seconds', 'ninjafirewall') ?></option>
110
+ <option value="45000"<?php selected( $nfwintval, 45000 ) ?>><?php _e('45 seconds', 'ninjafirewall') ?></option>
111
+ </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
112
+ <input type="button" class="button-secondary" name="livecls" value="<?php _e('Clear screen', 'ninjafirewall') ?>" onClick="nfwjs_cls()" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
113
+ <label><input type="checkbox" name="livescroll" id="livescroll" value="1" onchange="nfwjs_is_scroll()" <?php checked($nfwscroll, 1)?> /><?php _e('Autoscrolling', 'ninjafirewall') ?></label>
114
+ </div>
115
  </td>
116
  </tr>
117
  </table>
118
+ <p class="description alignright"><?php _e('Live Log will not display whitelisted users and brute-force attacks.', 'ninjafirewall') ?></p>
119
  </form>
120
  <?php
121
+
122
+ if ( empty( $nfw_options['liveformat'] ) ) {
123
  $lf = 0;
124
  $liveformat = '';
125
  } else {
126
  $lf = 1;
127
+ $liveformat = htmlspecialchars( $nfw_options['liveformat'] );
128
  }
129
 
130
+ if ( empty( $nfw_options['liveport'] ) || ! preg_match('/^[1-2]$/', $nfw_options['liveport'] ) ) {
131
  $liveport = 0;
132
  } else {
133
  $liveport = $nfw_options['liveport'];
134
  }
135
+ if ( empty( $nfw_options['livetz'] ) || preg_match('/[^\w\/]/', $nfw_options['livetz'] ) ) {
136
  $livetz = 'UTC';
137
  } else {
138
  $livetz = $nfw_options['livetz'];
139
  }
140
+ if ( empty( $nfw_options['liverules'] ) || ! preg_match('/^[0-2]$/', $nfw_options['liverules'] ) ) {
141
  $liverules = 0;
142
  $lr_disabled = 'disabled="disabled" ';
143
  } else {
150
  $liverulespath = $nfw_options['liverulespath'];
151
  }
152
  ?>
153
+ <br />
154
  <form method="post">
155
+ <h3><?php _e('Live Log Options', 'ninjafirewall') ?></h3>
156
+ <table class="form-table nfw-table">
157
  <tr>
158
+ <th scope="row" class="row-med"><?php _e('Inclusion and exclusion filters (REQUEST_URI)', 'ninjafirewall') ?></th>
159
  <td>
160
+ <select name="liverules" onchange="nfwjs_lv_select(this.value);">
161
  <option value="0"<?php selected($liverules, 0) ?>><?php _e('None', 'ninjafirewall') ?></option>
162
  <option value="1"<?php selected($liverules, 1) ?>><?php _e('Must include', 'ninjafirewall') ?></option>
163
  <option value="2"<?php selected($liverules, 2) ?>><?php _e('Must not include', 'ninjafirewall') ?></option>
164
+ </select>&nbsp;
165
+ <input <?php echo $lr_disabled; ?>type="text" id="lr-disabled" class="regular-text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="liverulespath" value="<?php echo htmlentities( $liverulespath ) ?>" placeholder="<?php _e('e.g.,', 'ninjafirewall') ?> /blog <?php _e('or', 'ninjafirewall') ?> admin.php <?php _e('or', 'ninjafirewall') ?> index.php,/blog" />
166
  <br />
167
+ <p class="description"><?php _e('Full or partial case-sensitive REQUEST_URI string. Multiple values must be comma-separated.', 'ninjafirewall') ?></p>
168
  </td>
169
  </tr>
170
  <tr>
171
+ <th scope="row" class="row-med"><?php _e('Format', 'ninjafirewall') ?></th>
172
  <td>
173
  <p><label><input type="radio" name="lf" value="0"<?php checked($lf, 0) ?> onclick="document.getElementById('liveformat').disabled=true"><code>[%time] %name %client &quot;%method %uri&quot; &quot;%referrer&quot; &quot;%ua&quot; &quot;%forward&quot; &quot;%host&quot;</code></label></p>
174
  <p><label><input type="radio" name="lf" value="1"<?php checked($lf, 1) ?> onclick="document.getElementById('liveformat').disabled=false;document.getElementById('liveformat').focus()"><?php _e('Custom', 'ninjafirewall') ?> </label><input id="liveformat" type="text" class="regular-text" name="liveformat" value="<?php echo $liveformat ?>"<?php disabled($lf, 0) ?> autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /></p>
175
+ <p class="description"><?php _e('See contextual help for available log format.', 'ninjafirewall') ?></p>
176
  </td>
177
  </tr>
178
  <tr>
179
+ <th scope="row" class="row-med"><?php _e('Display', 'ninjafirewall') ?></th>
180
  <td>
181
  <select name="liveport">
182
+ <option value="0"<?php selected( $liveport, 0 ) ?>><?php _e('HTTP and HTTPS traffic (default)', 'ninjafirewall') ?></option>
183
+ <option value="1"<?php selected( $liveport, 1 ) ?>><?php _e('HTTP traffic only', 'ninjafirewall') ?></option>
184
+ <option value="2"<?php selected( $liveport, 2 ) ?>><?php _e('HTTPS traffic only', 'ninjafirewall') ?></option>
185
  </select>
186
  </td>
187
  </tr>
188
  <tr>
189
+ <th scope="row" class="row-med"><?php _e('Timezone', 'ninjafirewall') ?></th>
190
  <td>
191
  <select name="livetz">
192
  <?php
207
  </div>
208
  <?php
209
 
210
+ // ---------------------------------------------------------------------
211
  function nf_sub_liveloge_save() {
212
 
213
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'livelog_save') ) {
236
  } else {
237
  if (! empty($_POST['liveformat']) ) {
238
  $tmp = stripslashes($_POST['liveformat']);
239
+ // Remove unwanted characters :
240
  $nfw_options['liveformat'] = preg_replace('`[^a-z%[\]"\x20]`', '', $tmp);
241
  }
242
  if (empty($_POST['liveformat']) ) {
259
  $nfw_options = nfw_update_option('nfw_options', $nfw_options);
260
  }
261
 
262
+ // ---------------------------------------------------------------------
263
 
264
  function nfw_timezone_choice() {
265
  return array('UTC', 'Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap');
266
  }
267
 
268
+ // ---------------------------------------------------------------------
269
  // EOF
lib/login_protection.php CHANGED
@@ -4,7 +4,7 @@
4
  | NinjaFirewall (WP+ Edition) |
5
  | |
6
  | (c) NinTechNet - https://nintechnet.com/ |
7
- +=====================================================================+ sa
8
  */
9
 
10
  if (! defined( 'NFW_ENGINE_VERSION' ) ) {
@@ -18,11 +18,11 @@ nf_not_allowed( 'block', __LINE__ );
18
 
19
  echo '
20
  <div class="wrap">
21
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Login Protection', 'ninjafirewall') . '</h1>';
22
 
23
  // Saved ?
24
- if ( isset( $_POST['nfw_options']) ) {
25
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'bfd_save') ) {
26
  wp_nonce_ays('bfd_save');
27
  }
28
  $res = nf_sub_loginprot_save();
@@ -38,10 +38,10 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
38
 
39
  $bfconfig = nfw_read_bf_config( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' );
40
 
41
- if (! @preg_match('/^[1-2]$/', $bfconfig['bf_enable']) ) {
42
  $bfconfig['bf_enable'] = 0;
43
  }
44
- if (! @preg_match('/^(GET|POST|GETPOST)$/', $bfconfig['bf_request'] ) ) {
45
  $bfconfig['bf_request'] = 'POST';
46
  }
47
  if ( $bfconfig['bf_request'] == 'GETPOST' ) {
@@ -49,16 +49,19 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
49
  } else {
50
  $get_post = $bfconfig['bf_request'];
51
  }
52
- if (! @preg_match('/^[1-9][0-9]?$/', $bfconfig['bf_bantime'] ) ) {
53
  $bfconfig['bf_bantime'] = 5;
54
  }
55
- if (! @preg_match('/^[1-9][0-9]?$/', $bfconfig['bf_attempt'] ) ) {
56
  $bfconfig['bf_attempt'] = 8;
57
  }
58
- if (! @preg_match('/^[1-9][0-9]?$/', $bfconfig['bf_maxtime'] ) ) {
59
  $bfconfig['bf_maxtime'] = 15;
60
  }
61
- if ( empty($bfconfig['auth_name']) || @strlen( $bfconfig['auth_pass'] ) != 40 ) {
 
 
 
62
  $bfconfig['auth_name']= '';
63
  }
64
  if ( empty( $bfconfig['auth_msgtxt'] ) ) {
@@ -74,7 +77,6 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
74
  if ( strlen( $bfconfig['auth_msgtxt'] ) > 1024 ) {
75
  $bfconfig['auth_msgtxt'] = mb_substr( $bfconfig['auth_msgtxt'], 0, 1024, 'utf-8' );
76
  }
77
-
78
  if ( empty( $bfconfig['captcha_text'] ) ) {
79
  $bfconfig['captcha_text'] = __( 'Type the characters you see in the picture below:', 'ninjafirewall' );
80
  } else {
@@ -84,12 +86,12 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
84
  }
85
  }
86
 
87
- if (empty($bfconfig['bf_xmlrpc']) ) {
88
  $bfconfig['bf_xmlrpc'] = 0;
89
  } else {
90
  $bfconfig['bf_xmlrpc'] = 1;
91
  }
92
- if (empty($bfconfig['bf_authlog']) ) {
93
  $bfconfig['bf_authlog'] = 0;
94
  } else {
95
  $bfconfig['bf_authlog'] = 1;
@@ -114,7 +116,7 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
114
 
115
  } else {
116
  // Default values :
117
- $bfconfig['bf_type'] = 0;
118
  $bfconfig['bf_enable'] = 0;
119
  $bfconfig['bf_request'] = 'POST';
120
  $bfconfig['bf_bantime'] = 5;
@@ -130,315 +132,242 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
130
  $get_post = 'POST';
131
  }
132
  ?>
133
- <script type="text/javascript">
134
- function is_number(id) {
135
- var e = document.getElementById(id);
136
- if (! e.value ) { return }
137
- if (! /^[1-9][0-9]?$/.test(e.value) ) {
138
- alert("<?php echo esc_js( __('Please enter a number from 1 to 99 in \'Password-protect\' field.', 'ninjafirewall') ) ?>");
139
- e.value = e.value.substring(0, e.value.length-1);
140
- }
141
- }
142
- function auth_user_valid() {
143
- var e = document.bp_form.elements['nfw_options[auth_name]'];
144
- if ( e.value.match(/[^-\/\\_.a-zA-Z0-9]/) ) {
145
- alert('<?php echo esc_js( __('Invalid character.', 'ninjafirewall') ) ?>');
146
- e.value = e.value.replace(/[^-\/\\_.a-zA-Z0-9]/g,'');
147
- return false;
148
- }
149
- if (e.value == 'admin') {
150
- alert('<?php echo esc_js( __('"admin" is not acceptable, please choose another user name.', 'ninjafirewall') ) ?>');
151
- e.value = '';
152
- return false;
153
- }
154
- }
155
- function realm_valid() {
156
- var e = document.getElementById("realm").value;
157
- if ( e.length >= 1024 ) {
158
- alert('<?php echo esc_js( __('Please enter max 1024 character only.', 'ninjafirewall') ) ?>');
159
- return false;
160
- }
161
- }
162
-
163
  var bf_type = <?php echo $bfconfig['bf_type'] ?>;
164
  var bf_enable = <?php echo $bfconfig['bf_enable'] ?>;
165
- function toggle_submenu( enable ) {
166
- if ( enable == 0 ) {
167
- // Disable protection
168
- bf_enable = 0;
169
- jQuery("#submenu_table").slideUp();
170
- jQuery("#bf_table").slideUp();
171
- jQuery("#bf_table_extra").slideUp();
172
- jQuery("#bf_table_password").slideUp();
173
- jQuery("#bf_table_captcha").slideUp();
174
- } else {
175
- bf_enable = enable;
176
- jQuery("#submenu_table").slideDown();
177
- // Display the right table (captcha or password protection)
178
- toggle_table( enable, bf_type );
179
- jQuery("#bf_table_extra").slideDown();
180
- }
181
- }
182
- function toggle_table( enable, type ) {
183
- if ( type == 1 ) {
184
- // Captcha
185
- bf_type = 1;
186
- if ( enable == 1 ) {
187
- // Yes, if under attack
188
- jQuery("#bf_table").slideDown();
189
- } else {
190
- // Always ON
191
- jQuery("#bf_table").slideUp();
192
- }
193
- jQuery("#bf_table_password").slideUp();
194
- jQuery("#bf_table_captcha").slideDown();
195
- } else { // type == 2
196
- // Password
197
- bf_type = 0;
198
- if ( enable == 1 ) {
199
- // Yes, if under attack
200
- jQuery("#bf_table").slideDown();
201
- } else {
202
- // Always ON
203
- jQuery("#bf_table").slideUp();
204
- }
205
- jQuery("#bf_table_password").slideDown();
206
- jQuery("#bf_table_captcha").slideUp();
207
- }
208
- }
209
- function xmlrpc_warn( what ) {
210
- if ( bf_enable == 2 && what.checked == true ) {
211
- alert("<?php echo esc_js( __("Note: Access to the XML-RPC API will be completely disabled when the brute-force attack protection is set to 'Always ON'.", 'ninjafirewall') ) ?>");
212
- }
213
- }
214
-
215
- function getpost(request){
216
- if ( request == 'GETPOST' ) {
217
- request = 'GET/POST';
218
- }
219
- document.getElementById('get_post').innerHTML = request;
220
- }
221
- </script>
222
  <br />
223
-
224
- <?php
225
- // Protection is disabled:
226
- if ( empty( $bfconfig['bf_enable'] ) ) {
227
- $show_submenu_table = 0;
228
- $show_bf_table = 0;
229
- $show_bf_table_password = 0;
230
- $show_bf_table_extra = 0;
 
 
 
 
 
 
 
 
 
231
  $show_bf_table_captcha = 0;
232
-
233
- // Protection set to "Yes, if under attack":
234
- } elseif ( $bfconfig['bf_enable'] == 1 ) {
235
- $show_submenu_table = 1;
236
- $show_bf_table = 1;
237
- $show_bf_table_extra = 1;
238
- // Password?
239
- if ( empty( $bfconfig['bf_type'] ) ) {
240
- $show_bf_table_password = 1;
241
- $show_bf_table_captcha = 0;
242
- // Captcha?
243
- } else {
244
- $show_bf_table_password = 0;
245
- $show_bf_table_captcha = 1;
246
- }
247
-
248
- // Protection set to "Always ON" (2):
249
  } else {
250
- $show_submenu_table = 1;
251
- $show_bf_table = 0;
252
- $show_bf_table_extra = 1;
253
- // Password?
254
- if ( empty( $bfconfig['bf_type'] ) ) {
255
- $show_bf_table_password = 1;
256
- $show_bf_table_captcha = 0;
257
- // Captcha?
258
- } else {
259
- $show_bf_table_password = 0;
260
- $show_bf_table_captcha = 1;
261
-
262
- }
263
  }
264
 
265
- // Make sure we can display the captcha with the GD extension:
266
- if ( function_exists( 'gd_info' ) ) {
267
- $missing_gd = '';
268
- $gd_disabled = '';
 
 
 
 
 
 
269
  } else {
270
- $missing_gd = '<p><span class="description">' .
271
- __( 'GD Support is not available on your server.', 'ninjafirewall' ) . '</span></p>';
272
- $gd_disabled = ' disabled="disabled"';
273
  }
 
274
 
275
- if ( $gd_disabled && $bfconfig['bf_type'] == 1 ) {
276
- echo '<div class="error notice is-dismissible"><p>' .
277
- __('Error: GD Support is not available on your server, the captcha protection will not work!', 'ninjafirewall') .'</p></div>';
278
- }
 
 
 
 
 
 
 
 
 
279
 
280
- ?>
 
281
 
282
- <form method="post" name="bp_form">
283
  <?php wp_nonce_field('bfd_save', 'nfwnonce', 0); ?>
284
- <table class="form-table">
 
285
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
286
- <th scope="row"><?php _e('Enable brute force attack protection', 'ninjafirewall') ?></th>
287
- <td>&nbsp;</td>
288
- <td>
289
- <label><input type="radio" name="nfw_options[bf_enable]" value="1"<?php checked($bfconfig['bf_enable'], 1) ?> onclick="toggle_submenu(1);">&nbsp;<?php _e('Yes, if under attack', 'ninjafirewall') ?></label>
290
- </td>
291
  <td>
292
- <label><input type="radio" name="nfw_options[bf_enable]" value="2"<?php checked($bfconfig['bf_enable'], 2) ?> onclick="toggle_submenu(2);">&nbsp;<?php _e('Always ON', 'ninjafirewall') ?></label>
293
- </td>
294
- <td>
295
- <label><input type="radio" name="nfw_options[bf_enable]" value="0"<?php checked($bfconfig['bf_enable'], 0) ?> onclick="toggle_submenu(0);">&nbsp;<?php _e('No (default)', 'ninjafirewall') ?></label>
296
  </td>
297
  </tr>
298
  </table>
299
- <br />
300
 
301
- <div id="submenu_table"<?php echo $show_submenu_table == 1 ? '' : ' style="display:none"' ?>>
302
- <table class="form-table">
303
 
304
- <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
305
- <th scope="row"><?php _e('Type of protection', 'ninjafirewall') ?></th>
306
- <td>&nbsp;</td>
307
- <td style="vertical-align:top">
308
- <label><input type="radio" name="nfw_options[bf_type]" value="0"<?php checked($bfconfig['bf_type'], 0) ?> onclick="toggle_table(bf_enable, 0);">&nbsp;<?php _e('Password', 'ninjafirewall') ?></label>
309
- </td>
310
- <td style="vertical-align:top">
311
- <label><input type="radio" name="nfw_options[bf_type]" value="1"<?php checked($bfconfig['bf_type'], 1) ?> onclick="toggle_table(bf_enable, 1);"<?php echo $gd_disabled ?> />&nbsp;<?php _e('Captcha', 'ninjafirewall') ?></label><?php echo $missing_gd ?>
312
- </td>
313
- </tr>
314
- </table>
315
- </div>
316
 
317
- <div id="bf_table"<?php echo $show_bf_table == 1 ? '' : ' style="display:none"' ?>>
318
  <table class="form-table">
319
  <tr>
320
- <th scope="row"><?php _e('Protect the login page against', 'ninjafirewall') ?></th>
321
  <td>
322
- <p><label><input onclick="getpost(this.value);" type="radio" name="nfw_options[bf_request]" value="GET"<?php checked($bfconfig['bf_request'], 'GET') ?>>&nbsp;<?php _e('<code>GET</code> request attacks', 'ninjafirewall') ?></label></p>
323
- <p><label><input onclick="getpost(this.value);" type="radio" name="nfw_options[bf_request]" value="POST"<?php checked($bfconfig['bf_request'], 'POST') ?>>&nbsp;<?php _e('<code>POST</code> request attacks (default)', 'ninjafirewall') ?></label></p>
324
- <p><label><input onclick="getpost(this.value);" type="radio" name="nfw_options[bf_request]" value="GETPOST"<?php checked($bfconfig['bf_request'], 'GETPOST') ?>>&nbsp;<?php _e('<code>GET</code> and <code>POST</code> requests attacks', 'ninjafirewall') ?></label></p>
325
  </td>
326
  </tr>
327
- <tr valign="top">
328
- <th scope="row"><?php _e('Enable protection', 'ninjafirewall') ?></th>
329
  <td>
330
- <?php
331
- printf( __('For %1$s minutes, if more than %2$s %3$s requests within %4$s seconds.', 'ninjafirewall'),
332
- '<input maxlength="2" size="2" value="'. $bfconfig['bf_bantime'] .'" name="nfw_options[bf_bantime]" id="ban1" onkeyup="is_number(\'ban1\')" class="small-text" type="number" />',
333
- '<input maxlength="2" size="2" value="'. $bfconfig['bf_attempt'] .'" name="nfw_options[bf_attempt]" id="ban2" onkeyup="is_number(\'ban2\')" class="small-text" type="number" />', '<code id="get_post">'. $get_post .'</code>',
334
- '<input maxlength="2" size="2" value="'. $bfconfig['bf_maxtime'] .'" name="nfw_options[bf_maxtime]" id="ban3" onkeyup="is_number(\'ban3\')" class="small-text" type="number" />'
335
- );
336
- ?>
337
  </td>
338
- </tr>
339
- </table>
340
- </div>
341
-
342
- <?php
343
- if ( empty($bfconfig['auth_pass']) ) {
344
- $placeholder = '';
345
- } else {
346
- $placeholder = '&#149;&#149;&#149;&#149;&#149;&#149;&#149;&#149;';
347
- }
348
- ?>
349
- <div id="bf_table_password"<?php echo $show_bf_table_password ? '' : ' style="display:none"' ?>>
350
- <table class="form-table">
351
- <tr valign="top">
352
- <th scope="row"><?php _e('HTTP authentication', 'ninjafirewall') ?></th>
353
  <td>
354
- <?php _e('User:', 'ninjafirewall') ?>&nbsp;<input maxlength="32" type="text" autocomplete="off" value="<?php echo htmlspecialchars( $bfconfig['auth_name'] ) ?>" size="12" name="nfw_options[auth_name]" onkeyup="auth_user_valid();" />&nbsp;&nbsp;&nbsp;&nbsp;<?php _e('Password:', 'ninjafirewall') ?>&nbsp;<input maxlength="32" placeholder="<?php echo $placeholder ?>" type="password" autocomplete="off" value="" size="12" name="nfw_options[auth_pass]" />
355
- <br /><span class="description">&nbsp;<?php _e('User and Password must be from 6 to 32 characters.', 'ninjafirewall') ?></span>
356
- <br /><br /><?php _e('Message (max. 1024 characters, HTML tags allowed)', 'ninjafirewall') ?>:<br />
357
- <textarea id="realm" name="nfw_options[auth_msgtxt]" class="small-text code" cols="60" rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" oninput="realm_valid();"><?php echo htmlspecialchars( $bfconfig['auth_msgtxt'] ) ?></textarea>
358
- </td>
359
  </tr>
 
360
  </table>
361
- </div>
362
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363
 
364
- <div id="bf_table_captcha"<?php echo $show_bf_table_captcha ? '' : ' style="display:none"' ?>>
365
- <table class="form-table">
366
- <tr valign="top">
367
- <th scope="row"><?php _e('Message', 'ninjafirewall') ?></th>
368
- <td>
369
- <input maxlength="255" class="large-text" type="text" autocomplete="off" value="<?php echo htmlspecialchars( $bfconfig['captcha_text'] ) ?>" name="nfw_options[captcha_text]" />
370
- <p><span class="description"><?php _e('This message will be displayed above the captcha. Max. 255 characters.', 'ninjafirewall') ?></span></p>
371
- </td>
372
- </tr>
373
- </table>
374
  </div>
375
 
 
376
 
377
- <div id="bf_table_extra"<?php echo $show_bf_table_extra ? '' : ' style="display:none"' ?>>
378
- <br />
379
- <h3><?php _e('Various options', 'ninjafirewall') ?></h3>
380
  <table class="form-table">
381
  <?php
382
- // Warn the user if Jetpack is installed:
383
  if ( is_dir( WP_PLUGIN_DIR . '/jetpack' ) ) {
384
- $is_JetPack = '<p><img src="' . plugins_url() . '/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description">' . __('If you are using the Jetpack plugin, blocking access to the XML-RPC API may prevent it from working correctly.', 'ninjafirewall') . '</span></p>';
385
  } else {
386
  $is_JetPack = '';
387
  }
388
  ?>
389
  <tr>
390
- <th scope="row"><?php _e('XML-RPC API', 'ninjafirewall') ?></th>
391
  <td>
392
- <label><input type="checkbox" onClick="xmlrpc_warn(this);" name="nfw_options[bf_xmlrpc]" value="1"<?php checked($bfconfig['bf_xmlrpc'], 1) ?>>&nbsp;<?php _e('Apply the protection to the <code>xmlrpc.php</code> script as well.', 'ninjafirewall') ?></label><?php echo $is_JetPack; ?>
 
393
  </td>
394
  </tr>
395
 
396
  <tr>
397
- <th scope="row"><?php _e('Bot protection', 'ninjafirewall') ?></th>
398
  <td>
399
- <label><input type="checkbox" name="nfw_options[bf_allow_bot]" value="1"<?php checked($bfconfig['bf_allow_bot'], 0) ?>>&nbsp;<?php _e('Enable bot protection (applies to <code>wp-login.php</code> only.)', 'ninjafirewall') ?></label>
 
 
 
 
 
 
 
400
  </td>
401
  </tr>
402
 
403
- <tr valign="top">
404
- <th scope="row"><?php _e('Authentication log', 'ninjafirewall') ?></th>
405
  <td>
406
  <?php
407
  // Ensure that openlog() and syslog() are not disabled:
408
  if (! function_exists('syslog') || ! function_exists('openlog') ) {
409
  $bfconfig['bf_authlog'] = 0;
410
  $bf_msg = __('Your server configuration is not compatible with that option.', 'ninjafirewall');
411
- $enabled = 0;
412
  } else {
413
- $bf_msg = __('The login protection must be set to "Yes, if under attack" in order to use this option.', 'ninjafirewall');
414
- $enabled = 1;
 
 
 
 
415
  }
416
- ?>
417
- <label><input type="checkbox" name="nfw_options[bf_authlog]" value="1"<?php checked($bfconfig['bf_authlog'], 1) ?><?php disabled($enabled, 0)?>>&nbsp;<?php _e('Write the incident to the server Authentication log.', 'ninjafirewall') ?></label>
418
- <br />
419
- <span class="description"><?php echo $bf_msg ?></span>
420
  </td>
421
  </tr>
422
  <tr>
423
- <th scope="row"><?php _e('Signature', 'ninjafirewall') ?></th>
424
  <td>
425
- <label><input type="checkbox" name="nfw_options[bf_nosig]" value="1"<?php checked($bfconfig['bf_nosig'], 1) ?>>&nbsp;<?php
426
- // translators: "Brute-force protection by NinjaFirewall" should not be translated.
427
- _e('Disable the <i>Brute-force protection by NinjaFirewall</i> signature on the protection page.', 'ninjafirewall') ?></label>
428
  </td>
429
  </tr>
430
-
431
  </table>
 
432
  </div>
433
 
434
  <br />
435
- <br />
436
- <input id="save_login" class="button-primary" type="submit" name="Save" value="<?php _e('Save Login Protection', 'ninjafirewall') ?>" />
437
- <div align="right"><?php _e('See our benchmark and stress-test:', 'ninjafirewall') ?>
438
- <br />
439
- <a href="https://blog.nintechnet.com/wordpress-brute-force-attack-detection-plugins-comparison-2015/">Brute-force attack detection plugins comparison</a>
 
 
 
440
  </div>
441
- </form>
 
442
  </div>
443
 
444
  <?php
@@ -447,10 +376,10 @@ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' ) ) {
447
 
448
  function nf_sub_loginprot_save() {
449
 
450
- // Block immediately if user is not allowed :
451
  nf_not_allowed( 'block', __LINE__ );
452
 
453
- // The directory must be writable :
454
  if (! is_writable( NFW_LOG_DIR . '/nfwlog/cache' ) ) {
455
  return( sprintf( __('Error: %s directory is not writable. Please chmod it to 0777.', 'ninjafirewall'), '<code>'. htmlspecialchars(NFW_LOG_DIR) .'/nfwlog/cache</code>') );
456
  }
@@ -462,42 +391,42 @@ function nf_sub_loginprot_save() {
462
  require( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' );
463
  }
464
 
465
- if ( preg_match( '/^[012]$/', $_POST['nfw_options']['bf_enable'] ) ) {
466
- $bf_enable = $_POST['nfw_options']['bf_enable'];
 
 
 
 
467
  } else {
468
- $bf_enable = 1;
469
  }
470
 
471
- if ( preg_match( '/^[01]$/', $_POST['nfw_options']['bf_type'] ) ) {
472
- $bf_type = $_POST['nfw_options']['bf_type'];
473
  } else {
474
  $bf_type = 0;
475
  }
476
 
477
- // Ensure we have all values, otherwise set the default ones :
478
- if ( @preg_match('/^(GET|POST|GETPOST)$/', $_POST['nfw_options']['bf_request'] ) ) {
479
  $bf_request = $_POST['nfw_options']['bf_request'];
480
  } else {
481
- // Default value :
482
  $bf_request = 'POST';
483
  }
484
 
485
- if ( @preg_match('/^[1-9][0-9]?$/', $_POST['nfw_options']['bf_bantime'] ) ) {
486
- $bf_bantime = $_POST['nfw_options']['bf_bantime'];
487
  } else {
488
- // Default value :
489
  $bf_bantime = 5;
490
  }
491
- if ( @preg_match('/^[1-9][0-9]?$/', $_POST['nfw_options']['bf_attempt'] ) ) {
492
- $bf_attempt = $_POST['nfw_options']['bf_attempt'];
493
  } else {
494
- // Default value :
495
  $bf_attempt = 8;
496
  }
497
- if ( @preg_match('/^[1-9][0-9]?$/', $_POST['nfw_options']['bf_maxtime'] ) ) {
498
- $bf_maxtime = $_POST['nfw_options']['bf_maxtime'];
499
  } else {
500
- // Default value :
501
  $bf_maxtime = 15;
502
  }
503
 
4
  | NinjaFirewall (WP+ Edition) |
5
  | |
6
  | (c) NinTechNet - https://nintechnet.com/ |
7
+ +=====================================================================+ sa / 2
8
  */
9
 
10
  if (! defined( 'NFW_ENGINE_VERSION' ) ) {
18
 
19
  echo '
20
  <div class="wrap">
21
+ <h1><img style="vertical-align:top" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Login Protection', 'ninjafirewall') . '</h1>';
22
 
23
  // Saved ?
24
+ if ( isset( $_POST['nfw_options'] ) ) {
25
+ if ( empty($_POST['nfwnonce'] ) || ! wp_verify_nonce( $_POST['nfwnonce'], 'bfd_save' ) ) {
26
  wp_nonce_ays('bfd_save');
27
  }
28
  $res = nf_sub_loginprot_save();
38
 
39
  $bfconfig = nfw_read_bf_config( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' );
40
 
41
+ if ( empty( $bfconfig['bf_enable'] ) || ! preg_match('/^[12]$/', $bfconfig['bf_enable'] ) ) {
42
  $bfconfig['bf_enable'] = 0;
43
  }
44
+ if ( empty( $bfconfig['bf_request'] ) || preg_match('/^(GET|POST|GETPOST)$/', $bfconfig['bf_request'] ) ) {
45
  $bfconfig['bf_request'] = 'POST';
46
  }
47
  if ( $bfconfig['bf_request'] == 'GETPOST' ) {
49
  } else {
50
  $get_post = $bfconfig['bf_request'];
51
  }
52
+ if ( empty( $bfconfig['bf_bantime'] ) || ! preg_match('/^[1-9][0-9]?$/', $bfconfig['bf_bantime'] ) ) {
53
  $bfconfig['bf_bantime'] = 5;
54
  }
55
+ if ( empty( $bfconfig['bf_attempt'] ) || ! preg_match('/^[1-9][0-9]?$/', $bfconfig['bf_attempt'] ) ) {
56
  $bfconfig['bf_attempt'] = 8;
57
  }
58
+ if ( empty( $bfconfig['bf_maxtime'] ) || ! preg_match('/^[1-9][0-9]?$/', $bfconfig['bf_maxtime'] ) ) {
59
  $bfconfig['bf_maxtime'] = 15;
60
  }
61
+ if ( empty( $bfconfig['auth_pass'] ) ) {
62
+ $bfconfig['auth_pass'] = '';
63
+ }
64
+ if ( empty( $bfconfig['auth_name'] ) || strlen( $bfconfig['auth_pass'] ) != 40 ) {
65
  $bfconfig['auth_name']= '';
66
  }
67
  if ( empty( $bfconfig['auth_msgtxt'] ) ) {
77
  if ( strlen( $bfconfig['auth_msgtxt'] ) > 1024 ) {
78
  $bfconfig['auth_msgtxt'] = mb_substr( $bfconfig['auth_msgtxt'], 0, 1024, 'utf-8' );
79
  }
 
80
  if ( empty( $bfconfig['captcha_text'] ) ) {
81
  $bfconfig['captcha_text'] = __( 'Type the characters you see in the picture below:', 'ninjafirewall' );
82
  } else {
86
  }
87
  }
88
 
89
+ if ( empty( $bfconfig['bf_xmlrpc'] ) ) {
90
  $bfconfig['bf_xmlrpc'] = 0;
91
  } else {
92
  $bfconfig['bf_xmlrpc'] = 1;
93
  }
94
+ if ( empty( $bfconfig['bf_authlog'] ) ) {
95
  $bfconfig['bf_authlog'] = 0;
96
  } else {
97
  $bfconfig['bf_authlog'] = 1;
116
 
117
  } else {
118
  // Default values :
119
+ $bfconfig['bf_type'] = 1;
120
  $bfconfig['bf_enable'] = 0;
121
  $bfconfig['bf_request'] = 'POST';
122
  $bfconfig['bf_bantime'] = 5;
132
  $get_post = 'POST';
133
  }
134
  ?>
135
+ <script type="text/javascript">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  var bf_type = <?php echo $bfconfig['bf_type'] ?>;
137
  var bf_enable = <?php echo $bfconfig['bf_enable'] ?>;
138
+ </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  <br />
140
+ <?php
141
+ // Protection is disabled:
142
+ if ( empty( $bfconfig['bf_enable'] ) ) {
143
+ $ui_enabled = 0;
144
+ $show_bf_table = 0;
145
+ $show_bf_table_password = 0;
146
+ $show_bf_table_extra = 0;
147
+ $show_bf_table_captcha = 0;
148
+
149
+ // Protection set to "When under attack":
150
+ } elseif ( $bfconfig['bf_enable'] == 1 ) {
151
+ $ui_enabled = 1;
152
+ $show_bf_table = 1;
153
+ $show_bf_table_extra = 1;
154
+ // Password?
155
+ if ( empty( $bfconfig['bf_type'] ) ) {
156
+ $show_bf_table_password = 1;
157
  $show_bf_table_captcha = 0;
158
+ // Captcha?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  } else {
160
+ $show_bf_table_password = 0;
161
+ $show_bf_table_captcha = 1;
 
 
 
 
 
 
 
 
 
 
 
162
  }
163
 
164
+ // Protection set to "Always ON" (2):
165
+ } else {
166
+ $ui_enabled = 1;
167
+ $show_bf_table = 0;
168
+ $show_bf_table_extra = 1;
169
+ // Password?
170
+ if ( empty( $bfconfig['bf_type'] ) ) {
171
+ $show_bf_table_password = 1;
172
+ $show_bf_table_captcha = 0;
173
+ // Captcha?
174
  } else {
175
+ $show_bf_table_password = 0;
176
+ $show_bf_table_captcha = 1;
 
177
  }
178
+ }
179
 
180
+ // Make sure we can display the captcha with the GD extension:
181
+ if ( function_exists( 'gd_info' ) ) {
182
+ $missing_gd = '';
183
+ $gd_disabled = '';
184
+ } else {
185
+ $missing_gd = '<p class="description">' .
186
+ __( 'GD Support is not available on your server, the CAPTCHA option is disabled.', 'ninjafirewall' ) . '</p>';
187
+ $gd_disabled = ' disabled="disabled"';
188
+ }
189
+ if ( $gd_disabled && $bfconfig['bf_type'] == 1 ) {
190
+ echo '<div class="error notice is-dismissible"><p>' .
191
+ __('Error: GD Support is not available on your server, the captcha protection will not work!', 'ninjafirewall') .'</p></div>';
192
+ }
193
 
194
+ ?>
195
+ <form method="post" name="bp_form" onSubmit="return check_login_fields();">
196
 
 
197
  <?php wp_nonce_field('bfd_save', 'nfwnonce', 0); ?>
198
+
199
+ <table class="form-table nfw-table">
200
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
201
+ <th scope="row" class="row-med"><?php _e('Enable brute force attack protection', 'ninjafirewall') ?></th>
 
 
 
 
202
  <td>
203
+ <?php nfw_toggle_switch( 'green', 'ui_enabled', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', $ui_enabled, false, 'onclick="nfwjs_up_down(\'submenu_table\');nfwjs_up_down(\'bf_table_extra\');"', 'ui-enabled' ) ?>
 
 
 
204
  </td>
205
  </tr>
206
  </table>
 
207
 
208
+ <br />
 
209
 
210
+ <div class="nfw-table" id="submenu_table"<?php echo $ui_enabled == 1 ? '' : ' style="display:none"' ?>>
 
 
 
 
 
 
 
 
 
 
 
211
 
 
212
  <table class="form-table">
213
  <tr>
214
+ <th scope="row" class="row-med"><?php _e('Type of protection', 'ninjafirewall') ?></th>
215
  <td>
216
+ <p><label><input type="radio" name="nfw_options[bf_type]" value="0"<?php checked($bfconfig['bf_type'], 0) ?> onclick="nfwjs_toggle_table(bf_enable, 0);">&nbsp;<?php _e('Username + Password', 'ninjafirewall') ?></label></p>
217
+ <p><label><input type="radio" name="nfw_options[bf_type]" value="1"<?php checked($bfconfig['bf_type'], 1) ?> onclick="nfwjs_toggle_table(bf_enable, 1);"<?php echo $gd_disabled ?> />&nbsp;<?php _e('Captcha image', 'ninjafirewall') ?></label></p>
218
+ <?php echo $missing_gd ?>
219
  </td>
220
  </tr>
221
+ <tr>
222
+ <th scope="row" class="row-med"><?php _e('When to enable the protection', 'ninjafirewall') ?></th>
223
  <td>
224
+ <p><label><input type="radio" name="nfw_options[bf_enable]" value="2"<?php checked($bfconfig['bf_enable'], 2) ?> onclick="nfwjs_toggle_submenu(2);">&nbsp;<?php _e('Always enabled', 'ninjafirewall') ?></label></p>
225
+ <p><label><input type="radio" name="nfw_options[bf_enable]" value="1"<?php checked($bfconfig['bf_enable'], 1) ?> onclick="nfwjs_toggle_submenu(1);">&nbsp;<?php _e('When under attack', 'ninjafirewall') ?></label></p>
 
 
 
 
 
226
  </td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  <td>
 
 
 
 
 
228
  </tr>
229
+
230
  </table>
 
231
 
232
+ <div id="bf_table"<?php echo $show_bf_table == 1 ? '' : ' style="display:none"' ?>>
233
+ <table class="form-table">
234
+ <tr>
235
+ <th scope="row" class="row-med"><?php _e('Protect the login page against', 'ninjafirewall') ?></th>
236
+ <td>
237
+ <p><label><input onclick="nfwjs_getpost(this.value);" type="radio" name="nfw_options[bf_request]" value="GET"<?php checked($bfconfig['bf_request'], 'GET') ?>>&nbsp;<?php _e('<code>GET</code> request attacks', 'ninjafirewall') ?></label></p>
238
+ <p><label><input onclick="nfwjs_getpost(this.value);" type="radio" name="nfw_options[bf_request]" value="POST"<?php checked($bfconfig['bf_request'], 'POST') ?>>&nbsp;<?php _e('<code>POST</code> request attacks (default)', 'ninjafirewall') ?></label></p>
239
+ <p><label><input onclick="nfwjs_getpost(this.value);" type="radio" name="nfw_options[bf_request]" value="GETPOST"<?php checked($bfconfig['bf_request'], 'GETPOST') ?>>&nbsp;<?php _e('<code>GET</code> and <code>POST</code> requests attacks', 'ninjafirewall') ?></label></p>
240
+ </td>
241
+ </tr>
242
+ <tr>
243
+ <th scope="row" class="row-med"><?php _e('Enable protection', 'ninjafirewall') ?></th>
244
+ <td>
245
+ <?php
246
+ printf( __('For %1$s minutes, if more than %2$s %3$s requests within %4$s seconds.', 'ninjafirewall'),
247
+ '<input maxlength="2" size="2" min="1" value="'. $bfconfig['bf_bantime'] .'" name="nfw_options[bf_bantime]" id="ban1" class="small-text" type="number" />',
248
+ '<input maxlength="2" size="2" min="1" value="'. $bfconfig['bf_attempt'] .'" name="nfw_options[bf_attempt]" id="ban2" class="small-text" type="number" />', '<code id="get_post">'. $get_post .'</code>',
249
+ '<input maxlength="2" size="2" min="1" value="'. $bfconfig['bf_maxtime'] .'" name="nfw_options[bf_maxtime]" id="ban3" class="small-text" type="number" />'
250
+ );
251
+ ?>
252
+ </td>
253
+ </tr>
254
+ </table>
255
+ </div>
256
+
257
+ <?php
258
+ if ( empty( $bfconfig['auth_pass'] ) ) {
259
+ $placeholder = '';
260
+ } else {
261
+ $placeholder = '&#149;&#149;&#149;&#149;&#149;&#149;&#149;&#149;';
262
+ }
263
+ ?>
264
+ <div id="bf_table_password"<?php echo $show_bf_table_password ? '' : ' style="display:none"' ?>>
265
+ <table class="form-table">
266
+ <tr>
267
+ <th scope="row" class="row-med"><?php _e('HTTP authentication', 'ninjafirewall') ?></th>
268
+ <td>
269
+ <?php _e('User:', 'ninjafirewall') ?>&nbsp;<input maxlength="32" type="text" autocomplete="off" value="<?php echo htmlspecialchars( $bfconfig['auth_name'] ) ?>" size="12" name="nfw_options[auth_name]" onkeyup="nfwjs_auth_user_valid();" />&nbsp;&nbsp;&nbsp;&nbsp;<?php _e('Password:', 'ninjafirewall') ?>&nbsp;<input maxlength="32" placeholder="<?php echo $placeholder ?>" type="password" autocomplete="off" value="" size="12" name="nfw_options[auth_pass]" />
270
+ <br /><p class="description">&nbsp;<?php _e('User and Password must be from 6 to 32 characters.', 'ninjafirewall') ?></p>
271
+ <br /><br /><?php _e('Message (max. 1024 characters, HTML tags allowed)', 'ninjafirewall') ?>:<br />
272
+ <textarea id="realm" name="nfw_options[auth_msgtxt]" class="small-text code" cols="60" rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" oninput="nfwjs_realm_valid();"><?php echo htmlspecialchars( $bfconfig['auth_msgtxt'] ) ?></textarea>
273
+ </td>
274
+ </tr>
275
+ </table>
276
+ </div>
277
+
278
+
279
+ <div id="bf_table_captcha"<?php echo $show_bf_table_captcha ? '' : ' style="display:none"' ?>>
280
+ <table class="form-table">
281
+ <tr>
282
+ <th scope="row" class="row-med"><?php _e('Message', 'ninjafirewall') ?></th>
283
+ <td>
284
+ <input maxlength="255" class="large-text" type="text" autocomplete="off" value="<?php echo htmlspecialchars( $bfconfig['captcha_text'] ) ?>" name="nfw_options[captcha_text]" />
285
+ <p class="description"><?php _e('This message will be displayed above the captcha. Max. 255 characters.', 'ninjafirewall') ?></p>
286
+ </td>
287
+ </tr>
288
+ </table>
289
+ </div>
290
 
 
 
 
 
 
 
 
 
 
 
291
  </div>
292
 
293
+ <br />
294
 
295
+ <div class="nfw-table" id="bf_table_extra"<?php echo $show_bf_table_extra ? '' : ' style="display:none"' ?>>
296
+ <h3>&nbsp;&nbsp;<?php _e('Various options', 'ninjafirewall') ?></h3>
 
297
  <table class="form-table">
298
  <?php
299
+ // Warn the user if Jetpack is installed
300
  if ( is_dir( WP_PLUGIN_DIR . '/jetpack' ) ) {
301
+ $is_JetPack = '<p class="description">'. __('If you are using the Jetpack plugin, blocking access to the XML-RPC API may prevent it from working correctly.', 'ninjafirewall') .'</p>';
302
  } else {
303
  $is_JetPack = '';
304
  }
305
  ?>
306
  <tr>
307
+ <th scope="row" class="row-med"><?php _e('Apply the protection to the <code>xmlrpc.php</code> script as well', 'ninjafirewall') ?></th>
308
  <td>
309
+ <?php nfw_toggle_switch( 'info', 'nfw_options[bf_xmlrpc]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $bfconfig['bf_xmlrpc'] ) ?>
310
+ <?php echo $is_JetPack; ?>
311
  </td>
312
  </tr>
313
 
314
  <tr>
315
+ <th scope="row" class="row-med"><?php _e('Enable bot protection', 'ninjafirewall') ?></th>
316
  <td>
317
+ <?php
318
+ if ( $bfconfig['bf_allow_bot'] ) {
319
+ $bot = 0;
320
+ } else {
321
+ $bot = 1;
322
+ }
323
+
324
+ nfw_toggle_switch( 'info', 'nfw_options[bf_allow_bot]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $bot ) ?>
325
  </td>
326
  </tr>
327
 
328
+ <tr>
329
+ <th scope="row" class="row-med"><?php _e('Write the incident to the server Authentication log', 'ninjafirewall') ?></th>
330
  <td>
331
  <?php
332
  // Ensure that openlog() and syslog() are not disabled:
333
  if (! function_exists('syslog') || ! function_exists('openlog') ) {
334
  $bfconfig['bf_authlog'] = 0;
335
  $bf_msg = __('Your server configuration is not compatible with that option.', 'ninjafirewall');
336
+ $disabled = 1;
337
  } else {
338
+ $bf_msg = __('The login protection must be set to "When under attack" in order to use this option.', 'ninjafirewall');
339
+ if ( $bfconfig['bf_enable'] != 1 ) {
340
+ $disabled = 1;
341
+ } else {
342
+ $disabled = 0;
343
+ }
344
  }
345
+ nfw_toggle_switch( 'info', 'nfw_options[bf_authlog]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $bfconfig['bf_authlog'], $disabled, false, 'nfw-authlog' ) ?>
346
+ <p class="description"><?php echo $bf_msg ?></p>
 
 
347
  </td>
348
  </tr>
349
  <tr>
350
+ <th scope="row" class="row-med"><?php _e('Disable NinjaFirewall\'s signature on the login protection page', 'ninjafirewall') ?></th>
351
  <td>
352
+ <?php nfw_toggle_switch( 'info', 'nfw_options[bf_nosig]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $bfconfig['bf_nosig'] ) ?>
 
 
353
  </td>
354
  </tr>
 
355
  </table>
356
+ <br />
357
  </div>
358
 
359
  <br />
360
+
361
+ <div style="float:left;width:50%">
362
+ <input id="save_login" class="button-primary" type="submit" name="Save" value="<?php _e('Save Login Protection', 'ninjafirewall') ?>" />
363
+ </div>
364
+ <div style="float:right;width:50%;text-align:right">
365
+ <?php _e('See our benchmark and stress-test:', 'ninjafirewall') ?>
366
+ <br />
367
+ <a href="https://blog.nintechnet.com/wordpress-brute-force-attack-detection-plugins-comparison-2015/">Brute-force attack detection plugins comparison</a>
368
  </div>
369
+
370
+ </form>
371
  </div>
372
 
373
  <?php
376
 
377
  function nf_sub_loginprot_save() {
378
 
379
+ // Block immediately if user is not allowed
380
  nf_not_allowed( 'block', __LINE__ );
381
 
382
+ // The directory must be writable
383
  if (! is_writable( NFW_LOG_DIR . '/nfwlog/cache' ) ) {
384
  return( sprintf( __('Error: %s directory is not writable. Please chmod it to 0777.', 'ninjafirewall'), '<code>'. htmlspecialchars(NFW_LOG_DIR) .'/nfwlog/cache</code>') );
385
  }
391
  require( NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php' );
392
  }
393
 
394
+ if ( empty( $_POST['ui_enabled'] ) ) {
395
+ $_POST['nfw_options']['bf_enable'] = 0;
396
+ }
397
+
398
+ if (! empty( $_POST['nfw_options']['bf_enable'] ) && preg_match( '/^[12]$/', $_POST['nfw_options']['bf_enable'] ) ) {
399
+ $bf_enable = (int) $_POST['nfw_options']['bf_enable'];
400
  } else {
401
+ $bf_enable = 0;
402
  }
403
 
404
+ if (! empty( $_POST['nfw_options']['bf_type'] ) && preg_match( '/^[01]$/', $_POST['nfw_options']['bf_type'] ) ) {
405
+ $bf_type = (int) $_POST['nfw_options']['bf_type'];
406
  } else {
407
  $bf_type = 0;
408
  }
409
 
410
+ // Ensure we have all values, otherwise set the default ones
411
+ if (! empty( $_POST['nfw_options']['bf_request'] ) && preg_match('/^(GET|POST|GETPOST)$/', $_POST['nfw_options']['bf_request'] ) ) {
412
  $bf_request = $_POST['nfw_options']['bf_request'];
413
  } else {
 
414
  $bf_request = 'POST';
415
  }
416
 
417
+ if (! empty( $_POST['nfw_options']['bf_bantime'] ) && preg_match('/^[1-9][0-9]?$/', $_POST['nfw_options']['bf_bantime'] ) ) {
418
+ $bf_bantime = (int) $_POST['nfw_options']['bf_bantime'];
419
  } else {
 
420
  $bf_bantime = 5;
421
  }
422
+ if (! empty( $_POST['nfw_options']['bf_attempt'] ) && preg_match('/^[1-9][0-9]?$/', $_POST['nfw_options']['bf_attempt'] ) ) {
423
+ $bf_attempt = (int) $_POST['nfw_options']['bf_attempt'];
424
  } else {
 
425
  $bf_attempt = 8;
426
  }
427
+ if (! empty( $_POST['nfw_options']['bf_maxtime'] ) && preg_match('/^[1-9][0-9]?$/', $_POST['nfw_options']['bf_maxtime'] ) ) {
428
+ $bf_maxtime = (int) $_POST['nfw_options']['bf_maxtime'];
429
  } else {
 
430
  $bf_maxtime = 15;
431
  }
432
 
lib/network.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -36,39 +36,47 @@ if (! is_multisite() ) {
36
  return;
37
  }
38
 
39
- if ( isset( $_POST['nfw_options']) ) {
 
 
40
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'network_save') ) {
41
  wp_nonce_ays('network_save');
42
  }
43
- if ( $_POST['nfw_options']['nt_show_status'] == 2 ) {
44
  $nfw_options['nt_show_status'] = 2;
45
  } else {
46
  $nfw_options['nt_show_status'] = 1;
47
  }
 
48
  nfw_update_option( 'nfw_options', $nfw_options );
49
  echo '<div class="updated notice is-dismissible"><p>' . __('Your changes have been saved.', 'ninjafirewall') . '</p></div>';
50
  $nfw_options = nfw_get_option( 'nfw_options' );
51
  }
52
 
53
- if ( empty($nfw_options['nt_show_status']) ) {
54
- $nfw_options['nt_show_status'] = 1;
 
 
55
  }
56
  ?>
57
- <form method="post" name="nfwnetwork">
58
- <?php wp_nonce_field('network_save', 'nfwnonce', 0); ?>
59
- <h3><?php _e('NinjaFirewall Status', 'ninjafirewall') ?></h3>
60
- <table class="form-table">
61
- <tr>
62
- <th scope="row"><?php _e('Display NinjaFirewall status icon in the admin bar of all sites in the network', 'ninjafirewall') ?></th>
63
- <td width="200"><label><input type="radio" name="nfw_options[nt_show_status]" value="1"<?php echo $nfw_options['nt_show_status'] != 2 ? ' checked' : '' ?>>&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label></td>
64
- <td><label><input type="radio" name="nfw_options[nt_show_status]" value="2"<?php echo $nfw_options['nt_show_status'] == 2 ? ' checked' : '' ?>>&nbsp;<?php _e('No', 'ninjafirewall') ?></label></td>
65
- </tr>
66
- </table>
67
-
68
  <br />
69
- <br />
70
- <input class="button-primary" type="submit" name="Save" value="<?php _e('Save Network options', 'ninjafirewall') ?>" />
71
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  </div>
73
  <?php
74
  // ---------------------------------------------------------------------
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
36
  return;
37
  }
38
 
39
+ // Saved?
40
+ if (! empty( $_POST['nf-network'] ) ) {
41
+
42
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'network_save') ) {
43
  wp_nonce_ays('network_save');
44
  }
45
+ if ( empty( $_POST['nfw_options']['nt_show_status'] ) ) {
46
  $nfw_options['nt_show_status'] = 2;
47
  } else {
48
  $nfw_options['nt_show_status'] = 1;
49
  }
50
+ // Update options
51
  nfw_update_option( 'nfw_options', $nfw_options );
52
  echo '<div class="updated notice is-dismissible"><p>' . __('Your changes have been saved.', 'ninjafirewall') . '</p></div>';
53
  $nfw_options = nfw_get_option( 'nfw_options' );
54
  }
55
 
56
+ if ( empty( $nfw_options['nt_show_status'] ) || $nfw_options['nt_show_status'] == 2 ) {
57
+ $nt_show_status = 0;
58
+ } else {
59
+ $nt_show_status = 1;
60
  }
61
  ?>
 
 
 
 
 
 
 
 
 
 
 
62
  <br />
63
+ <form method="post" name="nfwnetwork">
64
+ <?php wp_nonce_field('network_save', 'nfwnonce', 0); ?>
65
+ <h3><?php _e('NinjaFirewall Status', 'ninjafirewall') ?></h3>
66
+ <table class="form-table nfw-table">
67
+ <tr>
68
+ <th scope="row" class="row-med"><?php _e('Display NinjaFirewall status icon in the admin bar of all sites in the network', 'ninjafirewall') ?></th>
69
+ <td>
70
+ <?php nfw_toggle_switch( 'info', 'nfw_options[nt_show_status]', __('Yes', 'ninjafirewall'), __('No', 'ninjafirewall'), 'small', $nt_show_status ) ?>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+
75
+ <br />
76
+ <br />
77
+ <input class="button-primary" type="submit" name="Save" value="<?php _e('Save Network options', 'ninjafirewall') ?>" />
78
+ <input type="hidden" name="nf-network" value="1" />
79
+ </form>
80
  </div>
81
  <?php
82
  // ---------------------------------------------------------------------
lib/ninjafirewall.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: NinjaFirewall (WP Edition)
4
+ Plugin URI: https://nintechnet.com/
5
+ Description: NinjaFirewall's fallback loader. Do not remove. This fill will be deleted when uninstalling NinjaFirewall.
6
+ Version: 1.0
7
+ Author: The Ninja Technologies Network
8
+ Author URI: https://nintechnet.com/
9
+ License: GPLv3 or later
10
+ Network: true
11
+ */
12
+ if (! defined('ABSPATH') || defined('NFW_STATUS') || defined('NFW_WPWAF') || ! file_exists( WP_PLUGIN_DIR .'/ninjafirewall/lib/firewall.php' ) ) {
13
+ return false;
14
+ }
15
+ define('NFW_WPWAF', 2);
16
+ @include_once WP_PLUGIN_DIR .'/ninjafirewall/lib/firewall.php';
lib/overview.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -27,12 +27,56 @@ if (! defined('NF_DISABLED') ) {
27
  is_nfw_enabled();
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  ?>
31
  <div class="wrap">
32
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png') ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
33
 
34
  <?php
35
- if ( @NFW_STATUS == 20 && ! empty( $_REQUEST['nfw_firstrun']) ) {
36
  echo '<br><div class="updated notice is-dismissible"><p>' .
37
  __('Congratulations, NinjaFirewall is up and running!', 'ninjafirewall') . '<br />' .
38
  __('If you need help, click on the contextual "Help" menu tab located in the upper right corner of each page.', 'ninjafirewall');
@@ -47,66 +91,79 @@ if (! defined('NF_DISABLED') ) {
47
  unset( $_SESSION['waf_mode'] );
48
  }
49
 
50
- // Display a one-time notice after two weeks of use:
51
  nfw_rate_notice( $nfw_options );
52
 
53
  ?>
54
  <br />
55
- <table class="form-table">
56
 
57
  <?php
58
- if (NF_DISABLED) {
59
- if (! empty($GLOBALS['err_fw'][NF_DISABLED]) ) {
60
  $msg = $GLOBALS['err_fw'][NF_DISABLED];
61
  } else {
62
- $msg = __('unknown error', 'ninjafirewall') . ' #' . NF_DISABLED;
63
  }
64
  ?>
65
  <tr>
66
- <th scope="row"><?php _e('Firewall', 'ninjafirewall') ?></th>
67
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-error.png' ) ?>"></td>
68
- <td><?php echo $msg ?></td>
69
  </tr>
70
 
71
  <?php
72
  } else {
73
  ?>
74
-
75
  <tr>
76
- <th scope="row"><?php _e('Firewall', 'ninjafirewall') ?></th>
77
- <td width="20" align="left">&nbsp;</td>
78
  <td><?php _e('Enabled', 'ninjafirewall') ?></td>
79
  </tr>
80
-
81
  <?php
82
  }
83
 
84
- if ( defined('NFW_WPWAF') ) {
85
- $mode = __('WordPress WAF', 'ninjafirewall');
86
- } else {
87
- $mode = __('Full WAF', 'ninjafirewall');
88
- }
89
  ?>
90
  <tr>
91
- <th scope="row"><?php _e('Mode', 'ninjafirewall') ?></th>
92
- <td width="20" align="left">&nbsp;</td>
93
- <td><?php printf( __('NinjaFirewall is running in %s mode.', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/">'. $mode .'</a>'); ?></td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  </tr>
95
  <?php
96
 
97
- if (! empty( $nfw_options['debug']) ) {
98
  ?>
99
  <tr>
100
- <th scope="row"><?php _e('Debugging mode', 'ninjafirewall') ?></th>
101
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-error.png' ) ?>"></td>
102
- <td><?php _e('Enabled.', 'ninjafirewall') ?>&nbsp;<a href="?page=nfsubopt"><?php _e('Click here to turn Debugging Mode off', 'ninjafirewall') ?></a></td>
103
  </tr>
104
  <?php
105
  }
106
  ?>
107
  <tr>
108
- <th scope="row"><?php _e('PHP SAPI', 'ninjafirewall') ?></th>
109
- <td width="20" align="left">&nbsp;</td>
 
 
 
 
 
 
 
 
110
  <td>
111
  <?php
112
  if ( defined('HHVM_VERSION') ) {
@@ -118,61 +175,51 @@ if (! defined('NF_DISABLED') ) {
118
  ?>
119
  </td>
120
  </tr>
121
- <tr>
122
- <th scope="row"><?php _e('Version', 'ninjafirewall') ?></th>
123
- <td width="20" align="left">&nbsp;</td>
124
- <td><?php echo NFW_ENGINE_VERSION . ' ~ ' . __('Security rules:', 'ninjafirewall' ) . ' ' . preg_replace('/(\d{4})(\d\d)(\d\d)/', '$1-$2-$3', $nfw_options['rules_version']) ?></td>
125
- </tr>
126
  <?php
127
 
128
- // If security rules updates are disabled, warn the user:
129
  if ( empty( $nfw_options['enable_updates'] ) ) {
130
  ?>
131
  <tr>
132
- <th scope="row"><?php _e('Updates', 'ninjafirewall') ?></th>
133
- <td width="20" align="left"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/glyphicons-warning.png"></td>
134
- <td><a href="?page=nfsubupdates"><?php _e( 'Security rules updates are disabled.', 'ninjafirewall' ) ?></a> <?php _e( 'If you want your blog to be protected against the latest threats, enable automatic security rules updates.', 'ninjafirewall' ) ?></td>
135
  </tr>
136
  <?php
137
  }
138
 
139
- if ( empty($_SESSION['nfw_goodguy']) ) {
140
  ?>
141
  <tr>
142
- <th scope="row"><?php _e('Admin user', 'ninjafirewall') ?></th>
143
- <td width="20" align="left"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/glyphicons-warning.png"></td>
144
- <td><?php printf( __('You are not whitelisted. Ensure that the "Do not block WordPress administrator" option is enabled in the <a href="%s">Firewall Policies</a> menu, otherwise you could get blocked by the firewall while working from your administration dashboard.', 'ninjafirewall'), '?page=nfsubpolicies') ?></td>
145
  </tr>
146
  <?php
147
  } else {
148
  $current_user = wp_get_current_user();
149
  ?>
150
  <tr>
151
- <th scope="row"><?php _e('Admin user', 'ninjafirewall') ?></th>
152
- <td width="20" align="left">&nbsp;</td>
153
- <td><code><?php echo htmlspecialchars($current_user->user_login) ?></code>: <?php _e('You are whitelisted by the firewall.', 'ninjafirewall') ?></td>
154
  </tr>
155
  <?php
156
  }
157
  if ( defined('NFW_ALLOWED_ADMIN') && ! is_multisite() ) {
158
  ?>
159
  <tr>
160
- <th scope="row"><?php _e('Restrictions', 'ninjafirewall') ?></th>
161
- <td width="20" align="left">&nbsp;</td>
162
- <td><?php _e('Access to NinjaFirewall is restricted to:', 'ninjafirewall') ?> <code><?php echo htmlspecialchars(NFW_ALLOWED_ADMIN) ?></code></td>
163
  </tr>
164
  <?php
165
  }
166
 
167
  // Try to find out if there is any "lost" session between the firewall
168
  // and the plugin part of NinjaFirewall (could be a buggy plugin killing
169
- // the session etc), unless we just installed it:
170
  if ( defined( 'NFW_SWL' ) && ! empty( $_SESSION['nfw_goodguy'] ) && empty( $_REQUEST['nfw_firstrun'] ) ) {
171
  ?>
172
  <tr>
173
- <th scope="row"><?php _e('User session', 'ninjafirewall') ?></th>
174
- <td width="20" align="left"><img src="<?php echo plugins_url() . '/ninjafirewall/images/glyphicons-warning.png' ?>"></td>
175
- <td><?php _e('It seems that the user session set by NinjaFirewall was not found by the firewall script.', 'ninjafirewall') ?></td>
176
  </tr>
177
  <?php
178
  }
@@ -195,64 +242,56 @@ if (! defined('NF_DISABLED') ) {
195
  }
196
  ?>
197
  <tr>
198
- <th scope="row"><?php _e('Centralized Logging', 'ninjafirewall') ?></th>
199
  <?php
200
  if ( $err_msg ) {
201
  ?>
202
- <td width="20" align="left"><img src="<?php echo plugins_url() . '/ninjafirewall/images/glyphicons-error.png' ?>"></td>
203
- <td><?php printf( __('Error: %s', 'ninjafirewall'), $err_msg) ?></td>
204
  </tr>
205
  <?php
206
  $err_msg = '';
207
  } else {
208
  ?>
209
- <td width="20" align="left">&nbsp;</td>
210
  <td><a href="?page=nfsublog#clogs"><?php _e('Enabled', 'ninjafirewall'); echo "</a>. $ok_msg"; ?></td>
211
  </tr>
212
  <?php
213
  }
214
  }
215
 
216
-
217
-
218
  if (! filter_var(NFW_REMOTE_ADDR, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) ) {
219
  ?>
220
  <tr>
221
- <th scope="row"><?php _e('Source IP', 'ninjafirewall') ?></th>
222
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-warning.png' )?>"></td>
223
- <td><?php printf( __('You have a private IP : %s', 'ninjafirewall') .'<br />'. __('If your site is behind a reverse proxy or a load balancer, ensure that you have setup your HTTP server or PHP to forward the correct visitor IP, otherwise use the NinjaFirewall %s configuration file.', 'ninjafirewall'), htmlentities(NFW_REMOTE_ADDR), '<code><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja">.htninja</a></code>') ?></td>
224
  </tr>
225
  <?php
226
  }
227
- if (! empty($_SERVER["HTTP_CF_CONNECTING_IP"]) ) {
228
  if ( NFW_REMOTE_ADDR != $_SERVER["HTTP_CF_CONNECTING_IP"] ) {
229
  ?>
230
  <tr>
231
- <th scope="row"><?php _e('CDN detection', 'ninjafirewall') ?></th>
232
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-warning.png' )?>"></td>
233
- <td><?php printf( __('%s detected: you seem to be using Cloudflare CDN services. Ensure that you have setup your HTTP server or PHP to forward the correct visitor IP, otherwise use the NinjaFirewall %s configuration file.', 'ninjafirewall'), '<code>HTTP_CF_CONNECTING_IP</code>', '<code><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja">.htninja</a></code>') ?></td>
234
  </tr>
235
  <?php
236
  }
237
  }
238
- if (! empty($_SERVER["HTTP_INCAP_CLIENT_IP"]) ) {
239
  if ( NFW_REMOTE_ADDR != $_SERVER["HTTP_INCAP_CLIENT_IP"] ) {
240
  ?>
241
  <tr>
242
- <th scope="row"><?php _e('CDN detection', 'ninjafirewall') ?></th>
243
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-warning.png' )?>"></td>
244
- <td><?php printf( __('%s detected: you seem to be using Incapsula CDN services. Ensure that you have setup your HTTP server or PHP to forward the correct visitor IP, otherwise use the NinjaFirewall %s configuration file.', 'ninjafirewall'), '<code>HTTP_INCAP_CLIENT_IP</code>', '<code><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja">.htninja</a></code>') ?></td>
245
  </tr>
246
  <?php
247
  }
248
  }
249
 
250
- if (! is_writable( NFW_LOG_DIR . '/nfwlog') ) {
251
  ?>
252
  <tr>
253
- <th scope="row"><?php _e('Log dir', 'ninjafirewall') ?></th>
254
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-error.png' )?>"></td>
255
- <td><?php printf( __('%s directory is not writable! Please chmod it to 0777 or equivalent.', 'ninjafirewall'), '<code>'. htmlspecialchars(NFW_LOG_DIR) .'/nfwlog/</code>') ?></td>
256
  </tr>
257
  <?php
258
  }
@@ -260,9 +299,8 @@ if (! defined('NF_DISABLED') ) {
260
  if (! is_writable( NFW_LOG_DIR . '/nfwlog/cache') ) {
261
  ?>
262
  <tr>
263
- <th scope="row"><?php _e('Log dir', 'ninjafirewall') ?></th>
264
- <td width="20" align="left"><img src="<?php echo plugins_url( '/ninjafirewall/images/glyphicons-error.png' )?>"></td>
265
- <td><?php printf(__('%s directory is not writable! Please chmod it to 0777 or equivalent.', 'ninjafirewall'), '<code>'. htmlspecialchars(NFW_LOG_DIR) . '/nfwlog/cache/</code>') ?></td>
266
  </tr>
267
  <?php
268
  }
@@ -270,26 +308,27 @@ if (! defined('NF_DISABLED') ) {
270
  $doc_root = rtrim($_SERVER['DOCUMENT_ROOT'], '/');
271
  if ( @file_exists( $file = dirname( $doc_root ) . '/.htninja') ||
272
  @file_exists( $file = $doc_root . '/.htninja') ) {
273
- echo '<tr><th scope="row">' . __('Optional configuration file', 'ninjafirewall') . '</th>
274
- <td width="20">&nbsp;</td>
275
  <td><code>' . htmlentities($file) . '</code></td>
276
  </tr>';
277
 
278
- // Check if we have a MySQLi link identifier defined in the .htninja:
279
  if (! empty( $GLOBALS['nfw_mysqli'] ) && ! empty( $GLOBALS['nfw_table_prefix'] ) ) {
280
  echo '<tr>
281
- <th scope="row">' . __('MySQLi link identifier', 'ninjafirewall') . '</th>
282
- <td width="20">&nbsp;</td>
283
  <td>' . __('A MySQLi link identifier was detected in your <code>.htninja</code>.', 'ninjafirewall') . '</td>
284
  </tr>';
285
  }
286
-
287
  }
288
-
289
  echo '</table>';
290
  ?>
291
  </div>
292
-
293
  <?php
 
 
 
 
 
 
294
  // ---------------------------------------------------------------------
295
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
27
  is_nfw_enabled();
28
  }
29
 
30
+ // Search for Full WAF post-install
31
+ $res = get_transient( 'nfw_fullwaf' );
32
+ if ( $res !== false ) {
33
+ if ( defined( 'NFW_WPWAF' ) ) {
34
+ // 1: Apache mod_php
35
+ // 2: Apache + CGI/FastCGI or PHP-FPM
36
+ // 3: Apache + suPHP
37
+ // 4: Nginx + CGI/FastCGI or PHP-FPM
38
+ // 5: Litespeed
39
+ // 6: Openlitespeed
40
+ // 7: Other webserver + CGI/FastCGI or PHP-FPM
41
+ list( $httpserver, $time ) = explode( ':', $res );
42
+ $message = '';
43
+
44
+ if ( $httpserver == 6 ) {
45
+ $message = __('Make sure you followed the instructions and restarted Openlitespeed.', 'ninjafirewall' );
46
+ delete_transient( 'nfw_fullwaf' );
47
+
48
+ } elseif ( $httpserver == 1 || $httpserver == 5 ) {
49
+ $message = sprintf( __('Make sure your HTTP server support the %s directive in .htaccess files. Or maybe you need to restart your HTTP server to apply the changes?', 'ninjafirewall' ), '<code>php_value auto_prepend_file</code>' );
50
+ delete_transient( 'nfw_fullwaf' );
51
+
52
+ } else {
53
+ $now = time();
54
+ // <5 minutes
55
+ if ( $now < $time ) {
56
+ $time_left = $time - $now;
57
+ $message = sprintf( __('Because PHP caches INI files, you may need to wait up to five minutes before the changes are reloaded by the PHP interpreter. <strong>Please wait for <font id="nfw-waf-count">%d</font> seconds</strong> before trying again (you can navigate away from this page and come back in a few minutes).', 'ninjafirewall'), (int) $time_left );
58
+ $countdown = 1;
59
+ } else {
60
+ delete_transient( 'nfw_fullwaf' );
61
+ }
62
+ }
63
+ if (! empty( $message ) ) {
64
+ echo '<div class="notice-warning notice is-dismissible"><p>'.
65
+ __('Oops! Full WAF mode is not enabled yet.', 'ninjafirewall' ) .'<br />'.
66
+ $message .
67
+ '</p></div>';
68
+ if ( isset( $countdown ) ) {
69
+ echo '<script>fullwaf_count='. $time_left .';fullwaf=setInterval(nfwjs_fullwaf_countdown,1000);</script>';
70
+ }
71
+ }
72
+ }
73
+ }
74
  ?>
75
  <div class="wrap">
76
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png') ?>">&nbsp;<?php _e('NinjaFirewall (WP Edition)', 'ninjafirewall') ?></h1>
77
 
78
  <?php
79
+ if ( ( defined('NFW_STATUS') && NFW_STATUS == 20 ) && ! empty( $_REQUEST['nfw_firstrun'] ) ) {
80
  echo '<br><div class="updated notice is-dismissible"><p>' .
81
  __('Congratulations, NinjaFirewall is up and running!', 'ninjafirewall') . '<br />' .
82
  __('If you need help, click on the contextual "Help" menu tab located in the upper right corner of each page.', 'ninjafirewall');
91
  unset( $_SESSION['waf_mode'] );
92
  }
93
 
94
+ // Display a one-time notice after two weeks of use
95
  nfw_rate_notice( $nfw_options );
96
 
97
  ?>
98
  <br />
99
+ <table class="form-table nfw-table">
100
 
101
  <?php
102
+ if ( NF_DISABLED ) {
103
+ if (! empty( $GLOBALS['err_fw'][NF_DISABLED] ) ) {
104
  $msg = $GLOBALS['err_fw'][NF_DISABLED];
105
  } else {
106
+ $msg = __('Unknown error', 'ninjafirewall') .' #'. NF_DISABLED;
107
  }
108
  ?>
109
  <tr>
110
+ <th scope="row" class="row-med"><?php _e('Firewall', 'ninjafirewall') ?></th>
111
+ <td><span class="dashicons dashicons-dismiss nfw-danger"></span> <?php echo $msg ?></td>
 
112
  </tr>
113
 
114
  <?php
115
  } else {
116
  ?>
 
117
  <tr>
118
+ <th scope="row" class="row-med"><?php _e('Firewall', 'ninjafirewall') ?></th>
 
119
  <td><?php _e('Enabled', 'ninjafirewall') ?></td>
120
  </tr>
 
121
  <?php
122
  }
123
 
 
 
 
 
 
124
  ?>
125
  <tr>
126
+ <th scope="row" class="row-med"><?php _e('Mode', 'ninjafirewall') ?></th>
127
+ <td>
128
+ <?php
129
+ if ( defined( 'NFW_WPWAF' ) ) {
130
+ ?>
131
+ <span class="dashicons dashicons-warning nfw-warning"></span>&nbsp;<?php printf( __('NinjaFirewall is running in %s mode.', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/">'. __('WordPress WAF', 'ninjafirewall') .'</a>'); ?>
132
+ <br />
133
+ <?php printf( __('For better protection, <a %s>click here</a> to enable its Full WAF mode.', 'ninjafirewall'), 'id="nfw-thickbox" style="cursor:pointer;text-decoration:underline" title="'. __('Click to install NinjaFirewall in Full WAF mode.', 'ninjafirewall') .'"') ?></a>
134
+ <?php
135
+ } else {
136
+ if (! NF_DISABLED ) {
137
+ printf( __('NinjaFirewall is running in %s mode.', 'ninjafirewall'), __('Full WAF', 'ninjafirewall') );
138
+ } else {
139
+ echo '-';
140
+ }
141
+ }
142
+ ?>
143
+ </td>
144
  </tr>
145
  <?php
146
 
147
+ if (! empty( $nfw_options['debug'] ) ) {
148
  ?>
149
  <tr>
150
+ <th scope="row" class="row-med"><?php _e('Debugging mode', 'ninjafirewall') ?></th>
151
+ <td><span class="dashicons dashicons-dismiss nfw-danger"></span> <?php _e('Enabled.', 'ninjafirewall') ?>&nbsp;<a href="?page=nfsubopt"><?php _e('Click here to turn Debugging Mode off', 'ninjafirewall') ?></a></td>
 
152
  </tr>
153
  <?php
154
  }
155
  ?>
156
  <tr>
157
+ <th scope="row" class="row-med"><?php _e('Edition', 'ninjafirewall') ?></th>
158
+ <td>WP Edition ~ <a href="?page=nfsubwplus"><?php _e('Need more security? Get Premium!', 'ninjafirewall' ) ?><a/></td>
159
+ </tr>
160
+ <tr>
161
+ <th scope="row" class="row-med"><?php _e('Version', 'ninjafirewall') ?></th>
162
+ <td><?php echo NFW_ENGINE_VERSION . ' ~ ' . __('Security rules:', 'ninjafirewall' ) . ' ' . preg_replace('/(\d{4})(\d\d)(\d\d)/', '$1-$2-$3', $nfw_options['rules_version']) ?></td>
163
+ </tr>
164
+
165
+ <tr>
166
+ <th scope="row" class="row-med"><?php _e('PHP SAPI', 'ninjafirewall') ?></th>
167
  <td>
168
  <?php
169
  if ( defined('HHVM_VERSION') ) {
175
  ?>
176
  </td>
177
  </tr>
 
 
 
 
 
178
  <?php
179
 
180
+ // If security rules updates are disabled, warn the user
181
  if ( empty( $nfw_options['enable_updates'] ) ) {
182
  ?>
183
  <tr>
184
+ <th scope="row" class="row-med"><?php _e('Updates', 'ninjafirewall') ?></th>
185
+ <td><span class="dashicons dashicons-dismiss nfw-danger"></span> <a href="?page=nfsubupdates"><?php _e( 'Security rules updates are disabled.', 'ninjafirewall' ) ?></a> <?php _e( 'If you want your blog to be protected against the latest threats, enable automatic security rules updates.', 'ninjafirewall' ) ?></td>
 
186
  </tr>
187
  <?php
188
  }
189
 
190
+ if ( empty( $_SESSION['nfw_goodguy'] ) ) {
191
  ?>
192
  <tr>
193
+ <th scope="row" class="row-med"><?php _e('Admin user', 'ninjafirewall') ?></th>
194
+ <td><span class="dashicons dashicons-warning nfw-warning"></span> <?php printf( __('You are not whitelisted. Ensure that the "Do not block WordPress administrator" option is enabled in the <a href="%s">Firewall Policies</a> menu, otherwise you could get blocked by the firewall while working from your administration dashboard.', 'ninjafirewall'), '?page=nfsubpolicies') ?></td>
 
195
  </tr>
196
  <?php
197
  } else {
198
  $current_user = wp_get_current_user();
199
  ?>
200
  <tr>
201
+ <th scope="row" class="row-med"><?php _e('Admin user', 'ninjafirewall') ?></th>
202
+ <td><code><?php echo htmlspecialchars( $current_user->user_login ) ?></code>: <?php _e('You are whitelisted by the firewall.', 'ninjafirewall') ?></td>
 
203
  </tr>
204
  <?php
205
  }
206
  if ( defined('NFW_ALLOWED_ADMIN') && ! is_multisite() ) {
207
  ?>
208
  <tr>
209
+ <th scope="row" class="row-med"><?php _e('Restrictions', 'ninjafirewall') ?></th>
210
+ <td><?php _e('Access to NinjaFirewall is restricted to specific users.', 'ninjafirewall') ?></td>
 
211
  </tr>
212
  <?php
213
  }
214
 
215
  // Try to find out if there is any "lost" session between the firewall
216
  // and the plugin part of NinjaFirewall (could be a buggy plugin killing
217
+ // the session etc), unless we just installed it
218
  if ( defined( 'NFW_SWL' ) && ! empty( $_SESSION['nfw_goodguy'] ) && empty( $_REQUEST['nfw_firstrun'] ) ) {
219
  ?>
220
  <tr>
221
+ <th scope="row" class="row-med"><?php _e('User session', 'ninjafirewall') ?></th>
222
+ <td><span class="dashicons dashicons-warning nfw-warning"></span> <?php _e('It seems that the user session set by NinjaFirewall was not found by the firewall script.', 'ninjafirewall') ?></td>
 
223
  </tr>
224
  <?php
225
  }
242
  }
243
  ?>
244
  <tr>
245
+ <th scope="row" class="row-med"><?php _e('Centralized Logging', 'ninjafirewall') ?></th>
246
  <?php
247
  if ( $err_msg ) {
248
  ?>
249
+ <td><span class="dashicons dashicons-dismiss nfw-danger"></span> <?php printf( __('Error: %s', 'ninjafirewall'), $err_msg) ?></td>
 
250
  </tr>
251
  <?php
252
  $err_msg = '';
253
  } else {
254
  ?>
 
255
  <td><a href="?page=nfsublog#clogs"><?php _e('Enabled', 'ninjafirewall'); echo "</a>. $ok_msg"; ?></td>
256
  </tr>
257
  <?php
258
  }
259
  }
260
 
 
 
261
  if (! filter_var(NFW_REMOTE_ADDR, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) ) {
262
  ?>
263
  <tr>
264
+ <th scope="row" class="row-med"><?php _e('Source IP', 'ninjafirewall') ?></th>
265
+ <td><span class="dashicons dashicons-warning nfw-warning"></span> <?php printf( __('You have a private IP : %s', 'ninjafirewall') .'<br />'. __('If your site is behind a reverse proxy or a load balancer, ensure that you have setup your HTTP server or PHP to forward the correct visitor IP, otherwise use the NinjaFirewall %s configuration file.', 'ninjafirewall'), htmlentities(NFW_REMOTE_ADDR), '<code><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja">.htninja</a></code>') ?></td>
 
266
  </tr>
267
  <?php
268
  }
269
+ if (! empty( $_SERVER["HTTP_CF_CONNECTING_IP"] ) ) {
270
  if ( NFW_REMOTE_ADDR != $_SERVER["HTTP_CF_CONNECTING_IP"] ) {
271
  ?>
272
  <tr>
273
+ <th scope="row" class="row-med"><?php _e('CDN detection', 'ninjafirewall') ?></th>
274
+ <td><span class="dashicons dashicons-warning nfw-warning"></span> <?php printf( __('%s detected: you seem to be using Cloudflare CDN services. Ensure that you have setup your HTTP server or PHP to forward the correct visitor IP, otherwise use the NinjaFirewall %s configuration file.', 'ninjafirewall'), '<code>HTTP_CF_CONNECTING_IP</code>', '<code><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja">.htninja</a></code>') ?></td>
 
275
  </tr>
276
  <?php
277
  }
278
  }
279
+ if (! empty( $_SERVER["HTTP_INCAP_CLIENT_IP"] ) ) {
280
  if ( NFW_REMOTE_ADDR != $_SERVER["HTTP_INCAP_CLIENT_IP"] ) {
281
  ?>
282
  <tr>
283
+ <th scope="row" class="row-med"><?php _e('CDN detection', 'ninjafirewall') ?></th>
284
+ <td><span class="dashicons dashicons-warning nfw-warning"></span> <?php printf( __('%s detected: you seem to be using Incapsula CDN services. Ensure that you have setup your HTTP server or PHP to forward the correct visitor IP, otherwise use the NinjaFirewall %s configuration file.', 'ninjafirewall'), '<code>HTTP_INCAP_CLIENT_IP</code>', '<code><a href="https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja">.htninja</a></code>') ?></td>
 
285
  </tr>
286
  <?php
287
  }
288
  }
289
 
290
+ if (! is_writable( NFW_LOG_DIR . '/nfwlog' ) ) {
291
  ?>
292
  <tr>
293
+ <th scope="row" class="row-med"><?php _e('Log dir', 'ninjafirewall') ?></th>
294
+ <td><span class="dashicons dashicons-dismiss nfw-danger"></span> <?php printf( __('%s directory is not writable! Please chmod it to 0777 or equivalent.', 'ninjafirewall'), '<code>'. htmlspecialchars(NFW_LOG_DIR) .'/nfwlog/</code>') ?></td>
 
295
  </tr>
296
  <?php
297
  }
299
  if (! is_writable( NFW_LOG_DIR . '/nfwlog/cache') ) {
300
  ?>
301
  <tr>
302
+ <th scope="row" class="row-med"><?php _e('Log dir', 'ninjafirewall') ?></th>
303
+ <td><span class="dashicons dashicons-dismiss nfw-danger"></span> <?php printf(__('%s directory is not writable! Please chmod it to 0777 or equivalent.', 'ninjafirewall'), '<code>'. htmlspecialchars(NFW_LOG_DIR) . '/nfwlog/cache/</code>') ?></td>
 
304
  </tr>
305
  <?php
306
  }
308
  $doc_root = rtrim($_SERVER['DOCUMENT_ROOT'], '/');
309
  if ( @file_exists( $file = dirname( $doc_root ) . '/.htninja') ||
310
  @file_exists( $file = $doc_root . '/.htninja') ) {
311
+ echo '<tr><th scope="row" class="row-med">' . __('Optional configuration file', 'ninjafirewall') . '</th>
 
312
  <td><code>' . htmlentities($file) . '</code></td>
313
  </tr>';
314
 
315
+ // Check if we have a MySQLi link identifier defined in the .htninja
316
  if (! empty( $GLOBALS['nfw_mysqli'] ) && ! empty( $GLOBALS['nfw_table_prefix'] ) ) {
317
  echo '<tr>
318
+ <th scope="row" class="row-med">' . __('MySQLi link identifier', 'ninjafirewall') . '</th>
 
319
  <td>' . __('A MySQLi link identifier was detected in your <code>.htninja</code>.', 'ninjafirewall') . '</td>
320
  </tr>';
321
  }
 
322
  }
 
323
  echo '</table>';
324
  ?>
325
  </div>
 
326
  <?php
327
+
328
+ if ( defined( 'NFW_WPWAF' ) ) {
329
+ // Load the thickbox dialogbox if we're running in WordPress WAF mode
330
+ require __DIR__ .'/thickbox.php';
331
+ }
332
+
333
  // ---------------------------------------------------------------------
334
  // EOF
lib/rules_editor.php CHANGED
@@ -1,15 +1,25 @@
1
  <?php
2
  /*
3
- +=====================================================================+
4
- | NinjaFirewall (WP+ Edition) |
5
  | |
6
  | (c) NinTechNet - https://nintechnet.com/ |
7
- +=====================================================================+ i18n+ / sa
 
 
 
 
 
 
 
 
 
 
8
  */
9
 
10
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
11
 
12
- // Block immediately if user is not allowed :
13
  nf_not_allowed( 'block', __LINE__ );
14
 
15
  echo '
@@ -80,9 +90,9 @@ foreach ( $nfw_rules as $rule_key => $rule_value ) {
80
  $nonce = wp_nonce_field('editor_save', 'nfwnonce', 0, 0);
81
 
82
  echo '<br /><h3>' . __('NinjaFirewall built-in security rules', 'ninjafirewall') .'</h3>
83
- <table class="form-table">
84
  <tr>
85
- <th scope="row">' . __('Select the rule you want to disable or enable', 'ninjafirewall') .'</th>
86
  <td>
87
  <form method="post">'. $nonce . '
88
  <select name="sel_e_r" style="font-family:Consolas,Monaco,monospace;">
@@ -147,5 +157,5 @@ echo '</select>&nbsp;&nbsp;<input class="button-secondary" type="submit" name="d
147
  </tr>
148
  </table>
149
  </div>';
150
- /* ================================================================== */
151
  // EOF
1
  <?php
2
  /*
3
+ +---------------------------------------------------------------------+
4
+ | NinjaFirewall (WP Edition) |
5
  | |
6
  | (c) NinTechNet - https://nintechnet.com/ |
7
+ +---------------------------------------------------------------------+
8
+ | This program is free software: you can redistribute it and/or |
9
+ | modify it under the terms of the GNU General Public License as |
10
+ | published by the Free Software Foundation, either version 3 of |
11
+ | the License, or (at your option) any later version. |
12
+ | |
13
+ | This program is distributed in the hope that it will be useful, |
14
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
+ | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
+ // Block immediately if user is not allowed
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
  echo '
90
  $nonce = wp_nonce_field('editor_save', 'nfwnonce', 0, 0);
91
 
92
  echo '<br /><h3>' . __('NinjaFirewall built-in security rules', 'ninjafirewall') .'</h3>
93
+ <table class="form-table nfw-table">
94
  <tr>
95
+ <th scope="row" class="row-med">' . __('Select the rule you want to disable or enable', 'ninjafirewall') .'</th>
96
  <td>
97
  <form method="post">'. $nonce . '
98
  <select name="sel_e_r" style="font-family:Consolas,Monaco,monospace;">
157
  </tr>
158
  </table>
159
  </div>';
160
+ // ---------------------------------------------------------------------
161
  // EOF
lib/rules_update.php CHANGED
@@ -14,13 +14,13 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
  // If your server can't remotely connect to a SSL port, add this
23
- // to your wp-config.php script: define('NFW_DONT_USE_SSL', 1);
24
  if ( defined( 'NFW_DONT_USE_SSL' ) ) {
25
  $proto = "http";
26
  } else {
@@ -28,7 +28,7 @@ if ( defined( 'NFW_DONT_USE_SSL' ) ) {
28
  }
29
  $update_log = NFW_LOG_DIR . '/nfwlog/updates.php';
30
 
31
- // Check which rules should be returned:
32
  if ( defined('NFW_WPWAF') ) {
33
  $rules_type = 0;
34
  } else {
@@ -44,14 +44,14 @@ if ( empty( $nfw_options['sched_updates'] ) || empty( $nfw_options['enable_updat
44
  }
45
 
46
  if ( defined( 'NFUPDATESDO' ) && NFUPDATESDO == 2 ) {
47
- // Installation:
48
  $update_url = array(
49
  $proto . '://plugins.svn.wordpress.org/ninjafirewall/updates/',
50
  'version3.txt',
51
  'rules3s.txt'
52
  );
53
  } else {
54
- // Scheduled updates or plugin update:
55
  $caching_id = sha1( home_url() );
56
  $update_url = array(
57
  $proto . '://updates.nintechnet.com/index.php',
@@ -60,19 +60,19 @@ if ( defined( 'NFUPDATESDO' ) && NFUPDATESDO == 2 ) {
60
  );
61
  }
62
 
63
- // NFUPDATESDO: scheduled update (1), installation (2) or plugin update (3 - deprecated since v3.8):
64
  if (defined('NFUPDATESDO') ) {
65
  define('NFW_RULES', nf_sub_do_updates($update_url, $update_log, NFUPDATESDO));
66
  return;
67
  }
68
 
69
- // Block immediately if user is not allowed :
70
  nf_not_allowed( 'block', __LINE__ );
71
 
72
  echo '<div class="wrap">
73
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Rules Update', 'ninjafirewall') . '</h1>';
74
 
75
- // We stop and warn the user if the firewall is disabled:
76
  if (! defined('NF_DISABLED') ) {
77
  is_nfw_enabled();
78
  }
@@ -81,24 +81,24 @@ if (NF_DISABLED) {
81
  return;
82
  }
83
 
84
- //Saved options ?
85
- if (! empty($_POST['nfw_act']) ) {
86
- if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'updates_save') ) {
87
  wp_nonce_ays('updates_save');
88
  }
89
- // Check updates now :
90
- if ($_POST['nfw_act'] == 3) {
91
  if ( $res = nf_sub_do_updates($update_url, $update_log, 0) ) {
92
  echo '<div class="updated notice is-dismissible"><p>' . __('Security rules have been updated.', 'ninjafirewall') . '</p></div>';
93
  } else {
94
  echo '<div class="updated notice is-dismissible"><p>' . __('No security rules update available.', 'ninjafirewall') . '</p></div>';
95
  }
96
- // Enable flag to display log :
97
  $tmp_showlog = 1;
98
  } else {
99
- if ($_POST['nfw_act'] == 1) {
100
  nf_sub_updates_save();
101
- } elseif ($_POST['nfw_act'] == 2) {
102
  nf_sub_updates_clearlog($update_log);
103
  }
104
  echo '<div class="updated notice is-dismissible"><p>' . __('Your changes have been saved.', 'ninjafirewall') . '</p></div>';
@@ -107,6 +107,11 @@ if (! empty($_POST['nfw_act']) ) {
107
  $nfw_options = nfw_get_option('nfw_options');
108
  }
109
 
 
 
 
 
 
110
  if ( empty($nfw_options['enable_updates']) ) {
111
  $enable_updates = 0;
112
  } else {
@@ -120,52 +125,34 @@ if ( empty($nfw_options['sched_updates']) || ! preg_match('/^[2-3]$/', $nfw_opti
120
  if ( empty($nfw_options['notify_updates']) && isset($nfw_options['notify_updates']) ) {
121
  $notify_updates = 0;
122
  } else {
123
- // Defaut if not set yet:
124
  $notify_updates = 1;
125
  }
126
  ?>
127
-
128
- <script type="text/javascript">
129
- function toogle_table(off) {
130
- if ( off == 1 ) {
131
- jQuery("#upd_table").slideDown();
132
- } else if ( off == 2 ) {
133
- jQuery("#upd_table").slideUp();
134
- }
135
- return;
136
- }
137
- </script>
138
  <br />
139
  <form method="post" name="fupdates">
 
140
  <?php wp_nonce_field('updates_save', 'nfwnonce', 0); ?>
141
- <table class="form-table">
 
142
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
143
- <th scope="row"><?php _e('Automatically update NinjaFirewall security rules', 'ninjafirewall') ?></th>
144
- <td>
145
- <label><input type="radio" name="enable_updates" value="1"<?php checked($enable_updates, 1) ?> onclick="toogle_table(1);">&nbsp;<?php _e('Yes (default)', 'ninjafirewall') ?></label>
146
- </td>
147
  <td>
148
- <label><input type="radio" name="enable_updates" value="0"<?php checked($enable_updates, 0) ?> onclick="toogle_table(2);">&nbsp;<?php _e('No', 'ninjafirewall') ?></label>
149
  </td>
150
  </tr>
151
  </table>
152
 
153
- <?php
154
- // If WP cron is disabled, we simply warn the user :
155
- if ( defined('DISABLE_WP_CRON') ) {
156
- ?>
157
- <p><img src="<?php echo plugins_url() ?>/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description"><?php printf( __('It seems that %s is enabled. Ensure you have another way to run WP-Cron, otherwise NinjaFirewall automatic updates will not work.', 'ninjafirewall'), '<code>DISABLE_WP_CRON</code>' ) ?></span></p>
158
- <?php
159
- }
160
- ?>
161
  <div id="upd_table"<?php echo $enable_updates == 1 ? '' : ' style="display:none"' ?>>
162
- <table class="form-table">
163
  <tr>
164
- <th scope="row"><?php _e('Check for updates', 'ninjafirewall') ?></th>
165
  <td>
166
  <select name="sched_updates">
167
- <option disabled><?php _e('Every 15 minutes', 'ninjafirewall') ?> (WP+ Edition)</option>
168
- <option disabled><?php _e('Every 30 minutes', 'ninjafirewall') ?> (WP+ Edition)</option>
169
  <option value="1"<?php selected($sched_updates, 1) ?>><?php _e('Hourly', 'ninjafirewall') ?></option>
170
  <option value="2"<?php selected($sched_updates, 2) ?>><?php _e('Twicedaily', 'ninjafirewall') ?></option>
171
  <option value="3"<?php selected($sched_updates, 3) ?>><?php _e('Daily', 'ninjafirewall') ?></option>
@@ -175,15 +162,16 @@ function toogle_table(off) {
175
  $sched = new DateTime( date('M d, Y H:i:s', $nextcron) );
176
  $now = new DateTime( date('M d, Y H:i:s', time() ) );
177
  $diff = $now->diff($sched);
178
- ?>
179
- <p><span class="description"><?php printf( __('Next scheduled update will start in approximately %s day, %s hour(s), %s minute(s) and %s seconds.', 'ninjafirewall'), $diff->format('%a') % 7, $diff->format('%h'), $diff->format('%i'), $diff->format('%s') ) ?></span></p>
180
- <?php
181
  // Ensure that the scheduled scan time is in the future,
182
  // not in the past, otherwise send a warning because wp-cron
183
- // is obviously not working as expected :
184
  if ( $nextcron < time() ) {
185
  ?>
186
- <p><img src="<?php echo plugins_url() ?>/ninjafirewall/images/glyphicons-warning.png">&nbsp;<span class="description"><?php _e('The next scheduled date is in the past! WordPress wp-cron may not be working or may have been disabled.', 'ninjafirewall'); ?></span>
 
 
 
 
187
  <?php
188
  }
189
  }
@@ -191,62 +179,58 @@ function toogle_table(off) {
191
  </td>
192
  </tr>
193
  <tr>
194
- <th scope="row"><?php _e('Notification', 'ninjafirewall') ?></th>
195
  <td>
196
  <p><label><input type="checkbox" name="notify_updates" value="1"<?php checked($notify_updates, 1) ?> /><?php _e('Send me a report by email when security rules have been updated.', 'ninjafirewall') ?></label></p>
197
- <span class="description"><?php _e('Reports will be sent to the contact email address defined in the Event Notifications menu.', 'ninjafirewall') ?></span>
198
  </td>
199
  </tr>
200
- </table>
201
- </div>
202
 
203
- <input type="hidden" name="nfw_act" value="1" />
204
- <p><input type="submit" class="button-primary" value="<?php _e('Save Updates Options', 'ninjafirewall') ?>" />&nbsp;&nbsp;<input type="submit" class="button-secondary" onClick="document.fupdates.nfw_act.value=3" value="<?php _e('Check For Updates Now!', 'ninjafirewall') ?>" /></p>
205
- </form>
206
-
207
- <?php
208
- if (! empty($nfw_options['enable_updates']) || ! empty($tmp_showlog) ) {
209
- $log_data = array();
210
- if ( file_exists($update_log) ) {
211
- $log_data = file($update_log);
212
- } else {
213
- $log_data[] = __('The updates log is currently empty.', 'ninjafirewall');
214
- }
215
- ?>
216
- <br />
217
- <form method="post">
218
- <?php wp_nonce_field('updates_save', 'nfwnonce', 0); ?>
219
- <table class="form-table">
220
  <tr>
221
- <th scope="row"><?php _e('Updates Log', 'ninjafirewall') ?></th>
222
  <td>
223
- <textarea class="small-text code" style="width:100%;height:150px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php
224
- $reversed = array_reverse($log_data);
225
- foreach ($reversed as $key) {
226
- echo htmlentities($key);
227
- }?></textarea>
228
- <p>
229
- <?php
230
- echo '<input type="submit" name="clear_updates_log" value="' . __('Delete Log', 'ninjafirewall') . '" class="button-secondary"';
231
- if (file_exists($update_log) ) {
232
- echo ' />';
233
- } else {
234
- echo ' disabled="disabled" />';
235
- }
236
- echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="description">' . __('Log is flushed automatically.', 'ninjafirewall') . '</span>';
237
- ?>
238
  </td>
239
- </tr>
 
 
 
240
  </table>
241
- <input type="hidden" name="nfw_act" value="2" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  </form>
243
- <?php
244
- }
245
- ?>
246
  </div>
247
  <?php
248
 
249
- /* ------------------------------------------------------------------ */
250
 
251
  function nf_sub_updates_save() {
252
 
@@ -290,7 +274,7 @@ function nf_sub_updates_save() {
290
 
291
  }
292
 
293
- /* ------------------------------------------------------------------ */
294
 
295
  function nf_sub_updates_clearlog($update_log) {
296
 
@@ -300,7 +284,7 @@ function nf_sub_updates_clearlog($update_log) {
300
 
301
  }
302
 
303
- /* ------------------------------------------------------------------ */
304
 
305
  function nf_sub_do_updates($update_url, $update_log, $NFUPDATESDO = 1) {
306
 
@@ -397,7 +381,7 @@ function nf_sub_do_updates($update_url, $update_log, $NFUPDATESDO = 1) {
397
  return 1;
398
  }
399
 
400
- /* ------------------------------------------------------------------ */
401
 
402
  function nf_sub_updates_getversion($update_url, $rules_version, $update_log) {
403
 
@@ -462,7 +446,7 @@ function nf_sub_updates_getversion($update_url, $rules_version, $update_log) {
462
  return 0;
463
  }
464
 
465
- /* ------------------------------------------------------------------ */
466
 
467
  function nf_sub_updates_download($update_url, $update_log, $new_rules_version) {
468
 
@@ -528,7 +512,7 @@ function nf_sub_updates_download($update_url, $update_log, $new_rules_version) {
528
  return 0;
529
  }
530
 
531
- /* ------------------------------------------------------------------ */
532
 
533
  function nf_sub_updates_log($update_log, $msg) {
534
 
@@ -543,7 +527,7 @@ function nf_sub_updates_log($update_log, $msg) {
543
 
544
  }
545
 
546
- /* ------------------------------------------------------------------ */
547
 
548
  function nf_sub_updates_notification($new_rules_version) {
549
 
@@ -576,5 +560,5 @@ function nf_sub_updates_notification($new_rules_version) {
576
 
577
  }
578
 
579
- /* ------------------------------------------------------------------ */
580
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
  // If your server can't remotely connect to a SSL port, add this
23
+ // to your wp-config.php script: `define('NFW_DONT_USE_SSL', 1);`
24
  if ( defined( 'NFW_DONT_USE_SSL' ) ) {
25
  $proto = "http";
26
  } else {
28
  }
29
  $update_log = NFW_LOG_DIR . '/nfwlog/updates.php';
30
 
31
+ // Check which rules should be returned
32
  if ( defined('NFW_WPWAF') ) {
33
  $rules_type = 0;
34
  } else {
44
  }
45
 
46
  if ( defined( 'NFUPDATESDO' ) && NFUPDATESDO == 2 ) {
47
+ // Installation
48
  $update_url = array(
49
  $proto . '://plugins.svn.wordpress.org/ninjafirewall/updates/',
50
  'version3.txt',
51
  'rules3s.txt'
52
  );
53
  } else {
54
+ // Scheduled updates or plugin update
55
  $caching_id = sha1( home_url() );
56
  $update_url = array(
57
  $proto . '://updates.nintechnet.com/index.php',
60
  );
61
  }
62
 
63
+ // NFUPDATESDO: scheduled update (1), installation (2) or plugin update (3 - deprecated since v3.8)
64
  if (defined('NFUPDATESDO') ) {
65
  define('NFW_RULES', nf_sub_do_updates($update_url, $update_log, NFUPDATESDO));
66
  return;
67
  }
68
 
69
+ // Block immediately if user is not allowed
70
  nf_not_allowed( 'block', __LINE__ );
71
 
72
  echo '<div class="wrap">
73
  <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Rules Update', 'ninjafirewall') . '</h1>';
74
 
75
+ // We stop and warn the user if the firewall is disabled
76
  if (! defined('NF_DISABLED') ) {
77
  is_nfw_enabled();
78
  }
81
  return;
82
  }
83
 
84
+ //Saved options
85
+ if (! empty( $_POST['nfw_act'] ) ) {
86
+ if ( empty( $_POST['nfwnonce'] ) || ! wp_verify_nonce( $_POST['nfwnonce'], 'updates_save' ) ) {
87
  wp_nonce_ays('updates_save');
88
  }
89
+ // Check updates now
90
+ if ( isset( $_POST['check_updates'] ) ) {
91
  if ( $res = nf_sub_do_updates($update_url, $update_log, 0) ) {
92
  echo '<div class="updated notice is-dismissible"><p>' . __('Security rules have been updated.', 'ninjafirewall') . '</p></div>';
93
  } else {
94
  echo '<div class="updated notice is-dismissible"><p>' . __('No security rules update available.', 'ninjafirewall') . '</p></div>';
95
  }
96
+ // Enable flag to display log
97
  $tmp_showlog = 1;
98
  } else {
99
+ if ( isset( $_POST['save_options'] ) ) {
100
  nf_sub_updates_save();
101
+ } elseif ( isset( $_POST['clear_log'] ) ) {
102
  nf_sub_updates_clearlog($update_log);
103
  }
104
  echo '<div class="updated notice is-dismissible"><p>' . __('Your changes have been saved.', 'ninjafirewall') . '</p></div>';
107
  $nfw_options = nfw_get_option('nfw_options');
108
  }
109
 
110
+ // If WP cron is disabled, we simply warn the user
111
+ if ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON == true ) {
112
+ echo '<div class="notice-warning notice is-dismissible"><p>' . sprintf( __('It seems that %s is set. Ensure you have another way to run WP-Cron, otherwise NinjaFirewall automatic updates will not work.', 'ninjafirewall'), '<code>DISABLE_WP_CRON</code>' ) . '</p></div>';
113
+ }
114
+
115
  if ( empty($nfw_options['enable_updates']) ) {
116
  $enable_updates = 0;
117
  } else {
125
  if ( empty($nfw_options['notify_updates']) && isset($nfw_options['notify_updates']) ) {
126
  $notify_updates = 0;
127
  } else {
128
+ // Defaut if not set yet
129
  $notify_updates = 1;
130
  }
131
  ?>
 
 
 
 
 
 
 
 
 
 
 
132
  <br />
133
  <form method="post" name="fupdates">
134
+
135
  <?php wp_nonce_field('updates_save', 'nfwnonce', 0); ?>
136
+
137
+ <table class="form-table nfw-table">
138
  <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
139
+ <th scope="row" class="row-med"><?php _e('Automatically update NinjaFirewall security rules', 'ninjafirewall') ?></th>
 
 
 
140
  <td>
141
+ <?php nfw_toggle_switch( 'danger', 'enable_updates', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', $enable_updates, false, 'onclick="nfwjs_up_down(\'upd_table\');"' ) ?>
142
  </td>
143
  </tr>
144
  </table>
145
 
146
+ <br />
147
+
 
 
 
 
 
 
148
  <div id="upd_table"<?php echo $enable_updates == 1 ? '' : ' style="display:none"' ?>>
149
+ <table class="form-table nfw-table">
150
  <tr>
151
+ <th scope="row" class="row-med"><?php _e('Check for updates', 'ninjafirewall') ?></th>
152
  <td>
153
  <select name="sched_updates">
154
+ <option disabled><?php _e('Every 15 minutes', 'ninjafirewall') ?> (Premium)</option>
155
+ <option disabled><?php _e('Every 30 minutes', 'ninjafirewall') ?> (Premium)</option>
156
  <option value="1"<?php selected($sched_updates, 1) ?>><?php _e('Hourly', 'ninjafirewall') ?></option>
157
  <option value="2"<?php selected($sched_updates, 2) ?>><?php _e('Twicedaily', 'ninjafirewall') ?></option>
158
  <option value="3"<?php selected($sched_updates, 3) ?>><?php _e('Daily', 'ninjafirewall') ?></option>
162
  $sched = new DateTime( date('M d, Y H:i:s', $nextcron) );
163
  $now = new DateTime( date('M d, Y H:i:s', time() ) );
164
  $diff = $now->diff($sched);
 
 
 
165
  // Ensure that the scheduled scan time is in the future,
166
  // not in the past, otherwise send a warning because wp-cron
167
+ // is obviously not working as expected
168
  if ( $nextcron < time() ) {
169
  ?>
170
+ <p class="description" style="color:red"><?php _e('The next scheduled date is in the past! WordPress wp-cron may not be working or may have been disabled.', 'ninjafirewall'); ?></p>
171
+ <?php
172
+ } else {
173
+ ?>
174
+ <p class="description"><?php printf( __('Next scheduled update will start in approximately %s day, %s hour(s), %s minute(s) and %s seconds.', 'ninjafirewall'), $diff->format('%a') % 7, $diff->format('%h'), $diff->format('%i'), $diff->format('%s') ) ?></p>
175
  <?php
176
  }
177
  }
179
  </td>
180
  </tr>
181
  <tr>
182
+ <th scope="row" class="row-med"><?php _e('Notification', 'ninjafirewall') ?></th>
183
  <td>
184
  <p><label><input type="checkbox" name="notify_updates" value="1"<?php checked($notify_updates, 1) ?> /><?php _e('Send me a report by email when security rules have been updated.', 'ninjafirewall') ?></label></p>
185
+ <p class="description"><?php _e('Reports will be sent to the contact email address defined in the Event Notifications menu.', 'ninjafirewall') ?></p>
186
  </td>
187
  </tr>
 
 
188
 
189
+ <?php
190
+ if (! empty($nfw_options['enable_updates']) || ! empty($tmp_showlog) ) {
191
+ $log_data = array();
192
+ if ( file_exists($update_log) ) {
193
+ $log_data = file($update_log);
194
+ } else {
195
+ $log_data[] = __('The updates log is currently empty.', 'ninjafirewall');
196
+ }
197
+ ?>
 
 
 
 
 
 
 
 
198
  <tr>
199
+ <th scope="row" class="row-med"><?php _e('Updates Log', 'ninjafirewall') ?></th>
200
  <td>
201
+ <textarea class="small-text code" style="width:100%;height:200px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php
202
+ $reversed = array_reverse($log_data);
203
+ foreach ($reversed as $key) {
204
+ echo htmlentities($key);
205
+ }?></textarea>
206
+ <p class="description"><?php _e('Log is flushed automatically.', 'ninjafirewall') ?></p>
 
 
 
 
 
 
 
 
 
207
  </td>
208
+ </tr>
209
+ <?php
210
+ }
211
+ ?>
212
  </table>
213
+
214
+ </div>
215
+ <p>
216
+ <input name="nfw_act" type="hidden" value="1" />
217
+ <input name="save_options" type="submit" class="button-primary" value="<?php _e('Save Updates Options', 'ninjafirewall') ?>" />&nbsp;&nbsp;&nbsp;&nbsp;
218
+ <input name="check_updates" type="submit" class="button-secondary" value="<?php _e('Check For Updates Now!', 'ninjafirewall') ?>" />&nbsp;&nbsp;&nbsp;&nbsp;
219
+ <?php
220
+ if ( empty( $enable_updates ) || ! file_exists( $update_log ) ) {
221
+ $style = ' style="display:none"';
222
+ } else {
223
+ $style = '';
224
+ }
225
+ ?>
226
+ <input name="clear_log" type="submit" value="<?php _e('Delete Log', 'ninjafirewall') ?>" class="button-secondary"<?php echo $style ?> />
227
+ </p>
228
  </form>
229
+
 
 
230
  </div>
231
  <?php
232
 
233
+ // ---------------------------------------------------------------------
234
 
235
  function nf_sub_updates_save() {
236
 
274
 
275
  }
276
 
277
+ // ---------------------------------------------------------------------
278
 
279
  function nf_sub_updates_clearlog($update_log) {
280
 
284
 
285
  }
286
 
287
+ // ---------------------------------------------------------------------
288
 
289
  function nf_sub_do_updates($update_url, $update_log, $NFUPDATESDO = 1) {
290
 
381
  return 1;
382
  }
383
 
384
+ // ---------------------------------------------------------------------
385
 
386
  function nf_sub_updates_getversion($update_url, $rules_version, $update_log) {
387
 
446
  return 0;
447
  }
448
 
449
+ // ---------------------------------------------------------------------
450
 
451
  function nf_sub_updates_download($update_url, $update_log, $new_rules_version) {
452
 
512
  return 0;
513
  }
514
 
515
+ // ---------------------------------------------------------------------
516
 
517
  function nf_sub_updates_log($update_log, $msg) {
518
 
527
 
528
  }
529
 
530
+ // ---------------------------------------------------------------------
531
 
532
  function nf_sub_updates_notification($new_rules_version) {
533
 
560
 
561
  }
562
 
563
+ // ---------------------------------------------------------------------
564
  // EOF
lib/statistics.php CHANGED
@@ -14,7 +14,7 @@
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
- +---------------------------------------------------------------------+ i18n+ / sa
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
@@ -22,9 +22,10 @@ if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
22
  // Block immediately if user is not allowed :
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
- echo '
26
  <div class="wrap">
27
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="'. plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) .'">&nbsp;' . __('Statistics', 'ninjafirewall') . '</h1>';
 
28
 
29
  // Display a one-time notice after two weeks of use:
30
  $nfw_options = nfw_get_option( 'nfw_options' );
@@ -75,6 +76,7 @@ $medium = (int) $medium;
75
  $high = (int) $high;
76
  $critical = (int) $critical;
77
  $total = $critical + $high + $medium;
 
78
  if ( $total == 1 ) { $fast = $slow; }
79
 
80
  if (! $total ) {
@@ -93,62 +95,81 @@ if (! $total ) {
93
  }
94
  }
95
 
96
- echo '
97
- <script>
98
- function stat_redir(where) {
99
- if (where == "") { return false;}
100
- document.location.href="?page=nfsubstat&statx=" + where;
101
- }
102
- </script>
103
- <table class="form-table">
104
  <tr>
105
- <th scope="row"><h3>' . __('Monthly stats', 'ninjafirewall') . '</h3></th>
106
- <td>' . summary_stats_combo( $statx ) . '</td>
107
  </tr>
108
  <tr>
109
- <th scope="row">' . __('Blocked threats', 'ninjafirewall') . '</th>
110
- <td>' . $total . '</td>
111
  </tr>
112
  <tr>
113
- <th scope="row">' . __('Threats level', 'ninjafirewall') . '</th>
114
- <td>
115
- ' . __('Critical', 'ninjafirewall') . ' : ' . $critical . '%<br />
116
- <table bgcolor="#DFDFDF" border="0" cellpadding="0" cellspacing="0" height="14" width="250" style="height:14px;">
117
- <tr>
118
- <td width="' . round( $critical) . '%" background="' . plugins_url() . '/ninjafirewall/images/bar-critical.png" style="padding:0px"></td><td width="' . round(100 - $critical) . '%" style="padding:0px"></td>
119
- </tr>
120
- </table>
121
- <br /><br />' . __('High', 'ninjafirewall') . ' : ' . $high . '%<br />
122
- <table bgcolor="#DFDFDF" border="0" cellpadding="0" cellspacing="0" height="14" width="250" style="height:14px;">
123
- <tr>
124
- <td width="' . round( $high) . '%" background="' . plugins_url() . '/ninjafirewall/images/bar-high.png" style="padding:0px"></td><td width="' . round(100 - $high) . '%" style="padding:0px"></td>
125
- </tr>
126
- </table>
127
- <br /><br />' . __('Medium', 'ninjafirewall') . ' : ' . $medium . '%<br />
128
- <table bgcolor="#DFDFDF" border="0" cellpadding="0" cellspacing="0" height="14" width="250" style="height:14px;">
129
- <tr>
130
- <td width="' . round( $medium) . '%" background="' . plugins_url() . '/ninjafirewall/images/bar-medium.png" style="padding:0px;"></td><td width="' . round(100 - $medium) . '%" style="padding:0px;"></td>
131
- </tr>
132
- </table>
133
- </td>
134
  </tr>
135
- <tr><th scope="row"><h3>' . __('Benchmarks', 'ninjafirewall') . '</h3></th><td>&nbsp;</td><td>&nbsp;</td></tr>
136
  <tr>
137
- <th scope="row">' . __('Average time per request', 'ninjafirewall') . '</th>
138
- <td>' . $speed . 's</td>
139
  </tr>
140
  <tr>
141
- <th scope="row">' . __('Fastest request', 'ninjafirewall') . '</th>
142
- <td>' . round( $fast, 4) . 's</td>
143
  </tr>
144
  <tr>
145
- <th scope="row">' . __('Slowest request', 'ninjafirewall') . '</th>
146
- <td>' . round( $slow, 4) . 's</td>
147
  </tr>
148
  </table>
149
- </div>';
150
 
151
- /* ------------------------------------------------------------------ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  function summary_stats_combo( $statx ) {
153
 
154
  // Find all stat files:
@@ -167,7 +188,7 @@ function summary_stats_combo( $statx ) {
167
  krsort( $avail_logs );
168
 
169
  $ret = '<form>
170
- <select class="input" name="statx" onChange="return stat_redir(this.value);">
171
  <option value="">' . __('Select monthly stats to view...', 'ninjafirewall') . '</option>';
172
  foreach ( $avail_logs as $file => $text ) {
173
  $ret .= '<option value="'. $file .'"';
@@ -181,5 +202,5 @@ function summary_stats_combo( $statx ) {
181
  return $ret;
182
  }
183
 
184
- /* ------------------------------------------------------------------ */
185
  // EOF
14
  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
  | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
  */
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
22
  // Block immediately if user is not allowed :
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
+ ?>
26
  <div class="wrap">
27
+ <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<?php _e('Statistics', 'ninjafirewall') ?></h1>
28
+ <?php
29
 
30
  // Display a one-time notice after two weeks of use:
31
  $nfw_options = nfw_get_option( 'nfw_options' );
76
  $high = (int) $high;
77
  $critical = (int) $critical;
78
  $total = $critical + $high + $medium;
79
+ $c = $critical; $h = $high; $m = $medium;
80
  if ( $total == 1 ) { $fast = $slow; }
81
 
82
  if (! $total ) {
95
  }
96
  }
97
 
98
+ ?> <br />
99
+ <table class="form-table nfw-table">
100
+ <tr>
101
+ <th scope="row" class="row-med"><h3><?php _e('Monthly stats', 'ninjafirewall') ?></h3></th>
102
+ <td style="vertical-align: middle;"><?php echo summary_stats_combo( $statx ) ?></td>
103
+ </tr>
 
 
104
  <tr>
105
+ <th scope="row" class="row-med"><?php _e('Blocked threats', 'ninjafirewall') ?></th>
106
+ <td><?php echo $total ?></td>
107
  </tr>
108
  <tr>
109
+ <th scope="row" class="row-med"><?php _e('Threats level', 'ninjafirewall') ?></th>
110
+ <td><canvas id="nfw_stats"></canvas></td>
111
  </tr>
112
  <tr>
113
+ <th scope="row" class="row-med"><h3><?php _e('Benchmarks', 'ninjafirewall') ?></h3></th>
114
+ <td>&nbsp;</td><td>&nbsp;</td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  </tr>
 
116
  <tr>
117
+ <th scope="row" class="row-med"><?php _e('Average time per request', 'ninjafirewall') ?></th>
118
+ <td><?php echo $speed ?> <?php _e('seconds', 'ninjafirewall') ?></td>
119
  </tr>
120
  <tr>
121
+ <th scope="row" class="row-med"><?php _e('Fastest request', 'ninjafirewall') ?></th>
122
+ <td><?php echo round( $fast, 4) ?> <?php _e('seconds', 'ninjafirewall') ?></td>
123
  </tr>
124
  <tr>
125
+ <th scope="row" class="row-med"><?php _e('Slowest request', 'ninjafirewall') ?></th>
126
+ <td><?php echo round( $slow, 4) ?> <?php _e('seconds', 'ninjafirewall') ?></td>
127
  </tr>
128
  </table>
 
129
 
130
+ <script>
131
+ var horizontalBarChartData = {
132
+ labels: [
133
+ "<?php _e('Critical', 'ninjafirewall') .' '. $critical ?>%",
134
+ "<?php _e('High', 'ninjafirewall') .' '. $high ?>%",
135
+ "<?php _e('Medium', 'ninjafirewall') .' '. $medium ?>%"
136
+ ],
137
+ datasets: [{
138
+ label: '<?php _e('Blocked threats', 'ninjafirewall') ?>',
139
+ backgroundColor: ["#c9302c", "#ec971f","#ECE81F"],
140
+ data: [<?php echo "{$c}, {$h}, {$m}" ?>],
141
+ borderColor: ['#8C2C2A', '#c9302c', '#ec971f'],
142
+ borderWidth: 1
143
+ } ]
144
+ };
145
+ window.onload = function() {
146
+ var ctx = document.getElementById('nfw_stats').getContext("2d");
147
+ window.myHorizontalBar = new Chart(ctx, {
148
+ type: 'horizontalBar',
149
+ data: horizontalBarChartData,
150
+ options: {
151
+ tooltips: {
152
+ backgroundColor: '#333',
153
+ },
154
+ legend: {
155
+ display: false,
156
+ },
157
+ responsive: true,
158
+ scales: {
159
+ xAxes: [{
160
+ ticks: {
161
+ beginAtZero: true
162
+ }
163
+ }]
164
+ }
165
+ }
166
+ });
167
+ };
168
+ </script>
169
+ </div>
170
+ <?php
171
+
172
+ // ---------------------------------------------------------------------
173
  function summary_stats_combo( $statx ) {
174
 
175
  // Find all stat files:
188
  krsort( $avail_logs );
189
 
190
  $ret = '<form>
191
+ <select class="input" name="statx" onChange="return nfwjs_stat_redir(this.value);">
192
  <option value="">' . __('Select monthly stats to view...', 'ninjafirewall') . '</option>';
193
  foreach ( $avail_logs as $file => $text ) {
194
  $ret .= '<option value="'. $file .'"';
202
  return $ret;
203
  }
204
 
205
+ // ---------------------------------------------------------------------
206
  // EOF
lib/thickbox.php ADDED
@@ -0,0 +1,275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ +---------------------------------------------------------------------+
4
+ | NinjaFirewall (WP Edition) |
5
+ | |
6
+ | (c) NinTechNet - https://nintechnet.com/ |
7
+ +---------------------------------------------------------------------+
8
+ | This program is free software: you can redistribute it and/or |
9
+ | modify it under the terms of the GNU General Public License as |
10
+ | published by the Free Software Foundation, either version 3 of |
11
+ | the License, or (at your option) any later version. |
12
+ | |
13
+ | This program is distributed in the hope that it will be useful, |
14
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16
+ | GNU General Public License for more details. |
17
+ +---------------------------------------------------------------------+ i18n+ / sa / 2
18
+ */
19
+
20
+ if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
+
22
+ nf_not_allowed( 'block', __LINE__ );
23
+
24
+ add_thickbox();
25
+
26
+ nfw_upgrade_fullwaf();
27
+
28
+ return;
29
+
30
+ // ---------------------------------------------------------------------
31
+
32
+ function nfw_upgrade_fullwaf() {
33
+
34
+ ?>
35
+ <div id="nfw-thickbox-content" style="display:none;">
36
+
37
+ <h2><?php _e('Upgrade to Full WAF mode', 'ninjafirewall') ?></h2>
38
+
39
+ <div id="nfwaf-step1">
40
+ <p>
41
+ <?php
42
+ _e('In <strong>Full WAF</strong> mode, all scripts located inside the blog installation directories and sub-directories are protected by NinjaFirewall, including those that aren\'t part of the WordPress package. It gives you the highest possible level of protection: security without compromise.', 'ninjafirewall');
43
+ echo '&nbsp;';
44
+ printf( __('It works on most websites right out of the box, or may require <a href="%s" title="%s">some very little tweaks</a>. But in a few cases, mostly because of some shared hosting plans restrictions, it may simply not work at all.','ninjafirewall'), 'https://blog.nintechnet.com/troubleshoot-ninjafirewall-installation-problems/', 'Troubleshoot NinjaFirewall installation problems.');
45
+ echo '&nbsp;';
46
+ _e('If this happened to you, don\'t worry: you could still run it in <strong>WordPress WAF</strong> mode. Despite being less powerful than the <b>Full WAF</b> mode, it offers a level of protection and performance much higher than other security plugins.', 'ninjafirewall');
47
+ ?>
48
+ </p>
49
+ <?php
50
+ // Fetch the HTTP server and PHP SAPI
51
+ $s1 = ''; $s2 = ''; $s3 = ''; $s4 = ''; $s5 = ''; $s6 = ''; $s7 = ''; $type = '';
52
+ $recommended = ' ' . __('(recommended)', 'ninjafirewall');
53
+ $display_none = ' style="display:none"';
54
+ $tr_ini_userini = '';
55
+ $tr_ini_phpini = $display_none;
56
+ $tr_htaccess_modphp = $display_none;
57
+ $tr_htaccess_litespeed = $display_none;
58
+ $tr_htaccess_openlitespeed = $display_none;
59
+ $tr_htaccess_suphp = $display_none;
60
+ $diy_div_style = '';
61
+ $div_nfwaf_step2 = $display_none;
62
+
63
+ // Mod_php
64
+ if ( preg_match('/apache/i', PHP_SAPI) ) {
65
+ $http_server = 'apachemod';
66
+ $s1 = $recommended ;
67
+ $type = 'htaccess';
68
+ $tr_htaccess_modphp = '';
69
+ $tr_ini_userini = $display_none;
70
+
71
+ // Litespeed / Openlitespeed
72
+ } elseif ( preg_match( '/litespeed/i', PHP_SAPI ) ) {
73
+
74
+ if ( isset( $_SERVER['LSWS_EDITION'] ) && stripos( $_SERVER['LSWS_EDITION'], 'Openlitespeed') === 0 ) {
75
+ $http_server = 'openlitespeed';
76
+ $s6 = $recommended ;
77
+ $type = 'htaccess';
78
+ $tr_htaccess_openlitespeed = '';
79
+ $tr_ini_userini = $display_none;
80
+ $diy_div_style = $display_none;
81
+ $div_nfwaf_step2 = '';
82
+
83
+ } else {
84
+ $http_server = 'litespeed';
85
+ $s5 = $recommended ;
86
+ $type = 'htaccess';
87
+ $tr_htaccess_litespeed = '';
88
+ $tr_ini_userini = $display_none;
89
+ }
90
+
91
+ } else {
92
+ $type = 'ini';
93
+ // Apache FCGI
94
+ if ( preg_match('/apache/i', $_SERVER['SERVER_SOFTWARE']) ) {
95
+ $http_server = 'apachecgi';
96
+ $s2 = $recommended ;
97
+
98
+ // NGINX
99
+ } elseif ( preg_match('/nginx/i', $_SERVER['SERVER_SOFTWARE']) ) {
100
+ $http_server = 'nginx';
101
+ $s4 = $recommended;
102
+
103
+ // Other webserver with FCGI
104
+ } else {
105
+ $http_server = 'othercgi';
106
+ $s7 = $recommended ;
107
+ }
108
+ }
109
+ ?>
110
+ <table class="form-table nfw-table">
111
+ <tr>
112
+ <th scope="row" class="row-med"><?php _e('Select your HTTP server and your PHP server API', 'ninjafirewall') ?> (<code>SAPI</code>)</th>
113
+ <td>
114
+ <?php /* HTTP value must be changed in JS and main script as well */ ?>
115
+ <select class="input" name="http_server" onchange="nfwjs_httpserver(this.value)">
116
+ <option value="1"<?php selected($http_server, 'apachemod') ?>>Apache + PHP<?php echo PHP_MAJOR_VERSION ?> module<?php echo $s1 ?></option>
117
+ <option value="2"<?php selected($http_server, 'apachecgi') ?>>Apache + CGI/FastCGI or PHP-FPM<?php echo $s2 ?></option>
118
+ <option value="3"<?php selected($http_server, 'apachesuphp') ?>>Apache + suPHP</option>
119
+ <option value="4"<?php selected($http_server, 'nginx') ?>>Nginx + CGI/FastCGI or PHP-FPM<?php echo $s4 ?></option>
120
+ <option value="5"<?php selected($http_server, 'litespeed') ?>>Litespeed<?php echo $s5 ?></option>
121
+ <option value="6"<?php selected($http_server, 'openlitespeed') ?>>Openlitespeed<?php echo $s6 ?></option>
122
+ <option value="7"<?php selected($http_server, 'othercgi') ?>><?php _e('Other webserver + CGI/FastCGI or PHP-FPM', 'ninjafirewall') ?><?php echo $s6 ?></option>
123
+ </select>
124
+ <p class="description"><a class="links" href="<?php echo wp_nonce_url( '?page=NinjaFirewall&nfw_act=99', 'show_phpinfo', 'nfwnonce' ); ?>" target="_blank"><?php _e('View PHPINFO', 'ninjafirewall') ?></a></p>
125
+ </td>
126
+ </tr>
127
+ <?php
128
+ if ( $type == 'ini' ) {
129
+ $ini_style = '';
130
+ } else {
131
+ $ini_style = ' style="display:none"';
132
+ }
133
+ $f1 = ''; $f2 = '';
134
+ if ( file_exists( ABSPATH .'.user.ini' ) ) {
135
+ $ini_type = 1;
136
+ $f1 = $recommended;
137
+ $tr_ini_phpini = $display_none;
138
+ $tr_ini_userini = '';
139
+ } elseif ( file_exists( ABSPATH .'php.ini' ) ) {
140
+ $ini_type = 2;
141
+ $f2 = $recommended;
142
+ $tr_ini_phpini = '';
143
+ $tr_ini_userini = $display_none;
144
+ } else {
145
+ // fall back to .user.ini
146
+ $ini_type = 1;
147
+ $f1 = $recommended;
148
+ $tr_ini_phpini = $display_none;
149
+ $tr_ini_userini = '';
150
+ }
151
+ ?>
152
+ <tr id="tr-select-ini"<?php echo $ini_style ?>>
153
+ <th scope="row" class="row-med"><?php _e('Select the PHP initialization file supported by your server', 'ninjafirewall') ?></th>
154
+ <td>
155
+ <p><label><input type="radio" id="ini-type-user" onClick="nfwjs_radio_ini(1)" name="ini_type" value="1"<?php checked( $ini_type, 1 ) ?>><code>.user.ini</code><?php echo $f1 ?></label></p>
156
+ <p><label><input type="radio" id="ini-type-php" onClick="nfwjs_radio_ini(2)" name="ini_type" value="2"<?php checked( $ini_type, 2 ) ?>><code>php.ini</code><?php echo $f2 ?></label></p>
157
+ </td>
158
+ </tr>
159
+ </table>
160
+ </div>
161
+
162
+ <br />
163
+
164
+ <div class="font-15px" id="diy-div"<?php echo $diy_div_style ?>>
165
+ <p><label><input onClick="nfwjs_diy_chg(this.value)" id="diynfw" type="radio" name="diy-choice" value="nfw" checked /> <?php _e('Let NinjaFirewall make the necessary changes (recommended).', 'ninjafirewall') ?></label></p>
166
+ <p><label><input onClick="nfwjs_diy_chg(this.value)" type="radio" name="diy-choice" value="usr" /> <?php _e('I want to make the changes myself.', 'ninjafirewall') ?></label></p>
167
+ <div id="lmd-msg" style="background:#f1f1f1;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
168
+ <p><?php _e('Ensure that you have FTP access to your website so that, if there were a problem during the installation of the firewall, you could easily undo the changes.', 'ninjafirewall') ?></p>
169
+ </div>
170
+ <div id="diy-msg" style="display:none;background:#f1f1f1;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
171
+ <p><?php _e('Please make the changes below, then click on the "Finish" button.', 'ninjafirewall') ?></p>
172
+ </div>
173
+ </div>
174
+ <?php
175
+ require_once __DIR__ .'/install.php';
176
+ nfw_get_constants();
177
+
178
+ $file_missing = __('The %s file must be created, and the following lines of code added to it:', 'ninjafirewall');
179
+ $file_exist = __('The following lines of code must be added to your existing %s file:', 'ninjafirewall');
180
+ ?>
181
+
182
+ <div id="nfwaf-step2"<?php echo $div_nfwaf_step2 ?>>
183
+
184
+ <table class="form-table">
185
+ <tr id="tr-ini-userini"<?php echo $tr_ini_userini ?>>
186
+ <td>
187
+ <?php
188
+ if ( file_exists( ABSPATH .'.user.ini' ) ) {
189
+ $text = sprintf( $file_exist, '<code>'. htmlspecialchars( ABSPATH ) .'<b>.user.ini</b>' .'</code>');
190
+ } else {
191
+ $text = sprintf( $file_missing, '<code>'. htmlspecialchars( ABSPATH ) .'<b>.user.ini</b>' .'</code>');
192
+ }
193
+ echo $text;
194
+ ?>
195
+ <textarea name="txtlog" class="small-text code" rows="4" style="width:100%;color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_PHPINI_BEGIN ."\n" . NFW_PHPINI_DATA ."\n". NFW_PHPINI_END ."\n"; ?></textarea>
196
+ </td>
197
+ </tr>
198
+ <tr id="tr-ini-phpini"<?php echo $tr_ini_phpini ?>>
199
+ <td>
200
+ <?php
201
+ if ( file_exists( ABSPATH .'php.ini' ) ) {
202
+ $text = sprintf( $file_exist, '<code>'. htmlspecialchars( ABSPATH ) .'<b>php.ini</b>' .'</code>');
203
+ } else {
204
+ $text = sprintf( $file_missing, '<code>'. htmlspecialchars( ABSPATH ) .'<b>php.ini</b>' .'</code>');
205
+ }
206
+ echo $text;
207
+ ?>
208
+ <textarea name="txtlog" class="small-text code" rows="4" style="width:100%;color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_PHPINI_BEGIN ."\n" . NFW_PHPINI_DATA ."\n". NFW_PHPINI_END ."\n"; ?></textarea>
209
+ </td>
210
+ </tr>
211
+
212
+
213
+ <?php
214
+ if ( file_exists( ABSPATH .'.htaccess' ) ) {
215
+ $text = sprintf( $file_exist, '<code>'. htmlspecialchars( ABSPATH ) .'<b>.htaccess</b>' .'</code>');
216
+ } else {
217
+ $text = sprintf( $file_missing, '<code>'. htmlspecialchars( ABSPATH ) .'<b>.htaccess</b>' .'</code>');
218
+ }
219
+ ?>
220
+ <tr id="tr-htaccess-modphp"<?php echo $tr_htaccess_modphp ?>>
221
+ <td>
222
+ <?php
223
+ echo $text;
224
+ ?>
225
+ <textarea name="txtlog" class="small-text code" rows="6" style="width:100%;color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_HTACCESS_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
226
+ </td>
227
+ </tr>
228
+ <tr id="tr-htaccess-litespeed"<?php echo $tr_htaccess_litespeed ?>>
229
+ <td>
230
+ <?php
231
+ echo $text;
232
+ ?>
233
+ <textarea name="txtlog" class="small-text code" rows="4" style="width:100%;color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_LITESPEED_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
234
+ </td>
235
+ </tr>
236
+ <tr id="tr-htaccess-openlitespeed"<?php echo $tr_htaccess_openlitespeed ?>>
237
+ <td>
238
+ <?php
239
+ _e('Log in to your Openlitespeed admin dashboard, click on "Virtual Host", select your domain, add the following instructions to the "php.ini Override" section in the "General" tab, and restart Openlitespeed:', 'ninjafirewall' );
240
+ ?>
241
+ <textarea name="txtlog" class="small-text code" rows="4" style="width:100%;color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_LITESPEED_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
242
+ <br />
243
+ <br />
244
+ <div style="background:#f1f1f1;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
245
+ <br>
246
+ <?php _e('Important: if one day you wanted to uninstall NinjaFirewall, do not forget to remove these instructions from your Openlitespeed admin dashboard <strong>before</strong> uninstalling NinjaFirewall because this installer could not do it for you.', 'ninjafirewall') ?>
247
+ <br>&nbsp;
248
+ </div>
249
+ </td>
250
+ </tr>
251
+ <tr id="tr-htaccess-suphp"<?php echo $tr_htaccess_suphp ?>>
252
+ <td>
253
+ <?php
254
+ echo $text;
255
+ ?>
256
+ <textarea name="txtlog" class="small-text code" rows="6" style="width:100%;color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_SUPHP_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
257
+ </td>
258
+ </tr>
259
+ </table>
260
+ </div>
261
+
262
+ <br />
263
+ <div>
264
+ <input id="btn-waf-next" type="button" class="button-primary" name="step" value="<?php _e('Finish', 'ninjafirewall') ?> &#187;" onclick="nfwjs_fullwafsubmit()" />&nbsp;&nbsp;
265
+ <?php wp_nonce_field('events_save', 'nfwnonce', 0); ?>
266
+ </div>
267
+ <br />
268
+ <br />
269
+ </div>
270
+
271
+ <?php
272
+ }
273
+
274
+ // ---------------------------------------------------------------------
275
+ // EOF
lib/utils.php CHANGED
@@ -19,6 +19,63 @@
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  // ---------------------------------------------------------------------
23
  // Check for HTTPS. This function is also available in firewall.php
24
  // and is used here only if the firewall is not loaded.
@@ -94,7 +151,8 @@ function nf_pre_http_request( $preempt, $r, $url ) {
94
  // NFW_DISABLE_SWC can be defined in wp-config.php (undocumented):
95
  if (! defined('NFW_DISABLE_SWC') && isset( $_SESSION ) ) {
96
  if ( function_exists( 'get_site_url' ) ) {
97
- $s_url = get_site_url();
 
98
  if ( strpos( $url, $s_url ) === 0 ) {
99
  @session_write_close();
100
  }
@@ -439,7 +497,7 @@ function nfw_select_ip() {
439
 
440
  // ---------------------------------------------------------------------
441
 
442
- function nfw_admin_notice(){
443
 
444
  if (nf_not_allowed( 0, __LINE__ ) ) { return; }
445
 
@@ -778,7 +836,7 @@ function nf_check_dbdata() {
778
  $message = __('NinjaFirewall has detected that one or more administrator accounts were modified in the database:', 'ninjafirewall') . "\n\n";
779
  // Even if this is a multisite install, we display
780
  // the requested blog, not the main site:
781
- $message .=__('Blog:', 'nfwplus') .' '. home_url('/') . "\n";
782
  $message.= __('Date:', 'ninjafirewall') .' '. date_i18n('F j, Y @ H:i:s') . ' (UTC '. date('O') . ")\n\n";
783
  $message.= sprintf(__('Total administrators : %s', 'ninjafirewall'), count($adm_users) ) . "\n\n";
784
  foreach( $adm_users as $adm ) {
@@ -901,28 +959,33 @@ function nfwhook_user_meta( $id, $key, $value ) {
901
  is_nfw_enabled();
902
  }
903
  // Note: "NFW_DISABLE_PRVESC2" is the only way to disable this feature.
904
- if ( NF_DISABLED || defined('NFW_DISABLE_PRVESC2') ) { return; }
 
 
905
 
906
  global $wpdb;
907
 
908
  if ( is_array( $key ) ) {
909
  $key = serialize( $key );
910
  }
911
- // The original prefix as defined in wp-config.php
912
- if ( strpos( $key, "{$wpdb->base_prefix}capabilities") !== FALSE && ! current_user_can('edit_users') ) {
913
  if ( is_array( $value ) ) {
914
  $value = serialize( $value );
915
  }
916
- if ( strpos( $value, 's:13:"administrator"' ) === FALSE ) { return; }
917
- $subject = __('Blocked privilege escalation attempt', 'ninjafirewall');
918
 
919
- $user_info = get_userdata( $id );
920
- if (! empty( $user_info->user_login ) ) {
921
- nfw_log2( 'WordPress: ' . $subject, "Username: {$user_info->user_login}, ID: $id", 3, 0);
922
- } else {
923
- nfw_log2( 'WordPress: ' . $subject, "$key: $value", 3, 0);
 
924
  }
925
 
 
 
 
 
926
  $nfw_options = nfw_get_option( 'nfw_options' );
927
 
928
  // Alert the admin if needed:
@@ -936,10 +999,19 @@ function nfwhook_user_meta( $id, $key, $value ) {
936
  $recipient = $nfw_options['alert_email'];
937
  }
938
  $subject = '[NinjaFirewall] ' . $subject;
939
- $message = __('NinjaFirewall has blocked an attempt to gain administrative privileges:', 'ninjafirewall') . "\n\n";
940
- // Show current blog, not main site (multisite):
 
941
  $message.= __('Blog:', 'ninjafirewall') .' '. home_url('/') . "\n";
942
- $message.= __('Username:', 'ninjafirewall') .' '. $user_info->user_login . " (ID: $id)\n";
 
 
 
 
 
 
 
 
943
  $message.= __('User IP:', 'ninjafirewall') .' '. NFW_REMOTE_ADDR . "\n";
944
  $message.= 'SCRIPT_FILENAME: ' . $_SERVER['SCRIPT_FILENAME'] . "\n";
945
  $message.= 'REQUEST_URI: ' . $_SERVER['REQUEST_URI'] . "\n";
@@ -983,13 +1055,15 @@ function nfwhook_user_meta( $id, $key, $value ) {
983
  );
984
  }
985
  }
 
986
  // --------------------------------------------------------------------- s1:h0
987
 
988
- function nfw_login_form_hook() {
989
 
990
  if (! empty( $_SESSION['nfw_bfd'] ) ) {
991
- echo '<p class="message" id="nfw_login_msg">'. __('NinjaFirewall brute-force protection is enabled and you are temporarily whitelisted.', 'ninjafirewall' ) . '</p><br />';
992
  }
 
993
  }
994
  add_filter( 'login_message', 'nfw_login_form_hook');
995
 
@@ -1212,7 +1286,7 @@ function nf_monitor_options( $value, $option, $old_value ) {
1212
 
1213
  function nfw_load_optmon() {
1214
 
1215
- if (! current_user_can('manage_options') && ! nfw_is_whitelisted() ) {
1216
  add_filter( 'pre_update_option', 'nf_monitor_options', 10, 3 );
1217
  }
1218
  }
@@ -1326,5 +1400,55 @@ function nf_monitor_options_alert( $option, $value, $old_value = null, $type ) {
1326
 
1327
  }
1328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1329
  // ---------------------------------------------------------------------
1330
  // EOF
19
 
20
  if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
21
 
22
+ // ---------------------------------------------------------------------
23
+ // Animated button/switch.
24
+
25
+ function nfw_toggle_switch( $type, $name, $text_on, $text_off, $size,
26
+ $value = 0, $disabled = false, $attr = false, $id = false, $align = false ) {
27
+
28
+ if ( $size == 'large' ) {
29
+ $size = 'style="width:150px;"';
30
+
31
+ } elseif ( $size == 'small' ) {
32
+ $size = 'style="width:80px"';
33
+
34
+ } else {
35
+ $size = 'style="width:'. (int) $size .'px"';
36
+ }
37
+
38
+ if ( $type == 'danger' ) {
39
+ $type = 'tgl-danger';
40
+ } elseif ( $type == 'warning' ) {
41
+ $type = 'tgl-warning';
42
+ } elseif ( $type == 'green' ) {
43
+ $type = 'tgl-green';
44
+ } else {
45
+ $type = 'tgl-info';
46
+ }
47
+
48
+ $text_on = htmlspecialchars( $text_on );
49
+ $text_off = htmlspecialchars( $text_off );
50
+
51
+ if ( $id == false ) {
52
+ $id = uniqid();
53
+ }
54
+
55
+ if ( $disabled == false ) {
56
+ $disabled = '';
57
+ } else {
58
+ $disabled = ' disabled';
59
+ }
60
+ if ( $attr != false ) {
61
+ $attr = ' '. $attr;
62
+ }
63
+
64
+ if ( $align == false ) {
65
+ $align = '';
66
+ } elseif ( $align == 'left' ) {
67
+ $align = ' alignleft';
68
+ } else {
69
+ $align = ' alignright';
70
+ }
71
+ ?>
72
+ <div class="tg-list-item<?php echo $align ?>">
73
+ <input class="tgl tgl-switch" name="<?php echo $name ?>"<?php checked( $value, 1 ) ?> id="<?php echo $id ?>" type="checkbox"<?php echo $disabled; ?><?php echo $attr ?> />
74
+ <label class="tgl-btn <?php echo $type ?>" data-tg-on="<?php echo $text_on ?>" data-tg-off="<?php echo $text_off ?>" for="<?php echo $id ?>" <?php echo $size ?>></label>
75
+ </div>
76
+ <?php
77
+ }
78
+
79
  // ---------------------------------------------------------------------
80
  // Check for HTTPS. This function is also available in firewall.php
81
  // and is used here only if the firewall is not loaded.
151
  // NFW_DISABLE_SWC can be defined in wp-config.php (undocumented):
152
  if (! defined('NFW_DISABLE_SWC') && isset( $_SESSION ) ) {
153
  if ( function_exists( 'get_site_url' ) ) {
154
+ $parse = parse_url( get_site_url() );
155
+ $s_url = @$parse['scheme'] . "://{$parse['host']}";
156
  if ( strpos( $url, $s_url ) === 0 ) {
157
  @session_write_close();
158
  }
497
 
498
  // ---------------------------------------------------------------------
499
 
500
+ function nfw_admin_notice() {
501
 
502
  if (nf_not_allowed( 0, __LINE__ ) ) { return; }
503
 
836
  $message = __('NinjaFirewall has detected that one or more administrator accounts were modified in the database:', 'ninjafirewall') . "\n\n";
837
  // Even if this is a multisite install, we display
838
  // the requested blog, not the main site:
839
+ $message .=__('Blog:', 'ninjafirewall') .' '. home_url('/') . "\n";
840
  $message.= __('Date:', 'ninjafirewall') .' '. date_i18n('F j, Y @ H:i:s') . ' (UTC '. date('O') . ")\n\n";
841
  $message.= sprintf(__('Total administrators : %s', 'ninjafirewall'), count($adm_users) ) . "\n\n";
842
  foreach( $adm_users as $adm ) {
959
  is_nfw_enabled();
960
  }
961
  // Note: "NFW_DISABLE_PRVESC2" is the only way to disable this feature.
962
+ if ( current_user_can('edit_users') || NF_DISABLED || defined('NFW_DISABLE_PRVESC2') ) {
963
+ return;
964
+ }
965
 
966
  global $wpdb;
967
 
968
  if ( is_array( $key ) ) {
969
  $key = serialize( $key );
970
  }
971
+
972
+ if ( strpos( $key, "{$wpdb->base_prefix}capabilities") !== FALSE ) {
973
  if ( is_array( $value ) ) {
974
  $value = serialize( $value );
975
  }
 
 
976
 
977
+ if ( strpos( $value, 's:6:"editor"' ) === FALSE &&
978
+ strpos( $value, 's:13:"administrator"' ) === FALSE &&
979
+ strpos( $value, 's:12:"shop_manager"' ) === FALSE &&
980
+ strpos( $value, 's:13:"bbp_keymaster"' ) === FALSE ) {
981
+
982
+ return;
983
  }
984
 
985
+ if ( strlen( $value ) > 200 ) { $value = mb_substr( $value, 0, 200, 'utf-8' ) . '...'; }
986
+ $subject = __('Blocked privilege escalation attempt', 'ninjafirewall');
987
+ nfw_log2( 'WordPress: ' . $subject, "$key: $value", 3, 0);
988
+
989
  $nfw_options = nfw_get_option( 'nfw_options' );
990
 
991
  // Alert the admin if needed:
999
  $recipient = $nfw_options['alert_email'];
1000
  }
1001
  $subject = '[NinjaFirewall] ' . $subject;
1002
+
1003
+ $message = __('NinjaFirewall has blocked an attempt to modify a user capability by someone who does not have administrative privileges:', 'ninjafirewall') . "\n\n";
1004
+
1005
  $message.= __('Blog:', 'ninjafirewall') .' '. home_url('/') . "\n";
1006
+
1007
+ // Show current blog, not main site (multisite):
1008
+ $user_info = get_userdata( $id );
1009
+ if (! empty( $user_info->user_login ) ) {
1010
+ $message.= __('Username:', 'ninjafirewall') .' '. "{$user_info->user_login}, ID: $id\n";
1011
+ }
1012
+ $message.= "meta_key: $key\n";
1013
+ $message.= "meta_value: $value\n\n";
1014
+
1015
  $message.= __('User IP:', 'ninjafirewall') .' '. NFW_REMOTE_ADDR . "\n";
1016
  $message.= 'SCRIPT_FILENAME: ' . $_SERVER['SCRIPT_FILENAME'] . "\n";
1017
  $message.= 'REQUEST_URI: ' . $_SERVER['REQUEST_URI'] . "\n";
1055
  );
1056
  }
1057
  }
1058
+
1059
  // --------------------------------------------------------------------- s1:h0
1060
 
1061
+ function nfw_login_form_hook( $message ) {
1062
 
1063
  if (! empty( $_SESSION['nfw_bfd'] ) ) {
1064
+ return '<p class="message" id="nfw_login_msg">'. __('NinjaFirewall brute-force protection is enabled and you are temporarily whitelisted.', 'ninjafirewall' ) . '</p><br />';
1065
  }
1066
+ return $message;
1067
  }
1068
  add_filter( 'login_message', 'nfw_login_form_hook');
1069
 
1286
 
1287
  function nfw_load_optmon() {
1288
 
1289
+ if (! nfw_is_whitelisted() && ! current_user_can('manage_options') ) {
1290
  add_filter( 'pre_update_option', 'nf_monitor_options', 10, 3 );
1291
  }
1292
  }
1400
 
1401
  }
1402
 
1403
+ // ---------------------------------------------------------------------
1404
+ // Activate WPWAF mode.
1405
+
1406
+ function nfw_enable_wpwaf() {
1407
+
1408
+ if ( file_exists( WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' ) ) {
1409
+ // Quick files comparison. We used md5 as we're only looking for changes,
1410
+ // i.e., if there was an update.
1411
+ if ( md5_file( WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' ) === md5_file( __DIR__ .'/ninjafirewall.php' ) ) {
1412
+ return;
1413
+ }
1414
+ }
1415
+
1416
+ if (! is_dir( WPMU_PLUGIN_DIR ) ) {
1417
+ if (! mkdir( WPMU_PLUGIN_DIR, 0755, true ) ) {
1418
+ return sprintf(
1419
+ __('Error, cannot create the %s folder.', 'ninjafirewall') .' '. __('Check your server permissions and try again.', 'ninjafirewall'),
1420
+ htmlspecialchars( WPMU_PLUGIN_DIR )
1421
+ );
1422
+ }
1423
+ }
1424
+
1425
+ if (! is_writable( WPMU_PLUGIN_DIR ) ) {
1426
+ return sprintf(
1427
+ __('Error, the %s folder is not writable.', 'ninjafirewall') .' '. __('Check your server permissions and try again.', 'ninjafirewall'),
1428
+ htmlspecialchars( WPMU_PLUGIN_DIR )
1429
+ );
1430
+ }
1431
+
1432
+ @copy( __DIR__ .'/ninjafirewall.php', WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' );
1433
+ if (! file_exists( WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' ) ) {
1434
+ return sprintf(
1435
+ __('Error, cannot write %s.', 'ninjafirewall') .' '. __('Check your server permissions and try again.', 'ninjafirewall'),
1436
+ htmlspecialchars( WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' )
1437
+ );
1438
+ }
1439
+
1440
+ return;
1441
+ }
1442
+
1443
+ // ---------------------------------------------------------------------
1444
+ // Deactivate WPFAF mode.
1445
+
1446
+ function nfw_disable_wpwaf() {
1447
+
1448
+ if ( file_exists( WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' ) ) {
1449
+ unlink( WPMU_PLUGIN_DIR .'/0-ninjafirewall.php' );
1450
+ }
1451
+ }
1452
+
1453
  // ---------------------------------------------------------------------
1454
  // EOF
lib/wpplus.php CHANGED
@@ -23,131 +23,232 @@ if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
  ?>
26
- <div class="wrap">
27
- <h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>">&nbsp;<font color="#21759B">WP+</font> Edition</h1>
28
- <br />
29
- <table border="0" cellspacing="2" cellpadding="5" width="100%">
30
- <tr>
31
- <td>
32
- <h2>
33
- <b><?php _e('Need more security? Check out NinjaFirewall', 'ninjafirewall') ?> (<font color="#21759B">WP+</font> Edition).</b>
34
- </h2>
35
- NinjaFirewall (<font color="#21759B">WP+</font> Edition) <?php
36
- // translators: [NinjaFirewall] is a supercharged Edition...
37
- _e('is a supercharged Edition of our Web Application Firewall. It adds many new exciting features and blazing fast performances to make it the fastest and most advanced security plugin for WordPress.', 'ninjafirewall') ?>
38
- </td>
39
- </tr>
40
- <tr>
41
- <td>
42
- <h3><?php _e('Access Control', 'ninjafirewall') ?></h3>
43
- <p><?php _e('<b>Access Control</b> is a powerful set of directives that can be used to allow or restrict access to your blog, depending on the <strong>User Role</strong>, <strong>IP</strong>, <strong>Geolocation</strong>, <strong>Requested URL</strong>, <strong>User-agent</strong> visitors behavior (<strong>Rate Limiting</strong>)and <strong>User Input</strong>. Those directives will be processed before the Firewall Policies and NinjaFirewall\'s built-in security rules.', 'ninjafirewall') ?>
44
- <p>
45
- <?php _e('Its main configuration allows you to whitelist WordPress users depending on their roles, to select the source IP (useful if your site is using a CDN or behind a reverse-proxy/load balancer), and the HTTP methods all directives should apply to:', 'ninjafirewall') ?></p>
46
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/01_ac_main.png" width="490" height="504" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
47
-
48
- <br />
49
-
50
- <p><?php _e('<b>Access Control</b> can use geolocation to block visitors from specific countries. It can apply to the whole blog or only to specific folders or scripts (e.g., /wp-login.php, /xmlrpc.php etc). If you have a theme or a plugin that needs to know your visitors location, you can even ask NinjaFirewall to append the country code to the PHP headers:', 'ninjafirewall') ?></p>
51
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/02_ac_geoip.png" width="460" height="611" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
52
-
53
- <br />
54
-
55
- <p><?php _e('<b>Access Control</b> can be used to whitelist/blacklist an IP or any part of it. NinjaFirewall natively supports IPv4 and IPv6 protocols, for both public and private addresses:', 'ninjafirewall') ?></p>
56
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/03_ac_ip.png" width="471" height="374" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
57
-
58
- <br />
59
-
60
- <p><?php _e('<b>Access Control</b> can slow down aggressive bots, crawlers, web scrapers or even small HTTP attacks with its <strong>Rate-Limiting</strong> feature.', 'ninjafirewall') ?>
61
- <br />
62
- <?php _e('Because it can block attackers <strong>before WordPress and all its plugins are loaded</strong> and can handle thousands of HTTP requests per second, NinjaFirewall will save precious bandwidth and reduce your server load.', 'ninjafirewall') ?></p>
63
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/04_ac_limit.png" width="471" height="122" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
64
-
65
- <br />
66
-
67
- <p><?php _e('<b>URL Access Control</b> lets you permanently allow/block any access to one or more PHP scripts based on their path or name:', 'ninjafirewall') ?></p>
68
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/05_ac_url.png" width="467" height="367" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
69
-
70
- <br />
71
-
72
- <p><?php _e('<b>Bots Access Control</b> allows you block bots, scanners and various annoying crawlers:', 'ninjafirewall') ?></p>
73
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/06_ac_bots.png" width="471" height="263" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
74
-
75
- <br />
76
-
77
- <p><?php _e('<b>User Input Access Control</b> allows you to to ignore or block some specific user input:', 'ninjafirewall') ?></p>
78
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/14_ac_input.png" width="490" height="393" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
79
-
80
- <br />
81
-
82
- <h3>Web Filter</h3>
83
- <p><?php _e('If NinjaFirewall can hook and scan incoming requests, the <b><font color="#21759B">WP+</font> Edition</b> can also hook the response body (i.e., the output of the HTML page right before it is sent to your visitors browser) and search it for some specific keywords. Such a filter can be useful to detect hacking or malware patterns injected into your HTML page (text strings, spam links, malicious JavaScript code), hackers shell script, redirections and even errors (PHP/MySQL errors). Some suggested keywords as well as a default list are included.', 'ninjafirewall') ?>
84
- <br />
85
- <?php _e('In the case of a positive detection, NinjaFirewall will not block the response body but will send you an alert by email. It can even attach the whole HTML source of the page for your review:', 'ninjafirewall') ?></p>
86
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/07_webfilter.png" width="461" height="445" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
87
-
88
- <br />
89
-
90
- <h3><?php _e('Antispam', 'ninjafirewall') ?></h3>
91
- <p><?php _e('NinjaFirewall (<font color="#21759B">WP+</font> Edition) can protect your blog comment and registration forms against spam. The protection is totally transparent to your visitors and does not require any interaction: no CAPTCHA, no math puzzles or trivia questions. Extremely easy to activate, but powerful enough to make spam bots life as miserable as possible:', 'ninjafirewall') ?></p>
92
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/08_antispam.png" width="490" height="323" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;">
93
- <br />
94
- <p class="description"><?php _e('NinjaFirewall antispam feature works only with WordPress built-in comment and registration forms.', 'ninjafirewall') ?></p></center>
95
-
96
- <br />
97
-
98
- <h3><?php _e('Centralized Logging', 'ninjafirewall') ?></h3>
99
- <p><?php printf( __('NinjaFirewall (<font color="#21759B">WP+</font> Edition) lets you remotely access the firewall log of all your NinjaFirewall protected websites from one single installation, using the <a href="%s">Centralized Logging</a> feature. You do not need any longer to log in to individual servers to analyse your log data.', 'ninjafirewall'), 'https://blog.nintechnet.com/centralized-logging-with-ninjafirewall/') ?>
100
- <br />
101
- <?php _e('There is no limit to the number of websites you can connect to, and they can be running any edition of NinjaFirewall: WP, <font color="#21759B">WP+</font>, Pro or <font color="red">Pro+</font>.', 'ninjafirewall') ?>
102
- </p>
103
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/12_centlog.png" width="490" height="367" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
104
-
105
- <br />
106
-
107
- <h3><?php _e('Improved features', 'ninjafirewall') ?></h3>
108
- <strong><?php _e('File uploads:', 'ninjafirewall') ?></strong>
109
- <p><?php _e('NinjaFirewall (<font color="#21759B">WP+</font> Edition) makes it possible to allow uploads while rejecting potentially dangerous files: scripts (PHP, CGI, Ruby, Python, bash/shell), C/C++ source code, binaries (MZ/PE/NE and ELF formats), system files (.htaccess, .htpasswd and PHP INI) and SVG files containing Javascript/XML events. You can easily limit the size of each uploaded file too, without having to modify your PHP configuration:', 'ninjafirewall') ?></p>
110
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/09_uploads.png" width="410" height="363" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
111
-
112
- <br />
113
-
114
- <p><strong><?php _e('Firewall Log:', 'ninjafirewall') ?></strong>
115
- <br />
116
- <?php _e('The log menu has been revamped too. You can disable the firewall log, delete the current one, enable its rotation based on the size of the file and, if any, view each rotated log separately. Quick filtering options are easily accessible from checkboxes and the log can be exported as a TSV (tab-separated values) text file.', 'ninjafirewall') ?><br />
117
- <?php _e('It is also possible to redirect all incidents and events to the Syslog server:', 'ninjafirewall') ?> <a href="https://blog.nintechnet.com/syslog-logging-with-ninjafirewall/">Syslog logging with NinjaFirewall</a>.</p>
118
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/10_log.png" width="490" height="519" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
119
-
120
- <br />
121
-
122
- <p><strong><?php _e('Rules Update:', 'ninjafirewall') ?></strong>
123
- <br />
124
- <?php _e('The <b><font color="#21759B">WP+</font> Edition</b> can check for security rules updates <b>as often as every 15 minutes</b>, versus one hour for the free WP Edition.', 'ninjafirewall') ?></p>
125
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/13_updates.png" width="518" height="244" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;"></center>
126
-
127
- <br />
128
-
129
- <p><strong><?php _e('Shared Memory use:', 'ninjafirewall') ?></strong>
130
- <br />
131
- <?php printf( __('Although NinjaFirewall is already <a href="%s">much faster than other WordPress plugins</a>, the <b><font color="#21759B">WP+</font> Edition</b> brings its performance to a whole new level by using Unix shared memory in order to speed things up even more.', 'ninjafirewall'), 'https://blog.nintechnet.com/wordpress-brute-force-attack-detection-plugins-comparison-2015/') ?> <?php _e('This allows easier and faster inter-process communication between the firewall and the plugin part of NinjaFirewall and, because its data and configuration are stored in shared memory segments, the firewall does not need to connect to the database any longer.', 'ninjafirewall') ?> <?php _e('This dramatically increases the processing speed (there is nothing faster than RAM), prevents blocking I/O and MySQL slow queries. On a very busy server like a multi-site network, the firewall processing speed will increase from 25% to 30%. It can be enabled from the "Firewall Options" menu:', 'ninjafirewall') ?></p>
132
-
133
- <center><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/11_shmop.png" width="490" height="306" style="border: 1px solid #999;-moz-box-shadow:-3px 5px 5px #999;-webkit-box-shadow:-3px 5px 5px #999;box-shadow:-3px 5px 5px #999;">
134
- <br />
135
- <span class="description"><?php _e('This feature requires that PHP was compiled with the <code>--enable-shmop</code> parameter.', 'ninjafirewall') ?></span>
136
- </center>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
- </td>
139
- </tr>
140
- <tr>
141
- <td>&nbsp;</td>
142
- </tr>
143
- <tr style="background-color:#F9F9F9;border: solid 1px #DFDFDF;">
144
- <td style="text-align:center">
145
- <h2><b><a href="https://nintechnet.com/"><?php _e('Learn more</a> about the <font color="#21759B">WP+</font> Edition unique features.', 'ninjafirewall') ?></b></h2>
146
- <h2><b><a href="https://nintechnet.com/ninjafirewall/wp-edition/?comparison"><?php _e('Compare</a> the WP and <font color="#21759B">WP+</font> Editions.', 'ninjafirewall') ?></b></h2>
147
- </td>
148
- </tr>
149
- </table>
150
  </div>
 
151
  <?php
152
- /* ------------------------------------------------------------------ */
153
  // EOF
23
  nf_not_allowed( 'block', __LINE__ );
24
 
25
  ?>
26
+ <div class="wrap about-wrap full-width-layout">
27
+
28
+ <h1>
29
+ <?php _e('Need more security?', 'ninjafirewall') ?>
30
+ </h1>
31
+
32
+ <p class="about-text">
33
+ <?php
34
+ printf( __('Take the time to explore NinjaFirewall %s, a supercharged Edition of our Web Application Firewall. It adds many new exciting features and blazing fast performances to make it the fastest and most powerful security plugin for WordPress, no less!', 'ninjafirewall'), '<font color="#21759B">WP+</font> Edition' ) ?>
35
+ </p>
36
+
37
+ <div style="position:absolute;top:0;right:0;display:inline-block;">
38
+ <img src="<?php echo plugins_url() ?>/ninjafirewall/images/ninjafirewall_100.png" />
39
+ </div>
40
+
41
+ <hr />
42
+
43
+ <h1>
44
+ <?php _e('New Features', 'ninjafirewall') ?>
45
+ </h1>
46
+
47
+ <div class="feature-section is-wide has-2-columns">
48
+ <div class="column is-vertically-aligned-center">
49
+ <h3><?php _e('Access Control', 'ninjafirewall') ?></h3>
50
+ <p><?php _e('Access Control is a powerful set of directives that can be used to allow or restrict access to your blog, depending on the <strong>User Role</strong>, <strong>IP</strong>, <strong>Geolocation</strong>, <strong>Requested URL</strong>, <strong>User-agent</strong> visitors behavior (<strong>Rate Limiting</strong>) and <strong>User Input</strong>. Those directives will be processed before the Firewall Policies and NinjaFirewall\'s built-in security rules.', 'ninjafirewall') ?>
51
+ <p><?php _e('Its main configuration allows you to whitelist WordPress users depending on their roles, to select the source IP (useful if your site is using a CDN or behind a reverse-proxy/load balancer), and the HTTP methods all directives should apply to.', 'ninjafirewall') ?></p>
52
+ </div>
53
+ <div class="column">
54
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
55
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
56
+ </div>
57
+ </div>
58
+
59
+ <hr />
60
+
61
+ <div class="feature-section is-wide has-2-columns">
62
+ <div class="column">
63
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-geolocation.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-geolocation.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
64
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
65
+ </div>
66
+ <div class="column is-vertically-aligned-center">
67
+ <h3><?php _e('Geolocation Access Control', 'ninjafirewall') ?></h3>
68
+ <p><?php _e('Geolocation can be used to block visitors from specific countries. It can apply to the whole blog or only to specific folders or scripts (e.g., /wp-login.php, /xmlrpc.php etc). If you have a theme or a plugin that needs to know your visitors location, you can even ask NinjaFirewall to append the country code to the PHP headers.', 'ninjafirewall') ?></p>
69
+ </div>
70
+
71
+ </div>
72
+
73
+ <hr />
74
+
75
+ <div class="feature-section is-wide has-2-columns">
76
+ <div class="column is-vertically-aligned-center">
77
+ <h3><?php _e('IP Access Control', 'ninjafirewall') ?></h3>
78
+ <p><?php _e('The IP Access Control allows you to permanently allow or block an IP, a whole range of IP addresses <strong>and even AS numbers</strong> (Autonomous System number). IPv4 and IPv6 are fully supported by NinjaFirewall.', 'ninjafirewall') ?></p>
79
+ </div>
80
+ <div class="column">
81
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-ip.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-ip.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
82
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
83
+ </div>
84
+ </div>
85
+
86
+ <div class="feature-section is-wide has-2-columns">
87
+ <div class="column">
88
+ <p><?php _e('The IP Access Control can slow down aggressive bots, crawlers, web scrapers or even small HTTP attacks with its <strong>Rate-Limiting</strong> feature.', 'ninjafirewall') .' ' ?>
89
+
90
+ <?php _e('Because it can block attackers <strong>before WordPress and all its plugins are loaded</strong> and can handle a lot of HTTP requests per second, NinjaFirewall will save precious bandwidth and reduce your server load.', 'ninjafirewall') ?></p>
91
+ </div>
92
+ <div class="column is-vertically-aligned-center">
93
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/rate-limiting.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/rate-limiting.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
94
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
95
+ </div>
96
+ </div>
97
+
98
+ <hr />
99
+
100
+ <div class="feature-section is-wide has-2-columns">
101
+ <div class="column">
102
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-url.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-url.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
103
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
104
+ </div>
105
+ <div class="column is-vertically-aligned-center">
106
+ <h3><?php _e('URL Access Control', 'ninjafirewall') ?></h3>
107
+ <p><?php _e('URL Access Control lets you permanently allow/block any access to one or more PHP scripts based on their <code>SCRIPT_NAME</code>.', 'ninjafirewall') ?></p>
108
+ </div>
109
+
110
+ </div>
111
+
112
+ <hr />
113
+
114
+ <div class="feature-section is-wide has-2-columns">
115
+ <div class="column is-vertically-aligned-center">
116
+ <h3><?php _e('Bot Access Control', 'ninjafirewall') ?></h3>
117
+ <p><?php _e('Bot Access Control allows you block bots, scanners and various annoying crawlers.', 'ninjafirewall') ?></p>
118
+ </div>
119
+ <div class="column">
120
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-bot.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-bot.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
121
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
122
+ </div>
123
+ </div>
124
+
125
+ <hr />
126
+
127
+ <div class="feature-section is-wide has-2-columns">
128
+ <div class="column">
129
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-input.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/access-control-input.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
130
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
131
+ </div>
132
+ <div class="column is-vertically-aligned-center">
133
+ <h3><?php _e('User Input Access Control', 'ninjafirewall') ?></h3>
134
+ <p><?php _e('User Input Access Control allows you to to ignore or block some specific user input.', 'ninjafirewall') ?></p>
135
+ </div>
136
+ </div>
137
+
138
+ <hr />
139
+
140
+ <div class="feature-section is-wide has-2-columns">
141
+ <div class="column is-vertically-aligned-center">
142
+ <h3>Web Filter</h3>
143
+ <p><?php _e('The Web Filter can hook the response body, i.e., the output of the HTML page, and search it for some specific keywords. Such filter can be useful to identify errors, hacked content and data leakage issues in the response body sent to your visitors.', 'ninjafirewall') .' ' ?>
144
+ <?php _e('In the case of a positive detection, NinjaFirewall will not block the response body but will send you an alert by email. It can even attach the whole HTML source of the page for your review.', 'ninjafirewall') ?></p>
145
+ </div>
146
+ <div class="column">
147
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/web-filter.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/web-filter.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
148
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
149
+ </div>
150
+ </div>
151
+
152
+ <hr />
153
+
154
+ <div class="feature-section is-wide has-2-columns">
155
+ <div class="column is-vertically-aligned-center">
156
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/anti-spam.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/anti-spam.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
157
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
158
+ </div>
159
+ <div class="column">
160
+ <h3><?php _e('Antispam', 'ninjafirewall') ?></h3>
161
+ <p><?php _e('The Antispam can protect your blog comment and registration forms against spam. The protection is totally transparent to your visitors and does not require any interaction: no CAPTCHA, no math puzzles or trivia questions. Extremely easy to activate, but powerful enough to make spam bots life as miserable as possible.', 'ninjafirewall') ?></p>
162
+ <p class="description"><?php _e('NinjaFirewall antispam feature works only with WordPress built-in comment and registration forms.', 'ninjafirewall') ?></p>
163
+ </div>
164
+ </div>
165
+
166
+ <hr />
167
+
168
+ <div class="feature-section is-wide has-2-columns">
169
+ <div class="column is-vertically-aligned-center">
170
+ <h3><?php _e('Centralized Logging', 'ninjafirewall') ?></h3>
171
+ <p><?php printf( __('Centralized Logging lets you remotely access the firewall log of all your NinjaFirewall protected websites from one single installation, using the <a href="%s">Centralized Logging</a> feature. You do not need any longer to log in to individual servers to analyse your log data.', 'ninjafirewall'), 'https://blog.nintechnet.com/centralized-logging-with-ninjafirewall/') ?>
172
+ <br />
173
+ <?php _e('There is no limit to the number of websites you can connect to, and they can be running any edition of NinjaFirewall: WP, <font color="#21759B">WP+</font>, Pro or <font color="red">Pro+</font>.', 'ninjafirewall') ?>
174
+ </div>
175
+ <div class="column">
176
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/centralized-logging.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/centralized-logging.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
177
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
178
+ </div>
179
+ </div>
180
+
181
+ <hr />
182
+
183
+ <h1>
184
+ <?php _e('Improved features', 'ninjafirewall') ?>
185
+ </h1>
186
+
187
+ <div class="feature-section is-wide has-2-columns">
188
+ <div class="column">
189
+ <h3><?php _e('File uploads', 'ninjafirewall') ?></h3>
190
+ <p><?php _e('You can allow uploads while rejecting potentially dangerous files: scripts (PHP, CGI, Ruby, Python, bash/shell), C/C++ source code, binaries (MZ/PE/NE and ELF formats), system files (.htaccess, .htpasswd and PHP INI) and SVG files containing Javascript/XML events. You can easily limit the size of each uploaded file too, without having to modify your PHP configuration.', 'ninjafirewall') ?></p>
191
+ </div>
192
+ <div class="column is-vertically-aligned-center">
193
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/file-uploads.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/file-uploads.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
194
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
195
+ </div>
196
+ </div>
197
+
198
+ <hr />
199
+
200
+ <div class="feature-section is-wide has-2-columns">
201
+ <div class="column">
202
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/firewall-log.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/firewall-log.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
203
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
204
+ </div>
205
+ <div class="column is-vertically-aligned-center">
206
+ <h3><?php _e('Firewall Log', 'ninjafirewall') ?></h3>
207
+ <p>
208
+ <?php _e('The log menu has been revamped too. You can disable the firewall log, delete the current one, enable its rotation based on the size of the file and, if any, view each rotated log separately. Quick filtering options are easily accessible from checkboxes and the log can be exported as a TSV (tab-separated values) text file. You can also easily add any IP to your Access Control whitelist or blacklist.', 'ninjafirewall') ?><br />
209
+ <?php _e('It is also possible to redirect all incidents and events to the Syslog server:', 'ninjafirewall') ?> <a href="https://blog.nintechnet.com/syslog-logging-with-ninjafirewall/">Syslog logging with NinjaFirewall</a>.</p>
210
+ </div>
211
+ </div>
212
+
213
+ <hr />
214
+
215
+ <div class="feature-section is-wide has-2-columns">
216
+ <div class="column is-vertically-aligned-center">
217
+ <h3><?php _e('Rules Update', 'ninjafirewall') ?></h3>
218
+ <p>
219
+ <?php _e('You can check for security rules updates <b>as often as every 15 minutes</b>, versus one hour for the free WP Edition. Don\'t leave your blog at risk!', 'ninjafirewall') ?></p>
220
+ </div>
221
+ <div class="column">
222
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/rules-update.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/rules-update.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
223
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
224
+ </div>
225
+ </div>
226
+
227
+ <hr />
228
+
229
+ <div class="feature-section is-wide has-2-columns">
230
+ <div class="column is-vertically-aligned-center">
231
+ <a href="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/shared-memory.png" class="thickbox"><img src="<?php echo plugins_url() ?>/ninjafirewall/images/screenshots/shared-memory.png" class="wpplus" title="<?php _e('Click to enlarge image.', 'ninjafirewall') ?>" /></a>
232
+ <p class="description aligncenter"><?php _e('Click to enlarge image.', 'ninjafirewall') ?></p>
233
+ <p class="description"><?php _e('This feature requires that PHP was compiled with the <code>--enable-shmop</code> parameter and that NinjaFirewall is running in "Full WAF" mode.', 'ninjafirewall') ?></p>
234
+ </div>
235
+ <div class="column">
236
+ <h3><?php _e('Shared Memory use', 'ninjafirewall') ?></h3>
237
+ <p>
238
+ <?php printf( __('Although NinjaFirewall is already <a href="%s">much faster than other WordPress plugins</a>, the <b><font color="#21759B">WP+</font> Edition</b> brings its performance to a whole new level by using Unix shared memory in order to speed things up even more.', 'ninjafirewall'), 'https://blog.nintechnet.com/wordpress-brute-force-attack-detection-plugins-comparison-2015/') ?> <?php _e('This allows easier and faster inter-process communication between the firewall and the plugin part of NinjaFirewall and, because its data and configuration are stored in shared memory segments, the firewall does not need to connect to the database any longer.', 'ninjafirewall') ?> <?php _e('This dramatically increases the processing speed (there is nothing faster than RAM), prevents blocking I/O and MySQL slow queries. On a very busy server like a multi-site network, the firewall processing speed will increase from 25% to 30%. It can be enabled from the "Firewall Options" menu.', 'ninjafirewall') ?></p>
239
+ </div>
240
+
241
+ </div>
242
+
243
+ <hr />
244
+
245
+ <h3><b><a href="https://nintechnet.com/"><?php _e('Learn more</a> about the <font color="#21759B">WP+</font> Edition unique features.', 'ninjafirewall') ?></b></h3>
246
+ <h3><b><a href="https://nintechnet.com/ninjafirewall/wp-edition/?comparison"><?php _e('Compare</a> the WP and <font color="#21759B">WP+</font> Editions.', 'ninjafirewall') ?></b></h3>
247
+
248
+ <hr />
249
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  </div>
251
+
252
  <?php
253
+ // ---------------------------------------------------------------------
254
  // EOF
ninjafirewall.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: NinjaFirewall (WP Edition)
4
  Plugin URI: https://nintechnet.com/
5
  Description: A true Web Application Firewall to protect and secure WordPress.
6
- Version: 3.9.1
7
  Author: The Ninja Technologies Network
8
  Author URI: https://nintechnet.com/
9
  License: GPLv3 or later
@@ -19,7 +19,7 @@ Domain Path: /languages
19
  | (c) NinTechNet - https://nintechnet.com/ |
20
  +---------------------------------------------------------------------+
21
  */
22
- define( 'NFW_ENGINE_VERSION', '3.9.1' );
23
  /*
24
  +---------------------------------------------------------------------+
25
  | This program is free software: you can redistribute it and/or |
@@ -79,6 +79,9 @@ $err_fw = array(
79
  12 => __('Cannot retrieve user rules from database (#1)', 'ninjafirewall'),
80
  13 => sprintf( __("The firewall cannot access its log and cache folders. If you changed the name of WordPress %s or %s folders, you must define NinjaFirewall's built-in %s constant (see %s for more info)", 'ninjafirewall'), '<code>/wp-content/</code>', '<code>/plugins/</code>', '<code>NFW_LOG_DIR</code>', "<a href='https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja' target='_blank'>Path to NinjaFirewall's log and cache directory</a>"),
81
  14 => __('The PHP msqli extension is missing or not loaded.', 'ninjafirewall'),
 
 
 
82
  );
83
 
84
  if (! defined('NFW_LOG_DIR') ) {
@@ -133,49 +136,65 @@ function nfw_activate() {
133
  exit( __('NinjaFirewall is not compatible with Microsoft Windows.', 'ninjafirewall') );
134
  }
135
 
136
- if ( $nfw_options = nfw_get_option( 'nfw_options' ) ) {
137
- $nfw_options['enabled'] = 1;
138
- nfw_update_option( 'nfw_options', $nfw_options);
 
 
 
 
 
139
 
140
- if (! empty($nfw_options['sched_scan']) ) {
141
- if ($nfw_options['sched_scan'] == 1) {
142
- $schedtype = 'hourly';
143
- } elseif ($nfw_options['sched_scan'] == 2) {
144
- $schedtype = 'twicedaily';
145
- } else {
146
- $schedtype = 'daily';
147
- }
148
- if ( wp_next_scheduled('nfscanevent') ) {
149
- wp_clear_scheduled_hook('nfscanevent');
150
- }
151
- wp_schedule_event( time() + 3600, $schedtype, 'nfscanevent');
 
 
 
 
152
  }
153
- if (! empty($nfw_options['enable_updates']) ) {
154
- if ($nfw_options['sched_updates'] == 1) {
155
- $schedtype = 'hourly';
156
- } elseif ($nfw_options['sched_updates'] == 2) {
157
- $schedtype = 'twicedaily';
158
- } else {
159
- $schedtype = 'daily';
160
- }
161
- if ( wp_next_scheduled('nfsecupdates') ) {
162
- wp_clear_scheduled_hook('nfsecupdates');
163
- }
164
- wp_schedule_event( time() + 15, $schedtype, 'nfsecupdates');
165
  }
166
- if (! empty($nfw_options['a_52']) ) {
167
- if ( wp_next_scheduled('nfdailyreport') ) {
168
- wp_clear_scheduled_hook('nfdailyreport');
169
- }
170
- nfw_get_blogtimezone();
171
- wp_schedule_event( strtotime( date('Y-m-d 00:00:05', strtotime("+1 day")) ), 'daily', 'nfdailyreport');
 
 
 
 
172
  }
173
- // Re-enable the garbage collector:
174
- wp_schedule_event( time() + 1800, 'hourly', 'nfwgccron' );
175
-
176
- if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf_off.php' ) ) {
177
- rename(NFW_LOG_DIR . '/nfwlog/cache/bf_conf_off.php', NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php');
 
 
 
 
178
  }
 
 
 
 
 
 
 
 
 
179
  }
180
  }
181
 
@@ -190,6 +209,8 @@ function nfw_deactivate() {
190
  $nfw_options = nfw_get_option( 'nfw_options' );
191
  $nfw_options['enabled'] = 0;
192
 
 
 
193
  if ( wp_next_scheduled('nfwgccron') ) {
194
  wp_clear_scheduled_hook('nfwgccron');
195
  }
@@ -212,6 +233,116 @@ function nfw_deactivate() {
212
 
213
  register_deactivation_hook( __FILE__, 'nfw_deactivate' );
214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  /* ------------------------------------------------------------------ */
216
 
217
  function nfw_admin_init() {
@@ -226,12 +357,21 @@ function nfw_admin_init() {
226
  // Post-update adjustment:
227
  require plugin_dir_path(__FILE__) . 'lib/init_update.php';
228
 
 
 
 
 
 
 
229
  // --------------------------------------------
230
  // Anything below requires admin authentication
231
  // --------------------------------------------
232
 
233
  if ( nf_not_allowed(0, __LINE__) ) { return; }
234
 
 
 
 
235
  // Export configuration:
236
  if ( isset($_POST['nf_export']) ) {
237
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'options_save') ) {
@@ -404,10 +544,124 @@ function nfw_logout_hook() {
404
  if (isset( $_SESSION['nfw_livelog'] ) ) {
405
  unset( $_SESSION['nfw_livelog'] );
406
  }
 
 
 
407
  }
408
 
409
  add_action( 'wp_logout', 'nfw_logout_hook' );
410
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  /* ------------------------------------------------------------------ */
412
 
413
  function is_nfw_enabled() {
@@ -453,19 +707,6 @@ function ninjafirewall_admin_menu() {
453
  exit;
454
  }
455
 
456
- if (! defined('NF_DISABLED') ) {
457
- is_nfw_enabled();
458
- }
459
-
460
- if (NF_DISABLED == 10) {
461
- add_menu_page( 'NinjaFirewall', 'NinjaFirewall', 'manage_options',
462
- 'NinjaFirewall', 'nf_menu_install', plugins_url( '/images/nf_icon.png', __FILE__ )
463
- );
464
- add_submenu_page( 'NinjaFirewall', __('Installation', 'ninjafirewall'), __('Installation', 'ninjafirewall'), 'manage_options',
465
- 'NinjaFirewall', 'nf_menu_install' );
466
- return;
467
- }
468
-
469
  add_menu_page( 'NinjaFirewall', 'NinjaFirewall', 'manage_options',
470
  'NinjaFirewall', 'nf_sub_main', plugins_url( '/images/nf_icon.png', __FILE__ )
471
  );
@@ -478,7 +719,9 @@ function ninjafirewall_admin_menu() {
478
  'NinjaFirewall', 'nf_sub_main' );
479
  add_action( 'load-' . $menu_hook, 'help_nfsubmain' );
480
 
 
481
  $menu_hook = add_submenu_page( 'NinjaFirewall', __('NinjaFirewall: Statistics', 'ninjafirewall'), __('Statistics', 'ninjafirewall'), 'manage_options',
 
482
  'nfsubstat', 'nf_sub_statistics' );
483
  add_action( 'load-' . $menu_hook, 'help_nfsubstat' );
484
 
@@ -599,18 +842,9 @@ if ( is_multisite() ) {
599
 
600
  /* ------------------------------------------------------------------ */
601
 
602
- function nf_menu_install() {
603
-
604
- nf_not_allowed( 'block', __LINE__ );
605
-
606
- require_once plugin_dir_path(__FILE__) . 'install.php';
607
- }
608
-
609
- /* ------------------------------------------------------------------ */
610
-
611
  function nf_sub_main() {
612
 
613
- // Main menu (Overview) :
614
  require plugin_dir_path(__FILE__) . 'lib/overview.php';
615
 
616
  }
@@ -635,7 +869,7 @@ function nf_sub_options() { // i18n
635
 
636
  function nf_sub_policies() {
637
 
638
- // Firewall Policies menu :
639
  require plugin_dir_path(__FILE__) . 'lib/firewall_policies.php';
640
 
641
  }
@@ -653,7 +887,7 @@ function nf_sub_fileguard() {
653
 
654
  function nf_sub_network() {
655
 
656
- // Network menu (multi-site only) :
657
  require plugin_dir_path(__FILE__) . 'lib/network.php';
658
 
659
  }
@@ -723,9 +957,9 @@ function nf_sub_loginprot() {
723
 
724
  /* ------------------------------------------------------------------ */
725
 
726
- function nfw_log2($loginfo, $logdata, $loglevel, $ruleid) { // i18n
727
 
728
- // Write incident to the firewall log :
729
  require plugin_dir_path(__FILE__) . 'lib/nfw_log.php';
730
 
731
  }
@@ -734,7 +968,7 @@ function nfw_log2($loginfo, $logdata, $loglevel, $ruleid) { // i18n
734
 
735
  function nf_sub_editor() {
736
 
737
- // Rules Editor menu :
738
  require plugin_dir_path(__FILE__) . 'lib/rules_editor.php';
739
 
740
  }
@@ -825,9 +1059,9 @@ function nf_not_allowed($block, $line = 0) {
825
  // (see NFW_ALLOWED_ADMIN at http://nin.link/nfwaa ):
826
  if ( defined('NFW_ALLOWED_ADMIN') ) {
827
  $current_user = wp_get_current_user();
828
- $admins = explode(',', NFW_ALLOWED_ADMIN);
829
- foreach ($admins as $admin) {
830
- if ( trim($admin) == $current_user->user_login ) {
831
  return false;
832
  }
833
  }
3
  Plugin Name: NinjaFirewall (WP Edition)
4
  Plugin URI: https://nintechnet.com/
5
  Description: A true Web Application Firewall to protect and secure WordPress.
6
+ Version: 4.0
7
  Author: The Ninja Technologies Network
8
  Author URI: https://nintechnet.com/
9
  License: GPLv3 or later
19
  | (c) NinTechNet - https://nintechnet.com/ |
20
  +---------------------------------------------------------------------+
21
  */
22
+ define( 'NFW_ENGINE_VERSION', '4.0' );
23
  /*
24
  +---------------------------------------------------------------------+
25
  | This program is free software: you can redistribute it and/or |
79
  12 => __('Cannot retrieve user rules from database (#1)', 'ninjafirewall'),
80
  13 => sprintf( __("The firewall cannot access its log and cache folders. If you changed the name of WordPress %s or %s folders, you must define NinjaFirewall's built-in %s constant (see %s for more info)", 'ninjafirewall'), '<code>/wp-content/</code>', '<code>/plugins/</code>', '<code>NFW_LOG_DIR</code>', "<a href='https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja' target='_blank'>Path to NinjaFirewall's log and cache directory</a>"),
81
  14 => __('The PHP msqli extension is missing or not loaded.', 'ninjafirewall'),
82
+ 15 => __('Cannot retrieve user options from database (#4)', 'ninjafirewall'),
83
+ 16 => __('Cannot retrieve user rules from database (#4)', 'ninjafirewall'),
84
+
85
  );
86
 
87
  if (! defined('NFW_LOG_DIR') ) {
136
  exit( __('NinjaFirewall is not compatible with Microsoft Windows.', 'ninjafirewall') );
137
  }
138
 
139
+ if (! $nfw_options = nfw_get_option( 'nfw_options' ) ) {
140
+ // First time we're running: download the security rules
141
+ // and populate the options:
142
+ require_once __DIR__ .'/lib/install_default.php';
143
+ nfw_load_default_conf();
144
+ // Reload them
145
+ $nfw_options = nfw_get_option( 'nfw_options' );
146
+ }
147
 
148
+ $nfw_options['enabled'] = 1;
149
+ nfw_update_option( 'nfw_options', $nfw_options);
150
+
151
+ $res = nfw_enable_wpwaf();
152
+ if (! empty( $res ) ){
153
+ exit( $res );
154
+ }
155
+
156
+ // Re-enable scheduled scan, if needed
157
+ if (! empty($nfw_options['sched_scan']) ) {
158
+ if ($nfw_options['sched_scan'] == 1) {
159
+ $schedtype = 'hourly';
160
+ } elseif ($nfw_options['sched_scan'] == 2) {
161
+ $schedtype = 'twicedaily';
162
+ } else {
163
+ $schedtype = 'daily';
164
  }
165
+ if ( wp_next_scheduled('nfscanevent') ) {
166
+ wp_clear_scheduled_hook('nfscanevent');
 
 
 
 
 
 
 
 
 
 
167
  }
168
+ wp_schedule_event( time() + 3600, $schedtype, 'nfscanevent');
169
+ }
170
+ // Re-enable auto updates, if needed
171
+ if (! empty($nfw_options['enable_updates']) ) {
172
+ if ($nfw_options['sched_updates'] == 1) {
173
+ $schedtype = 'hourly';
174
+ } elseif ($nfw_options['sched_updates'] == 2) {
175
+ $schedtype = 'twicedaily';
176
+ } else {
177
+ $schedtype = 'daily';
178
  }
179
+ if ( wp_next_scheduled('nfsecupdates') ) {
180
+ wp_clear_scheduled_hook('nfsecupdates');
181
+ }
182
+ wp_schedule_event( time() + 15, $schedtype, 'nfsecupdates');
183
+ }
184
+ // Re-enable daily report, if needed
185
+ if (! empty($nfw_options['a_52']) ) {
186
+ if ( wp_next_scheduled('nfdailyreport') ) {
187
+ wp_clear_scheduled_hook('nfdailyreport');
188
  }
189
+ nfw_get_blogtimezone();
190
+ wp_schedule_event( strtotime( date('Y-m-d 00:00:05', strtotime("+1 day")) ), 'daily', 'nfdailyreport');
191
+ }
192
+ // Re-enable the garbage collector:
193
+ wp_schedule_event( time() + 1800, 'hourly', 'nfwgccron' );
194
+
195
+ // Re-enable brute-force protection
196
+ if ( file_exists( NFW_LOG_DIR . '/nfwlog/cache/bf_conf_off.php' ) ) {
197
+ rename(NFW_LOG_DIR . '/nfwlog/cache/bf_conf_off.php', NFW_LOG_DIR . '/nfwlog/cache/bf_conf.php');
198
  }
199
  }
200
 
209
  $nfw_options = nfw_get_option( 'nfw_options' );
210
  $nfw_options['enabled'] = 0;
211
 
212
+ nfw_disable_wpwaf();
213
+
214
  if ( wp_next_scheduled('nfwgccron') ) {
215
  wp_clear_scheduled_hook('nfwgccron');
216
  }
233
 
234
  register_deactivation_hook( __FILE__, 'nfw_deactivate' );
235
 
236
+ /* ------------------------------------------------------------------ */
237
+ // Load script/style files
238
+
239
+ function nfw_load_ext( $hook ) {
240
+
241
+ // Load the external JS script and CSS:
242
+ // -Single site: to the admin only.
243
+ // -Multi-site: to the superadmin and from the main network admin screen only.
244
+ // -All: only if this is a NinjaFirewall menu page
245
+ if (! current_user_can('activate_plugins') || ! is_main_site() ) { return; }
246
+ if ( stripos( $hook, 'ninjafirewall' ) === false ) { return; }
247
+
248
+ if ( strpos ( $hook, 'nfsubwplus' ) !== false ) {
249
+ // Load thickbox JS and CSS (WP only)
250
+ $extra_js = array( 'jquery', 'thickbox' );
251
+ $extra_css = array( 'thickbox' );
252
+ } else {
253
+ $extra_js = array( 'jquery' );
254
+ $extra_css = null;
255
+ }
256
+
257
+ wp_enqueue_script(
258
+ 'nfw_javascript',
259
+ plugin_dir_url( __FILE__ ) . 'static/ninjafirewall.js',
260
+ $extra_js,
261
+ NFW_ENGINE_VERSION
262
+ );
263
+
264
+ // Load Chart.js if we are viewing the statistics page:
265
+ if ( strpos( $hook, 'nfsubstat' ) !== false ) {
266
+ wp_enqueue_script(
267
+ 'nfw_charts',
268
+ plugin_dir_url( __FILE__ ) . 'static/chart.min.js',
269
+ array( 'jquery' ),
270
+ NFW_ENGINE_VERSION,
271
+ false
272
+ );
273
+ }
274
+
275
+ wp_enqueue_style(
276
+ 'nfw_style',
277
+ plugin_dir_url( __FILE__ ) .'static/ninjafirewall.css',
278
+ $extra_css,
279
+ NFW_ENGINE_VERSION,
280
+ false
281
+ );
282
+
283
+ // Javascript i18n:
284
+ $nfw_js_array = array(
285
+
286
+ // Generic
287
+ 'restore_default' =>
288
+ esc_js( __('All fields will be restored to their default values and any changes you made will be lost. Continue?', 'ninjafirewall') ),
289
+
290
+ // Full WAF/WordPress WAF
291
+ 'missing_nonce' =>
292
+ esc_js( __('Missing security nonce, try to reload the page.', 'ninjafirewall') ),
293
+ 'missing_httpserver' =>
294
+ esc_js( __('Please select the HTTP server in the list.', 'ninjafirewall') ),
295
+
296
+ // Firewall Options
297
+ 'restore_warning' =>
298
+ esc_js( __('This action will restore the selected configuration file and will override all your current firewall options, policies and rules. Continue?', 'ninjafirewall') ),
299
+
300
+ // Firewall Policies
301
+ 'warn_sanitise' =>
302
+ esc_js( __('Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a hyphen [-] or an underscore [_] will be removed from the filename and replaced with the substitution character. Continue?', 'ninjafirewall') ),
303
+ 'ssl_warning' =>
304
+ esc_js( __('Ensure that you can access your admin console over HTTPS before enabling this option, otherwise you will lock yourself out of your site. Continue?', 'ninjafirewall') ),
305
+
306
+ // File Check
307
+ 'del_snapshot' =>
308
+ esc_js( __('Delete the current snapshot ?', 'ninjafirewall') ),
309
+
310
+ // Login Protection
311
+ 'invalid_char' =>
312
+ esc_js( __('Invalid character.', 'ninjafirewall') ),
313
+ 'no_admin' =>
314
+ esc_js( __('"admin" is not acceptable, please choose another user name.', 'ninjafirewall') ),
315
+ 'max_char' =>
316
+ esc_js( __('Please enter max 1024 character only.', 'ninjafirewall') ),
317
+ 'select_when' =>
318
+ esc_js( __('Select when to enable the login protection.', 'ninjafirewall') ),
319
+ 'missing_auth' =>
320
+ esc_js( __('Enter a name and a password for the HTTP authentication.', 'ninjafirewall') ),
321
+
322
+ // Firewall Log
323
+ 'invalid_key' =>
324
+ esc_js( __('Your public key is not valid.', 'ninjafirewall') ),
325
+
326
+ // Live Log
327
+ 'no_traffic' =>
328
+ esc_js( __('No traffic yet, please wait', 'ninjafirewall') ),
329
+ 'seconds' =>
330
+ ' ' . esc_js( __('seconds...', 'ninjafirewall') ),
331
+ 'err_unexpected' =>
332
+ esc_js( __('Error: Live Log did not receive the expected response from your server:', 'ninjafirewall') ),
333
+ 'error_404' =>
334
+ esc_js( __('Error: URL does not seem to exist (404 Not Found):', 'ninjafirewall') ),
335
+ 'log_not_found' =>
336
+ esc_js( __('Error: Cannot find your log file. Try to reload this page.', 'ninjafirewall') ),
337
+ 'http_error' =>
338
+ esc_js( __('Error: The HTTP server returned the following error code:', 'ninjafirewall') ),
339
+ );
340
+
341
+ wp_localize_script( 'nfw_javascript', 'nfwi18n', $nfw_js_array );
342
+ }
343
+
344
+ add_action( 'admin_enqueue_scripts', 'nfw_load_ext' );
345
+
346
  /* ------------------------------------------------------------------ */
347
 
348
  function nfw_admin_init() {
357
  // Post-update adjustment:
358
  require plugin_dir_path(__FILE__) . 'lib/init_update.php';
359
 
360
+ if ( current_user_can( 'edit_pages' ) ) {
361
+ $_SESSION['nfw_user_can'] = 'edit_pages';
362
+ } elseif ( current_user_can( 'edit_posts' ) ) {
363
+ $_SESSION['nfw_user_can'] = 'edit_posts';
364
+ }
365
+
366
  // --------------------------------------------
367
  // Anything below requires admin authentication
368
  // --------------------------------------------
369
 
370
  if ( nf_not_allowed(0, __LINE__) ) { return; }
371
 
372
+ // Update fallback loader if needed
373
+ nfw_enable_wpwaf();
374
+
375
  // Export configuration:
376
  if ( isset($_POST['nf_export']) ) {
377
  if ( empty($_POST['nfwnonce']) || ! wp_verify_nonce($_POST['nfwnonce'], 'options_save') ) {
544
  if (isset( $_SESSION['nfw_livelog'] ) ) {
545
  unset( $_SESSION['nfw_livelog'] );
546
  }
547
+ if (isset( $_SESSION['nfw_user_can'] ) ) {
548
+ unset( $_SESSION['nfw_user_can'] );
549
+ }
550
  }
551
 
552
  add_action( 'wp_logout', 'nfw_logout_hook' );
553
 
554
+ /* ------------------------------------------------------------------ */
555
+ // FullWAF upgrade AJAX function.
556
+
557
+ add_action( 'wp_ajax_nfw_fullwafsetup', 'nfw_fullwafsetup' );
558
+
559
+ function nfw_fullwafsetup() {
560
+
561
+ nf_not_allowed( 'block', __LINE__ );
562
+
563
+ if (! check_ajax_referer( 'events_save', 'nonce', false ) ) {
564
+ _e('Error: Security nonces do not match. Reload the page and try again.', 'ninjafirewall');
565
+ wp_die();
566
+ }
567
+
568
+ $nfw_options = nfw_get_option( 'nfw_options' );
569
+ if ( empty( $nfw_options['enabled'] ) ) {
570
+ _e('Error: NinjaFirewall is disabled', 'ninjafirewall');
571
+ wp_die();
572
+ }
573
+
574
+ if ( empty( $_POST['httpserver'] ) ) {
575
+ printf( __('Error: missing parameter (%s).', 'ninjafirewall'), 'httpserver' );
576
+ wp_die();
577
+ }
578
+ if ( preg_match('/^[^1-7]$/', $_POST['httpserver'] ) ) {
579
+ printf( __('Error: wrong parameter value (%s).', 'ninjafirewall'), 'httpserver' );
580
+ wp_die();
581
+ }
582
+ if ( empty( $_POST['diy'] ) || ! preg_match( '/^(nfw|usr)$/', $_POST['diy'] ) ) {
583
+ printf( __('Error: wrong parameter value (%s).', 'ninjafirewall'), 'diy' );
584
+ wp_die();
585
+ }
586
+
587
+ $time = time() + 300;
588
+
589
+ // 1: Apache mod_php
590
+ // 2: Apache + CGI/FastCGI or PHP-FPM
591
+ // 3: Apache + suPHP
592
+ // 4: Nginx + CGI/FastCGI or PHP-FPM
593
+ // 5: Litespeed
594
+ // 6: Openlitespeed
595
+ //7: Other webserver + CGI/FastCGI or PHP-FPM
596
+ $httpserver = (int) $_POST['httpserver'];
597
+
598
+ // [6] Openlitespeed: nothing to do.
599
+ if ( $httpserver == 6 ) {
600
+ set_transient( 'nfw_fullwaf', "{$httpserver}:{$time}", 60 * 5 );
601
+ echo '200';
602
+ wp_die();
603
+ }
604
+
605
+ require_once __DIR__ .'/lib/install.php';
606
+
607
+ // .htaccess mods only
608
+ if ( $httpserver == 1 || $httpserver == 5 ) {
609
+ // User wants to make the modification
610
+ if ( $_POST['diy'] == 'usr' ) {
611
+ // Nothing to do
612
+ set_transient( 'nfw_fullwaf', "{$httpserver}:{$time}", 60 * 5 );
613
+ echo '200';
614
+ wp_die();
615
+ }
616
+ // Make changes
617
+ $ret = nfw_fullwaf_htaccess( $httpserver );
618
+ if ( $ret !== true ) {
619
+ echo $ret;
620
+ } else {
621
+ set_transient( 'nfw_fullwaf', "{$httpserver}:{$time}", 60 * 5 );
622
+ echo '200';
623
+ }
624
+ wp_die();
625
+ }
626
+
627
+ if ( $_POST['diy'] == 'usr' ) {
628
+ // Nothing to do, but add 5-minute notice to the overview page
629
+ // because an INI file is being used
630
+ set_transient( 'nfw_fullwaf', "{$httpserver}:{$time}", 60 * 5 );
631
+ echo '200';
632
+ wp_die();
633
+ }
634
+
635
+ // [1] .user.ini
636
+ // [2] php.ini
637
+ if ( empty ( $_POST['initype'] ) || ! preg_match( '/^[12]$/', $_POST['initype'] ) ) {
638
+ $initype = 1;
639
+ } else {
640
+ $initype = (int) $_POST['initype'];
641
+ }
642
+
643
+ if ( $httpserver == 3 ) { // Apache + suPHP
644
+ // Set up the htaccess file
645
+ $ret = nfw_fullwaf_htaccess( $httpserver );
646
+ if ( $ret !== true ) {
647
+ echo $ret;
648
+ wp_die();
649
+ }
650
+ }
651
+ // ini file
652
+ $ret = nfw_fullwaf_ini( $httpserver, $initype );
653
+ if ( $ret !== true ) {
654
+ echo $ret;
655
+ wp_die();
656
+ } else {
657
+ // Add 5-minute notice to the overview page
658
+ // because an INI file is being used
659
+ set_transient( 'nfw_fullwaf', "{$httpserver}:{$time}", 60 * 5 );
660
+ echo 200;
661
+ }
662
+ wp_die();
663
+ }
664
+
665
  /* ------------------------------------------------------------------ */
666
 
667
  function is_nfw_enabled() {
707
  exit;
708
  }
709
 
 
 
 
 
 
 
 
 
 
 
 
 
 
710
  add_menu_page( 'NinjaFirewall', 'NinjaFirewall', 'manage_options',
711
  'NinjaFirewall', 'nf_sub_main', plugins_url( '/images/nf_icon.png', __FILE__ )
712
  );
719
  'NinjaFirewall', 'nf_sub_main' );
720
  add_action( 'load-' . $menu_hook, 'help_nfsubmain' );
721
 
722
+
723
  $menu_hook = add_submenu_page( 'NinjaFirewall', __('NinjaFirewall: Statistics', 'ninjafirewall'), __('Statistics', 'ninjafirewall'), 'manage_options',
724
+ // "nfsubstat" is also used by the nfw_load_ext() function
725
  'nfsubstat', 'nf_sub_statistics' );
726
  add_action( 'load-' . $menu_hook, 'help_nfsubstat' );
727
 
842
 
843
  /* ------------------------------------------------------------------ */
844
 
 
 
 
 
 
 
 
 
 
845
  function nf_sub_main() {
846
 
847
+ // Main menu (Overview)
848
  require plugin_dir_path(__FILE__) . 'lib/overview.php';
849
 
850
  }
869
 
870
  function nf_sub_policies() {
871
 
872
+ // Firewall Policies menu
873
  require plugin_dir_path(__FILE__) . 'lib/firewall_policies.php';
874
 
875
  }
887
 
888
  function nf_sub_network() {
889
 
890
+ // Network menu (multi-site only)
891
  require plugin_dir_path(__FILE__) . 'lib/network.php';
892
 
893
  }
957
 
958
  /* ------------------------------------------------------------------ */
959
 
960
+ function nfw_log2($loginfo, $logdata, $loglevel, $ruleid) {
961
 
962
+ // Write incident to the firewall log
963
  require plugin_dir_path(__FILE__) . 'lib/nfw_log.php';
964
 
965
  }
968
 
969
  function nf_sub_editor() {
970
 
971
+ // Rules Editor menu
972
  require plugin_dir_path(__FILE__) . 'lib/rules_editor.php';
973
 
974
  }
1059
  // (see NFW_ALLOWED_ADMIN at http://nin.link/nfwaa ):
1060
  if ( defined('NFW_ALLOWED_ADMIN') ) {
1061
  $current_user = wp_get_current_user();
1062
+ $admins = explode(',', NFW_ALLOWED_ADMIN );
1063
+ foreach ( $admins as $admin ) {
1064
+ if ( trim( $admin ) == $current_user->user_login ) {
1065
  return false;
1066
  }
1067
  }
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: nintechnet, bruandet
3
  Tags: security, firewall, malware, antispam, virus, scanner, hacked site, brute force, seguridad, seguranca, sicherheit, sicurezza, veiligheid
4
  Requires at least: 3.7
5
  Tested up to: 5.2
6
- Stable tag: 3.9.1
7
  Requires PHP: 5.3
8
  License: GPLv3 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
@@ -121,7 +121,7 @@ Check out our new supercharged edition: [NinjaFirewall WP+ Edition](https://nint
121
  * Admin/Superadmin with `manage_options` + `unfiltered_html capabilities`.
122
  * PHP 5.3+ (5.4 or higher recommended), PHP 7.x or [HHVM 3.4+](https://blog.nintechnet.com/installing-ninjafirewall-with-hhvm-hiphop-virtual-machine/ "")
123
  * MySQL or MariaDB with MySQLi extension
124
- * Apache / Nginx / LiteSpeed compatible
125
  * Unix-like operating systems only (Linux, BSD etc). NinjaFirewall is **NOT** compatible with Microsoft Windows.
126
 
127
  == Frequently Asked Questions ==
@@ -184,21 +184,42 @@ NinjaFirewall works on Unix-like servers only. There is no Microsoft Windows ver
184
  1. Overview page.
185
  2. Statistics and benchmarks page.
186
  3. Options page.
187
- 4. Policies pages: NinjaFirewall has a large list of powerful and unique policies that you can tweak accordingly to your needs.
188
- 5. Contextual help.
189
- 6. Event notifications can alert you by email on specific events triggered within your blog.
190
- 7. Login page protection: the fastest and most efficient brute-force attack protection for WordPress.
191
- 8. Live Log: lets you watch your website traffic in real time. It is fast, light and it does not affect your server load.
192
- 9. Firewall Log.
193
- 10. Dashboard widget.
194
- 11. File Guard: this is a totally unique feature, because it can detect, in real-time, any access to a PHP file that was recently modified or created, and alert you about this.
195
- 12. Network.
196
  13. Rules Editor.
197
- 14. File Check: lets you perform file integrity monitoring upon request or on a specific interval (hourly, twicedaily, daily).
198
- 15. Security rules updates.
 
199
 
200
  == Changelog ==
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  = 3.9.1 =
203
 
204
  * Fixed potential "Nesting level too deep – recursive dependency" error message in the backend.
3
  Tags: security, firewall, malware, antispam, virus, scanner, hacked site, brute force, seguridad, seguranca, sicherheit, sicurezza, veiligheid
4
  Requires at least: 3.7
5
  Tested up to: 5.2
6
+ Stable tag: 4.0
7
  Requires PHP: 5.3
8
  License: GPLv3 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
121
  * Admin/Superadmin with `manage_options` + `unfiltered_html capabilities`.
122
  * PHP 5.3+ (5.4 or higher recommended), PHP 7.x or [HHVM 3.4+](https://blog.nintechnet.com/installing-ninjafirewall-with-hhvm-hiphop-virtual-machine/ "")
123
  * MySQL or MariaDB with MySQLi extension
124
+ * Apache / Nginx / LiteSpeed / Openlitespeed compatible
125
  * Unix-like operating systems only (Linux, BSD etc). NinjaFirewall is **NOT** compatible with Microsoft Windows.
126
 
127
  == Frequently Asked Questions ==
184
  1. Overview page.
185
  2. Statistics and benchmarks page.
186
  3. Options page.
187
+ 4. Policies pages 1/3: NinjaFirewall has a large list of powerful and unique policies that you can tweak accordingly to your needs.
188
+ 5. Policies pages 2/3: NinjaFirewall has a large list of powerful and unique policies that you can tweak accordingly to your needs.
189
+ 6. Policies pages 3/3: NinjaFirewall has a large list of powerful and unique policies that you can tweak accordingly to your needs.
190
+ 7. File Guard: this is a totally unique feature, because it can detect, in real-time, any access to a PHP file that was recently modified or created, and alert you about this.
191
+ 8. File Check: lets you perform file integrity monitoring upon request or on a specific interval (hourly, twicedaily, daily).
192
+ 9. Event notifications can alert you by email on specific events triggered within your blog.
193
+ 10. Login page protection: the fastest and most efficient brute-force attack protection for WordPress.
194
+ 11. Firewall Log.
195
+ 12. Live Log: lets you watch your website traffic in real time. It is fast, light and it does not affect your server load.
196
  13. Rules Editor.
197
+ 14. Security rules updates.
198
+ 15. Contextual help.
199
+ 16. Dashboard widget.
200
 
201
  == Changelog ==
202
 
203
+ = 4.0 =
204
+
205
+ * Improved NinjaFirewall overall interface and pages layout; added some simple toggle switches to replace radio buttons, better handling of error messages, cleaned up useless code etc.
206
+ * All JavaScript code was 100% rewritten from scratch, including all features that rely on it (e.g., "Live Log" etc).
207
+ * The installer was removed: When activating NinjaFirewall for the first time, it will automatically install itself in "WordPress WAF" mode. To upgrade to "Full WAF" mode, simply click on the corresponding link in the “Overview” page. The process is now very straightforward! A "sandbox" was added too, so that if there were a crash during the process, NinjaFirewall would undo the changes and warn the user.
208
+ * When NinjaFirewall is running in "Full WAF" mode, if the PHP INI file used to load its firewall was deleted by mistake, it would automatically fallback to "WordPress WAF" mode so that the blog will remain protected.
209
+ * Fixed the admin login page bug where some users had to enter their credentials twice.
210
+ * The "Block the DOCUMENT_ROOT server variable in HTTP request" policy will not be enabled by default with new installations of NinjaFirewall.
211
+ * NinjaFirewall will not block users with author and editor role while they are editing a post or page using either the Classic or the new Block Editor.
212
+ * Added Openlitespeed detection to the "Full WAF" mode installer.
213
+ * WP+ Edition (Premium): The "Access Control" pages interface was simplified: it now uses simple textarea elements where you can copy/paste your data (URL, IP, Bot and User Input) very easily. The "Geolocation" page was simplified too.
214
+ * WP+ Edition (Premium): In addition to an IP address or CIDR, you can now also enter an AS number (Autonomous System number). This new feature is very helpful if you want to allow or block all IPs from an ISP or hosting company: just enter their AS number instead of hundreds of IP addresses. Syntax is "AS" + the number, e.g. "AS12345". See "Access Control > IP Access Control".
215
+ * WP+ Edition (Premium): You can now add an IP to the Access Control blacklist or whitelist from the "Firewall Log" page by entering the IP in the input field below the log textarea.
216
+ * WP+ Edition (Premium): When running in "WordPress WAF" mode, NinjaFirewall will automatically disable the shared memory option, because that feature is only useful when used in "Full WAF" mode (there is no benefit at all to run it in "WordPress WAF" mode).
217
+ * WP+ Edition (Premium): Fixed a bug where the ISO 3166 country code was not found when using an external PHP Variable instead of the built-in GeoIP database.
218
+ * WP+ Edition (Premium): Improved malicious SVG files detection.
219
+ * WP+ Edition (Premium): Updated IPv4/IPv6/ASN GeoIP databases.
220
+ * Many fixes and adjustments.
221
+
222
+
223
  = 3.9.1 =
224
 
225
  * Fixed potential "Nesting level too deep – recursive dependency" error message in the backend.
static/chart.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*!
2
+ * Chart.js v2.8.0
3
+ * https://www.chartjs.org
4
+ * (c) 2019 Chart.js Contributors
5
+ * Released under the MIT License
6
+ */
7
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],function(t){return e(function(){try{return t("moment")}catch(t){}}())}):t.Chart=e(t.moment)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={rgb2hsl:i,rgb2hsv:n,rgb2hwb:a,rgb2cmyk:o,rgb2keyword:s,rgb2xyz:l,rgb2lab:d,rgb2lch:function(t){return x(d(t))},hsl2rgb:u,hsl2hsv:function(t){var e=t[0],i=t[1]/100,n=t[2]/100;if(0===n)return[0,0,0];return[e,100*(2*(i*=(n*=2)<=1?n:2-n)/(n+i)),100*((n+i)/2)]},hsl2hwb:function(t){return a(u(t))},hsl2cmyk:function(t){return o(u(t))},hsl2keyword:function(t){return s(u(t))},hsv2rgb:h,hsv2hsl:function(t){var e,i,n=t[0],a=t[1]/100,o=t[2]/100;return e=a*o,[n,100*(e=(e/=(i=(2-a)*o)<=1?i:2-i)||0),100*(i/=2)]},hsv2hwb:function(t){return a(h(t))},hsv2cmyk:function(t){return o(h(t))},hsv2keyword:function(t){return s(h(t))},hwb2rgb:c,hwb2hsl:function(t){return i(c(t))},hwb2hsv:function(t){return n(c(t))},hwb2cmyk:function(t){return o(c(t))},hwb2keyword:function(t){return s(c(t))},cmyk2rgb:f,cmyk2hsl:function(t){return i(f(t))},cmyk2hsv:function(t){return n(f(t))},cmyk2hwb:function(t){return a(f(t))},cmyk2keyword:function(t){return s(f(t))},keyword2rgb:w,keyword2hsl:function(t){return i(w(t))},keyword2hsv:function(t){return n(w(t))},keyword2hwb:function(t){return a(w(t))},keyword2cmyk:function(t){return o(w(t))},keyword2lab:function(t){return d(w(t))},keyword2xyz:function(t){return l(w(t))},xyz2rgb:p,xyz2lab:m,xyz2lch:function(t){return x(m(t))},lab2xyz:v,lab2rgb:y,lab2lch:x,lch2lab:k,lch2xyz:function(t){return v(k(t))},lch2rgb:function(t){return y(k(t))}};function i(t){var e,i,n=t[0]/255,a=t[1]/255,o=t[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r;return s==r?e=0:n==s?e=(a-o)/l:a==s?e=2+(o-n)/l:o==s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),i=(r+s)/2,[e,100*(s==r?0:i<=.5?l/(s+r):l/(2-s-r)),100*i]}function n(t){var e,i,n=t[0],a=t[1],o=t[2],r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r;return i=0==s?0:l/s*1e3/10,s==r?e=0:n==s?e=(a-o)/l:a==s?e=2+(o-n)/l:o==s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),[e,i,s/255*1e3/10]}function a(t){var e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.min(e,Math.min(n,a))),100*(a=1-1/255*Math.max(e,Math.max(n,a)))]}function o(t){var e,i=t[0]/255,n=t[1]/255,a=t[2]/255;return[100*((1-i-(e=Math.min(1-i,1-n,1-a)))/(1-e)||0),100*((1-n-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]}function s(t){return _[JSON.stringify(t)]}function l(t){var e=t[0]/255,i=t[1]/255,n=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.1805*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*e+.7152*i+.0722*n),100*(.0193*e+.1192*i+.9505*n)]}function d(t){var e=l(t),i=e[0],n=e[1],a=e[2];return n/=100,a/=108.883,i=(i/=95.047)>.008856?Math.pow(i,1/3):7.787*i+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(i-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function u(t){var e,i,n,a,o,r=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[o=255*l,o,o];e=2*l-(i=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var d=0;d<3;d++)(n=r+1/3*-(d-1))<0&&n++,n>1&&n--,o=6*n<1?e+6*(i-e)*n:2*n<1?i:3*n<2?e+(i-e)*(2/3-n)*6:e,a[d]=255*o;return a}function h(t){var e=t[0]/60,i=t[1]/100,n=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*n*(1-i),s=255*n*(1-i*o),l=255*n*(1-i*(1-o));n*=255;switch(a){case 0:return[n,l,r];case 1:return[s,n,r];case 2:return[r,n,l];case 3:return[r,s,n];case 4:return[l,r,n];case 5:return[n,r,s]}}function c(t){var e,i,n,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,d=s+l;switch(d>1&&(s/=d,l/=d),n=6*o-(e=Math.floor(6*o)),0!=(1&e)&&(n=1-n),a=s+n*((i=1-l)-s),e){default:case 6:case 0:r=i,g=a,b=s;break;case 1:r=a,g=i,b=s;break;case 2:r=s,g=i,b=a;break;case 3:r=s,g=a,b=i;break;case 4:r=a,g=s,b=i;break;case 5:r=i,g=s,b=a}return[255*r,255*g,255*b]}function f(t){var e=t[0]/100,i=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function p(t){var e,i,n,a=t[0]/100,o=t[1]/100,r=t[2]/100;return i=-.9689*a+1.8758*o+.0415*r,n=.0557*a+-.204*o+1.057*r,e=(e=3.2406*a+-1.5372*o+-.4986*r)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1))]}function m(t){var e=t[0],i=t[1],n=t[2];return i/=100,n/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(e-i),200*(i-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]}function v(t){var e,i,n,a,o=t[0],r=t[1],s=t[2];return o<=8?a=(i=100*o/903.3)/100*7.787+16/116:(i=100*Math.pow((o+16)/116,3),a=Math.pow(i/100,1/3)),[e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i,n=n/108.883<=.008859?n=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function x(t){var e,i=t[0],n=t[1],a=t[2];return(e=360*Math.atan2(a,n)/2/Math.PI)<0&&(e+=360),[i,Math.sqrt(n*n+a*a),e]}function y(t){return p(v(t))}function k(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]}function w(t){return M[t]}var M={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_={};for(var C in M)_[JSON.stringify(M[C])]=C;var S=function(){return new T};for(var P in e){S[P+"Raw"]=function(t){return function(i){return"number"==typeof i&&(i=Array.prototype.slice.call(arguments)),e[t](i)}}(P);var I=/(\w+)2(\w+)/.exec(P),A=I[1],D=I[2];(S[A]=S[A]||{})[D]=S[P]=function(t){return function(i){"number"==typeof i&&(i=Array.prototype.slice.call(arguments));var n=e[t](i);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(P)}var T=function(){this.convs={}};T.prototype.routeSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i))},T.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},T.prototype.getValues=function(t){var e=this.convs[t];if(!e){var i=this.space,n=this.convs[i];e=S[i][t](n),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){T.prototype[t]=function(e){return this.routeSpace(t,arguments)}});var F=S,L={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},R={getRgba:O,getHsla:z,getRgb:function(t){var e=O(t);return e&&e.slice(0,3)},getHsl:function(t){var e=z(t);return e&&e.slice(0,3)},getHwb:B,getAlpha:function(t){var e=O(t);if(e)return e[3];if(e=z(t))return e[3];if(e=B(t))return e[3]},hexString:function(t,e){var e=void 0!==e&&3===t.length?e:t[3];return"#"+H(t[0])+H(t[1])+H(t[2])+(e>=0&&e<1?H(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return N(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:N,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return W(t,e);var i=Math.round(t[0]/255*100),n=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+i+"%, "+n+"%, "+a+"%)"},percentaString:W,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return V(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:V,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return j[t.slice(0,3)]}};function O(t){if(t){var e=[0,0,0],i=1,n=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(n){a=(n=n[1])[3];for(var o=0;o<e.length;o++)e[o]=parseInt(n[o]+n[o],16);a&&(i=Math.round(parseInt(a+a,16)/255*100)/100)}else if(n=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=n[2],n=n[1];for(o=0;o<e.length;o++)e[o]=parseInt(n.slice(2*o,2*o+2),16);a&&(i=Math.round(parseInt(a,16)/255*100)/100)}else if(n=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(o=0;o<e.length;o++)e[o]=parseInt(n[o+1]);i=parseFloat(n[4])}else if(n=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(o=0;o<e.length;o++)e[o]=Math.round(2.55*parseFloat(n[o+1]));i=parseFloat(n[4])}else if(n=t.match(/(\w+)/)){if("transparent"==n[1])return[0,0,0,0];if(!(e=L[n[1]]))return}for(o=0;o<e.length;o++)e[o]=E(e[o],0,255);return i=i||0==i?E(i,0,1):1,e[3]=i,e}}function z(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var i=parseFloat(e[4]);return[E(parseInt(e[1]),0,360),E(parseFloat(e[2]),0,100),E(parseFloat(e[3]),0,100),E(isNaN(i)?1:i,0,1)]}}}function B(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var i=parseFloat(e[4]);return[E(parseInt(e[1]),0,360),E(parseFloat(e[2]),0,100),E(parseFloat(e[3]),0,100),E(isNaN(i)?1:i,0,1)]}}}function N(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function W(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function V(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function E(t,e,i){return Math.min(Math.max(e,t),i)}function H(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var j={};for(var q in L)j[L[q]]=q;var Y=function(t){return t instanceof Y?t:this instanceof Y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=R.getRgba(t))?this.setValues("rgb",e):(e=R.getHsla(t))?this.setValues("hsl",e):(e=R.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new Y(t);var e};Y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return R.hexString(this.values.rgb)},rgbString:function(){return R.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return R.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return R.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return R.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return R.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return R.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return R.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],i=0;i<t.length;i++){var n=t[i]/255;e[i]=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),i=t.luminosity();return e>i?(e+.05)/(i+.05):(i+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,i=(e[0]+t)%360;return e[0]=i<0?360+i:i,this.setValues("hsl",e),this},mix:function(t,e){var i=t,n=void 0===e?.5:e,a=2*n-1,o=this.alpha()-i.alpha(),r=((a*o==-1?a:(a+o)/(1+a*o))+1)/2,s=1-r;return this.rgb(r*this.red()+s*i.red(),r*this.green()+s*i.green(),r*this.blue()+s*i.blue()).alpha(this.alpha()*n+i.alpha()*(1-n))},toJSON:function(){return this.rgb()},clone:function(){var t,e,i=new Y,n=this.values,a=i.values;for(var o in n)n.hasOwnProperty(o)&&(t=n[o],"[object Array]"===(e={}.toString.call(t))?a[o]=t.slice(0):"[object Number]"===e?a[o]=t:console.error("unexpected color value:",t));return i}},Y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},Y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},Y.prototype.getValues=function(t){for(var e=this.values,i={},n=0;n<t.length;n++)i[t.charAt(n)]=e[t][n];return 1!==e.alpha&&(i.a=e.alpha),i},Y.prototype.setValues=function(t,e){var i,n,a=this.values,o=this.spaces,r=this.maxes,s=1;if(this.valid=!0,"alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(i=0;i<t.length;i++)a[t][i]=e[t.charAt(i)];s=e.a}else if(void 0!==e[o[t][0]]){var l=o[t];for(i=0;i<t.length;i++)a[t][i]=e[l[i]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;for(i=0;i<t.length;i++)n=Math.max(0,Math.min(r[t][i],a[t][i])),a[t][i]=Math.round(n);for(var d in o)d!==t&&(a[d]=F[t][d](a[t]));return!0},Y.prototype.setSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i),this)},Y.prototype.setChannel=function(t,e,i){var n=this.values[t];return void 0===i?n[e]:i===n[e]?this:(n[e]=i,this.setValues(t,n),this)},"undefined"!=typeof window&&(window.Color=Y);var U,X=Y,K={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,i){return K.valueOrDefault(K.isArray(t)?t[e]:t,i)},callback:function(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)},each:function(t,e,i,n){var a,o,r;if(K.isArray(t))if(o=t.length,n)for(a=o-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;a<o;a++)e.call(i,t[a],a);else if(K.isObject(t))for(o=(r=Object.keys(t)).length,a=0;a<o;a++)e.call(i,t[r[a]],r[a])},arrayEquals:function(t,e){var i,n,a,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,n=t.length;i<n;++i)if(a=t[i],o=e[i],a instanceof Array&&o instanceof Array){if(!K.arrayEquals(a,o))return!1}else if(a!==o)return!1;return!0},clone:function(t){if(K.isArray(t))return t.map(K.clone);if(K.isObject(t)){for(var e={},i=Object.keys(t),n=i.length,a=0;a<n;++a)e[i[a]]=K.clone(t[i[a]]);return e}return t},_merger:function(t,e,i,n){var a=e[t],o=i[t];K.isObject(a)&&K.isObject(o)?K.merge(a,o,n):e[t]=K.clone(o)},_mergerIf:function(t,e,i){var n=e[t],a=i[t];K.isObject(n)&&K.isObject(a)?K.mergeIf(n,a):e.hasOwnProperty(t)||(e[t]=K.clone(a))},merge:function(t,e,i){var n,a,o,r,s,l=K.isArray(e)?e:[e],d=l.length;if(!K.isObject(t))return t;for(n=(i=i||{}).merger||K._merger,a=0;a<d;++a)if(e=l[a],K.isObject(e))for(s=0,r=(o=Object.keys(e)).length;s<r;++s)n(o[s],t,e,i);return t},mergeIf:function(t,e){return K.merge(t,e,{merger:K._mergerIf})},extend:function(t){for(var e=function(e,i){t[i]=e},i=1,n=arguments.length;i<n;++i)K.each(arguments[i],e);return t},inherits:function(t){var e=this,i=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},n=function(){this.constructor=i};return n.prototype=e.prototype,i.prototype=new n,i.extend=K.inherits,t&&K.extend(i.prototype,t),i.__super__=e.prototype,i}},G=K;K.callCallback=K.callback,K.indexOf=function(t,e,i){return Array.prototype.indexOf.call(t,e,i)},K.getValueOrDefault=K.valueOrDefault,K.getValueAtIndexOrDefault=K.valueAtIndexOrDefault;var Z={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i))},easeOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:2==(t/=.5)?1:(i||(i=.45),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),t<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-Z.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*Z.easeInBounce(2*t):.5*Z.easeOutBounce(2*t-1)+.5}},$={effects:Z};G.easingEffects=Z;var J=Math.PI,Q=J/180,tt=2*J,et=J/2,it=J/4,nt=2*J/3,at={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,i,n,a,o){if(o){var r=Math.min(o,a/2,n/2),s=e+r,l=i+r,d=e+n-r,u=i+a-r;t.moveTo(e,l),s<d&&l<u?(t.arc(s,l,r,-J,-et),t.arc(d,l,r,-et,0),t.arc(d,u,r,0,et),t.arc(s,u,r,et,J)):s<d?(t.moveTo(s,i),t.arc(d,l,r,-et,et),t.arc(s,l,r,et,J+et)):l<u?(t.arc(s,l,r,-J,0),t.arc(s,u,r,0,J)):t.arc(s,l,r,-J,J),t.closePath(),t.moveTo(e,i)}else t.rect(e,i,n,a)},drawPoint:function(t,e,i,n,a,o){var r,s,l,d,u,h=(o||0)*Q;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(r=e.toString())&&"[object HTMLCanvasElement]"!==r){if(!(isNaN(i)||i<=0)){switch(t.beginPath(),e){default:t.arc(n,a,i,0,tt),t.closePath();break;case"triangle":t.moveTo(n+Math.sin(h)*i,a-Math.cos(h)*i),h+=nt,t.lineTo(n+Math.sin(h)*i,a-Math.cos(h)*i),h+=nt,t.lineTo(n+Math.sin(h)*i,a-Math.cos(h)*i),t.closePath();break;case"rectRounded":d=i-(u=.516*i),s=Math.cos(h+it)*d,l=Math.sin(h+it)*d,t.arc(n-s,a-l,u,h-J,h-et),t.arc(n+l,a-s,u,h-et,h),t.arc(n+s,a+l,u,h,h+et),t.arc(n-l,a+s,u,h+et,h+J),t.closePath();break;case"rect":if(!o){d=Math.SQRT1_2*i,t.rect(n-d,a-d,2*d,2*d);break}h+=it;case"rectRot":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+l,a-s),t.lineTo(n+s,a+l),t.lineTo(n-l,a+s),t.closePath();break;case"crossRot":h+=it;case"cross":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s);break;case"star":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s),h+=it,s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s);break;case"line":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l);break;case"dash":t.moveTo(n,a),t.lineTo(n+Math.cos(h)*i,a+Math.sin(h)*i)}t.fill(),t.stroke()}}else t.drawImage(e,n-e.width/2,a-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,i,n){var a=i.steppedLine;if(a){if("middle"===a){var o=(e.x+i.x)/2;t.lineTo(o,n?i.y:e.y),t.lineTo(o,n?e.y:i.y)}else"after"===a&&!n||"after"!==a&&n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}else i.tension?t.bezierCurveTo(n?e.controlPointPreviousX:e.controlPointNextX,n?e.controlPointPreviousY:e.controlPointNextY,n?i.controlPointNextX:i.controlPointPreviousX,n?i.controlPointNextY:i.controlPointPreviousY,i.x,i.y):t.lineTo(i.x,i.y)}},ot=at;G.clear=at.clear,G.drawRoundedRectangle=function(t){t.beginPath(),at.roundedRect.apply(at,arguments)};var rt={_set:function(t,e){return G.merge(this[t]||(this[t]={}),e)}};rt._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var st=rt,lt=G.valueOrDefault;var dt={toLineHeight:function(t,e){var i=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,i,n,a;return G.isObject(t)?(e=+t.top||0,i=+t.right||0,n=+t.bottom||0,a=+t.left||0):e=i=n=a=+t||0,{top:e,right:i,bottom:n,left:a,height:e+n,width:a+i}},_parseFont:function(t){var e=st.global,i=lt(t.fontSize,e.defaultFontSize),n={family:lt(t.fontFamily,e.defaultFontFamily),lineHeight:G.options.toLineHeight(lt(t.lineHeight,e.defaultLineHeight),i),size:i,style:lt(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return n.string=function(t){return!t||G.isNullOrUndef(t.size)||G.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n},resolve:function(t,e,i){var n,a,o;for(n=0,a=t.length;n<a;++n)if(void 0!==(o=t[n])&&(void 0!==e&&"function"==typeof o&&(o=o(e)),void 0!==i&&G.isArray(o)&&(o=o[i]),void 0!==o))return o}},ut=G,ht=$,ct=ot,ft=dt;ut.easing=ht,ut.canvas=ct,ut.options=ft;var gt=function(t){ut.extend(this,t),this.initialize.apply(this,arguments)};ut.extend(gt.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=ut.clone(t._model)),t._start={},t},transition:function(t){var e=this,i=e._model,n=e._start,a=e._view;return i&&1!==t?(a||(a=e._view={}),n||(n=e._start={}),function(t,e,i,n){var a,o,r,s,l,d,u,h,c,f=Object.keys(i);for(a=0,o=f.length;a<o;++a)if(d=i[r=f[a]],e.hasOwnProperty(r)||(e[r]=d),(s=e[r])!==d&&"_"!==r[0]){if(t.hasOwnProperty(r)||(t[r]=s),(u=typeof d)==typeof(l=t[r]))if("string"===u){if((h=X(l)).valid&&(c=X(d)).valid){e[r]=c.mix(h,n).rgbString();continue}}else if(ut.isFinite(l)&&ut.isFinite(d)){e[r]=l+(d-l)*n;continue}e[r]=d}}(n,a,i,t),e):(e._view=i,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ut.isNumber(this._model.x)&&ut.isNumber(this._model.y)}}),gt.extend=ut.inherits;var pt=gt,mt=pt.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),vt=mt;Object.defineProperty(mt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(mt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),st._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ut.noop,onComplete:ut.noop}});var bt={animations:[],request:null,addAnimation:function(t,e,i,n){var a,o,r=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=i,n||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=ut.findIndex(this.animations,function(e){return e.chart===t});-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=ut.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,i,n,a=this.animations,o=0;o<a.length;)e=(t=a[o]).chart,i=t.numSteps,n=Math.floor((Date.now()-t.startTime)/t.duration*i)+1,t.currentStep=Math.min(n,i),ut.callback(t.render,[e,t],e),ut.callback(t.onAnimationProgress,[t],e),t.currentStep>=i?(ut.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(o,1)):++o}},xt=ut.options.resolve,yt=["push","pop","shift","splice","unshift"];function kt(t,e){var i=t._chartjs;if(i){var n=i.listeners,a=n.indexOf(e);-1!==a&&n.splice(a,1),n.length>0||(yt.forEach(function(e){delete t[e]}),delete t._chartjs)}}var wt=function(t,e){this.initialize(t,e)};ut.extend(wt.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),i=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=i.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=i.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&kt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,i=this.getMeta(),n=this.getDataset().data||[],a=i.data;for(t=0,e=n.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);i.dataset=i.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,i=this,n=i.getDataset(),a=n.data||(n.data=[]);i._data!==a&&(i._data&&kt(i._data,i),a&&Object.isExtensible(a)&&(e=i,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),yt.forEach(function(e){var i="onData"+e.charAt(0).toUpperCase()+e.slice(1),n=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=n.apply(this,e);return ut.each(t._chartjs.listeners,function(t){"function"==typeof t[i]&&t[i].apply(t,e)}),a}})}))),i._data=a),i.resyncElements()},update:ut.noop,transition:function(t){for(var e=this.getMeta(),i=e.data||[],n=i.length,a=0;a<n;++a)i[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],i=e.length,n=0;for(t.dataset&&t.dataset.draw();n<i;++n)e[n].draw()},removeHoverStyle:function(t){ut.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,n=t.custom||{},a=t._model,o=ut.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=xt([n.hoverBackgroundColor,e.hoverBackgroundColor,o(a.backgroundColor)],void 0,i),a.borderColor=xt([n.hoverBorderColor,e.hoverBorderColor,o(a.borderColor)],void 0,i),a.borderWidth=xt([n.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,i)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,i=t.data.length,n=e.length;n<i?t.data.splice(n,i-n):n>i&&this.insertElements(i,n-i)},insertElements:function(t,e){for(var i=0;i<e;++i)this.addElementAndReset(t+i)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),wt.extend=ut.inherits;var Mt=wt;st._set("global",{elements:{arc:{backgroundColor:st.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var _t=pt.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var i=this._view;if(i){for(var n=ut.getAngleFromPoint(i,{x:t,y:e}),a=n.angle,o=n.distance,r=i.startAngle,s=i.endAngle;s<r;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<r;)a+=2*Math.PI;var l=a>=r&&a<=s,d=o>=i.innerRadius&&o<=i.outerRadius;return l&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,i=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t,e=this._chart.ctx,i=this._view,n=i.startAngle,a=i.endAngle,o="inner"===i.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(i.x,i.y,Math.max(i.outerRadius-o,0),n,a),e.arc(i.x,i.y,i.innerRadius,a,n,!0),e.closePath(),e.fillStyle=i.backgroundColor,e.fill(),i.borderWidth&&("inner"===i.borderAlign?(e.beginPath(),t=o/i.outerRadius,e.arc(i.x,i.y,i.outerRadius,n-t,a+t),i.innerRadius>o?(t=o/i.innerRadius,e.arc(i.x,i.y,i.innerRadius-o,a+t,n-t,!0)):e.arc(i.x,i.y,o,a+Math.PI/2,n-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(i.x,i.y,i.outerRadius,n,a),e.arc(i.x,i.y,i.innerRadius,a,n,!0),e.closePath(),e.lineWidth=2*i.borderWidth,e.lineJoin="round"):(e.lineWidth=i.borderWidth,e.lineJoin="bevel"),e.strokeStyle=i.borderColor,e.stroke()),e.restore()}}),Ct=ut.valueOrDefault,St=st.global.defaultColor;st._set("global",{elements:{line:{tension:.4,backgroundColor:St,borderWidth:3,borderColor:St,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Pt=pt.extend({draw:function(){var t,e,i,n,a=this._view,o=this._chart.ctx,r=a.spanGaps,s=this._children.slice(),l=st.global,d=l.elements.line,u=-1;for(this._loop&&s.length&&s.push(s[0]),o.save(),o.lineCap=a.borderCapStyle||d.borderCapStyle,o.setLineDash&&o.setLineDash(a.borderDash||d.borderDash),o.lineDashOffset=Ct(a.borderDashOffset,d.borderDashOffset),o.lineJoin=a.borderJoinStyle||d.borderJoinStyle,o.lineWidth=Ct(a.borderWidth,d.borderWidth),o.strokeStyle=a.borderColor||l.defaultColor,o.beginPath(),u=-1,t=0;t<s.length;++t)e=s[t],i=ut.previousItem(s,t),n=e._view,0===t?n.skip||(o.moveTo(n.x,n.y),u=t):(i=-1===u?i:s[u],n.skip||(u!==t-1&&!r||-1===u?o.moveTo(n.x,n.y):ut.canvas.lineTo(o,i._view,e._view),u=t));o.stroke(),o.restore()}}),It=ut.valueOrDefault,At=st.global.defaultColor;function Dt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}st._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:At,borderColor:At,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Tt=pt.extend({inRange:function(t,e){var i=this._view;return!!i&&Math.pow(t-i.x,2)+Math.pow(e-i.y,2)<Math.pow(i.hitRadius+i.radius,2)},inLabelRange:Dt,inXRange:Dt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,i=this._chart.ctx,n=e.pointStyle,a=e.rotation,o=e.radius,r=e.x,s=e.y,l=st.global,d=l.defaultColor;e.skip||(void 0===t||ut.canvas._isPointInArea(e,t))&&(i.strokeStyle=e.borderColor||d,i.lineWidth=It(e.borderWidth,l.elements.point.borderWidth),i.fillStyle=e.backgroundColor||d,ut.canvas.drawPoint(i,n,o,r,s,a))}}),Ft=st.global.defaultColor;function Lt(t){return t&&void 0!==t.width}function Rt(t){var e,i,n,a,o;return Lt(t)?(o=t.width/2,e=t.x-o,i=t.x+o,n=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(o=t.height/2,e=Math.min(t.x,t.base),i=Math.max(t.x,t.base),n=t.y-o,a=t.y+o),{left:e,top:n,right:i,bottom:a}}function Ot(t,e,i){return t===e?i:t===i?e:t}function zt(t,e,i){var n,a,o,r,s=t.borderWidth,l=function(t){var e=t.borderSkipped,i={};return e?(t.horizontal?t.base>t.x&&(e=Ot(e,"left","right")):t.base<t.y&&(e=Ot(e,"bottom","top")),i[e]=!0,i):i}(t);return ut.isObject(s)?(n=+s.top||0,a=+s.right||0,o=+s.bottom||0,r=+s.left||0):n=a=o=r=+s||0,{t:l.top||n<0?0:n>i?i:n,r:l.right||a<0?0:a>e?e:a,b:l.bottom||o<0?0:o>i?i:o,l:l.left||r<0?0:r>e?e:r}}function Bt(t,e,i){var n=null===e,a=null===i,o=!(!t||n&&a)&&Rt(t);return o&&(n||e>=o.left&&e<=o.right)&&(a||i>=o.top&&i<=o.bottom)}st._set("global",{elements:{rectangle:{backgroundColor:Ft,borderColor:Ft,borderSkipped:"bottom",borderWidth:0}}});var Nt=pt.extend({draw:function(){var t=this._chart.ctx,e=this._view,i=function(t){var e=Rt(t),i=e.right-e.left,n=e.bottom-e.top,a=zt(t,i/2,n/2);return{outer:{x:e.left,y:e.top,w:i,h:n},inner:{x:e.left+a.l,y:e.top+a.t,w:i-a.l-a.r,h:n-a.t-a.b}}}(e),n=i.outer,a=i.inner;t.fillStyle=e.backgroundColor,t.fillRect(n.x,n.y,n.w,n.h),n.w===a.w&&n.h===a.h||(t.save(),t.beginPath(),t.rect(n.x,n.y,n.w,n.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Bt(this._view,t,e)},inLabelRange:function(t,e){var i=this._view;return Lt(i)?Bt(i,t,null):Bt(i,null,e)},inXRange:function(t){return Bt(this._view,t,null)},inYRange:function(t){return Bt(this._view,null,t)},getCenterPoint:function(){var t,e,i=this._view;return Lt(i)?(t=i.x,e=(i.y+i.base)/2):(t=(i.x+i.base)/2,e=i.y),{x:t,y:e}},getArea:function(){var t=this._view;return Lt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),Wt={},Vt=_t,Et=Pt,Ht=Tt,jt=Nt;Wt.Arc=Vt,Wt.Line=Et,Wt.Point=Ht,Wt.Rectangle=jt;var qt=ut.options.resolve;st._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var Yt=Mt.extend({dataElementType:Wt.Rectangle,initialize:function(){var t;Mt.prototype.initialize.apply(this,arguments),(t=this.getMeta()).stack=this.getDataset().stack,t.bar=!0},update:function(t){var e,i,n=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,i=n.length;e<i;++e)this.updateElement(n[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.getMeta(),o=n.getDataset(),r=n._resolveElementOptions(t,e);t._xScale=n.getScaleForId(a.xAxisID),t._yScale=n.getScaleForId(a.yAxisID),t._datasetIndex=n.index,t._index=e,t._model={backgroundColor:r.backgroundColor,borderColor:r.borderColor,borderSkipped:r.borderSkipped,borderWidth:r.borderWidth,datasetLabel:o.label,label:n.chart.data.labels[e]},n._updateElementGeometry(t,e,i),t.pivot()},_updateElementGeometry:function(t,e,i){var n=this,a=t._model,o=n._getValueScale(),r=o.getBasePixel(),s=o.isHorizontal(),l=n._ruler||n.getRuler(),d=n.calculateBarValuePixels(n.index,e),u=n.calculateBarIndexPixels(n.index,e,l);a.horizontal=s,a.base=i?r:d.base,a.x=s?i?r:d.head:u.center,a.y=s?u.center:i?r:d.head,a.height=s?u.size:void 0,a.width=s?void 0:u.size},_getStacks:function(t){var e,i,n=this.chart,a=this._getIndexScale().options.stacked,o=void 0===t?n.data.datasets.length:t+1,r=[];for(e=0;e<o;++e)(i=n.getDatasetMeta(e)).bar&&n.isDatasetVisible(e)&&(!1===a||!0===a&&-1===r.indexOf(i.stack)||void 0===a&&(void 0===i.stack||-1===r.indexOf(i.stack)))&&r.push(i.stack);return r},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var i=this._getStacks(t),n=void 0!==e?i.indexOf(e):-1;return-1===n?i.length-1:n},getRuler:function(){var t,e,i=this._getIndexScale(),n=this.getStackCount(),a=this.index,o=i.isHorizontal(),r=o?i.left:i.top,s=r+(o?i.width:i.height),l=[];for(t=0,e=this.getMeta().data.length;t<e;++t)l.push(i.getPixelForValue(null,t,a));return{min:ut.isNullOrUndef(i.options.barThickness)?function(t,e){var i,n,a,o,r=t.isHorizontal()?t.width:t.height,s=t.getTicks();for(a=1,o=e.length;a<o;++a)r=Math.min(r,Math.abs(e[a]-e[a-1]));for(a=0,o=s.length;a<o;++a)n=t.getPixelForTick(a),r=a>0?Math.min(r,n-i):r,i=n;return r}(i,l):-1,pixels:l,start:r,end:s,stackCount:n,scale:i}},calculateBarValuePixels:function(t,e){var i,n,a,o,r,s,l=this.chart,d=this.getMeta(),u=this._getValueScale(),h=u.isHorizontal(),c=l.data.datasets,f=+u.getRightValue(c[t].data[e]),g=u.options.minBarLength,p=u.options.stacked,m=d.stack,v=0;if(p||void 0===p&&void 0!==m)for(i=0;i<t;++i)(n=l.getDatasetMeta(i)).bar&&n.stack===m&&n.controller._getValueScaleId()===u.id&&l.isDatasetVisible(i)&&(a=+u.getRightValue(c[i].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return o=u.getPixelForValue(v),s=(r=u.getPixelForValue(v+f))-o,void 0!==g&&Math.abs(s)<g&&(s=g,r=f>=0&&!h||f<0&&h?o-g:o+g),{size:s,base:o,head:r,center:r+s/2}},calculateBarIndexPixels:function(t,e,i){var n=i.scale.options,a="flex"===n.barThickness?function(t,e,i){var n,a=e.pixels,o=a[t],r=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=i.categoryPercentage;return null===r&&(r=o-(null===s?e.end-e.start:s-o)),null===s&&(s=o+o-r),n=o-(o-Math.min(r,s))/2*l,{chunk:Math.abs(s-r)/2*l/e.stackCount,ratio:i.barPercentage,start:n}}(e,i,n):function(t,e,i){var n,a,o=i.barThickness,r=e.stackCount,s=e.pixels[t];return ut.isNullOrUndef(o)?(n=e.min*i.categoryPercentage,a=i.barPercentage):(n=o*r,a=1),{chunk:n/r,ratio:a,start:s-n/2}}(e,i,n),o=this.getStackIndex(t,this.getMeta().stack),r=a.start+a.chunk*o+a.chunk/2,s=Math.min(ut.valueOrDefault(n.maxBarThickness,1/0),a.chunk*a.ratio);return{base:r-s/2,head:r+s/2,center:r,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),i=this.getMeta().data,n=this.getDataset(),a=i.length,o=0;for(ut.canvas.clipArea(t.ctx,t.chartArea);o<a;++o)isNaN(e.getRightValue(n.data[o]))||i[o].draw();ut.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.rectangle,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=qt([s[a],r[a],l[a]],u,e);return d}}),Ut=ut.valueOrDefault,Xt=ut.options.resolve;st._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var i=e.datasets[t.datasetIndex].label||"",n=e.datasets[t.datasetIndex].data[t.index];return i+": ("+t.xLabel+", "+t.yLabel+", "+n.r+")"}}}});var Kt=Mt.extend({dataElementType:Wt.Point,update:function(t){var e=this,i=e.getMeta().data;ut.each(i,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){var n=this,a=n.getMeta(),o=t.custom||{},r=n.getScaleForId(a.xAxisID),s=n.getScaleForId(a.yAxisID),l=n._resolveElementOptions(t,e),d=n.getDataset().data[e],u=n.index,h=i?r.getPixelForDecimal(.5):r.getPixelForValue("object"==typeof d?d:NaN,e,u),c=i?s.getBasePixel():s.getPixelForValue(d,e,u);t._xScale=r,t._yScale=s,t._options=l,t._datasetIndex=u,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:i?0:l.radius,skip:o.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Ut(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Ut(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Ut(i.hoverBorderWidth,i.borderWidth),e.radius=i.radius+i.hoverRadius},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d=r.data[e],u={},h={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(i=0,n=c.length;i<n;++i)u[a=c[i]]=Xt([s[a],r[a],l[a]],h,e);return u.radius=Xt([s.radius,d?d.r:void 0,r.radius,l.radius],h,e),u}}),Gt=ut.options.resolve,Zt=ut.valueOrDefault;st._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o<n[0].data.length;++o)e.push('<li><span style="background-color:'+n[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],r=a.data[n],s=r&&r.custom||{},l=t.options.elements.arc;return{text:i,fillStyle:Gt([s.backgroundColor,o.backgroundColor,l.backgroundColor],void 0,n),strokeStyle:Gt([s.borderColor,o.borderColor,l.borderColor],void 0,n),lineWidth:Gt([s.borderWidth,o.borderWidth,l.borderWidth],void 0,n),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i<n;++i)(a=r.getDatasetMeta(i)).data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var i=e.labels[t.index],n=": "+e.datasets[t.datasetIndex].data[t.index];return ut.isArray(i)?(i=i.slice())[0]+=n:i+=n,i}}}});var $t=Mt.extend({dataElementType:Wt.Arc,linkScales:ut.noop,getRingIndex:function(t){for(var e=0,i=0;i<t;++i)this.chart.isDatasetVisible(i)&&++e;return e},update:function(t){var e,i,n=this,a=n.chart,o=a.chartArea,r=a.options,s=o.right-o.left,l=o.bottom-o.top,d=Math.min(s,l),u={x:0,y:0},h=n.getMeta(),c=h.data,f=r.cutoutPercentage,g=r.circumference,p=n._getRingWeight(n.index);if(g<2*Math.PI){var m=r.rotation%(2*Math.PI),v=(m+=2*Math.PI*(m>=Math.PI?-1:m<-Math.PI?1:0))+g,b={x:Math.cos(m),y:Math.sin(m)},x={x:Math.cos(v),y:Math.sin(v)},y=m<=0&&v>=0||m<=2*Math.PI&&2*Math.PI<=v,k=m<=.5*Math.PI&&.5*Math.PI<=v||m<=2.5*Math.PI&&2.5*Math.PI<=v,w=m<=-Math.PI&&-Math.PI<=v||m<=Math.PI&&Math.PI<=v,M=m<=.5*-Math.PI&&.5*-Math.PI<=v||m<=1.5*Math.PI&&1.5*Math.PI<=v,_=f/100,C={x:w?-1:Math.min(b.x*(b.x<0?1:_),x.x*(x.x<0?1:_)),y:M?-1:Math.min(b.y*(b.y<0?1:_),x.y*(x.y<0?1:_))},S={x:y?1:Math.max(b.x*(b.x>0?1:_),x.x*(x.x>0?1:_)),y:k?1:Math.max(b.y*(b.y>0?1:_),x.y*(x.y>0?1:_))},P={width:.5*(S.x-C.x),height:.5*(S.y-C.y)};d=Math.min(s/P.width,l/P.height),u={x:-.5*(S.x+C.x),y:-.5*(S.y+C.y)}}for(e=0,i=c.length;e<i;++e)c[e]._options=n._resolveElementOptions(c[e],e);for(a.borderWidth=n.getMaxBorderWidth(),a.outerRadius=Math.max((d-a.borderWidth)/2,0),a.innerRadius=Math.max(f?a.outerRadius/100*f:0,0),a.radiusLength=(a.outerRadius-a.innerRadius)/(n._getVisibleDatasetWeightTotal()||1),a.offsetX=u.x*a.outerRadius,a.offsetY=u.y*a.outerRadius,h.total=n.calculateTotal(),n.outerRadius=a.outerRadius-a.radiusLength*n._getRingWeightOffset(n.index),n.innerRadius=Math.max(n.outerRadius-a.radiusLength*p,0),e=0,i=c.length;e<i;++e)n.updateElement(c[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.chart,o=a.chartArea,r=a.options,s=r.animation,l=(o.left+o.right)/2,d=(o.top+o.bottom)/2,u=r.rotation,h=r.rotation,c=n.getDataset(),f=i&&s.animateRotate?0:t.hidden?0:n.calculateCircumference(c.data[e])*(r.circumference/(2*Math.PI)),g=i&&s.animateScale?0:n.innerRadius,p=i&&s.animateScale?0:n.outerRadius,m=t._options||{};ut.extend(t,{_datasetIndex:n.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:d+a.offsetY,startAngle:u,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:ut.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;i&&s.animateRotate||(v.startAngle=0===e?r.rotation:n.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),i=this.getMeta(),n=0;return ut.each(i.data,function(i,a){t=e.data[a],isNaN(t)||i.hidden||(n+=Math.abs(t))}),n},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,i,n,a,o,r,s,l,d=0,u=this.chart;if(!t)for(e=0,i=u.data.datasets.length;e<i;++e)if(u.isDatasetVisible(e)){t=(n=u.getDatasetMeta(e)).data,e!==this.index&&(o=n.controller);break}if(!t)return 0;for(e=0,i=t.length;e<i;++e)a=t[e],"inner"!==(r=o?o._resolveElementOptions(a,e):a._options).borderAlign&&(s=r.borderWidth,d=(l=r.hoverBorderWidth)>(d=s>d?s:d)?l:d);return d},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Zt(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Zt(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Zt(i.hoverBorderWidth,i.borderWidth)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=this.getDataset(),s=t.custom||{},l=o.options.elements.arc,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=Gt([s[a],r[a],l[a]],u,e);return d},_getRingWeightOffset:function(t){for(var e=0,i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e},_getRingWeight:function(t){return Math.max(Zt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});st._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var Jt=Yt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Qt=ut.valueOrDefault,te=ut.options.resolve,ee=ut.canvas._isPointInArea;function ie(t,e){return Qt(t.showLine,e.showLines)}st._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var ne=Mt.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,update:function(t){var e,i,n=this,a=n.getMeta(),o=a.dataset,r=a.data||[],s=n.getScaleForId(a.yAxisID),l=n.getDataset(),d=ie(l,n.chart.options);for(d&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o._scale=s,o._datasetIndex=n.index,o._children=r,o._model=n._resolveLineOptions(o),o.pivot()),e=0,i=r.length;e<i;++e)n.updateElement(r[e],e,t);for(d&&0!==o._model.tension&&n.updateBezierControlPoints(),e=0,i=r.length;e<i;++e)r[e].pivot()},updateElement:function(t,e,i){var n,a,o=this,r=o.getMeta(),s=t.custom||{},l=o.getDataset(),d=o.index,u=l.data[e],h=o.getScaleForId(r.yAxisID),c=o.getScaleForId(r.xAxisID),f=r.dataset._model,g=o._resolvePointOptions(t,e);n=c.getPixelForValue("object"==typeof u?u:NaN,e,d),a=i?h.getBasePixel():o.calculatePointY(u,e,d),t._xScale=c,t._yScale=h,t._options=g,t._datasetIndex=d,t._index=e,t._model={x:n,y:a,skip:s.skip||isNaN(n)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Qt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(i=0,n=c.length;i<n;++i)d[a=c[i]]=te([s[a],r[h[a]],r[a],l[a]],u,e);return d},_resolveLineOptions:function(t){var e,i,n,a=this.chart,o=a.data.datasets[this.index],r=t.custom||{},s=a.options,l=s.elements.line,d={},u=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,i=u.length;e<i;++e)d[n=u[e]]=te([r[n],o[n],l[n]]);return d.spanGaps=Qt(o.spanGaps,s.spanGaps),d.tension=Qt(o.lineTension,l.tension),d.steppedLine=te([r.steppedLine,o.steppedLine,l.stepped]),d},calculatePointY:function(t,e,i){var n,a,o,r=this.chart,s=this.getMeta(),l=this.getScaleForId(s.yAxisID),d=0,u=0;if(l.options.stacked){for(n=0;n<i;n++)if(a=r.data.datasets[n],"line"===(o=r.getDatasetMeta(n)).type&&o.yAxisID===l.id&&r.isDatasetVisible(n)){var h=Number(l.getRightValue(a.data[e]));h<0?u+=h||0:d+=h||0}var c=Number(l.getRightValue(t));return c<0?l.getPixelForValue(u+c):l.getPixelForValue(d+c)}return l.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,i,n,a=this.chart,o=this.getMeta(),r=o.dataset._model,s=a.chartArea,l=o.data||[];function d(t,e,i){return Math.max(Math.min(t,i),e)}if(r.spanGaps&&(l=l.filter(function(t){return!t._model.skip})),"monotone"===r.cubicInterpolationMode)ut.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)i=l[t]._model,n=ut.splineCurve(ut.previousItem(l,t)._model,i,ut.nextItem(l,t)._model,r.tension),i.controlPointPreviousX=n.previous.x,i.controlPointPreviousY=n.previous.y,i.controlPointNextX=n.next.x,i.controlPointNextY=n.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)i=l[t]._model,ee(i,s)&&(t>0&&ee(l[t-1]._model,s)&&(i.controlPointPreviousX=d(i.controlPointPreviousX,s.left,s.right),i.controlPointPreviousY=d(i.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&ee(l[t+1]._model,s)&&(i.controlPointNextX=d(i.controlPointNextX,s.left,s.right),i.controlPointNextY=d(i.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,i=this.getMeta(),n=i.data||[],a=e.chartArea,o=n.length,r=0;for(ie(this.getDataset(),e.options)&&(t=(i.dataset._model.borderWidth||0)/2,ut.canvas.clipArea(e.ctx,{left:a.left,right:a.right,top:a.top-t,bottom:a.bottom+t}),i.dataset.draw(),ut.canvas.unclipArea(e.ctx));r<o;++r)n[r].draw(a)},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Qt(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Qt(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Qt(i.hoverBorderWidth,i.borderWidth),e.radius=Qt(i.hoverRadius,i.radius)}}),ae=ut.options.resolve;st._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o<n[0].data.length;++o)e.push('<li><span style="background-color:'+n[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],r=a.data[n].custom||{},s=t.options.elements.arc;return{text:i,fillStyle:ae([r.backgroundColor,o.backgroundColor,s.backgroundColor],void 0,n),strokeStyle:ae([r.borderColor,o.borderColor,s.borderColor],void 0,n),lineWidth:ae([r.borderWidth,o.borderWidth,s.borderWidth],void 0,n),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i<n;++i)(a=r.getDatasetMeta(i)).data[o].hidden=!a.data[o].hidden;r.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var oe=Mt.extend({dataElementType:Wt.Arc,linkScales:ut.noop,update:function(t){var e,i,n,a=this,o=a.getDataset(),r=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],d=a._angles=[],u=r.data;for(a._updateRadius(),r.count=a.countVisibleElements(),e=0,i=o.data.length;e<i;e++)l[e]=s,n=a._computeAngle(e),d[e]=n,s+=n;for(e=0,i=u.length;e<i;++e)u[e]._options=a._resolveElementOptions(u[e],e),a.updateElement(u[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,i=e.chartArea,n=e.options,a=Math.min(i.right-i.left,i.bottom-i.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(n.cutoutPercentage?e.outerRadius/100*n.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,i){var n=this,a=n.chart,o=n.getDataset(),r=a.options,s=r.animation,l=a.scale,d=a.data.labels,u=l.xCenter,h=l.yCenter,c=r.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(o.data[e]),g=n._starts[e],p=g+(t.hidden?0:n._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(o.data[e]),v=t._options||{};ut.extend(t,{_datasetIndex:n.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:u,y:h,innerRadius:0,outerRadius:i?m:f,startAngle:i&&s.animateRotate?c:g,endAngle:i&&s.animateRotate?c:p,label:ut.valueAtIndexOrDefault(d,e,d[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),i=0;return ut.each(e.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor,a=ut.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=a(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=a(i.hoverBorderWidth,i.borderWidth)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=this.getDataset(),s=t.custom||{},l=o.options.elements.arc,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=ae([s[a],r[a],l[a]],u,e);return d},_computeAngle:function(t){var e=this,i=this.getMeta().count,n=e.getDataset(),a=e.getMeta();if(isNaN(n.data[t])||a.data[t].hidden)return 0;var o={chart:e.chart,dataIndex:t,dataset:n,datasetIndex:e.index};return ae([e.chart.options.elements.arc.angle,2*Math.PI/i],o,t)}});st._set("pie",ut.clone(st.doughnut)),st._set("pie",{cutoutPercentage:0});var re=$t,se=ut.valueOrDefault,le=ut.options.resolve;st._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var de=Mt.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,linkScales:ut.noop,update:function(t){var e,i,n=this,a=n.getMeta(),o=a.dataset,r=a.data||[],s=n.chart.scale,l=n.getDataset();for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o._scale=s,o._datasetIndex=n.index,o._children=r,o._loop=!0,o._model=n._resolveLineOptions(o),o.pivot(),e=0,i=r.length;e<i;++e)n.updateElement(r[e],e,t);for(n.updateBezierControlPoints(),e=0,i=r.length;e<i;++e)r[e].pivot()},updateElement:function(t,e,i){var n=this,a=t.custom||{},o=n.getDataset(),r=n.chart.scale,s=r.getPointPositionForValue(e,o.data[e]),l=n._resolvePointOptions(t,e),d=n.getMeta().dataset._model,u=i?r.xCenter:s.x,h=i?r.yCenter:s.y;t._scale=r,t._options=l,t._datasetIndex=n.index,t._index=e,t._model={x:u,y:h,skip:a.skip||isNaN(u)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:se(a.tension,d?d.tension:0),hitRadius:l.hitRadius}},_resolvePointOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(i=0,n=c.length;i<n;++i)d[a=c[i]]=le([s[a],r[h[a]],r[a],l[a]],u,e);return d},_resolveLineOptions:function(t){var e,i,n,a=this.chart,o=a.data.datasets[this.index],r=t.custom||{},s=a.options.elements.line,l={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,i=d.length;e<i;++e)l[n=d[e]]=le([r[n],o[n],s[n]]);return l.tension=se(o.lineTension,s.tension),l},updateBezierControlPoints:function(){var t,e,i,n,a=this.getMeta(),o=this.chart.chartArea,r=a.data||[];function s(t,e,i){return Math.max(Math.min(t,i),e)}for(t=0,e=r.length;t<e;++t)i=r[t]._model,n=ut.splineCurve(ut.previousItem(r,t,!0)._model,i,ut.nextItem(r,t,!0)._model,i.tension),i.controlPointPreviousX=s(n.previous.x,o.left,o.right),i.controlPointPreviousY=s(n.previous.y,o.top,o.bottom),i.controlPointNextX=s(n.next.x,o.left,o.right),i.controlPointNextY=s(n.next.y,o.top,o.bottom)},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=se(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=se(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=se(i.hoverBorderWidth,i.borderWidth),e.radius=se(i.hoverRadius,i.radius)}});st._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var ue={bar:Yt,bubble:Kt,doughnut:$t,horizontalBar:Jt,line:ne,polarArea:oe,pie:re,radar:de,scatter:ne};function he(t,e){return t.native?{x:t.x,y:t.y}:ut.getRelativePosition(t,e)}function ce(t,e){var i,n,a,o,r;for(n=0,o=t.data.datasets.length;n<o;++n)if(t.isDatasetVisible(n))for(a=0,r=(i=t.getDatasetMeta(n)).data.length;a<r;++a){var s=i.data[a];s._view.skip||e(s)}}function fe(t,e){var i=[];return ce(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function ge(t,e,i,n){var a=Number.POSITIVE_INFINITY,o=[];return ce(t,function(t){if(!i||t.inRange(e.x,e.y)){var r=t.getCenterPoint(),s=n(e,r);s<a?(o=[t],a=s):s===a&&o.push(t)}}),o}function pe(t){var e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,n){var a=e?Math.abs(t.x-n.x):0,o=i?Math.abs(t.y-n.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(o,2))}}function me(t,e,i){var n=he(e,t);i.axis=i.axis||"x";var a=pe(i.axis),o=i.intersect?fe(t,n):ge(t,n,!1,a),r=[];return o.length?(t.data.datasets.forEach(function(e,i){if(t.isDatasetVisible(i)){var n=t.getDatasetMeta(i).data[o[0]._index];n&&!n._view.skip&&r.push(n)}}),r):[]}var ve={modes:{single:function(t,e){var i=he(e,t),n=[];return ce(t,function(t){if(t.inRange(i.x,i.y))return n.push(t),n}),n.slice(0,1)},label:me,index:me,dataset:function(t,e,i){var n=he(e,t);i.axis=i.axis||"xy";var a=pe(i.axis),o=i.intersect?fe(t,n):ge(t,n,!1,a);return o.length>0&&(o=t.getDatasetMeta(o[0]._datasetIndex).data),o},"x-axis":function(t,e){return me(t,e,{intersect:!1})},point:function(t,e){return fe(t,he(e,t))},nearest:function(t,e,i){var n=he(e,t);i.axis=i.axis||"xy";var a=pe(i.axis);return ge(t,n,i.intersect,a)},x:function(t,e,i){var n=he(e,t),a=[],o=!1;return ce(t,function(t){t.inXRange(n.x)&&a.push(t),t.inRange(n.x,n.y)&&(o=!0)}),i.intersect&&!o&&(a=[]),a},y:function(t,e,i){var n=he(e,t),a=[],o=!1;return ce(t,function(t){t.inYRange(n.y)&&a.push(t),t.inRange(n.x,n.y)&&(o=!0)}),i.intersect&&!o&&(a=[]),a}}};function be(t,e){return ut.where(t,function(t){return t.position===e})}function xe(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,i){var n=e?i:t,a=e?t:i;return n.weight===a.weight?n._tmpIndex_-a._tmpIndex_:n.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}function ye(t,e){ut.each(t,function(t){e[t.position]+=t.isHorizontal()?t.height:t.width})}st._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ke={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure:function(t,e,i){for(var n,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)n=a[r],i.hasOwnProperty(n)&&(e[n]=i[n])},update:function(t,e,i){if(t){var n=t.options.layout||{},a=ut.options.toPadding(n.padding),o=a.left,r=a.right,s=a.top,l=a.bottom,d=be(t.boxes,"left"),u=be(t.boxes,"right"),h=be(t.boxes,"top"),c=be(t.boxes,"bottom"),f=be(t.boxes,"chartArea");xe(d,!0),xe(u,!1),xe(h,!0),xe(c,!1);var g,p=d.concat(u),m=h.concat(c),v=p.concat(m),b=e-o-r,x=i-s-l,y=(e-b/2)/p.length,k=b,w=x,M={top:s,left:o,bottom:l,right:r},_=[];ut.each(v,function(t){var e,i=t.isHorizontal();i?(e=t.update(t.fullWidth?b:k,x/2),w-=e.height):(e=t.update(y,w),k-=e.width),_.push({horizontal:i,width:e.width,box:t})}),g=function(t){var e=0,i=0,n=0,a=0;return ut.each(t,function(t){if(t.getPadding){var o=t.getPadding();e=Math.max(e,o.top),i=Math.max(i,o.left),n=Math.max(n,o.bottom),a=Math.max(a,o.right)}}),{top:e,left:i,bottom:n,right:a}}(v),ut.each(p,T),ye(p,M),ut.each(m,T),ye(m,M),ut.each(p,function(t){var e=ut.findNextWhere(_,function(e){return e.box===t}),i={left:0,right:0,top:M.top,bottom:M.bottom};e&&t.update(e.width,w,i)}),ye(v,M={top:s,left:o,bottom:l,right:r});var C=Math.max(g.left-M.left,0);M.left+=C,M.right+=Math.max(g.right-M.right,0);var S=Math.max(g.top-M.top,0);M.top+=S,M.bottom+=Math.max(g.bottom-M.bottom,0);var P=i-M.top-M.bottom,I=e-M.left-M.right;I===k&&P===w||(ut.each(p,function(t){t.height=P}),ut.each(m,function(t){t.fullWidth||(t.width=I)}),w=P,k=I);var A=o+C,D=s+S;ut.each(d.concat(h),F),A+=k,D+=w,ut.each(u,F),ut.each(c,F),t.chartArea={left:M.left,top:M.top,right:M.left+k,bottom:M.top+w},ut.each(f,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(k,w)})}function T(t){var e=ut.findNextWhere(_,function(e){return e.box===t});if(e)if(e.horizontal){var i={left:Math.max(M.left,g.left),right:Math.max(M.right,g.right),top:0,bottom:0};t.update(t.fullWidth?b:k,x/2,i)}else t.update(e.width,w)}function F(t){t.isHorizontal()?(t.left=t.fullWidth?o:M.left,t.right=t.fullWidth?e-r:M.left+k,t.top=D,t.bottom=D+t.height,D=t.bottom):(t.left=A,t.right=A+t.width,t.top=M.top,t.bottom=M.top+w,A=t.right)}}};var we,Me=(we=Object.freeze({default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&we.default||we,_e="$chartjs",Ce="chartjs-size-monitor",Se="chartjs-render-monitor",Pe="chartjs-render-animation",Ie=["animationstart","webkitAnimationStart"],Ae={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function De(t,e){var i=ut.getStyle(t,e),n=i&&i.match(/^(\d+)(\.\d+)?px$/);return n?Number(n[1]):void 0}var Te=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Fe(t,e,i){t.addEventListener(e,i,Te)}function Le(t,e,i){t.removeEventListener(e,i,Te)}function Re(t,e,i,n,a){return{type:t,chart:e,native:a||null,x:void 0!==i?i:null,y:void 0!==n?n:null}}function Oe(t){var e=document.createElement("div");return e.className=t||"",e}function ze(t,e,i){var n,a,o,r,s=t[_e]||(t[_e]={}),l=s.resizer=function(t){var e=Oe(Ce),i=Oe(Ce+"-expand"),n=Oe(Ce+"-shrink");i.appendChild(Oe()),n.appendChild(Oe()),e.appendChild(i),e.appendChild(n),e._reset=function(){i.scrollLeft=1e6,i.scrollTop=1e6,n.scrollLeft=1e6,n.scrollTop=1e6};var a=function(){e._reset(),t()};return Fe(i,"scroll",a.bind(i,"expand")),Fe(n,"scroll",a.bind(n,"shrink")),e}((n=function(){if(s.resizer){var n=i.options.maintainAspectRatio&&t.parentNode,a=n?n.clientWidth:0;e(Re("resize",i)),n&&n.clientWidth<a&&i.canvas&&e(Re("resize",i))}},o=!1,r=[],function(){r=Array.prototype.slice.call(arguments),a=a||this,o||(o=!0,ut.requestAnimFrame.call(window,function(){o=!1,n.apply(a,r)}))}));!function(t,e){var i=t[_e]||(t[_e]={}),n=i.renderProxy=function(t){t.animationName===Pe&&e()};ut.each(Ie,function(e){Fe(t,e,n)}),i.reflow=!!t.offsetParent,t.classList.add(Se)}(t,function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}})}function Be(t){var e=t[_e]||{},i=e.resizer;delete e.resizer,function(t){var e=t[_e]||{},i=e.renderProxy;i&&(ut.each(Ie,function(e){Le(t,e,i)}),delete e.renderProxy),t.classList.remove(Se)}(t),i&&i.parentNode&&i.parentNode.removeChild(i)}var Ne={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){var t,e,i;this._loaded||(this._loaded=!0,this.disableCSSInjection||(e=Me,i=(t=this)._style||document.createElement("style"),t._style||(t._style=i,e="/* Chart.js */\n"+e,i.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(i)),i.appendChild(document.createTextNode(e))))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),i&&i.canvas===t?(function(t,e){var i=t.style,n=t.getAttribute("height"),a=t.getAttribute("width");if(t[_e]={initial:{height:n,width:a,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===a||""===a){var o=De(t,"width");void 0!==o&&(t.width=o)}if(null===n||""===n)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var r=De(t,"height");void 0!==o&&(t.height=r)}}(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e[_e]){var i=e[_e].initial;["height","width"].forEach(function(t){var n=i[t];ut.isNullOrUndef(n)?e.removeAttribute(t):e.setAttribute(t,n)}),ut.each(i.style||{},function(t,i){e.style[i]=t}),e.width=e.width,delete e[_e]}},addEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var a=i[_e]||(i[_e]={});Fe(n,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){i(function(t,e){var i=Ae[t.type]||t.type,n=ut.getRelativePosition(t,e);return Re(i,e,n.x,n.y,t)}(e,t))})}else ze(n,i,t)},removeEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var a=((i[_e]||{}).proxies||{})[t.id+"_"+e];a&&Le(n,e,a)}else Be(n)}};ut.addEvent=Fe,ut.removeEvent=Le;var We=Ne._enabled?Ne:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Ve=ut.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},We);st._set("global",{plugins:{}});var Ee={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){-1===e.indexOf(t)&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var i=e.indexOf(t);-1!==i&&e.splice(i,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,i){var n,a,o,r,s,l=this.descriptors(t),d=l.length;for(n=0;n<d;++n)if("function"==typeof(s=(o=(a=l[n]).plugin)[e])&&((r=[t].concat(i||[])).push(a.options),!1===s.apply(o,r)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var i=[],n=[],a=t&&t.config||{},o=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach(function(t){if(-1===i.indexOf(t)){var e=t.id,a=o[e];!1!==a&&(!0===a&&(a=ut.clone(st.global.plugins[e])),i.push(t),n.push({plugin:t,options:a||{}}))}}),e.descriptors=n,e.id=this._cacheId,n},_invalidate:function(t){delete t.$plugins}},He={constructors:{},defaults:{},registerScaleType:function(t,e,i){this.constructors[t]=e,this.defaults[t]=ut.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?ut.merge({},[st.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=ut.extend(this.defaults[t],e))},addScalesToLayout:function(t){ut.each(t.scales,function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ke.addBox(t,e)})}},je=ut.valueOrDefault;st._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ut.noop,title:function(t,e){var i="",n=e.labels,a=n?n.length:0;if(t.length>0){var o=t[0];o.label?i=o.label:o.xLabel?i=o.xLabel:a>0&&o.index<a&&(i=n[o.index])}return i},afterTitle:ut.noop,beforeBody:ut.noop,beforeLabel:ut.noop,label:function(t,e){var i=e.datasets[t.datasetIndex].label||"";return i&&(i+=": "),ut.isNullOrUndef(t.value)?i+=t.yLabel:i+=t.value,i},labelColor:function(t,e){var i=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:i.borderColor,backgroundColor:i.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ut.noop,afterBody:ut.noop,beforeFooter:ut.noop,footer:ut.noop,afterFooter:ut.noop}}});var qe={average:function(t){if(!t.length)return!1;var e,i,n=0,a=0,o=0;for(e=0,i=t.length;e<i;++e){var r=t[e];if(r&&r.hasValue()){var s=r.tooltipPosition();n+=s.x,a+=s.y,++o}}return{x:n/o,y:a/o}},nearest:function(t,e){var i,n,a,o=e.x,r=e.y,s=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i<n;++i){var l=t[i];if(l&&l.hasValue()){var d=l.getCenterPoint(),u=ut.distanceBetweenPoints(e,d);u<s&&(s=u,a=l)}}if(a){var h=a.tooltipPosition();o=h.x,r=h.y}return{x:o,y:r}}};function Ye(t,e){return e&&(ut.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Ue(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Xe(t){var e=st.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:je(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:je(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:je(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:je(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:je(t.titleFontStyle,e.defaultFontStyle),titleFontSize:je(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:je(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:je(t.footerFontStyle,e.defaultFontStyle),footerFontSize:je(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function Ke(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Ge(t){return Ye([],Ue(t))}var Ze=pt.extend({initialize:function(){this._model=Xe(this._options),this._lastActive=[]},getTitle:function(){var t=this._options.callbacks,e=t.beforeTitle.apply(this,arguments),i=t.title.apply(this,arguments),n=t.afterTitle.apply(this,arguments),a=[];return a=Ye(a,Ue(e)),a=Ye(a,Ue(i)),a=Ye(a,Ue(n))},getBeforeBody:function(){return Ge(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var i=this,n=i._options.callbacks,a=[];return ut.each(t,function(t){var o={before:[],lines:[],after:[]};Ye(o.before,Ue(n.beforeLabel.call(i,t,e))),Ye(o.lines,n.label.call(i,t,e)),Ye(o.after,Ue(n.afterLabel.call(i,t,e))),a.push(o)}),a},getAfterBody:function(){return Ge(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this._options.callbacks,e=t.beforeFooter.apply(this,arguments),i=t.footer.apply(this,arguments),n=t.afterFooter.apply(this,arguments),a=[];return a=Ye(a,Ue(e)),a=Ye(a,Ue(i)),a=Ye(a,Ue(n))},update:function(t){var e,i,n,a,o,r,s,l,d,u,h=this,c=h._options,f=h._model,g=h._model=Xe(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var k=[],w=[];y=qe[c.position].call(h,p,h._eventPosition);var M=[];for(e=0,i=p.length;e<i;++e)M.push((n=p[e],a=void 0,o=void 0,r=void 0,s=void 0,l=void 0,d=void 0,u=void 0,a=n._xScale,o=n._yScale||n._scale,r=n._index,s=n._datasetIndex,l=n._chart.getDatasetMeta(s).controller,d=l._getIndexScale(),u=l._getValueScale(),{xLabel:a?a.getLabelForIndex(r,s):"",yLabel:o?o.getLabelForIndex(r,s):"",label:d?""+d.getLabelForIndex(r,s):"",value:u?""+u.getLabelForIndex(r,s):"",index:r,datasetIndex:s,x:n._model.x,y:n._model.y}));c.filter&&(M=M.filter(function(t){return c.filter(t,m)})),c.itemSort&&(M=M.sort(function(t,e){return c.itemSort(t,e,m)})),ut.each(M,function(t){k.push(c.callbacks.labelColor.call(h,t,h._chart)),w.push(c.callbacks.labelTextColor.call(h,t,h._chart))}),g.title=h.getTitle(M,m),g.beforeBody=h.getBeforeBody(M,m),g.body=h.getBody(M,m),g.afterBody=h.getAfterBody(M,m),g.footer=h.getFooter(M,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=k,g.labelTextColors=w,g.dataPoints=M,x=function(t,e){var i=t._chart.ctx,n=2*e.yPadding,a=0,o=e.body,r=o.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);r+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,d=e.titleFontSize,u=e.bodyFontSize,h=e.footerFontSize;n+=s*d,n+=s?(s-1)*e.titleSpacing:0,n+=s?e.titleMarginBottom:0,n+=r*u,n+=r?(r-1)*e.bodySpacing:0,n+=l?e.footerMarginTop:0,n+=l*h,n+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,i.measureText(t).width+c)};return i.font=ut.fontString(d,e._titleFontStyle,e._titleFontFamily),ut.each(e.title,f),i.font=ut.fontString(u,e._bodyFontStyle,e._bodyFontFamily),ut.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?u+2:0,ut.each(o,function(t){ut.each(t.before,f),ut.each(t.lines,f),ut.each(t.after,f)}),c=0,i.font=ut.fontString(h,e._footerFontStyle,e._footerFontFamily),ut.each(e.footer,f),{width:a+=2*e.xPadding,height:n}}(this,g),b=function(t,e,i,n){var a=t.x,o=t.y,r=t.caretSize,s=t.caretPadding,l=t.cornerRadius,d=i.xAlign,u=i.yAlign,h=r+s,c=l+s;return"right"===d?a-=e.width:"center"===d&&((a-=e.width/2)+e.width>n.width&&(a=n.width-e.width),a<0&&(a=0)),"top"===u?o+=h:o-="bottom"===u?e.height+h:e.height/2,"center"===u?"left"===d?a+=h:"right"===d&&(a-=h):"left"===d?a-=c:"right"===d&&(a+=c),{x:a,y:o}}(g,x,v=function(t,e){var i,n,a,o,r,s=t._model,l=t._chart,d=t._chart.chartArea,u="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(d.left+d.right)/2,f=(d.top+d.bottom)/2;"center"===h?(i=function(t){return t<=c},n=function(t){return t>c}):(i=function(t){return t<=e.width/2},n=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},o=function(t){return t-e.width-s.caretSize-s.caretPadding<0},r=function(t){return t<=f?"top":"bottom"},i(s.x)?(u="left",a(s.x)&&(u="center",h=r(s.y))):n(s.x)&&(u="right",o(s.x)&&(u="center",h=r(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:u,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var i=this._chart.ctx,n=this._view,a=this.getCaretPosition(t,e,n);i.lineTo(a.x1,a.y1),i.lineTo(a.x2,a.y2),i.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,i){var n,a,o,r,s,l,d=i.caretSize,u=i.cornerRadius,h=i.xAlign,c=i.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(n=f)-d,o=n,r=s+d,l=s-d):(a=(n=f+p)+d,o=n,r=s-d,l=s+d);else if("left"===h?(n=(a=f+u+d)-d,o=a+d):"right"===h?(n=(a=f+p-u-d)-d,o=a+d):(n=(a=i.caretX)-d,o=a+d),"top"===c)s=(r=g)-d,l=r;else{s=(r=g+m)+d,l=r;var v=o;o=n,n=v}return{x1:n,x2:a,x3:o,y1:r,y2:s,y3:l}},drawTitle:function(t,e,i){var n=e.title;if(n.length){t.x=Ke(e,e._titleAlign),i.textAlign=e._titleAlign,i.textBaseline="top";var a,o,r=e.titleFontSize,s=e.titleSpacing;for(i.fillStyle=e.titleFontColor,i.font=ut.fontString(r,e._titleFontStyle,e._titleFontFamily),a=0,o=n.length;a<o;++a)i.fillText(n[a],t.x,t.y),t.y+=r+s,a+1===n.length&&(t.y+=e.titleMarginBottom-s)}},drawBody:function(t,e,i){var n,a=e.bodyFontSize,o=e.bodySpacing,r=e._bodyAlign,s=e.body,l=e.displayColors,d=e.labelColors,u=0,h=l?Ke(e,"left"):0;i.textAlign=r,i.textBaseline="top",i.font=ut.fontString(a,e._bodyFontStyle,e._bodyFontFamily),t.x=Ke(e,r);var c=function(e){i.fillText(e,t.x+u,t.y),t.y+=a+o};i.fillStyle=e.bodyFontColor,ut.each(e.beforeBody,c),u=l&&"right"!==r?"center"===r?a/2+1:a+2:0,ut.each(s,function(o,r){n=e.labelTextColors[r],i.fillStyle=n,ut.each(o.before,c),ut.each(o.lines,function(o){l&&(i.fillStyle=e.legendColorBackground,i.fillRect(h,t.y,a,a),i.lineWidth=1,i.strokeStyle=d[r].borderColor,i.strokeRect(h,t.y,a,a),i.fillStyle=d[r].backgroundColor,i.fillRect(h+1,t.y+1,a-2,a-2),i.fillStyle=n),c(o)}),ut.each(o.after,c)}),u=0,ut.each(e.afterBody,c),t.y-=o},drawFooter:function(t,e,i){var n=e.footer;n.length&&(t.x=Ke(e,e._footerAlign),t.y+=e.footerMarginTop,i.textAlign=e._footerAlign,i.textBaseline="top",i.fillStyle=e.footerFontColor,i.font=ut.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),ut.each(n,function(n){i.fillText(n,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing}))},drawBackground:function(t,e,i,n){i.fillStyle=e.backgroundColor,i.strokeStyle=e.borderColor,i.lineWidth=e.borderWidth;var a=e.xAlign,o=e.yAlign,r=t.x,s=t.y,l=n.width,d=n.height,u=e.cornerRadius;i.beginPath(),i.moveTo(r+u,s),"top"===o&&this.drawCaret(t,n),i.lineTo(r+l-u,s),i.quadraticCurveTo(r+l,s,r+l,s+u),"center"===o&&"right"===a&&this.drawCaret(t,n),i.lineTo(r+l,s+d-u),i.quadraticCurveTo(r+l,s+d,r+l-u,s+d),"bottom"===o&&this.drawCaret(t,n),i.lineTo(r+u,s+d),i.quadraticCurveTo(r,s+d,r,s+d-u),"center"===o&&"left"===a&&this.drawCaret(t,n),i.lineTo(r,s+u),i.quadraticCurveTo(r,s,r+u,s),i.closePath(),i.fill(),e.borderWidth>0&&i.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i={width:e.width,height:e.height},n={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(t.save(),t.globalAlpha=a,this.drawBackground(n,e,t,i),n.y+=e.yPadding,this.drawTitle(n,e,t),this.drawBody(n,e,t),this.drawFooter(n,e,t),t.restore())}},handleEvent:function(t){var e,i=this,n=i._options;return i._lastActive=i._lastActive||[],"mouseout"===t.type?i._active=[]:i._active=i._chart.getElementsAtEventForMode(t,n.mode,n),(e=!ut.arrayEquals(i._active,i._lastActive))&&(i._lastActive=i._active,(n.enabled||n.custom)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0),i.pivot())),e}}),$e=qe,Je=Ze;Je.positioners=$e;var Qe=ut.valueOrDefault;function ti(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,i,n){if("xAxes"===t||"yAxes"===t){var a,o,r,s=i[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)r=i[t][a],o=Qe(r.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||r.type&&r.type!==e[t][a].type?ut.merge(e[t][a],[He.getScaleDefaults(o),r]):ut.merge(e[t][a],r)}else ut._merger(t,e,i,n)}})}function ei(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,i,n){var a=e[t]||{},o=i[t];"scales"===t?e[t]=ti(a,o):"scale"===t?e[t]=ut.merge(a,[He.getScaleDefaults(o.type),o]):ut._merger(t,e,i,n)}})}function ii(t){return"top"===t||"bottom"===t}st._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var ni=function(t,e){return this.construct(t,e),this};ut.extend(ni.prototype,{construct:function(t,e){var i=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=ei(st.global,st[t.type],t.options||{}),t}(e);var n=Ve.acquireContext(t,e),a=n&&n.canvas,o=a&&a.height,r=a&&a.width;i.id=ut.uid(),i.ctx=n,i.canvas=a,i.config=e,i.width=r,i.height=o,i.aspectRatio=o?r/o:null,i.options=e.options,i._bufferedRender=!1,i.chart=i,i.controller=i,ni.instances[i.id]=i,Object.defineProperty(i,"data",{get:function(){return i.config.data},set:function(t){i.config.data=t}}),n&&a?(i.initialize(),i.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Ee.notify(t,"beforeInit"),ut.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),Ee.notify(t,"afterInit"),t},clear:function(){return ut.canvas.clear(this),this},stop:function(){return bt.cancelAnimation(this),this},resize:function(t){var e=this,i=e.options,n=e.canvas,a=i.maintainAspectRatio&&e.aspectRatio||null,o=Math.max(0,Math.floor(ut.getMaximumWidth(n))),r=Math.max(0,Math.floor(a?o/a:ut.getMaximumHeight(n)));if((e.width!==o||e.height!==r)&&(n.width=e.width=o,n.height=e.height=r,n.style.width=o+"px",n.style.height=r+"px",ut.retinaScale(e,i.devicePixelRatio),!t)){var s={width:o,height:r};Ee.notify(e,"resize",[s]),i.onResize&&i.onResize(e,s),e.stop(),e.update({duration:i.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},i=t.scale;ut.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),ut.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),i&&(i.id=i.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,i=t.scales||{},n=[],a=Object.keys(i).reduce(function(t,e){return t[e]=!1,t},{});e.scales&&(n=n.concat((e.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(e.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),e.scale&&n.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ut.each(n,function(e){var n=e.options,o=n.id,r=Qe(n.type,e.dtype);ii(n.position)!==ii(e.dposition)&&(n.position=e.dposition),a[o]=!0;var s=null;if(o in i&&i[o].type===r)(s=i[o]).options=n,s.ctx=t.ctx,s.chart=t;else{var l=He.getScaleConstructor(r);if(!l)return;s=new l({id:o,type:r,options:n,ctx:t.ctx,chart:t}),i[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)}),ut.each(a,function(t,e){t||delete i[e]}),t.scales=i,He.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return ut.each(t.data.datasets,function(i,n){var a=t.getDatasetMeta(n),o=i.type||t.config.type;if(a.type&&a.type!==o&&(t.destroyDatasetMeta(n),a=t.getDatasetMeta(n)),a.type=o,a.controller)a.controller.updateIndex(n),a.controller.linkScales();else{var r=ue[a.type];if(void 0===r)throw new Error('"'+a.type+'" is not a chart type.');a.controller=new r(t,n),e.push(a.controller)}},t),e},resetElements:function(){var t=this;ut.each(t.data.datasets,function(e,i){t.getDatasetMeta(i).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,i,n=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),i=(e=n).options,ut.each(e.scales,function(t){ke.removeBox(e,t)}),i=ei(st.global,st[e.config.type],i),e.options=e.config.options=i,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=i.tooltips,e.tooltip.initialize(),Ee._invalidate(n),!1!==Ee.notify(n,"beforeUpdate")){n.tooltip._data=n.data;var a=n.buildOrUpdateControllers();ut.each(n.data.datasets,function(t,e){n.getDatasetMeta(e).controller.buildOrUpdateElements()},n),n.updateLayout(),n.options.animation&&n.options.animation.duration&&ut.each(a,function(t){t.reset()}),n.updateDatasets(),n.tooltip.initialize(),n.lastActive=[],Ee.notify(n,"afterUpdate"),n._bufferedRender?n._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:n.render(t)}},updateLayout:function(){!1!==Ee.notify(this,"beforeLayout")&&(ke.update(this,this.width,this.height),Ee.notify(this,"afterScaleUpdate"),Ee.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==Ee.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Ee.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),i={meta:e,index:t};!1!==Ee.notify(this,"beforeDatasetUpdate",[i])&&(e.controller.update(),Ee.notify(this,"afterDatasetUpdate",[i]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var i=e.options.animation,n=Qe(t.duration,i&&i.duration),a=t.lazy;if(!1!==Ee.notify(e,"beforeRender")){var o=function(t){Ee.notify(e,"afterRender"),ut.callback(i&&i.onComplete,[t],e)};if(i&&n){var r=new vt({numSteps:n/16.66,easing:t.easing||i.easing,render:function(t,e){var i=ut.easing.effects[e.easing],n=e.currentStep,a=n/e.numSteps;t.draw(i(a),a,n)},onAnimationProgress:i.onProgress,onAnimationComplete:o});bt.addAnimation(e,r,n,a)}else e.draw(),o(new vt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),ut.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==Ee.notify(e,"beforeDraw",[t])&&(ut.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.drawDatasets(t),e._drawTooltip(t),Ee.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,i=(this.data.datasets||[]).length;e<i;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==Ee.notify(e,"beforeDatasetsDraw",[t])){for(var i=(e.data.datasets||[]).length-1;i>=0;--i)e.isDatasetVisible(i)&&e.drawDataset(i,t);Ee.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var i=this.getDatasetMeta(t),n={meta:i,index:t,easingValue:e};!1!==Ee.notify(this,"beforeDatasetDraw",[n])&&(i.controller.draw(e),Ee.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,i={tooltip:e,easingValue:t};!1!==Ee.notify(this,"beforeTooltipDraw",[i])&&(e.draw(),Ee.notify(this,"afterTooltipDraw",[i]))},getElementAtEvent:function(t){return ve.modes.single(this,t)},getElementsAtEvent:function(t){return ve.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return ve.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,i){var n=ve.modes[e];return"function"==typeof n?n(this,t,i):[]},getDatasetAtEvent:function(t){return ve.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var i=e._meta[this.id];return i||(i=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,i=this.data.datasets.length;e<i;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,i=this.data.datasets[t],n=i._meta&&i._meta[e];n&&(n.controller.destroy(),delete i._meta[e])},destroy:function(){var t,e,i=this,n=i.canvas;for(i.stop(),t=0,e=i.data.datasets.length;t<e;++t)i.destroyDatasetMeta(t);n&&(i.unbindEvents(),ut.canvas.clear(i),Ve.releaseContext(i.ctx),i.canvas=null,i.ctx=null),Ee.notify(i,"destroy"),delete ni.instances[i.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Je({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},i=function(){t.eventHandler.apply(t,arguments)};ut.each(t.options.events,function(n){Ve.addEventListener(t,n,i),e[n]=i}),t.options.responsive&&(i=function(){t.resize()},Ve.addEventListener(t,"resize",i),e.resize=i)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,ut.each(e,function(e,i){Ve.removeEventListener(t,i,e)}))},updateHoverStyle:function(t,e,i){var n,a,o,r=i?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)(n=t[a])&&this.getDatasetMeta(n._datasetIndex).controller[r](n)},eventHandler:function(t){var e=this,i=e.tooltip;if(!1!==Ee.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var n=e.handleEvent(t);i&&(n=i._start?i.handleEvent(t):n|i.handleEvent(t)),Ee.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):n&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,i=this,n=i.options||{},a=n.hover;return i.lastActive=i.lastActive||[],"mouseout"===t.type?i.active=[]:i.active=i.getElementsAtEventForMode(t,a.mode,a),ut.callback(n.onHover||n.hover.onHover,[t.native,i.active],i),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(i,t.native,i.active),i.lastActive.length&&i.updateHoverStyle(i.lastActive,a.mode,!1),i.active.length&&a.mode&&i.updateHoverStyle(i.active,a.mode,!0),e=!ut.arrayEquals(i.active,i.lastActive),i.lastActive=i.active,e}}),ni.instances={};var ai=ni;ni.Controller=ni,ni.types={},ut.configMerge=ei,ut.scaleMerge=ti;function oi(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function ri(t){this.options=t||{}}ut.extend(ri.prototype,{formats:oi,parse:oi,format:oi,add:oi,diff:oi,startOf:oi,endOf:oi,_create:function(t){return t}}),ri.override=function(t){ut.extend(ri.prototype,t)};var si={_date:ri},li={formatters:{values:function(t){return ut.isArray(t)?t:""+t},linear:function(t,e,i){var n=i.length>3?i[2]-i[1]:i[1]-i[0];Math.abs(n)>1&&t!==Math.floor(t)&&(n=t-Math.floor(t));var a=ut.log10(Math.abs(n)),o="";if(0!==t)if(Math.max(Math.abs(i[0]),Math.abs(i[i.length-1]))<1e-4){var r=ut.log10(Math.abs(t));o=t.toExponential(Math.floor(r)-Math.floor(a))}else{var s=-1*Math.floor(a);s=Math.max(Math.min(s,20),0),o=t.toFixed(s)}else o="0";return o},logarithmic:function(t,e,i){var n=t/Math.pow(10,Math.floor(ut.log10(t)));return 0===t?"0":1===n||2===n||5===n||0===e||e===i.length-1?t.toExponential():""}}},di=ut.valueOrDefault,ui=ut.valueAtIndexOrDefault;function hi(t){var e,i,n=[];for(e=0,i=t.length;e<i;++e)n.push(t[e].label);return n}function ci(t,e,i){return ut.isArray(e)?ut.longestText(t,i,e):t.measureText(e).width}st._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:li.formatters.values,minor:{},major:{}}});var fi=pt.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){ut.callback(this.options.beforeUpdate,[this])},update:function(t,e,i){var n,a,o,r,s,l,d=this;for(d.beforeUpdate(),d.maxWidth=t,d.maxHeight=e,d.margins=ut.extend({left:0,right:0,top:0,bottom:0},i),d._maxLabelLines=0,d.longestLabelWidth=0,d.longestTextCache=d.longestTextCache||{},d.beforeSetDimensions(),d.setDimensions(),d.afterSetDimensions(),d.beforeDataLimits(),d.determineDataLimits(),d.afterDataLimits(),d.beforeBuildTicks(),s=d.buildTicks()||[],s=d.afterBuildTicks(s)||s,d.beforeTickToLabelConversion(),o=d.convertTicksToLabels(s)||d.ticks,d.afterTickToLabelConversion(),d.ticks=o,n=0,a=o.length;n<a;++n)r=o[n],(l=s[n])?l.label=r:s.push(l={label:r,major:!1});return d._ticks=s,d.beforeCalculateTickRotation(),d.calculateTickRotation(),d.afterCalculateTickRotation(),d.beforeFit(),d.fit(),d.afterFit(),d.afterUpdate(),d.minSize},afterUpdate:function(){ut.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ut.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){ut.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ut.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ut.noop,afterDataLimits:function(){ut.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ut.callback(this.options.beforeBuildTicks,[this])},buildTicks:ut.noop,afterBuildTicks:function(t){var e=this;return ut.isArray(t)&&t.length?ut.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=ut.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){ut.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){ut.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ut.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,i=t.options.ticks,n=hi(t._ticks),a=ut.options._parseFont(i);e.font=a.string;var o=i.minRotation||0;if(n.length&&t.options.display&&t.isHorizontal())for(var r,s=ut.longestText(e,a.string,n,t.longestTextCache),l=s,d=t.getPixelForTick(1)-t.getPixelForTick(0)-6;l>d&&o<i.maxRotation;){var u=ut.toRadians(o);if(r=Math.cos(u),Math.sin(u)*s>t.maxHeight){o--;break}o++,l=r*s}t.labelRotation=o},afterCalculateTickRotation:function(){ut.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ut.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},i=hi(t._ticks),n=t.options,a=n.ticks,o=n.scaleLabel,r=n.gridLines,s=t._isVisible(),l=n.position,d=t.isHorizontal(),u=ut.options._parseFont,h=u(a),c=n.gridLines.tickMarkLength;if(e.width=d?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:s&&r.drawTicks?c:0,e.height=d?s&&r.drawTicks?c:0:t.maxHeight,o.display&&s){var f=u(o),g=ut.options.toPadding(o.padding),p=f.lineHeight+g.height;d?e.height+=p:e.width+=p}if(a.display&&s){var m=ut.longestText(t.ctx,h.string,i,t.longestTextCache),v=ut.numberOfLabelLines(i),b=.5*h.size,x=t.options.ticks.padding;if(t._maxLabelLines=v,t.longestLabelWidth=m,d){var y=ut.toRadians(t.labelRotation),k=Math.cos(y),w=Math.sin(y)*m+h.lineHeight*v+b;e.height=Math.min(t.maxHeight,e.height+w+x),t.ctx.font=h.string;var M,_,C=ci(t.ctx,i[0],h.string),S=ci(t.ctx,i[i.length-1],h.string),P=t.getPixelForTick(0)-t.left,I=t.right-t.getPixelForTick(i.length-1);0!==t.labelRotation?(M="bottom"===l?k*C:k*b,_="bottom"===l?k*b:k*S):(M=C/2,_=S/2),t.paddingLeft=Math.max(M-P,0)+3,t.paddingRight=Math.max(_-I,0)+3}else a.mirror?m=0:m+=x+b,e.width=Math.min(t.maxWidth,e.width+m),t.paddingTop=h.size/2,t.paddingBottom=h.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){ut.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ut.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:ut.noop,getPixelForValue:ut.noop,getValueForPixel:ut.noop,getPixelForTick:function(t){var e=this,i=e.options.offset;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(i?0:1),1),a=n*t+e.paddingLeft;i&&(a+=n/2);var o=e.left+a;return o+=e.isFullWidth()?e.margins.left:0}var r=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,n=e.left+i;return n+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,i,n=this,a=n.isHorizontal(),o=n.options.ticks.minor,r=t.length,s=!1,l=o.maxTicksLimit,d=n._tickSize()*(r-1),u=a?n.width-(n.paddingLeft+n.paddingRight):n.height-(n.paddingTop+n.PaddingBottom),h=[];for(d>u&&(s=1+Math.floor(d/u)),r>l&&(s=Math.max(s,1+Math.floor(r/l))),e=0;e<r;e++)i=t[e],s>1&&e%s>0&&delete i.label,h.push(i);return h},_tickSize:function(){var t=this,e=t.isHorizontal(),i=t.options.ticks.minor,n=ut.toRadians(t.labelRotation),a=Math.abs(Math.cos(n)),o=Math.abs(Math.sin(n)),r=i.autoSkipPadding||0,s=t.longestLabelWidth+r||0,l=ut.options._parseFont(i),d=t._maxLabelLines*l.lineHeight+r||0;return e?d*a>s*o?s/a:d/o:d*o<s*a?d/a:s/o},_isVisible:function(){var t,e,i,n=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=n.data.datasets.length;t<e;++t)if(n.isDatasetVisible(t)&&((i=n.getDatasetMeta(t)).xAxisID===this.id||i.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,i=e.options;if(e._isVisible()){var n,a,o,r=e.chart,s=e.ctx,l=st.global.defaultFontColor,d=i.ticks.minor,u=i.ticks.major||d,h=i.gridLines,c=i.scaleLabel,f=i.position,g=0!==e.labelRotation,p=d.mirror,m=e.isHorizontal(),v=ut.options._parseFont,b=d.display&&d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),x=di(d.fontColor,l),y=v(d),k=y.lineHeight,w=di(u.fontColor,l),M=v(u),_=d.padding,C=d.labelOffset,S=h.drawTicks?h.tickMarkLength:0,P=di(c.fontColor,l),I=v(c),A=ut.options.toPadding(c.padding),D=ut.toRadians(e.labelRotation),T=[],F=h.drawBorder?ui(h.lineWidth,0,0):0,L=ut._alignPixel;"top"===f?(n=L(r,e.bottom,F),a=e.bottom-S,o=n-F/2):"bottom"===f?(n=L(r,e.top,F),a=n+F/2,o=e.top+S):"left"===f?(n=L(r,e.right,F),a=e.right-S,o=n-F/2):(n=L(r,e.left,F),a=n+F/2,o=e.left+S);if(ut.each(b,function(n,s){if(!ut.isNullOrUndef(n.label)){var l,d,u,c,v,b,x,y,w,M,P,I,A,R,O,z,B=n.label;s===e.zeroLineIndex&&i.offset===h.offsetGridLines?(l=h.zeroLineWidth,d=h.zeroLineColor,u=h.zeroLineBorderDash||[],c=h.zeroLineBorderDashOffset||0):(l=ui(h.lineWidth,s),d=ui(h.color,s),u=h.borderDash||[],c=h.borderDashOffset||0);var N=ut.isArray(B)?B.length:1,W=function(t,e,i){var n=t.getPixelForTick(e);return i&&(1===t.getTicks().length?n-=t.isHorizontal()?Math.max(n-t.left,t.right-n):Math.max(n-t.top,t.bottom-n):n-=0===e?(t.getPixelForTick(1)-n)/2:(n-t.getPixelForTick(e-1))/2),n}(e,s,h.offsetGridLines);if(m){var V=S+_;W<e.left-1e-7&&(d="rgba(0,0,0,0)"),v=x=w=P=L(r,W,l),b=a,y=o,A=e.getPixelForTick(s)+C,"top"===f?(M=L(r,t.top,F)+F/2,I=t.bottom,O=((g?1:.5)-N)*k,z=g?"left":"center",R=e.bottom-V):(M=t.top,I=L(r,t.bottom,F)-F/2,O=(g?0:.5)*k,z=g?"right":"center",R=e.top+V)}else{var E=(p?0:S)+_;W<e.top-1e-7&&(d="rgba(0,0,0,0)"),v=a,x=o,b=y=M=I=L(r,W,l),R=e.getPixelForTick(s)+C,O=(1-N)*k/2,"left"===f?(w=L(r,t.left,F)+F/2,P=t.right,z=p?"left":"right",A=e.right-E):(w=t.left,P=L(r,t.right,F)-F/2,z=p?"right":"left",A=e.left+E)}T.push({tx1:v,ty1:b,tx2:x,ty2:y,x1:w,y1:M,x2:P,y2:I,labelX:A,labelY:R,glWidth:l,glColor:d,glBorderDash:u,glBorderDashOffset:c,rotation:-1*D,label:B,major:n.major,textOffset:O,textAlign:z})}}),ut.each(T,function(t){var e=t.glWidth,i=t.glColor;if(h.display&&e&&i&&(s.save(),s.lineWidth=e,s.strokeStyle=i,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),h.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),d.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=t.major?M.string:y.string,s.fillStyle=t.major?w:x,s.textBaseline="middle",s.textAlign=t.textAlign;var n=t.label,a=t.textOffset;if(ut.isArray(n))for(var o=0;o<n.length;++o)s.fillText(""+n[o],0,a),a+=k;else s.fillText(n,0,a);s.restore()}}),c.display){var R,O,z=0,B=I.lineHeight/2;if(m)R=e.left+(e.right-e.left)/2,O="bottom"===f?e.bottom-B-A.bottom:e.top+B+A.top;else{var N="left"===f;R=N?e.left+B+A.top:e.right-B-A.top,O=e.top+(e.bottom-e.top)/2,z=N?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(R,O),s.rotate(z),s.textAlign="center",s.textBaseline="middle",s.fillStyle=P,s.font=I.string,s.fillText(c.labelString,0,0),s.restore()}if(F){var W,V,E,H,j=F,q=ui(h.lineWidth,b.length-1,0);m?(W=L(r,e.left,j)-j/2,V=L(r,e.right,q)+q/2,E=H=n):(E=L(r,e.top,j)-j/2,H=L(r,e.bottom,q)+q/2,W=V=n),s.lineWidth=F,s.strokeStyle=ui(h.color,0),s.beginPath(),s.moveTo(W,E),s.lineTo(V,H),s.stroke()}}}}),gi=fi.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,i=e.getLabels();e.minIndex=0,e.maxIndex=i.length-1,void 0!==e.options.ticks.min&&(t=i.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=i.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=i[e.minIndex],e.max=i[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var i=this,n=i.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===i.id?i.getRightValue(n.data.datasets[e].data[t]):i.ticks[t-i.minIndex]},getPixelForValue:function(t,e){var i,n=this,a=n.options.offset,o=Math.max(n.maxIndex+1-n.minIndex-(a?0:1),1);if(null!=t&&(i=n.isHorizontal()?t.x:t.y),void 0!==i||void 0!==t&&isNaN(e)){t=i||t;var r=n.getLabels().indexOf(t);e=-1!==r?r:e}if(n.isHorizontal()){var s=n.width/o,l=s*(e-n.minIndex);return a&&(l+=s/2),n.left+l}var d=n.height/o,u=d*(e-n.minIndex);return a&&(u+=d/2),n.top+u},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,i=e.options.offset,n=Math.max(e._ticks.length-(i?0:1),1),a=e.isHorizontal(),o=(a?e.width:e.height)/n;return t-=a?e.left:e.top,i&&(t-=o/2),(t<=0?0:Math.round(t/o))+e.minIndex},getBasePixel:function(){return this.bottom}}),pi={position:"bottom"};gi._defaults=pi;var mi=ut.noop,vi=ut.isNullOrUndef;var bi=fi.extend({getRightValue:function(t){return"string"==typeof t?+t:fi.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var i=ut.sign(t.min),n=ut.sign(t.max);i<0&&n<0?t.max=0:i>0&&n>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,o=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==o&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,i=e.stepSize,n=e.maxTicksLimit;return i?t=Math.ceil(this.max/i)-Math.floor(this.min/i)+1:(t=this._computeTickLimit(),n=n||11),n&&(t=Math.min(n,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:mi,buildTicks:function(){var t=this,e=t.options.ticks,i=t.getTickLimit(),n={maxTicks:i=Math.max(2,i),min:e.min,max:e.max,precision:e.precision,stepSize:ut.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var i,n,a,o,r=[],s=t.stepSize,l=s||1,d=t.maxTicks-1,u=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=ut.niceNum((g-f)/d/l)*l;if(p<1e-14&&vi(u)&&vi(h))return[f,g];(o=Math.ceil(g/p)-Math.floor(f/p))>d&&(p=ut.niceNum(o*p/d/l)*l),s||vi(c)?i=Math.pow(10,ut._decimalPlaces(p)):(i=Math.pow(10,c),p=Math.ceil(p*i)/i),n=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!vi(u)&&ut.almostWhole(u/p,p/1e3)&&(n=u),!vi(h)&&ut.almostWhole(h/p,p/1e3)&&(a=h)),o=(a-n)/p,o=ut.almostEquals(o,Math.round(o),p/1e3)?Math.round(o):Math.ceil(o),n=Math.round(n*i)/i,a=Math.round(a*i)/i,r.push(vi(u)?n:u);for(var m=1;m<o;++m)r.push(Math.round((n+m*p)*i)/i);return r.push(vi(h)?a:h),r}(n,t);t.handleDirectionalChanges(),t.max=ut.max(a),t.min=ut.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),fi.prototype.convertTicksToLabels.call(t)}}),xi={position:"left",ticks:{callback:li.formatters.linear}},yi=bi.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,a=t.isHorizontal();function o(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var r=e.stacked;if(void 0===r&&ut.each(n,function(t,e){if(!r){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&&o(n)&&void 0!==n.stack&&(r=!0)}}),e.stacked||r){var s={};ut.each(n,function(n,a){var r=i.getDatasetMeta(a),l=[r.type,void 0===e.stacked&&void 0===r.stack?a:"",r.stack].join(".");void 0===s[l]&&(s[l]={positiveValues:[],negativeValues:[]});var d=s[l].positiveValues,u=s[l].negativeValues;i.isDatasetVisible(a)&&o(r)&&ut.each(n.data,function(i,n){var a=+t.getRightValue(i);isNaN(a)||r.data[n].hidden||(d[n]=d[n]||0,u[n]=u[n]||0,e.relativePoints?d[n]=100:a<0?u[n]+=a:d[n]+=a)})}),ut.each(s,function(e){var i=e.positiveValues.concat(e.negativeValues),n=ut.min(i),a=ut.max(i);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?a:Math.max(t.max,a)})}else ut.each(n,function(e,n){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&o(a)&&ut.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||a.data[i].hidden||(null===t.min?t.min=n:n<t.min&&(t.min=n),null===t.max?t.max=n:n>t.max&&(t.max=n))})});t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=ut.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,i=e.start,n=+e.getRightValue(t),a=e.end-i;return e.isHorizontal()?e.left+e.width/a*(n-i):e.bottom-e.height/a*(n-i)},getValueForPixel:function(t){var e=this,i=e.isHorizontal(),n=i?e.width:e.height,a=(i?t-e.left:e.bottom-t)/n;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}}),ki=xi;yi._defaults=ki;var wi=ut.valueOrDefault;var Mi={position:"left",ticks:{callback:li.formatters.logarithmic}};function _i(t,e){return ut.isFinite(t)&&t>=0?t:e}var Ci=fi.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,a=t.isHorizontal();function o(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var r=e.stacked;if(void 0===r&&ut.each(n,function(t,e){if(!r){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&&o(n)&&void 0!==n.stack&&(r=!0)}}),e.stacked||r){var s={};ut.each(n,function(n,a){var r=i.getDatasetMeta(a),l=[r.type,void 0===e.stacked&&void 0===r.stack?a:"",r.stack].join(".");i.isDatasetVisible(a)&&o(r)&&(void 0===s[l]&&(s[l]=[]),ut.each(n.data,function(e,i){var n=s[l],a=+t.getRightValue(e);isNaN(a)||r.data[i].hidden||a<0||(n[i]=n[i]||0,n[i]+=a)}))}),ut.each(s,function(e){if(e.length>0){var i=ut.min(e),n=ut.max(e);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?n:Math.max(t.max,n)}})}else ut.each(n,function(e,n){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&o(a)&&ut.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||a.data[i].hidden||n<0||(null===t.min?t.min=n:n<t.min&&(t.min=n),null===t.max?t.max=n:n>t.max&&(t.max=n),0!==n&&(null===t.minNotZero||n<t.minNotZero)&&(t.minNotZero=n))})});this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=_i(e.min,t.min),t.max=_i(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(ut.log10(t.min))-1),t.max=Math.pow(10,Math.floor(ut.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(ut.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(ut.log10(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(ut.log10(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,i=!t.isHorizontal(),n={min:_i(e.min),max:_i(e.max)},a=t.ticks=function(t,e){var i,n,a=[],o=wi(t.min,Math.pow(10,Math.floor(ut.log10(e.min)))),r=Math.floor(ut.log10(e.max)),s=Math.ceil(e.max/Math.pow(10,r));0===o?(i=Math.floor(ut.log10(e.minNotZero)),n=Math.floor(e.minNotZero/Math.pow(10,i)),a.push(o),o=n*Math.pow(10,i)):(i=Math.floor(ut.log10(o)),n=Math.floor(o/Math.pow(10,i)));var l=i<0?Math.pow(10,Math.abs(i)):1;do{a.push(o),10==++n&&(n=1,l=++i>=0?1:l),o=Math.round(n*Math.pow(10,i)*l)/l}while(i<r||i===r&&n<s);var d=wi(t.max,o);return a.push(d),a}(n,t);t.max=ut.max(a),t.min=ut.min(a),e.reverse?(i=!i,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),i&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),fi.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(ut.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,i,n,a,o,r=this,s=r.options.ticks,l=s.reverse,d=ut.log10,u=r._getFirstTickValue(r.minNotZero),h=0;return t=+r.getRightValue(t),l?(n=r.end,a=r.start,o=-1):(n=r.start,a=r.end,o=1),r.isHorizontal()?(e=r.width,i=l?r.right:r.left):(e=r.height,o*=-1,i=l?r.top:r.bottom),t!==n&&(0===n&&(e-=h=wi(s.fontSize,st.global.defaultFontSize),n=u),0!==t&&(h+=e/(d(a)-d(n))*(d(t)-d(n))),i+=o*h),i},getValueForPixel:function(t){var e,i,n,a,o=this,r=o.options.ticks,s=r.reverse,l=ut.log10,d=o._getFirstTickValue(o.minNotZero);if(s?(i=o.end,n=o.start):(i=o.start,n=o.end),o.isHorizontal()?(e=o.width,a=s?o.right-t:t-o.left):(e=o.height,a=s?t-o.top:o.bottom-t),a!==i){if(0===i){var u=wi(r.fontSize,st.global.defaultFontSize);a-=u,e-=u,i=d}a*=l(n)-l(i),a/=e,a=Math.pow(10,l(i)+a)}return a}}),Si=Mi;Ci._defaults=Si;var Pi=ut.valueOrDefault,Ii=ut.valueAtIndexOrDefault,Ai=ut.options.resolve,Di={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:li.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Ti(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function Fi(t){var e=t.ticks;return e.display&&t.display?Pi(e.fontSize,st.global.defaultFontSize)+2*e.backdropPaddingY:0}function Li(t,e,i,n,a){return t===n||t===a?{start:e-i/2,end:e+i/2}:t<n||t>a?{start:e-i,end:e}:{start:e,end:e+i}}function Ri(t){return 0===t||180===t?"center":t<180?"left":"right"}function Oi(t,e,i,n){var a,o,r=i.y+n/2;if(ut.isArray(e))for(a=0,o=e.length;a<o;++a)t.fillText(e[a],i.x,r),r+=n;else t.fillText(e,i.x,r)}function zi(t,e,i){90===t||270===t?i.y-=e.h/2:(t>270||t<90)&&(i.y-=e.h)}function Bi(t){return ut.isNumber(t)?t:0}var Ni=bi.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Fi(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,i=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY;ut.each(e.data.datasets,function(a,o){if(e.isDatasetVisible(o)){var r=e.getDatasetMeta(o);ut.each(a.data,function(e,a){var o=+t.getRightValue(e);isNaN(o)||r.data[a].hidden||(i=Math.min(o,i),n=Math.max(o,n))})}}),t.min=i===Number.POSITIVE_INFINITY?0:i,t.max=n===Number.NEGATIVE_INFINITY?0:n,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Fi(this.options))},convertTicksToLabels:function(){var t=this;bi.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,i,n,a=ut.options._parseFont(t.options.pointLabels),o={l:0,r:t.width,t:0,b:t.height-t.paddingTop},r={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,d,u=Ti(t);for(e=0;e<u;e++){n=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,d=t.pointLabels[e]||"",i=ut.isArray(d)?{w:ut.longestText(s,s.font,d),h:d.length*l}:{w:s.measureText(d).width,h:l},t._pointLabelSizes[e]=i;var h=t.getIndexAngle(e),c=ut.toDegrees(h)%360,f=Li(c,n.x,i.w,0,180),g=Li(c,n.y,i.h,90,270);f.start<o.l&&(o.l=f.start,r.l=h),f.end>o.r&&(o.r=f.end,r.r=h),g.start<o.t&&(o.t=g.start,r.t=h),g.end>o.b&&(o.b=g.end,r.b=h)}t.setReductions(t.drawingArea,o,r)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,i){var n=this,a=e.l/Math.sin(i.l),o=Math.max(e.r-n.width,0)/Math.sin(i.r),r=-e.t/Math.cos(i.t),s=-Math.max(e.b-(n.height-n.paddingTop),0)/Math.cos(i.b);a=Bi(a),o=Bi(o),r=Bi(r),s=Bi(s),n.drawingArea=Math.min(Math.floor(t-(a+o)/2),Math.floor(t-(r+s)/2)),n.setCenterPoint(a,o,r,s)},setCenterPoint:function(t,e,i,n){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,s=i+a.drawingArea,l=a.height-a.paddingTop-n-a.drawingArea;a.xCenter=Math.floor((r+o)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/Ti(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var i=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*i:(t-e.min)*i},getPointPosition:function(t,e){var i=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(i)*e+this.xCenter,y:Math.sin(i)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,i=e.gridLines,n=e.ticks;if(e.display){var a=t.ctx,o=this.getIndexAngle(0),r=ut.options._parseFont(n);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,i=t.options,n=i.angleLines,a=i.gridLines,o=i.pointLabels,r=Pi(n.lineWidth,a.lineWidth),s=Pi(n.color,a.color),l=Fi(i);e.save(),e.lineWidth=r,e.strokeStyle=s,e.setLineDash&&(e.setLineDash(Ai([n.borderDash,a.borderDash,[]])),e.lineDashOffset=Ai([n.borderDashOffset,a.borderDashOffset,0]));var d=t.getDistanceFromCenterForValue(i.ticks.reverse?t.min:t.max),u=ut.options._parseFont(o);e.font=u.string,e.textBaseline="middle";for(var h=Ti(t)-1;h>=0;h--){if(n.display&&r&&s){var c=t.getPointPosition(h,d);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(c.x,c.y),e.stroke()}if(o.display){var f=0===h?l/2:0,g=t.getPointPosition(h,d+f+5),p=Ii(o.fontColor,h,st.global.defaultFontColor);e.fillStyle=p;var m=t.getIndexAngle(h),v=ut.toDegrees(m);e.textAlign=Ri(v),zi(v,t._pointLabelSizes[h],g),Oi(e,t.pointLabels[h]||"",g,u.lineHeight)}}e.restore()}(t),ut.each(t.ticks,function(e,s){if(s>0||n.reverse){var l=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(i.display&&0!==s&&function(t,e,i,n){var a,o=t.ctx,r=e.circular,s=Ti(t),l=Ii(e.color,n-1),d=Ii(e.lineWidth,n-1);if((r||s)&&l&&d){if(o.save(),o.strokeStyle=l,o.lineWidth=d,o.setLineDash&&(o.setLineDash(e.borderDash||[]),o.lineDashOffset=e.borderDashOffset||0),o.beginPath(),r)o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI);else{a=t.getPointPosition(0,i),o.moveTo(a.x,a.y);for(var u=1;u<s;u++)a=t.getPointPosition(u,i),o.lineTo(a.x,a.y)}o.closePath(),o.stroke(),o.restore()}}(t,i,l,s),n.display){var d=Pi(n.fontColor,st.global.defaultFontColor);if(a.font=r.string,a.save(),a.translate(t.xCenter,t.yCenter),a.rotate(o),n.showLabelBackdrop){var u=a.measureText(e).width;a.fillStyle=n.backdropColor,a.fillRect(-u/2-n.backdropPaddingX,-l-r.size/2-n.backdropPaddingY,u+2*n.backdropPaddingX,r.size+2*n.backdropPaddingY)}a.textAlign="center",a.textBaseline="middle",a.fillStyle=d,a.fillText(e,0,-l),a.restore()}}})}}}),Wi=Di;Ni._defaults=Wi;var Vi=ut.valueOrDefault,Ei=Number.MIN_SAFE_INTEGER||-9007199254740991,Hi=Number.MAX_SAFE_INTEGER||9007199254740991,ji={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},qi=Object.keys(ji);function Yi(t,e){return t-e}function Ui(t){var e,i,n,a={},o=[];for(e=0,i=t.length;e<i;++e)a[n=t[e]]||(a[n]=!0,o.push(n));return o}function Xi(t,e,i,n){var a=function(t,e,i){for(var n,a,o,r=0,s=t.length-1;r>=0&&r<=s;){if(a=t[(n=r+s>>1)-1]||null,o=t[n],!a)return{lo:null,hi:o};if(o[e]<i)r=n+1;else{if(!(a[e]>i))return{lo:a,hi:o};s=n-1}}return{lo:o,hi:null}}(t,e,i),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],r=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=r[e]-o[e],l=s?(i-o[e])/s:0,d=(r[n]-o[n])*l;return o[n]+d}function Ki(t,e){var i=t._adapter,n=t.options.time,a=n.parser,o=a||n.format,r=e;return"function"==typeof a&&(r=a(r)),ut.isFinite(r)||(r="string"==typeof o?i.parse(r,o):i.parse(r)),null!==r?+r:(a||"function"!=typeof o||(r=o(e),ut.isFinite(r)||(r=i.parse(r))),r)}function Gi(t,e){if(ut.isNullOrUndef(e))return null;var i=t.options.time,n=Ki(t,t.getRightValue(e));return null===n?n:(i.round&&(n=+t._adapter.startOf(n,i.round)),n)}function Zi(t){for(var e=qi.indexOf(t)+1,i=qi.length;e<i;++e)if(ji[qi[e]].common)return qi[e]}function $i(t,e,i,n){var a,o=t._adapter,r=t.options,s=r.time,l=s.unit||function(t,e,i,n){var a,o,r,s=qi.length;for(a=qi.indexOf(t);a<s-1;++a)if(r=(o=ji[qi[a]]).steps?o.steps[o.steps.length-1]:Hi,o.common&&Math.ceil((i-e)/(r*o.size))<=n)return qi[a];return qi[s-1]}(s.minUnit,e,i,n),d=Zi(l),u=Vi(s.stepSize,s.unitStepSize),h="week"===l&&s.isoWeekday,c=r.ticks.major.enabled,f=ji[l],g=e,p=i,m=[];for(u||(u=function(t,e,i,n){var a,o,r,s=e-t,l=ji[i],d=l.size,u=l.steps;if(!u)return Math.ceil(s/(n*d));for(a=0,o=u.length;a<o&&(r=u[a],!(Math.ceil(s/(d*r))<=n));++a);return r}(e,i,l,n)),h&&(g=+o.startOf(g,"isoWeek",h),p=+o.startOf(p,"isoWeek",h)),g=+o.startOf(g,h?"day":l),(p=+o.startOf(p,h?"day":l))<i&&(p=+o.add(p,1,l)),a=g,c&&d&&!h&&!s.round&&(a=+o.startOf(a,d),a=+o.add(a,~~((g-a)/(f.size*u))*u,l));a<p;a=+o.add(a,u,l))m.push(+a);return m.push(+a),m}var Ji=fi.extend({initialize:function(){this.mergeTicksOptions(),fi.prototype.initialize.call(this)},update:function(){var t=this.options,e=t.time||(t.time={}),i=this._adapter=new si._date(t.adapters.date);return e.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),ut.mergeIf(e.displayFormats,i.formats()),fi.prototype.update.apply(this,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),fi.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,i,n,a,o,r=this,s=r.chart,l=r._adapter,d=r.options.time,u=d.unit||"day",h=Hi,c=Ei,f=[],g=[],p=[],m=s.data.labels||[];for(t=0,i=m.length;t<i;++t)p.push(Gi(r,m[t]));for(t=0,i=(s.data.datasets||[]).length;t<i;++t)if(s.isDatasetVisible(t))if(a=s.data.datasets[t].data,ut.isObject(a[0]))for(g[t]=[],e=0,n=a.length;e<n;++e)o=Gi(r,a[e]),f.push(o),g[t][e]=o;else{for(e=0,n=p.length;e<n;++e)f.push(p[e]);g[t]=p.slice(0)}else g[t]=[];p.length&&(p=Ui(p).sort(Yi),h=Math.min(h,p[0]),c=Math.max(c,p[p.length-1])),f.length&&(f=Ui(f).sort(Yi),h=Math.min(h,f[0]),c=Math.max(c,f[f.length-1])),h=Gi(r,d.min)||h,c=Gi(r,d.max)||c,h=h===Hi?+l.startOf(Date.now(),u):h,c=c===Ei?+l.endOf(Date.now(),u)+1:c,r.min=Math.min(h,c),r.max=Math.max(h+1,c),r._horizontal=r.isHorizontal(),r._table=[],r._timestamps={data:f,datasets:g,labels:p}},buildTicks:function(){var t,e,i,n=this,a=n.min,o=n.max,r=n.options,s=r.time,l=[],d=[];switch(r.ticks.source){case"data":l=n._timestamps.data;break;case"labels":l=n._timestamps.labels;break;case"auto":default:l=$i(n,a,o,n.getLabelCapacity(a))}for("ticks"===r.bounds&&l.length&&(a=l[0],o=l[l.length-1]),a=Gi(n,s.min)||a,o=Gi(n,s.max)||o,t=0,e=l.length;t<e;++t)(i=l[t])>=a&&i<=o&&d.push(i);return n.min=a,n.max=o,n._unit=s.unit||function(t,e,i,n,a){var o,r;for(o=qi.length-1;o>=qi.indexOf(i);o--)if(r=qi[o],ji[r].common&&t._adapter.diff(a,n,r)>=e.length)return r;return qi[i?qi.indexOf(i):0]}(n,d,s.minUnit,n.min,n.max),n._majorUnit=Zi(n._unit),n._table=function(t,e,i,n){if("linear"===n||!t.length)return[{time:e,pos:0},{time:i,pos:1}];var a,o,r,s,l,d=[],u=[e];for(a=0,o=t.length;a<o;++a)(s=t[a])>e&&s<i&&u.push(s);for(u.push(i),a=0,o=u.length;a<o;++a)l=u[a+1],r=u[a-1],s=u[a],void 0!==r&&void 0!==l&&Math.round((l+r)/2)===s||d.push({time:s,pos:a/(o-1)});return d}(n._timestamps.data,a,o,r.distribution),n._offsets=function(t,e,i,n,a){var o,r,s=0,l=0;return a.offset&&e.length&&(a.time.min||(o=Xi(t,"time",e[0],"pos"),s=1===e.length?1-o:(Xi(t,"time",e[1],"pos")-o)/2),a.time.max||(r=Xi(t,"time",e[e.length-1],"pos"),l=1===e.length?r:(r-Xi(t,"time",e[e.length-2],"pos"))/2)),{start:s,end:l}}(n._table,d,0,0,r),r.ticks.reverse&&d.reverse(),function(t,e,i){var n,a,o,r,s=[];for(n=0,a=e.length;n<a;++n)o=e[n],r=!!i&&o===+t._adapter.startOf(o,i),s.push({value:o,major:r});return s}(n,d,n._majorUnit)},getLabelForIndex:function(t,e){var i=this,n=i._adapter,a=i.chart.data,o=i.options.time,r=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return ut.isObject(s)&&(r=i.getRightValue(s)),o.tooltipFormat?n.format(Ki(i,r),o.tooltipFormat):"string"==typeof r?r:n.format(Ki(i,r),o.displayFormats.datetime)},tickFormatFunction:function(t,e,i,n){var a=this._adapter,o=this.options,r=o.time.displayFormats,s=r[this._unit],l=this._majorUnit,d=r[l],u=+a.startOf(t,l),h=o.ticks.major,c=h.enabled&&l&&d&&t===u,f=a.format(t,n||(c?d:s)),g=c?h:o.ticks.minor,p=Vi(g.callback,g.userCallback);return p?p(f,e,i):f},convertTicksToLabels:function(t){var e,i,n=[];for(e=0,i=t.length;e<i;++e)n.push(this.tickFormatFunction(t[e].value,e,t));return n},getPixelForOffset:function(t){var e=this,i=e.options.ticks.reverse,n=e._horizontal?e.width:e.height,a=e._horizontal?i?e.right:e.left:i?e.bottom:e.top,o=Xi(e._table,"time",t,"pos"),r=n*(e._offsets.start+o)/(e._offsets.start+1+e._offsets.end);return i?a-r:a+r},getPixelForValue:function(t,e,i){var n=null;if(void 0!==e&&void 0!==i&&(n=this._timestamps.datasets[i][e]),null===n&&(n=Gi(this,t)),null!==n)return this.getPixelForOffset(n)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,i=e._horizontal?e.width:e.height,n=e._horizontal?e.left:e.top,a=(i?(t-n)/i:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,o=Xi(e._table,"pos",a,"time");return e._adapter._create(o)},getLabelWidth:function(t){var e=this.options.ticks,i=this.ctx.measureText(t).width,n=ut.toRadians(e.maxRotation),a=Math.cos(n),o=Math.sin(n);return i*a+Vi(e.fontSize,st.global.defaultFontSize)*o},getLabelCapacity:function(t){var e=this,i=e.options.time.displayFormats.millisecond,n=e.tickFormatFunction(t,0,[],i),a=e.getLabelWidth(n),o=e.isHorizontal()?e.width:e.height,r=Math.floor(o/a);return r>0?r:1}}),Qi={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};Ji._defaults=Qi;var tn={category:gi,linear:yi,logarithmic:Ci,radialLinear:Ni,time:Ji},en={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};si._date.override("function"==typeof t?{_id:"moment",formats:function(){return en},parse:function(e,i){return"string"==typeof e&&"string"==typeof i?e=t(e,i):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,i){return t(e).format(i)},add:function(e,i,n){return t(e).add(i,n).valueOf()},diff:function(e,i,n){return t.duration(t(e).diff(t(i))).as(n)},startOf:function(e,i,n){return e=t(e),"isoWeek"===i?e.isoWeekday(n).valueOf():e.startOf(i).valueOf()},endOf:function(e,i){return t(e).endOf(i).valueOf()},_create:function(e){return t(e)}}:{}),st._set("global",{plugins:{filler:{propagate:!0}}});var nn={dataset:function(t){var e=t.fill,i=t.chart,n=i.getDatasetMeta(e),a=n&&i.isDatasetVisible(e)&&n.dataset._children||[],o=a.length||0;return o?function(t,e){return e<o&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,i=e?e.x:null,n=e?e.y:null;return function(t){return{x:null===i?t.x:i,y:null===n?t.y:n}}}};function an(t,e,i){var n,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.backgroundColor),!1===o||null===o)return!1;if(!0===o)return"origin";if(n=parseFloat(o,10),isFinite(n)&&Math.floor(n)===n)return"-"!==o[0]&&"+"!==o[0]||(n=e+n),!(n===e||n<0||n>=i)&&n;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function on(t){var e,i=t.el._model||{},n=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===i.scaleBottom?n.bottom:i.scaleBottom:"end"===a?o=void 0===i.scaleTop?n.top:i.scaleTop:void 0!==i.scaleZero?o=i.scaleZero:n.getBasePosition?o=n.getBasePosition():n.getBasePixel&&(o=n.getBasePixel()),null!=o){if(void 0!==o.x&&void 0!==o.y)return o;if(ut.isFinite(o))return{x:(e=n.isHorizontal())?o:null,y:e?null:o}}return null}function rn(t,e,i){var n,a=t[e].fill,o=[e];if(!i)return a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return a;if(!(n=t[a]))return!1;if(n.visible)return a;o.push(a),a=n.fill}return!1}function sn(t){var e=t.fill,i="dataset";return!1===e?null:(isFinite(e)||(i="boundary"),nn[i](t))}function ln(t){return t&&!t.skip}function dn(t,e,i,n,a){var o;if(n&&a){for(t.moveTo(e[0].x,e[0].y),o=1;o<n;++o)ut.canvas.lineTo(t,e[o-1],e[o]);for(t.lineTo(i[a-1].x,i[a-1].y),o=a-1;o>0;--o)ut.canvas.lineTo(t,i[o],i[o-1],!0)}}var un={id:"filler",afterDatasetsUpdate:function(t,e){var i,n,a,o,r=(t.data.datasets||[]).length,s=e.propagate,l=[];for(n=0;n<r;++n)o=null,(a=(i=t.getDatasetMeta(n)).dataset)&&a._model&&a instanceof Wt.Line&&(o={visible:t.isDatasetVisible(n),fill:an(a,n,r),chart:t,el:a}),i.$filler=o,l.push(o);for(n=0;n<r;++n)(o=l[n])&&(o.fill=rn(l,n,s),o.boundary=on(o),o.mapper=sn(o))},beforeDatasetDraw:function(t,e){var i=e.meta.$filler;if(i){var n=t.ctx,a=i.el,o=a._view,r=a._children||[],s=i.mapper,l=o.backgroundColor||st.global.defaultColor;s&&l&&r.length&&(ut.canvas.clipArea(n,t.chartArea),function(t,e,i,n,a,o){var r,s,l,d,u,h,c,f=e.length,g=n.spanGaps,p=[],m=[],v=0,b=0;for(t.beginPath(),r=0,s=f+!!o;r<s;++r)u=i(d=e[l=r%f]._view,l,n),h=ln(d),c=ln(u),h&&c?(v=p.push(d),b=m.push(u)):v&&b&&(g?(h&&p.push(d),c&&m.push(u)):(dn(t,p,m,v,b),v=b=0,p=[],m=[]));dn(t,p,m,v,b),t.closePath(),t.fillStyle=a,t.fill()}(n,r,s,o,l,a._loop),ut.canvas.unclipArea(n))}}},hn=ut.noop,cn=ut.valueOrDefault;function fn(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}st._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var i=e.datasetIndex,n=this.chart,a=n.getDatasetMeta(i);a.hidden=null===a.hidden?!n.data.datasets[i].hidden:null,n.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return ut.isArray(e.datasets)?e.datasets.map(function(e,i){return{text:e.label,fillStyle:ut.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(i),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:i}},this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var i=0;i<t.data.datasets.length;i++)e.push('<li><span style="background-color:'+t.data.datasets[i].backgroundColor+'"></span>'),t.data.datasets[i].label&&e.push(t.data.datasets[i].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var gn=pt.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:hn,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:hn,beforeSetDimensions:hn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:hn,beforeBuildLabels:hn,buildLabels:function(){var t=this,e=t.options.labels||{},i=ut.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter(function(i){return e.filter(i,t.chart.data)})),t.options.reverse&&i.reverse(),t.legendItems=i},afterBuildLabels:hn,beforeFit:hn,fit:function(){var t=this,e=t.options,i=e.labels,n=e.display,a=t.ctx,o=ut.options._parseFont(i),r=o.size,s=t.legendHitBoxes=[],l=t.minSize,d=t.isHorizontal();if(d?(l.width=t.maxWidth,l.height=n?10:0):(l.width=n?10:0,l.height=t.maxHeight),n)if(a.font=o.string,d){var u=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="top",ut.each(t.legendItems,function(t,e){var n=fn(i,r)+r/2+a.measureText(t.text).width;(0===e||u[u.length-1]+n+i.padding>l.width)&&(h+=r+i.padding,u[u.length-(e>0?0:1)]=i.padding),s[e]={left:0,top:0,width:n,height:r},u[u.length-1]+=n+i.padding}),l.height+=h}else{var c=i.padding,f=t.columnWidths=[],g=i.padding,p=0,m=0,v=r+c;ut.each(t.legendItems,function(t,e){var n=fn(i,r)+r/2+a.measureText(t.text).width;e>0&&m+v>l.height-c&&(g+=p+i.padding,f.push(p),p=0,m=0),p=Math.max(p,n),m+=v,s[e]={left:0,top:0,width:n,height:r}}),g+=p,f.push(p),l.width+=g}t.width=l.width,t.height=l.height},afterFit:hn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,i=e.labels,n=st.global,a=n.defaultColor,o=n.elements.line,r=t.width,s=t.lineWidths;if(e.display){var l,d=t.ctx,u=cn(i.fontColor,n.defaultFontColor),h=ut.options._parseFont(i),c=h.size;d.textAlign="left",d.textBaseline="middle",d.lineWidth=.5,d.strokeStyle=u,d.fillStyle=u,d.font=h.string;var f=fn(i,c),g=t.legendHitBoxes,p=t.isHorizontal();l=p?{x:t.left+(r-s[0])/2+i.padding,y:t.top+i.padding,line:0}:{x:t.left+i.padding,y:t.top+i.padding,line:0};var m=c+i.padding;ut.each(t.legendItems,function(n,u){var h=d.measureText(n.text).width,v=f+c/2+h,b=l.x,x=l.y;p?u>0&&b+v+i.padding>t.left+t.minSize.width&&(x=l.y+=m,l.line++,b=l.x=t.left+(r-s[l.line])/2+i.padding):u>0&&x+m>t.top+t.minSize.height&&(b=l.x=b+t.columnWidths[l.line]+i.padding,x=l.y=t.top+i.padding,l.line++),function(t,i,n){if(!(isNaN(f)||f<=0)){d.save();var r=cn(n.lineWidth,o.borderWidth);if(d.fillStyle=cn(n.fillStyle,a),d.lineCap=cn(n.lineCap,o.borderCapStyle),d.lineDashOffset=cn(n.lineDashOffset,o.borderDashOffset),d.lineJoin=cn(n.lineJoin,o.borderJoinStyle),d.lineWidth=r,d.strokeStyle=cn(n.strokeStyle,a),d.setLineDash&&d.setLineDash(cn(n.lineDash,o.borderDash)),e.labels&&e.labels.usePointStyle){var s=f*Math.SQRT2/2,l=t+f/2,u=i+c/2;ut.canvas.drawPoint(d,n.pointStyle,s,l,u)}else 0!==r&&d.strokeRect(t,i,f,c),d.fillRect(t,i,f,c);d.restore()}}(b,x,n),g[u].left=b,g[u].top=x,function(t,e,i,n){var a=c/2,o=f+a+t,r=e+a;d.fillText(i.text,o,r),i.hidden&&(d.beginPath(),d.lineWidth=2,d.moveTo(o,r),d.lineTo(o+n,r),d.stroke())}(b,x,n,h),p?l.x+=v+i.padding:l.y+=m})}},_getLegendItemAt:function(t,e){var i,n,a,o=this;if(t>=o.left&&t<=o.right&&e>=o.top&&e<=o.bottom)for(a=o.legendHitBoxes,i=0;i<a.length;++i)if(t>=(n=a[i]).left&&t<=n.left+n.width&&e>=n.top&&e<=n.top+n.height)return o.legendItems[i];return null},handleEvent:function(t){var e,i=this,n=i.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!n.onHover&&!n.onLeave)return}else{if("click"!==a)return;if(!n.onClick)return}e=i._getLegendItemAt(t.x,t.y),"click"===a?e&&n.onClick&&n.onClick.call(i,t.native,e):(n.onLeave&&e!==i._hoveredItem&&(i._hoveredItem&&n.onLeave.call(i,t.native,i._hoveredItem),i._hoveredItem=e),n.onHover&&e&&n.onHover.call(i,t.native,e))}});function pn(t,e){var i=new gn({ctx:t.ctx,options:e,chart:t});ke.configure(t,i,e),ke.addBox(t,i),t.legend=i}var mn={id:"legend",_element:gn,beforeInit:function(t){var e=t.options.legend;e&&pn(t,e)},beforeUpdate:function(t){var e=t.options.legend,i=t.legend;e?(ut.mergeIf(e,st.global.legend),i?(ke.configure(t,i,e),i.options=e):pn(t,e)):i&&(ke.removeBox(t,i),delete t.legend)},afterEvent:function(t,e){var i=t.legend;i&&i.handleEvent(e)}},vn=ut.noop;st._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var bn=pt.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:vn,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:vn,beforeSetDimensions:vn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:vn,beforeBuildLabels:vn,buildLabels:vn,afterBuildLabels:vn,beforeFit:vn,fit:function(){var t=this,e=t.options,i=e.display,n=t.minSize,a=ut.isArray(e.text)?e.text.length:1,o=ut.options._parseFont(e),r=i?a*o.lineHeight+2*e.padding:0;t.isHorizontal()?(n.width=t.maxWidth,n.height=r):(n.width=r,n.height=t.maxHeight),t.width=n.width,t.height=n.height},afterFit:vn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,i=t.options;if(i.display){var n,a,o,r=ut.options._parseFont(i),s=r.lineHeight,l=s/2+i.padding,d=0,u=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=ut.valueOrDefault(i.fontColor,st.global.defaultFontColor),e.font=r.string,t.isHorizontal()?(a=h+(f-h)/2,o=u+l,n=f-h):(a="left"===i.position?h+l:f-l,o=u+(c-u)/2,n=c-u,d=Math.PI*("left"===i.position?-.5:.5)),e.save(),e.translate(a,o),e.rotate(d),e.textAlign="center",e.textBaseline="middle";var g=i.text;if(ut.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,n),p+=s;else e.fillText(g,0,0,n);e.restore()}}});function xn(t,e){var i=new bn({ctx:t.ctx,options:e,chart:t});ke.configure(t,i,e),ke.addBox(t,i),t.titleBlock=i}var yn={},kn=un,wn=mn,Mn={id:"title",_element:bn,beforeInit:function(t){var e=t.options.title;e&&xn(t,e)},beforeUpdate:function(t){var e=t.options.title,i=t.titleBlock;e?(ut.mergeIf(e,st.global.title),i?(ke.configure(t,i,e),i.options=e):xn(t,e)):i&&(ke.removeBox(t,i),delete t.titleBlock)}};for(var _n in yn.filler=kn,yn.legend=wn,yn.title=Mn,ai.helpers=ut,function(){function t(t,e,i){var n;return"string"==typeof t?(n=parseInt(t,10),-1!==t.indexOf("%")&&(n=n/100*e.parentNode[i])):n=t,n}function e(t){return null!=t&&"none"!==t}function i(i,n,a){var o=document.defaultView,r=ut._getParentNode(i),s=o.getComputedStyle(i)[n],l=o.getComputedStyle(r)[n],d=e(s),u=e(l),h=Number.POSITIVE_INFINITY;return d||u?Math.min(d?t(s,i,a):h,u?t(l,r,a):h):"none"}ut.where=function(t,e){if(ut.isArray(t)&&Array.prototype.filter)return t.filter(e);var i=[];return ut.each(t,function(t){e(t)&&i.push(t)}),i},ut.findIndex=Array.prototype.findIndex?function(t,e,i){return t.findIndex(e,i)}:function(t,e,i){i=void 0===i?t:i;for(var n=0,a=t.length;n<a;++n)if(e.call(i,t[n],n,t))return n;return-1},ut.findNextWhere=function(t,e,i){ut.isNullOrUndef(i)&&(i=-1);for(var n=i+1;n<t.length;n++){var a=t[n];if(e(a))return a}},ut.findPreviousWhere=function(t,e,i){ut.isNullOrUndef(i)&&(i=t.length);for(var n=i-1;n>=0;n--){var a=t[n];if(e(a))return a}},ut.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},ut.almostEquals=function(t,e,i){return Math.abs(t-e)<i},ut.almostWhole=function(t,e){var i=Math.round(t);return i-e<t&&i+e>t},ut.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},ut.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},ut.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},ut.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,i=Math.round(e);return t===Math.pow(10,i)?i:e},ut.toRadians=function(t){return t*(Math.PI/180)},ut.toDegrees=function(t){return t*(180/Math.PI)},ut._decimalPlaces=function(t){if(ut.isFinite(t)){for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}},ut.getAngleFromPoint=function(t,e){var i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),o=Math.atan2(n,i);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},ut.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},ut.aliasPixel=function(t){return t%2==0?0:.5},ut._alignPixel=function(t,e,i){var n=t.currentDevicePixelRatio,a=i/2;return Math.round((e-a)*n)/n+a},ut.splineCurve=function(t,e,i,n){var a=t.skip?e:t,o=e,r=i.skip?e:i,s=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),l=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),d=s/(s+l),u=l/(s+l),h=n*(d=isNaN(d)?0:d),c=n*(u=isNaN(u)?0:u);return{previous:{x:o.x-h*(r.x-a.x),y:o.y-h*(r.y-a.y)},next:{x:o.x+c*(r.x-a.x),y:o.y+c*(r.y-a.y)}}},ut.EPSILON=Number.EPSILON||1e-14,ut.splineCurveMonotone=function(t){var e,i,n,a,o,r,s,l,d,u=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),h=u.length;for(e=0;e<h;++e)if(!(n=u[e]).model.skip){if(i=e>0?u[e-1]:null,(a=e<h-1?u[e+1]:null)&&!a.model.skip){var c=a.model.x-n.model.x;n.deltaK=0!==c?(a.model.y-n.model.y)/c:0}!i||i.model.skip?n.mK=n.deltaK:!a||a.model.skip?n.mK=i.deltaK:this.sign(i.deltaK)!==this.sign(n.deltaK)?n.mK=0:n.mK=(i.deltaK+n.deltaK)/2}for(e=0;e<h-1;++e)n=u[e],a=u[e+1],n.model.skip||a.model.skip||(ut.almostEquals(n.deltaK,0,this.EPSILON)?n.mK=a.mK=0:(o=n.mK/n.deltaK,r=a.mK/n.deltaK,(l=Math.pow(o,2)+Math.pow(r,2))<=9||(s=3/Math.sqrt(l),n.mK=o*s*n.deltaK,a.mK=r*s*n.deltaK)));for(e=0;e<h;++e)(n=u[e]).model.skip||(i=e>0?u[e-1]:null,a=e<h-1?u[e+1]:null,i&&!i.model.skip&&(d=(n.model.x-i.model.x)/3,n.model.controlPointPreviousX=n.model.x-d,n.model.controlPointPreviousY=n.model.y-d*n.mK),a&&!a.model.skip&&(d=(a.model.x-n.model.x)/3,n.model.controlPointNextX=n.model.x+d,n.model.controlPointNextY=n.model.y+d*n.mK))},ut.nextItem=function(t,e,i){return i?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},ut.previousItem=function(t,e,i){return i?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},ut.niceNum=function(t,e){var i=Math.floor(ut.log10(t)),n=t/Math.pow(10,i);return(e?n<1.5?1:n<3?2:n<7?5:10:n<=1?1:n<=2?2:n<=5?5:10)*Math.pow(10,i)},ut.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},ut.getRelativePosition=function(t,e){var i,n,a=t.originalEvent||t,o=t.target||t.srcElement,r=o.getBoundingClientRect(),s=a.touches;s&&s.length>0?(i=s[0].clientX,n=s[0].clientY):(i=a.clientX,n=a.clientY);var l=parseFloat(ut.getStyle(o,"padding-left")),d=parseFloat(ut.getStyle(o,"padding-top")),u=parseFloat(ut.getStyle(o,"padding-right")),h=parseFloat(ut.getStyle(o,"padding-bottom")),c=r.right-r.left-l-u,f=r.bottom-r.top-d-h;return{x:i=Math.round((i-r.left-l)/c*o.width/e.currentDevicePixelRatio),y:n=Math.round((n-r.top-d)/f*o.height/e.currentDevicePixelRatio)}},ut.getConstraintWidth=function(t){return i(t,"max-width","clientWidth")},ut.getConstraintHeight=function(t){return i(t,"max-height","clientHeight")},ut._calculatePadding=function(t,e,i){return(e=ut.getStyle(t,e)).indexOf("%")>-1?i*parseInt(e,10)/100:parseInt(e,10)},ut._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ut.getMaximumWidth=function(t){var e=ut._getParentNode(t);if(!e)return t.clientWidth;var i=e.clientWidth,n=i-ut._calculatePadding(e,"padding-left",i)-ut._calculatePadding(e,"padding-right",i),a=ut.getConstraintWidth(t);return isNaN(a)?n:Math.min(n,a)},ut.getMaximumHeight=function(t){var e=ut._getParentNode(t);if(!e)return t.clientHeight;var i=e.clientHeight,n=i-ut._calculatePadding(e,"padding-top",i)-ut._calculatePadding(e,"padding-bottom",i),a=ut.getConstraintHeight(t);return isNaN(a)?n:Math.min(n,a)},ut.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},ut.retinaScale=function(t,e){var i=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==i){var n=t.canvas,a=t.height,o=t.width;n.height=a*i,n.width=o*i,t.ctx.scale(i,i),n.style.height||n.style.width||(n.style.height=a+"px",n.style