Version Description
May 10, 2021 =
Improvement: Expanded WAF capabilities including better JSON and user permission handling
Improvement: Switched to relative paths in WAF auto_prepend file to increase portability
Improvement: Eliminated unnecessary calls to Wordfence servers
Fix: Prevented errors on PHP 8.0 when disk_free_space and/or disk_total_space are included in disabled_functions
Fix: Fixed PHP notices caused by unexpected plugin version data
Fix: Gracefully handle unexpected responses from Wordfence servers
Fix: Time field now displays correctly on "See Recent Traffic" overlay
Fix: Corrected typo on Diagnostics page
Fix: Corrected IP counts on activity report
Fix: Added missing line break in scan result emails
Fix: Sending test activity report now provides success/failure response
Fix: Reduced SQLi false positives caused by comma-separated strings
Fix: Fixed JS error when resolving last scan result
Release Info
Developer | wfalexk |
Plugin | Wordfence Security – Firewall & Malware Scan |
Version | 7.5.3 |
Comparing to | |
See all releases |
Code changes from version 7.5.2 to 7.5.3
- crypto/vendor/paragonie/sodium_compat/autoload-fast.php +1 -1
- crypto/vendor/paragonie/sodium_compat/autoload-pedantic.php +1 -1
- css/{activity-report-widget.1616621048.css → activity-report-widget.1620658454.css} +0 -0
- css/{diff.1616621048.css → diff.1620658454.css} +0 -0
- css/{dt_table.1616621048.css → dt_table.1620658454.css} +0 -0
- css/{fullLog.1616621048.css → fullLog.1620658454.css} +0 -0
- css/{iptraf.1616621048.css → iptraf.1620658454.css} +0 -0
- css/{jquery-ui-timepicker-addon.1616621048.css → jquery-ui-timepicker-addon.1620658454.css} +0 -0
- css/{jquery-ui.min.1616621048.css → jquery-ui.min.1620658454.css} +0 -0
- css/{jquery-ui.structure.min.1616621048.css → jquery-ui.structure.min.1620658454.css} +0 -0
- css/{jquery-ui.theme.min.1616621048.css → jquery-ui.theme.min.1620658454.css} +0 -0
- css/{main.1616621048.css → main.1620658454.css} +0 -0
- css/{phpinfo.1616621048.css → phpinfo.1620658454.css} +0 -0
- css/{wf-adminbar.1616621048.css → wf-adminbar.1620658454.css} +0 -0
- css/{wf-colorbox.1616621048.css → wf-colorbox.1620658454.css} +0 -0
- css/{wf-font-awesome.1616621048.css → wf-font-awesome.1620658454.css} +0 -0
- css/{wf-global.1616621048.css → wf-global.1620658454.css} +0 -0
- css/{wf-ionicons.1616621048.css → wf-ionicons.1620658454.css} +0 -0
- css/{wf-onboarding.1616621048.css → wf-onboarding.1620658454.css} +0 -0
- css/{wf-roboto-font.1616621048.css → wf-roboto-font.1620658454.css} +0 -0
- css/{wfselect2.min.1616621048.css → wfselect2.min.1620658454.css} +0 -0
- css/{wordfenceBox.1616621048.css → wordfenceBox.1620658454.css} +0 -0
- js/{Chart.bundle.min.1616621048.js → Chart.bundle.min.1620658454.js} +0 -0
- js/{admin.1616621048.js → admin.1620658454.js} +28 -10
- js/{admin.ajaxWatcher.1616621048.js → admin.ajaxWatcher.1620658454.js} +0 -0
- js/{admin.liveTraffic.1616621048.js → admin.liveTraffic.1620658454.js} +0 -0
- js/{date.1616621048.js → date.1620658454.js} +0 -0
- js/{jquery-ui-timepicker-addon.1616621048.js → jquery-ui-timepicker-addon.1620658454.js} +0 -0
- js/{jquery.colorbox-min.1616621048.js → jquery.colorbox-min.1620658454.js} +0 -0
- js/{jquery.colorbox.1616621048.js → jquery.colorbox.1620658454.js} +0 -0
- js/{jquery.dataTables.min.1616621048.js → jquery.dataTables.min.1620658454.js} +0 -0
- js/{jquery.qrcode.min.1616621048.js → jquery.qrcode.min.1620658454.js} +0 -0
- js/{jquery.tmpl.min.1616621048.js → jquery.tmpl.min.1620658454.js} +0 -0
- js/{jquery.tools.min.1616621048.js → jquery.tools.min.1620658454.js} +0 -0
- js/{knockout-3.3.0.1616621048.js → knockout-3.3.0.1620658454.js} +0 -0
- js/{wfdashboard.1616621048.js → wfdashboard.1620658454.js} +0 -0
- js/{wfdropdown.1616621048.js → wfdropdown.1620658454.js} +0 -0
- js/{wfglobal.1616621048.js → wfglobal.1620658454.js} +0 -0
- js/{wfi18n.1616621048.js → wfi18n.1620658454.js} +0 -0
- js/{wfpopover.1616621048.js → wfpopover.1620658454.js} +0 -0
- js/{wfselect2.min.1616621048.js → wfselect2.min.1620658454.js} +0 -0
- languages/wordfence.po +709 -700
- lib/IPTrafList.php +1 -1
- lib/email_newIssues.php +2 -0
- lib/menu_tools_diagnostic.php +2 -2
- lib/wfActivityReport.php +9 -9
- lib/wfDiagnostic.php +16 -1
- lib/wfScanEngine.php +8 -3
- lib/wfUpdateCheck.php +38 -18
- lib/wfUtils.php +39 -0
- lib/wordfenceClass.php +144 -74
- modules/login-security/css/{admin-global.1616621048.css → admin-global.1620658454.css} +0 -0
- modules/login-security/css/{admin.1616621048.css → admin.1620658454.css} +0 -0
- modules/login-security/css/{colorbox.1616621048.css → colorbox.1620658454.css} +0 -0
- modules/login-security/css/{font-awesome.1616621048.css → font-awesome.1620658454.css} +0 -0
- modules/login-security/css/{ionicons.1616621048.css → ionicons.1620658454.css} +0 -0
- modules/login-security/css/{jquery-ui-timepicker-addon.1616621048.css → jquery-ui-timepicker-addon.1620658454.css} +0 -0
- modules/login-security/css/{jquery-ui.min.1616621048.css → jquery-ui.min.1620658454.css} +0 -0
- modules/login-security/css/{jquery-ui.structure.min.1616621048.css → jquery-ui.structure.min.1620658454.css} +0 -0
- modules/login-security/css/{jquery-ui.theme.min.1616621048.css → jquery-ui.theme.min.1620658454.css} +0 -0
- modules/login-security/css/{login.1616621048.css → login.1620658454.css} +0 -0
- modules/login-security/js/{admin-global.1616621048.js → admin-global.1620658454.js} +0 -0
- modules/login-security/js/{admin.1616621048.js → admin.1620658454.js} +0 -0
- modules/login-security/js/{jquery-ui-timepicker-addon.1616621048.js → jquery-ui-timepicker-addon.1620658454.js} +0 -0
- modules/login-security/js/{jquery.colorbox.1616621048.js → jquery.colorbox.1620658454.js} +0 -0
- modules/login-security/js/{jquery.colorbox.min.1616621048.js → jquery.colorbox.min.1620658454.js} +0 -0
- modules/login-security/js/{jquery.qrcode.min.1616621048.js → jquery.qrcode.min.1620658454.js} +0 -0
- modules/login-security/js/{jquery.tmpl.min.1616621048.js → jquery.tmpl.min.1620658454.js} +0 -0
- modules/login-security/js/{login.1616621048.js → login.1620658454.js} +0 -0
- modules/login-security/wordfence-login-security.php +1 -1
- readme.txt +17 -1
- vendor/wordfence/wf-waf/src/init.php +1 -1
- vendor/wordfence/wf-waf/src/lib/http.php +1 -0
- vendor/wordfence/wf-waf/src/lib/parser/lexer.php +11 -1
- vendor/wordfence/wf-waf/src/lib/parser/parser.php +78 -25
- vendor/wordfence/wf-waf/src/lib/parser/sqli.php +81 -55
- vendor/wordfence/wf-waf/src/lib/request.php +24 -2
- vendor/wordfence/wf-waf/src/lib/rules.php +181 -24
- vendor/wordfence/wf-waf/src/lib/storage.php +2 -0
- vendor/wordfence/wf-waf/src/lib/storage/file.php +4 -0
- vendor/wordfence/wf-waf/src/lib/storage/mysql.php +5 -0
- vendor/wordfence/wf-waf/src/lib/waf.php +145 -88
- views/reports/activity-report-email-inline.php +1 -1
- views/waf/waf-uninstall.php +1 -1
- waf/bootstrap.php +7 -3
- wordfence.php +4 -4
@@ -1,5 +1,5 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
-
require_once
|
5 |
ParagonIE_Sodium_Compat::$fastMult = true;
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
+
require_once 'autoload.php';
|
5 |
ParagonIE_Sodium_Compat::$fastMult = true;
|
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
-
require_once
|
5 |
define('DO_PEDANTIC_TEST', true);
|
6 |
|
7 |
ParagonIE_Sodium_Compat::$fastMult = true;
|
1 |
<?php
|
2 |
// phpcs:ignoreFile -- compatibility library for PHP 5-7.1
|
3 |
|
4 |
+
require_once 'autoload.php';
|
5 |
define('DO_PEDANTIC_TEST', true);
|
6 |
|
7 |
ParagonIE_Sodium_Compat::$fastMult = true;
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -768,6 +768,18 @@
|
|
768 |
}
|
769 |
});
|
770 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
771 |
updateSwitch: function(elemID, configItem, cb) {
|
772 |
var setting = jQuery('#' + elemID).is(':checked');
|
773 |
this.updateConfig(configItem, jQuery('#' + elemID).is(':checked') ? 1 : 0, cb);
|
@@ -1729,16 +1741,18 @@
|
|
1729 |
var issuesDOM = container.find('.wf-issue');
|
1730 |
for (var i = 0; i < issuesDOM.length; i++) {
|
1731 |
var sourceData = $(issuesDOM[i]).data('sourceData');
|
1732 |
-
if (sourceData
|
1733 |
-
|
1734 |
-
|
1735 |
-
|
1736 |
-
|
1737 |
-
|
1738 |
-
|
1739 |
-
|
1740 |
-
|
1741 |
-
|
|
|
|
|
1742 |
}
|
1743 |
}
|
1744 |
|
@@ -1816,6 +1830,10 @@
|
|
1816 |
data['action'] = action;
|
1817 |
data['nonce'] = this.nonce;
|
1818 |
}
|
|
|
|
|
|
|
|
|
1819 |
if (!cbErr) {
|
1820 |
cbErr = function() {
|
1821 |
};
|
768 |
}
|
769 |
});
|
770 |
},
|
771 |
+
sendTestActivityReport: function(email) {
|
772 |
+
var self = this;
|
773 |
+
this.ajax(
|
774 |
+
'wordfence_email_summary_email_address_debug',
|
775 |
+
{email: email},
|
776 |
+
function(res) {
|
777 |
+
if (res.result) {
|
778 |
+
self.colorboxModalHTML((self.isSmallScreen ? '300px' : '400px'), ("Test Activity Report"), res.result);
|
779 |
+
}
|
780 |
+
}
|
781 |
+
);
|
782 |
+
},
|
783 |
updateSwitch: function(elemID, configItem, cb) {
|
784 |
var setting = jQuery('#' + elemID).is(':checked');
|
785 |
this.updateConfig(configItem, jQuery('#' + elemID).is(':checked') ? 1 : 0, cb);
|
1741 |
var issuesDOM = container.find('.wf-issue');
|
1742 |
for (var i = 0; i < issuesDOM.length; i++) {
|
1743 |
var sourceData = $(issuesDOM[i]).data('sourceData');
|
1744 |
+
if (sourceData) {
|
1745 |
+
if (sourceData.data.canDelete) {
|
1746 |
+
hasDeleteable = true;
|
1747 |
+
}
|
1748 |
+
|
1749 |
+
if (sourceData.data.canFix) {
|
1750 |
+
hasRepairable = true;
|
1751 |
+
}
|
1752 |
+
|
1753 |
+
if (hasDeleteable && hasRepairable) {
|
1754 |
+
break;
|
1755 |
+
}
|
1756 |
}
|
1757 |
}
|
1758 |
|
1830 |
data['action'] = action;
|
1831 |
data['nonce'] = this.nonce;
|
1832 |
}
|
1833 |
+
if (!cb) {
|
1834 |
+
cb = function() {
|
1835 |
+
};
|
1836 |
+
}
|
1837 |
if (!cbErr) {
|
1838 |
cbErr = function() {
|
1839 |
};
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -2,14 +2,14 @@
|
|
2 |
# This file is distributed under the same license as the Wordfence Security plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Wordfence Security 7.5.
|
6 |
-
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"POT-Creation-Date: 2021-
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"X-Generator: WP-CLI 2.4.0\n"
|
15 |
"X-Domain: wordfence\n"
|
@@ -57,7 +57,7 @@ msgstr ""
|
|
57 |
#: lib/dashboard/widget_content_logins.php:7
|
58 |
#: lib/dashboard/widget_ips.php:115
|
59 |
#: lib/dashboard/widget_logins.php:96
|
60 |
-
#: lib/wordfenceClass.php:
|
61 |
#: views/reports/activity-report-email-inline.php:146
|
62 |
#: views/reports/activity-report.php:16
|
63 |
#: views/waf/option-whitelist.php:110
|
@@ -68,7 +68,7 @@ msgstr ""
|
|
68 |
|
69 |
#: lib/dashboard/widget_content_logins.php:6
|
70 |
#: lib/dashboard/widget_logins.php:95
|
71 |
-
#: lib/wordfenceClass.php:
|
72 |
#: views/reports/activity-report-email-inline.php:256
|
73 |
#: views/reports/activity-report.php:106
|
74 |
msgid "Username"
|
@@ -91,7 +91,7 @@ msgstr ""
|
|
91 |
|
92 |
#: lib/dashboard/widget_countries.php:25
|
93 |
#: lib/dashboard/widget_networkattacks.php:8
|
94 |
-
#: lib/wfDiagnostic.php:
|
95 |
msgid "Wordfence Network"
|
96 |
msgstr ""
|
97 |
|
@@ -133,7 +133,7 @@ msgstr ""
|
|
133 |
#. translators: WordPress username.
|
134 |
#: lib/dashboard/widget_ips.php:96
|
135 |
#: lib/dashboard/widget_logins.php:77
|
136 |
-
#: lib/wordfenceClass.php:
|
137 |
msgid "An error occurred"
|
138 |
msgstr ""
|
139 |
|
@@ -224,7 +224,7 @@ msgid "Last Updated: %s ago"
|
|
224 |
msgstr ""
|
225 |
|
226 |
#: lib/dashboard/widget_notifications.php:8
|
227 |
-
#: lib/wordfenceClass.php:
|
228 |
msgid "Notifications"
|
229 |
msgstr ""
|
230 |
|
@@ -299,11 +299,11 @@ msgstr ""
|
|
299 |
#: lib/menu_tools_diagnostic.php:981
|
300 |
#: lib/menu_tools_twoFactor.php:235
|
301 |
#: lib/menu_tools_twoFactor.php:273
|
302 |
-
#: lib/wordfenceClass.php:
|
303 |
-
#: lib/wordfenceClass.php:
|
304 |
-
#: lib/wordfenceClass.php:
|
305 |
-
#: lib/wordfenceClass.php:
|
306 |
-
#: lib/wordfenceClass.php:
|
307 |
#: views/blocking/block-list.php:501
|
308 |
#: views/blocking/blocking-create.php:212
|
309 |
#: views/dashboard/options-group-license.php:150
|
@@ -545,62 +545,62 @@ msgstr ""
|
|
545 |
msgid "Update includes security-related fixes."
|
546 |
msgstr ""
|
547 |
|
548 |
-
#: lib/email_newIssues.php:
|
549 |
msgid "The malicious URL matched"
|
550 |
msgstr ""
|
551 |
|
552 |
#. translators: Number of scan results
|
553 |
-
#: lib/email_newIssues.php:
|
554 |
msgid "%d existing issue was found again and is not shown."
|
555 |
msgid_plural "%d existing issues were found again and are not shown."
|
556 |
msgstr[0] ""
|
557 |
msgstr[1] ""
|
558 |
|
559 |
#. translators: Number of scan results
|
560 |
-
#: lib/email_newIssues.php:
|
561 |
msgid "%d issue was omitted from this email due to length limits."
|
562 |
msgid_plural "%d issues were omitted from this email due to length limits."
|
563 |
msgstr[0] ""
|
564 |
msgstr[1] ""
|
565 |
|
566 |
#. translators: Number of scan results
|
567 |
-
#: lib/email_newIssues.php:
|
568 |
msgid "View every issue:"
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: lib/email_newIssues.php:
|
572 |
msgid "NOTE: You are using the free version of Wordfence. Upgrade today:"
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: lib/email_newIssues.php:
|
576 |
msgid "Receive real-time Firewall and Scan engine rule updates for protection as threats emerge"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: lib/email_newIssues.php:
|
580 |
msgid "Real-time IP Blocklist blocks the most malicious IPs from accessing your site"
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: lib/email_newIssues.php:
|
584 |
msgid "Country blocking"
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: lib/email_newIssues.php:
|
588 |
msgid "IP reputation monitoring"
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: lib/email_newIssues.php:
|
592 |
msgid "Schedule scans to run more frequently and at optimal times"
|
593 |
msgstr ""
|
594 |
|
595 |
-
#: lib/email_newIssues.php:
|
596 |
msgid "Access to Premium Support"
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: lib/email_newIssues.php:
|
600 |
msgid "Discounts for multi-year and multi-license purchases"
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: lib/email_newIssues.php:
|
604 |
msgid "Click here to upgrade to Wordfence Premium:"
|
605 |
msgstr ""
|
606 |
|
@@ -717,7 +717,7 @@ msgid "Wordfence Live Activity:"
|
|
717 |
msgstr ""
|
718 |
|
719 |
#: lib/menu_dashboard.php:24
|
720 |
-
#: lib/wordfenceClass.php:
|
721 |
msgid "Wordfence Dashboard"
|
722 |
msgstr ""
|
723 |
|
@@ -729,7 +729,7 @@ msgstr ""
|
|
729 |
#: lib/menu_dashboard_options.php:98
|
730 |
#: lib/menu_firewall.php:20
|
731 |
#: lib/menu_firewall.php:30
|
732 |
-
#: lib/wordfenceClass.php:
|
733 |
#: models/page/wfPage.php:105
|
734 |
msgid "Firewall"
|
735 |
msgstr ""
|
@@ -766,7 +766,7 @@ msgstr ""
|
|
766 |
#: lib/menu_dashboard_options.php:115
|
767 |
#: lib/menu_scanner.php:31
|
768 |
#: lib/menu_scanner.php:305
|
769 |
-
#: lib/wordfenceClass.php:
|
770 |
#: models/page/wfPage.php:113
|
771 |
msgid "Scan"
|
772 |
msgstr ""
|
@@ -930,7 +930,7 @@ msgid "Wordfence Premium Enabled"
|
|
930 |
msgstr ""
|
931 |
|
932 |
#: lib/menu_dashboard.php:220
|
933 |
-
#: lib/wordfenceClass.php:
|
934 |
msgid "Tools"
|
935 |
msgstr ""
|
936 |
|
@@ -942,7 +942,7 @@ msgstr ""
|
|
942 |
#: lib/menu_firewall_waf.php:157
|
943 |
#: lib/menu_scanner.php:139
|
944 |
#: lib/menu_support.php:19
|
945 |
-
#: lib/wordfenceClass.php:
|
946 |
msgid "Help"
|
947 |
msgstr ""
|
948 |
|
@@ -1160,7 +1160,7 @@ msgstr ""
|
|
1160 |
#: lib/menu_firewall.php:41
|
1161 |
#: lib/menu_firewall_blocking.php:119
|
1162 |
#: lib/menu_firewall_waf.php:142
|
1163 |
-
#: lib/wordfenceClass.php:
|
1164 |
#: models/page/wfPage.php:109
|
1165 |
msgid "Blocking"
|
1166 |
msgstr ""
|
@@ -1348,7 +1348,7 @@ msgstr ""
|
|
1348 |
#: lib/menu_tools_diagnostic.php:300
|
1349 |
#: lib/menu_tools_diagnostic.php:301
|
1350 |
#: lib/menu_tools_diagnostic.php:304
|
1351 |
-
#: lib/wordfenceClass.php:
|
1352 |
#: models/firewall/wfFirewall.php:41
|
1353 |
#: views/diagnostics/text.php:154
|
1354 |
#: views/diagnostics/text.php:159
|
@@ -1469,7 +1469,7 @@ msgstr ""
|
|
1469 |
|
1470 |
#: lib/menu_options.php:24
|
1471 |
#: lib/menu_options.php:262
|
1472 |
-
#: lib/wordfenceClass.php:
|
1473 |
msgid "All Options"
|
1474 |
msgstr ""
|
1475 |
|
@@ -2108,7 +2108,7 @@ msgid "Signature updates delayed by 30 days"
|
|
2108 |
msgstr ""
|
2109 |
|
2110 |
#: lib/menu_scanner.php:80
|
2111 |
-
#: lib/wordfenceClass.php:
|
2112 |
msgid "Protect More Sites"
|
2113 |
msgstr ""
|
2114 |
|
@@ -2191,20 +2191,20 @@ msgstr ""
|
|
2191 |
#: lib/menu_tools_twoFactor.php:255
|
2192 |
#: lib/menu_tools_twoFactor.php:264
|
2193 |
#: lib/menu_tools_twoFactor.php:284
|
2194 |
-
#: lib/wordfenceClass.php:
|
2195 |
-
#: lib/wordfenceClass.php:
|
2196 |
-
#: lib/wordfenceClass.php:
|
2197 |
-
#: lib/wordfenceClass.php:
|
2198 |
-
#: lib/wordfenceClass.php:
|
2199 |
-
#: lib/wordfenceClass.php:
|
2200 |
-
#: lib/wordfenceClass.php:
|
2201 |
-
#: lib/wordfenceClass.php:
|
2202 |
-
#: lib/wordfenceClass.php:
|
2203 |
-
#: lib/wordfenceClass.php:
|
2204 |
-
#: lib/wordfenceClass.php:
|
2205 |
-
#: lib/wordfenceClass.php:
|
2206 |
-
#: lib/wordfenceClass.php:
|
2207 |
-
#: lib/wordfenceClass.php:
|
2208 |
#: views/dashboard/options-group-import.php:147
|
2209 |
#: views/dashboard/options-group-import.php:157
|
2210 |
#: views/dashboard/options-group-import.php:177
|
@@ -2460,7 +2460,7 @@ msgstr ""
|
|
2460 |
#: lib/menu_tools_diagnostic.php:318
|
2461 |
#: lib/menu_tools_diagnostic.php:319
|
2462 |
#: lib/menu_tools_diagnostic.php:329
|
2463 |
-
#: lib/wfDiagnostic.php:
|
2464 |
#: views/diagnostics/text.php:86
|
2465 |
#: views/diagnostics/text.php:127
|
2466 |
#: views/diagnostics/text.php:128
|
@@ -2524,8 +2524,8 @@ msgstr ""
|
|
2524 |
#: lib/menu_tools_diagnostic.php:319
|
2525 |
#: lib/menu_tools_diagnostic.php:323
|
2526 |
#: lib/menu_tools_livetraffic.php:152
|
2527 |
-
#: lib/wfDiagnostic.php:
|
2528 |
-
#: lib/wfDiagnostic.php:
|
2529 |
#: views/diagnostics/text.php:124
|
2530 |
#: views/diagnostics/text.php:135
|
2531 |
#: views/diagnostics/text.php:137
|
@@ -2565,8 +2565,8 @@ msgstr ""
|
|
2565 |
#: lib/menu_tools_diagnostic.php:319
|
2566 |
#: lib/menu_tools_diagnostic.php:323
|
2567 |
#: lib/menu_tools_livetraffic.php:153
|
2568 |
-
#: lib/wfDiagnostic.php:
|
2569 |
-
#: lib/wfDiagnostic.php:
|
2570 |
#: views/diagnostics/text.php:124
|
2571 |
#: views/diagnostics/text.php:151
|
2572 |
#: views/diagnostics/text.php:164
|
@@ -2601,7 +2601,7 @@ msgstr ""
|
|
2601 |
#: lib/menu_tools_diagnostic.php:267
|
2602 |
#: lib/menu_tools_diagnostic.php:270
|
2603 |
#: lib/menu_tools_diagnostic.php:271
|
2604 |
-
#: lib/wfDiagnostic.php:
|
2605 |
#: views/diagnostics/text.php:126
|
2606 |
#: views/diagnostics/text.php:129
|
2607 |
#: views/diagnostics/text.php:130
|
@@ -2613,7 +2613,7 @@ msgstr ""
|
|
2613 |
#: lib/menu_tools_diagnostic.php:267
|
2614 |
#: lib/menu_tools_diagnostic.php:270
|
2615 |
#: lib/menu_tools_diagnostic.php:271
|
2616 |
-
#: lib/wfDiagnostic.php:
|
2617 |
#: views/diagnostics/text.php:126
|
2618 |
#: views/diagnostics/text.php:129
|
2619 |
#: views/diagnostics/text.php:130
|
@@ -2746,8 +2746,9 @@ msgstr ""
|
|
2746 |
|
2747 |
#: lib/menu_tools_diagnostic.php:285
|
2748 |
#: lib/menu_tools_diagnostic.php:312
|
2749 |
-
#: lib/wfDiagnostic.php:
|
2750 |
-
#: lib/wfDiagnostic.php:
|
|
|
2751 |
#: views/diagnostics/text.php:144
|
2752 |
#: views/diagnostics/text.php:171
|
2753 |
#: views/scanner/issue-base.php:116
|
@@ -2856,7 +2857,7 @@ msgid "Interval the trash is automatically emptied at in days"
|
|
2856 |
msgstr ""
|
2857 |
|
2858 |
#: lib/menu_tools_diagnostic.php:303
|
2859 |
-
#: lib/wordfenceClass.php:
|
2860 |
#: views/diagnostics/text.php:162
|
2861 |
msgid "Never"
|
2862 |
msgstr ""
|
@@ -3143,7 +3144,7 @@ msgstr ""
|
|
3143 |
|
3144 |
#: lib/menu_tools_diagnostic.php:731
|
3145 |
#: lib/menu_tools_diagnostic.php:770
|
3146 |
-
#: lib/wordfenceClass.php:
|
3147 |
msgid "Download"
|
3148 |
msgstr ""
|
3149 |
|
@@ -3173,7 +3174,7 @@ msgid "New Issues (%d total)"
|
|
3173 |
msgstr ""
|
3174 |
|
3175 |
#: lib/menu_tools_diagnostic.php:810
|
3176 |
-
#: lib/wordfenceClass.php:
|
3177 |
#: views/diagnostics/text.php:584
|
3178 |
msgid "No New Issues"
|
3179 |
msgstr ""
|
@@ -3243,17 +3244,17 @@ msgid "Enable beta threat defense feed"
|
|
3243 |
msgstr ""
|
3244 |
|
3245 |
#: lib/menu_tools_diagnostic.php:960
|
3246 |
-
#: lib/wordfenceClass.php:
|
3247 |
msgid "Restore Defaults"
|
3248 |
msgstr ""
|
3249 |
|
3250 |
#: lib/menu_tools_diagnostic.php:961
|
3251 |
-
#: lib/wordfenceClass.php:
|
3252 |
msgid "Cancel Changes"
|
3253 |
msgstr ""
|
3254 |
|
3255 |
#: lib/menu_tools_diagnostic.php:962
|
3256 |
-
#: lib/wordfenceClass.php:
|
3257 |
msgid "Save Changes"
|
3258 |
msgstr ""
|
3259 |
|
@@ -3286,7 +3287,7 @@ msgstr ""
|
|
3286 |
#: lib/menu_tools_livetraffic.php:41
|
3287 |
#: lib/menu_tools_livetraffic.php:571
|
3288 |
#: lib/menu_tools_livetraffic.php:602
|
3289 |
-
#: lib/wordfenceClass.php:
|
3290 |
#: models/page/wfPage.php:119
|
3291 |
msgid "Live Traffic"
|
3292 |
msgstr ""
|
@@ -3333,14 +3334,14 @@ msgstr ""
|
|
3333 |
#: lib/menu_tools_livetraffic.php:100
|
3334 |
#: lib/menu_tools_livetraffic.php:227
|
3335 |
#: lib/menu_tools_livetraffic.php:458
|
3336 |
-
#: lib/wordfenceClass.php:
|
3337 |
msgid "Human"
|
3338 |
msgstr ""
|
3339 |
|
3340 |
#: lib/menu_tools_livetraffic.php:101
|
3341 |
#: lib/menu_tools_livetraffic.php:228
|
3342 |
#: lib/menu_tools_livetraffic.php:458
|
3343 |
-
#: lib/wordfenceClass.php:
|
3344 |
msgid "Bot"
|
3345 |
msgstr ""
|
3346 |
|
@@ -3349,8 +3350,8 @@ msgid "Warning"
|
|
3349 |
msgstr ""
|
3350 |
|
3351 |
#: lib/menu_tools_livetraffic.php:103
|
3352 |
-
#: lib/wfDiagnostic.php:
|
3353 |
-
#: lib/wordfenceClass.php:
|
3354 |
msgid "Blocked"
|
3355 |
msgstr ""
|
3356 |
|
@@ -3443,7 +3444,7 @@ msgid "%s hits"
|
|
3443 |
msgstr ""
|
3444 |
|
3445 |
#: lib/menu_tools_livetraffic.php:286
|
3446 |
-
#: lib/wordfenceClass.php:
|
3447 |
msgid "Type"
|
3448 |
msgstr ""
|
3449 |
|
@@ -3466,7 +3467,7 @@ msgid "IP Address"
|
|
3466 |
msgstr ""
|
3467 |
|
3468 |
#: lib/menu_tools_livetraffic.php:291
|
3469 |
-
#: lib/wordfenceClass.php:
|
3470 |
#: views/blocking/blocking-create.php:193
|
3471 |
msgid "Hostname"
|
3472 |
msgstr ""
|
@@ -3833,22 +3834,22 @@ msgid "How to block a network"
|
|
3833 |
msgstr ""
|
3834 |
|
3835 |
#: lib/menu_tools_whois.php:95
|
3836 |
-
#: lib/wordfenceClass.php:
|
3837 |
msgid "Enter a valid IP or domain"
|
3838 |
msgstr ""
|
3839 |
|
3840 |
#: lib/menu_tools_whois.php:95
|
3841 |
-
#: lib/wordfenceClass.php:
|
3842 |
msgid "Please enter a valid IP address or domain name for your whois lookup."
|
3843 |
msgstr ""
|
3844 |
|
3845 |
#: lib/menu_tools_whois.php:99
|
3846 |
-
#: lib/wordfenceClass.php:
|
3847 |
msgid "Loading..."
|
3848 |
msgstr ""
|
3849 |
|
3850 |
#: lib/menu_tools_whois.php:104
|
3851 |
-
#: lib/wordfenceClass.php:
|
3852 |
msgid "Look up IP or Domain"
|
3853 |
msgstr ""
|
3854 |
|
@@ -3878,7 +3879,7 @@ msgstr ""
|
|
3878 |
|
3879 |
#: lib/menu_wordfence_central.php:44
|
3880 |
#: lib/menu_wordfence_central.php:57
|
3881 |
-
#: lib/wordfenceClass.php:
|
3882 |
msgid "Wordfence Central"
|
3883 |
msgstr ""
|
3884 |
|
@@ -3961,20 +3962,20 @@ msgstr ""
|
|
3961 |
#. translators: Error message.
|
3962 |
#: lib/rest-api/wfRESTConfigController.php:215
|
3963 |
#: lib/rest-api/wfRESTConfigController.php:258
|
3964 |
-
#: lib/wordfenceClass.php:
|
3965 |
msgid "An error occurred while saving the configuration: %s"
|
3966 |
msgstr ""
|
3967 |
|
3968 |
#. translators: Error message.
|
3969 |
#: lib/rest-api/wfRESTConfigController.php:226
|
3970 |
#: lib/rest-api/wfRESTConfigController.php:269
|
3971 |
-
#: lib/wordfenceClass.php:
|
3972 |
msgid "Errors occurred while saving the configuration: %s"
|
3973 |
msgstr ""
|
3974 |
|
3975 |
#: lib/rest-api/wfRESTConfigController.php:231
|
3976 |
#: lib/rest-api/wfRESTConfigController.php:274
|
3977 |
-
#: lib/wordfenceClass.php:
|
3978 |
msgid "Errors occurred while saving the configuration."
|
3979 |
msgstr ""
|
3980 |
|
@@ -4092,50 +4093,50 @@ msgid "Wordfence activity for %1$s on %2$s"
|
|
4092 |
msgstr ""
|
4093 |
|
4094 |
#: lib/wfActivityReport.php:584
|
4095 |
-
#: lib/wordfenceClass.php:
|
4096 |
msgid "Blocked because the IP is blocklisted"
|
4097 |
msgstr ""
|
4098 |
|
4099 |
#. translators: Reason for firewall action.
|
4100 |
#: lib/wfActivityReport.php:587
|
4101 |
-
#: lib/wordfenceClass.php:
|
4102 |
msgid "Blocked for %s"
|
4103 |
msgstr ""
|
4104 |
|
4105 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4106 |
#: lib/wfActivityReport.php:599
|
4107 |
-
#: lib/wordfenceClass.php:
|
4108 |
msgid "Blocked for %1$s in query string: %2$s = %3$s"
|
4109 |
msgstr ""
|
4110 |
|
4111 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4112 |
#: lib/wfActivityReport.php:602
|
4113 |
-
#: lib/wordfenceClass.php:
|
4114 |
msgid "Blocked for %1$s in POST body: %2$s = %3$s"
|
4115 |
msgstr ""
|
4116 |
|
4117 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4118 |
#: lib/wfActivityReport.php:605
|
4119 |
-
#: lib/wordfenceClass.php:
|
4120 |
msgid "Blocked for %1$s in cookie: %2$s = %3$s"
|
4121 |
msgstr ""
|
4122 |
|
4123 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4124 |
#: lib/wfActivityReport.php:608
|
4125 |
-
#: lib/wordfenceClass.php:
|
4126 |
msgid "Blocked for %1$s in file: %2$s = %3$s"
|
4127 |
msgstr ""
|
4128 |
|
4129 |
#: lib/wfActivityReport.php:752
|
4130 |
-
#: lib/wfDiagnostic.php:
|
4131 |
#: models/block/wfBlock.php:95
|
4132 |
msgid "Unknown"
|
4133 |
msgstr ""
|
4134 |
|
4135 |
#: lib/wfAdminNoticeQueue.php:180
|
4136 |
-
#: lib/wordfenceClass.php:
|
4137 |
-
#: lib/wordfenceClass.php:
|
4138 |
-
#: lib/wordfenceClass.php:
|
4139 |
msgid "Dismiss"
|
4140 |
msgstr ""
|
4141 |
|
@@ -5362,7 +5363,7 @@ msgid "Unable to remove code execution protections applied to the .htaccess file
|
|
5362 |
msgstr ""
|
5363 |
|
5364 |
#: lib/wfConfig.php:1174
|
5365 |
-
#: lib/wordfenceClass.php:
|
5366 |
msgid "The grace period end time must be in the future."
|
5367 |
msgstr ""
|
5368 |
|
@@ -5400,7 +5401,7 @@ msgid "An empty license key was entered."
|
|
5400 |
msgstr ""
|
5401 |
|
5402 |
#: lib/wfConfig.php:1300
|
5403 |
-
#: lib/wordfenceClass.php:
|
5404 |
msgid "The license key entered is not in a valid format. It must contain only numbers and the letters A-F."
|
5405 |
msgstr ""
|
5406 |
|
@@ -5494,264 +5495,268 @@ msgid "WAF auto prepend active"
|
|
5494 |
msgstr ""
|
5495 |
|
5496 |
#: lib/wfDiagnostic.php:85
|
5497 |
-
msgid "WAF storage engine (WFWAF_STORAGE_ENGINE)"
|
5498 |
msgstr ""
|
5499 |
|
5500 |
#: lib/wfDiagnostic.php:86
|
5501 |
-
msgid "WAF
|
5502 |
msgstr ""
|
5503 |
|
5504 |
#: lib/wfDiagnostic.php:87
|
5505 |
-
msgid "WAF
|
5506 |
msgstr ""
|
5507 |
|
5508 |
#: lib/wfDiagnostic.php:88
|
5509 |
-
msgid "
|
5510 |
msgstr ""
|
5511 |
|
5512 |
#: lib/wfDiagnostic.php:89
|
5513 |
-
msgid "
|
5514 |
msgstr ""
|
5515 |
|
5516 |
#: lib/wfDiagnostic.php:90
|
|
|
|
|
|
|
|
|
5517 |
msgid "Recently removed wflogs files"
|
5518 |
msgstr ""
|
5519 |
|
5520 |
-
#: lib/wfDiagnostic.php:
|
5521 |
msgid "Database version and privileges."
|
5522 |
msgstr ""
|
5523 |
|
5524 |
-
#: lib/wfDiagnostic.php:
|
5525 |
msgid "Database Version"
|
5526 |
msgstr ""
|
5527 |
|
5528 |
-
#: lib/wfDiagnostic.php:
|
5529 |
msgid "Checking if MySQL user has <code>DELETE</code> privilege"
|
5530 |
msgstr ""
|
5531 |
|
5532 |
-
#: lib/wfDiagnostic.php:
|
5533 |
msgid "Checking if MySQL user has <code>INSERT</code> privilege"
|
5534 |
msgstr ""
|
5535 |
|
5536 |
-
#: lib/wfDiagnostic.php:
|
5537 |
msgid "Checking if MySQL user has <code>UPDATE</code> privilege"
|
5538 |
msgstr ""
|
5539 |
|
5540 |
-
#: lib/wfDiagnostic.php:
|
5541 |
msgid "Checking if MySQL user has <code>SELECT</code> privilege"
|
5542 |
msgstr ""
|
5543 |
|
5544 |
-
#: lib/wfDiagnostic.php:
|
5545 |
msgid "Checking if MySQL user has <code>CREATE TABLE</code> privilege"
|
5546 |
msgstr ""
|
5547 |
|
5548 |
-
#: lib/wfDiagnostic.php:
|
5549 |
msgid "Checking if MySQL user has <code>ALTER TABLE</code> privilege"
|
5550 |
msgstr ""
|
5551 |
|
5552 |
-
#: lib/wfDiagnostic.php:
|
5553 |
msgid "Checking if MySQL user has <code>DROP</code> privilege"
|
5554 |
msgstr ""
|
5555 |
|
5556 |
-
#: lib/wfDiagnostic.php:
|
5557 |
msgid "Checking if MySQL user has <code>TRUNCATE</code> privilege"
|
5558 |
msgstr ""
|
5559 |
|
5560 |
-
#: lib/wfDiagnostic.php:
|
5561 |
msgid "PHP version, important PHP extensions."
|
5562 |
msgstr ""
|
5563 |
|
5564 |
#. translators: Support URL.
|
5565 |
-
#: lib/wfDiagnostic.php:
|
5566 |
msgid "PHP version >= PHP 5.6.20<br><em> (<a href=\"https://wordpress.org/about/requirements/\" target=\"_blank\" rel=\"noopener noreferrer\">Minimum version required by WordPress</a>)</em> <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp\"></a>"
|
5567 |
msgstr ""
|
5568 |
|
5569 |
#. translators: Support URL.
|
5570 |
-
#: lib/wfDiagnostic.php:
|
5571 |
msgid "Process Owner"
|
5572 |
msgstr ""
|
5573 |
|
5574 |
-
#: lib/wfDiagnostic.php:
|
5575 |
msgid "Checking for OpenSSL support"
|
5576 |
msgstr ""
|
5577 |
|
5578 |
-
#: lib/wfDiagnostic.php:
|
5579 |
msgid "Checking OpenSSL version"
|
5580 |
msgstr ""
|
5581 |
|
5582 |
-
#: lib/wfDiagnostic.php:
|
5583 |
msgid "Checking for cURL support"
|
5584 |
msgstr ""
|
5585 |
|
5586 |
-
#: lib/wfDiagnostic.php:
|
5587 |
msgid "cURL Features Code"
|
5588 |
msgstr ""
|
5589 |
|
5590 |
-
#: lib/wfDiagnostic.php:
|
5591 |
msgid "cURL Host"
|
5592 |
msgstr ""
|
5593 |
|
5594 |
-
#: lib/wfDiagnostic.php:
|
5595 |
msgid "cURL Support Protocols"
|
5596 |
msgstr ""
|
5597 |
|
5598 |
-
#: lib/wfDiagnostic.php:
|
5599 |
msgid "cURL SSL Version"
|
5600 |
msgstr ""
|
5601 |
|
5602 |
-
#: lib/wfDiagnostic.php:
|
5603 |
msgid "cURL libz Version"
|
5604 |
msgstr ""
|
5605 |
|
5606 |
-
#: lib/wfDiagnostic.php:
|
5607 |
msgid "Checking <code>display_errors</code><br><em> (<a href=\"http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors\" target=\"_blank\" rel=\"noopener noreferrer\">Should be disabled on production servers</a>)</em>"
|
5608 |
msgstr ""
|
5609 |
|
5610 |
-
#: lib/wfDiagnostic.php:
|
5611 |
msgid "Ability to connect to the Wordfence servers and your own site."
|
5612 |
msgstr ""
|
5613 |
|
5614 |
-
#: lib/wfDiagnostic.php:
|
5615 |
msgid "Connecting to Wordfence servers (http)"
|
5616 |
msgstr ""
|
5617 |
|
5618 |
-
#: lib/wfDiagnostic.php:
|
5619 |
msgid "Connecting to Wordfence servers (https)"
|
5620 |
msgstr ""
|
5621 |
|
5622 |
-
#: lib/wfDiagnostic.php:
|
5623 |
msgid "Connecting back to this site"
|
5624 |
msgstr ""
|
5625 |
|
5626 |
-
#: lib/wfDiagnostic.php:
|
5627 |
msgid "IP(s) used by this server"
|
5628 |
msgstr ""
|
5629 |
|
5630 |
-
#: lib/wfDiagnostic.php:
|
5631 |
msgid "Server time accuracy and applied offsets."
|
5632 |
msgstr ""
|
5633 |
|
5634 |
-
#: lib/wfDiagnostic.php:
|
5635 |
msgid "Wordfence Network Time"
|
5636 |
msgstr ""
|
5637 |
|
5638 |
-
#: lib/wfDiagnostic.php:
|
5639 |
-
#: lib/wfDiagnostic.php:
|
5640 |
msgid "Server Time"
|
5641 |
msgstr ""
|
5642 |
|
5643 |
-
#: lib/wfDiagnostic.php:
|
5644 |
msgid "Wordfence Network Time Offset"
|
5645 |
msgstr ""
|
5646 |
|
5647 |
-
#: lib/wfDiagnostic.php:
|
5648 |
msgid "NTP Time Offset"
|
5649 |
msgstr ""
|
5650 |
|
5651 |
-
#: lib/wfDiagnostic.php:
|
5652 |
msgid "TOTP Time Source"
|
5653 |
msgstr ""
|
5654 |
|
5655 |
-
#: lib/wfDiagnostic.php:
|
5656 |
msgid "WordPress Time Zone"
|
5657 |
msgstr ""
|
5658 |
|
5659 |
#. translators: Number of jobs.
|
5660 |
-
#: lib/wfDiagnostic.php:
|
5661 |
msgid "%d Job Overdue"
|
5662 |
msgid_plural "%d Jobs Overdue"
|
5663 |
msgstr[0] ""
|
5664 |
msgstr[1] ""
|
5665 |
|
5666 |
#. translators: Number of jobs.
|
5667 |
-
#: lib/wfDiagnostic.php:
|
5668 |
msgid "Normal"
|
5669 |
msgstr ""
|
5670 |
|
5671 |
-
#: lib/wfDiagnostic.php:
|
5672 |
-
#: lib/wfDiagnostic.php:
|
5673 |
msgid "No files readable"
|
5674 |
msgstr ""
|
5675 |
|
5676 |
#. translators: File name.
|
5677 |
-
#: lib/wfDiagnostic.php:
|
5678 |
-
#: lib/wfDiagnostic.php:
|
5679 |
msgid "File \"%s\" does not exist"
|
5680 |
msgstr ""
|
5681 |
|
5682 |
#. translators: File path.
|
5683 |
-
#: lib/wfDiagnostic.php:
|
5684 |
msgid "File \"%s\" is unreadable"
|
5685 |
msgstr ""
|
5686 |
|
5687 |
-
#: lib/wfDiagnostic.php:
|
5688 |
-
#: lib/wfDiagnostic.php:
|
5689 |
msgid "No files writable"
|
5690 |
msgstr ""
|
5691 |
|
5692 |
#. translators: File name.
|
5693 |
-
#: lib/wfDiagnostic.php:
|
5694 |
msgid "File \"%s\" is unwritable"
|
5695 |
msgstr ""
|
5696 |
|
5697 |
-
#: lib/wfDiagnostic.php:
|
5698 |
msgid "Basic config writing"
|
5699 |
msgstr ""
|
5700 |
|
5701 |
-
#: lib/wfDiagnostic.php:
|
5702 |
msgid "Serialized config writing"
|
5703 |
msgstr ""
|
5704 |
|
5705 |
-
#: lib/wfDiagnostic.php:
|
5706 |
msgid "(default)"
|
5707 |
msgstr ""
|
5708 |
|
5709 |
#. translators: Unix file permissions in octal (example 0777).
|
5710 |
-
#: lib/wfDiagnostic.php:
|
5711 |
msgid "%s - using constant"
|
5712 |
msgstr ""
|
5713 |
|
5714 |
#. translators: Unix file permissions in octal (example 0777).
|
5715 |
-
#: lib/wfDiagnostic.php:
|
5716 |
msgid "%s - using template"
|
5717 |
msgstr ""
|
5718 |
|
5719 |
-
#: lib/wfDiagnostic.php:
|
5720 |
msgid "0660 - using default"
|
5721 |
msgstr ""
|
5722 |
|
5723 |
-
#: lib/wfDiagnostic.php:
|
5724 |
msgid "Unavailable"
|
5725 |
msgstr ""
|
5726 |
|
5727 |
-
#: lib/wfDiagnostic.php:
|
5728 |
-
#: lib/wfDiagnostic.php:
|
5729 |
msgid "wp_remote_post() test to noc1.wordfence.com failed! Response was: "
|
5730 |
msgstr ""
|
5731 |
|
5732 |
-
#: lib/wfDiagnostic.php:
|
5733 |
msgid "This likely means that your hosting provider is blocking requests to noc1.wordfence.com or has set up a proxy that is not behaving itself."
|
5734 |
msgstr ""
|
5735 |
|
5736 |
-
#: lib/wfDiagnostic.php:
|
5737 |
-
#: lib/wfDiagnostic.php:
|
5738 |
msgid "wp_remote_post() test back to this server failed! Response was: "
|
5739 |
msgstr ""
|
5740 |
|
5741 |
-
#: lib/wfDiagnostic.php:
|
5742 |
msgid "This additional info may help you diagnose the issue. The response headers we received were:"
|
5743 |
msgstr ""
|
5744 |
|
5745 |
#. translators: PHP super global key.
|
5746 |
-
#: lib/wfDiagnostic.php:
|
5747 |
msgid "We cannot read $_SERVER[%s]"
|
5748 |
msgstr ""
|
5749 |
|
5750 |
-
#: lib/wfDiagnostic.php:
|
5751 |
msgid "Should be: "
|
5752 |
msgstr ""
|
5753 |
|
5754 |
-
#: lib/wfDiagnostic.php:
|
5755 |
msgid "NTP"
|
5756 |
msgstr ""
|
5757 |
|
@@ -5866,7 +5871,7 @@ msgid "Access from your area has been temporarily limited for security reasons"
|
|
5866 |
msgstr ""
|
5867 |
|
5868 |
#: lib/wfLog.php:615
|
5869 |
-
#: lib/wordfenceClass.php:
|
5870 |
#: waf/wfWAFIPBlocksController.php:97
|
5871 |
msgid "Manual block by administrator"
|
5872 |
msgstr ""
|
@@ -6198,22 +6203,22 @@ msgid "Wordfence was unable to validate a test request to your website. This can
|
|
6198 |
msgstr ""
|
6199 |
|
6200 |
#: lib/wfScanEngine.php:707
|
6201 |
-
#: lib/wordfenceClass.php:
|
6202 |
msgid "For maximum security use PHP's built in REMOTE_ADDR."
|
6203 |
msgstr ""
|
6204 |
|
6205 |
#: lib/wfScanEngine.php:709
|
6206 |
-
#: lib/wordfenceClass.php:
|
6207 |
msgid "This site appears to be behind a front-end proxy, so using the X-Forwarded-For HTTP header will resolve to the correct IPs."
|
6208 |
msgstr ""
|
6209 |
|
6210 |
#: lib/wfScanEngine.php:711
|
6211 |
-
#: lib/wordfenceClass.php:
|
6212 |
msgid "This site appears to be behind a front-end proxy, so using the X-Real-IP HTTP header will resolve to the correct IPs."
|
6213 |
msgstr ""
|
6214 |
|
6215 |
#: lib/wfScanEngine.php:713
|
6216 |
-
#: lib/wordfenceClass.php:
|
6217 |
msgid "This site appears to be behind Cloudflare, so using the Cloudflare \"CF-Connecting-IP\" HTTP header will resolve to the correct IPs."
|
6218 |
msgstr ""
|
6219 |
|
@@ -6347,8 +6352,8 @@ msgstr ""
|
|
6347 |
|
6348 |
#. translators: Scan result description.
|
6349 |
#: lib/wfScanEngine.php:1088
|
6350 |
-
#: lib/wfScanEngine.php:
|
6351 |
-
#: lib/wfScanEngine.php:
|
6352 |
msgid "Adding issue: %s"
|
6353 |
msgstr ""
|
6354 |
|
@@ -6393,7 +6398,7 @@ msgid "Examining URLs found in posts we scanned for dangerous websites"
|
|
6393 |
msgstr ""
|
6394 |
|
6395 |
#: lib/wfScanEngine.php:1233
|
6396 |
-
#: lib/wfScanEngine.php:
|
6397 |
msgid "Done examining URLs"
|
6398 |
msgstr ""
|
6399 |
|
@@ -6629,202 +6634,202 @@ msgid "The Theme \"%1$s\" needs an upgrade (%2$s -> %3$s)."
|
|
6629 |
msgstr ""
|
6630 |
|
6631 |
#. translators: 1. Plugin name. 2. Software version. 3. Software version.
|
6632 |
-
#: lib/wfScanEngine.php:
|
6633 |
msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s, tested to WP %3$s)."
|
6634 |
msgstr ""
|
6635 |
|
6636 |
#. translators: 1. Plugin name. 2. Software version.
|
6637 |
-
#: lib/wfScanEngine.php:
|
6638 |
msgid "It was last updated %1$s ago and tested up to WordPress %2$s."
|
6639 |
msgstr ""
|
6640 |
|
6641 |
#. translators: 1. Plugin name. 2. Software version.
|
6642 |
-
#: lib/wfScanEngine.php:
|
6643 |
msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s)."
|
6644 |
msgstr ""
|
6645 |
|
6646 |
#. translators: Time duration.
|
6647 |
-
#: lib/wfScanEngine.php:
|
6648 |
msgid "It was last updated %s ago."
|
6649 |
msgstr ""
|
6650 |
|
6651 |
-
#: lib/wfScanEngine.php:
|
6652 |
-
#: lib/wfScanEngine.php:
|
6653 |
msgid "It has unpatched security issues and may have compatibility problems with the current version of WordPress."
|
6654 |
msgstr ""
|
6655 |
|
6656 |
-
#: lib/wfScanEngine.php:
|
6657 |
-
#: lib/wfScanEngine.php:
|
6658 |
msgid "Plugins can be removed from wordpress.org for various reasons. This can include benign issues like a plugin author discontinuing development or moving the plugin distribution to their own site, but some might also be due to security issues. In any case, future updates may or may not be available, so it is worth investigating the cause and deciding whether to temporarily or permanently replace or remove the plugin."
|
6659 |
msgstr ""
|
6660 |
|
6661 |
#. translators: Support URL.
|
6662 |
-
#: lib/wfScanEngine.php:
|
6663 |
-
#: lib/wfScanEngine.php:
|
6664 |
-
#: lib/wfScanEngine.php:
|
6665 |
-
#: lib/wfScanEngine.php:
|
6666 |
msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get more information.</a>"
|
6667 |
msgstr ""
|
6668 |
|
6669 |
#. translators: Plugin name.
|
6670 |
-
#: lib/wfScanEngine.php:
|
6671 |
msgid "The Plugin \"%s\" has been removed from wordpress.org."
|
6672 |
msgstr ""
|
6673 |
|
6674 |
-
#: lib/wfScanEngine.php:
|
6675 |
msgid "Scanning for admin users not created through WordPress"
|
6676 |
msgstr ""
|
6677 |
|
6678 |
#. translators: WordPress username.
|
6679 |
-
#: lib/wfScanEngine.php:
|
6680 |
msgid "An admin user with the username %s was created outside of WordPress."
|
6681 |
msgstr ""
|
6682 |
|
6683 |
#. translators: WordPress username.
|
6684 |
-
#: lib/wfScanEngine.php:
|
6685 |
msgid "An admin user with the username %s was created outside of WordPress. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
|
6686 |
msgstr ""
|
6687 |
|
6688 |
#. translators: WordPress username.
|
6689 |
-
#: lib/wfScanEngine.php:
|
6690 |
msgid "An admin user with a suspicious username %s was found."
|
6691 |
msgstr ""
|
6692 |
|
6693 |
#. translators: WordPress username.
|
6694 |
-
#: lib/wfScanEngine.php:
|
6695 |
msgid "An admin user with a suspicious username %s was found. Administrators accounts with usernames similar to this are commonly seen created by hackers. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
|
6696 |
msgstr ""
|
6697 |
|
6698 |
-
#: lib/wfScanEngine.php:
|
6699 |
msgid "Scanning for suspicious site options"
|
6700 |
msgstr ""
|
6701 |
|
6702 |
-
#: lib/wfScanEngine.php:
|
6703 |
msgid "Examining URLs found in the options we scanned for dangerous websites"
|
6704 |
msgstr ""
|
6705 |
|
6706 |
#. translators: URL.
|
6707 |
-
#: lib/wfScanEngine.php:
|
6708 |
-
#: lib/wfScanEngine.php:
|
6709 |
msgid "Option contains a suspected malware URL: %s"
|
6710 |
msgstr ""
|
6711 |
|
6712 |
#. translators: URL.
|
6713 |
-
#: lib/wfScanEngine.php:
|
6714 |
msgid "This option contains a suspected malware URL listed on Google's list of malware sites. It may indicate your site is infected with malware. The URL is: %s"
|
6715 |
msgstr ""
|
6716 |
|
6717 |
#. translators: URL.
|
6718 |
-
#: lib/wfScanEngine.php:
|
6719 |
msgid "Option contains a suspected phishing site URL: %s"
|
6720 |
msgstr ""
|
6721 |
|
6722 |
#. translators: URL.
|
6723 |
-
#: lib/wfScanEngine.php:
|
6724 |
msgid "This option contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. It may indicate your site is infected with malware. The URL is: %s"
|
6725 |
msgstr ""
|
6726 |
|
6727 |
#. translators: URL.
|
6728 |
-
#: lib/wfScanEngine.php:
|
6729 |
msgid "This option contains a URL that is currently listed on Wordfence's domain blocklist. It may indicate your site is infected with malware. The URL is: %s"
|
6730 |
msgstr ""
|
6731 |
|
6732 |
-
#: lib/wfScanEngine.php:
|
6733 |
msgid "Checking for future GeoIP support"
|
6734 |
msgstr ""
|
6735 |
|
6736 |
-
#: lib/wfScanEngine.php:
|
6737 |
msgid "PHP Update Needed for Country Blocking"
|
6738 |
msgstr ""
|
6739 |
|
6740 |
#. translators: Software version.
|
6741 |
-
#: lib/wfScanEngine.php:
|
6742 |
msgid "The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP."
|
6743 |
msgstr ""
|
6744 |
|
6745 |
-
#: lib/wfScanEngine.php:
|
6746 |
msgid "Previous scan was stopped successfully."
|
6747 |
msgstr ""
|
6748 |
|
6749 |
-
#: lib/wfScanEngine.php:
|
6750 |
msgid "Scan was stopped on administrator request."
|
6751 |
msgstr ""
|
6752 |
|
6753 |
-
#: lib/wfScanEngine.php:
|
6754 |
msgid "Entering start scan routine"
|
6755 |
msgstr ""
|
6756 |
|
6757 |
-
#: lib/wfScanEngine.php:
|
6758 |
msgid "A scan is already running. Use the stop scan button if you would like to terminate the current scan."
|
6759 |
msgstr ""
|
6760 |
|
6761 |
#. translators: Support URL.
|
6762 |
-
#: lib/wfScanEngine.php:
|
6763 |
msgid "Test result of scan start URL fetch: %s"
|
6764 |
msgstr ""
|
6765 |
|
6766 |
#. translators: WordPress admin panel URL.
|
6767 |
-
#: lib/wfScanEngine.php:
|
6768 |
msgid "Starting cron with normal ajax at URL %s"
|
6769 |
msgstr ""
|
6770 |
|
6771 |
#. translators: Error message.
|
6772 |
#. translators: WordPress admin panel URL.
|
6773 |
-
#: lib/wfScanEngine.php:
|
6774 |
-
#: lib/wfScanEngine.php:
|
6775 |
msgid "There was an error starting the scan: %s."
|
6776 |
msgstr ""
|
6777 |
|
6778 |
-
#: lib/wfScanEngine.php:
|
6779 |
-
#: lib/wfScanEngine.php:
|
6780 |
msgid "There was an unknown error starting the scan."
|
6781 |
msgstr ""
|
6782 |
|
6783 |
-
#: lib/wfScanEngine.php:
|
6784 |
-
#: lib/wfScanEngine.php:
|
6785 |
msgid "Scan process ended after forking."
|
6786 |
msgstr ""
|
6787 |
|
6788 |
#. translators: WordPress admin panel URL.
|
6789 |
-
#: lib/wfScanEngine.php:
|
6790 |
msgid "Starting cron via proxy at URL %s"
|
6791 |
msgstr ""
|
6792 |
|
6793 |
#. translators: Time in seconds.
|
6794 |
-
#: lib/wfScanEngine.php:
|
6795 |
msgid "Got value from wf config maxExecutionTime: %s"
|
6796 |
msgstr ""
|
6797 |
|
6798 |
#. translators: Time in seconds.
|
6799 |
-
#: lib/wfScanEngine.php:
|
6800 |
msgid "getMaxExecutionTime() returning config value: %s"
|
6801 |
msgstr ""
|
6802 |
|
6803 |
#. translators: PHP ini value.
|
6804 |
-
#: lib/wfScanEngine.php:
|
6805 |
msgid "Got max_execution_time value from ini: %s"
|
6806 |
msgstr ""
|
6807 |
|
6808 |
#. translators: 1. PHP ini setting. 2. Time in seconds.
|
6809 |
-
#: lib/wfScanEngine.php:
|
6810 |
msgid "ini value of %1$d is higher than value for WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME (%2$d), reducing"
|
6811 |
msgstr ""
|
6812 |
|
6813 |
#. translators: PHP ini setting.
|
6814 |
-
#: lib/wfScanEngine.php:
|
6815 |
msgid "getMaxExecutionTime() returning half ini value: %d"
|
6816 |
msgstr ""
|
6817 |
|
6818 |
-
#: lib/wfScanEngine.php:
|
6819 |
msgid "getMaxExecutionTime() returning default of: 15"
|
6820 |
msgstr ""
|
6821 |
|
6822 |
#. translators: 1. HTTP status code.
|
6823 |
-
#: lib/wfScanEngine.php:
|
6824 |
msgid "Got error response from Wordfence servers: %s"
|
6825 |
msgstr ""
|
6826 |
|
6827 |
-
#: lib/wfScanEngine.php:
|
6828 |
msgid "Invalid response from Wordfence servers."
|
6829 |
msgstr ""
|
6830 |
|
@@ -6987,1364 +6992,1364 @@ msgstr ""
|
|
6987 |
msgid "File last modified:"
|
6988 |
msgstr ""
|
6989 |
|
6990 |
-
#: lib/wordfenceClass.php:
|
6991 |
msgid ""
|
6992 |
"To ensure uninterrupted Premium Wordfence protection on your site,\n"
|
6993 |
"please renew your license by visiting http://www.wordfence.com/ Sign in, go to your dashboard,\n"
|
6994 |
"select the license about to expire and click the button to renew that license."
|
6995 |
msgstr ""
|
6996 |
|
6997 |
-
#: lib/wordfenceClass.php:
|
6998 |
msgid "Your Premium Wordfence License is set to auto-renew in 10 days."
|
6999 |
msgstr ""
|
7000 |
|
7001 |
-
#: lib/wordfenceClass.php:
|
7002 |
msgid "To update your license settings please visit http://www.wordfence.com/zz9/dashboard"
|
7003 |
msgstr ""
|
7004 |
|
7005 |
-
#: lib/wordfenceClass.php:
|
7006 |
msgid "Your Premium Wordfence License expires in less than 2 weeks."
|
7007 |
msgstr ""
|
7008 |
|
7009 |
-
#: lib/wordfenceClass.php:
|
7010 |
msgid "Your Premium Wordfence License expires in less than a week."
|
7011 |
msgstr ""
|
7012 |
|
7013 |
-
#: lib/wordfenceClass.php:
|
7014 |
msgid "Your Premium Wordfence License expires in 2 days."
|
7015 |
msgstr ""
|
7016 |
|
7017 |
-
#: lib/wordfenceClass.php:
|
7018 |
msgid "Your Premium Wordfence License expires in 1 day."
|
7019 |
msgstr ""
|
7020 |
|
7021 |
-
#: lib/wordfenceClass.php:
|
7022 |
msgid "Your Wordfence Premium License has Expired!"
|
7023 |
msgstr ""
|
7024 |
|
7025 |
-
#: lib/wordfenceClass.php:
|
7026 |
msgid "The Wordfence Premium License in use on this site has been removed from your account."
|
7027 |
msgstr ""
|
7028 |
|
7029 |
-
#: lib/wordfenceClass.php:
|
7030 |
msgid "The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets for more information. Our staff is happy to help."
|
7031 |
msgstr ""
|
7032 |
|
7033 |
#. translators: Wordfence license key.
|
7034 |
-
#: lib/wordfenceClass.php:
|
7035 |
msgid "Could not verify Wordfence License: %s"
|
7036 |
msgstr ""
|
7037 |
|
7038 |
#. translators: WordPress version.
|
7039 |
-
#: lib/wordfenceClass.php:
|
7040 |
msgid "WordPress (v%s)"
|
7041 |
msgstr ""
|
7042 |
|
7043 |
#. translators: Number of plugins.
|
7044 |
-
#: lib/wordfenceClass.php:
|
7045 |
msgid "%d plugin"
|
7046 |
msgid_plural "%d plugins"
|
7047 |
msgstr[0] ""
|
7048 |
msgstr[1] ""
|
7049 |
|
7050 |
#. translators: Number of themes.
|
7051 |
-
#: lib/wordfenceClass.php:
|
7052 |
msgid "%d theme"
|
7053 |
msgid_plural "%d themes"
|
7054 |
msgstr[0] ""
|
7055 |
msgstr[1] ""
|
7056 |
|
7057 |
-
#: lib/wordfenceClass.php:
|
7058 |
msgid "An update is available for "
|
7059 |
msgid_plural "Updates are available for "
|
7060 |
msgstr[0] ""
|
7061 |
msgstr[1] ""
|
7062 |
|
7063 |
-
#: lib/wordfenceClass.php:
|
7064 |
msgid "and "
|
7065 |
msgstr ""
|
7066 |
|
7067 |
#. translators: Wordfence version.
|
7068 |
-
#: lib/wordfenceClass.php:
|
7069 |
msgid "`runInstall` called with previous version = %s"
|
7070 |
msgstr ""
|
7071 |
|
7072 |
-
#: lib/wordfenceClass.php:
|
7073 |
-
#: lib/wordfenceClass.php:
|
7074 |
msgid "Could not understand the response we received from the Wordfence servers when applying for a free license key."
|
7075 |
msgstr ""
|
7076 |
|
7077 |
-
#: lib/wordfenceClass.php:
|
7078 |
msgid "Automatically generated from previous country blocking settings"
|
7079 |
msgstr ""
|
7080 |
|
7081 |
-
#: lib/wordfenceClass.php:
|
7082 |
msgid "Application passwords have been disabled by Wordfence."
|
7083 |
msgstr ""
|
7084 |
|
7085 |
-
#: lib/wordfenceClass.php:
|
7086 |
-
#: lib/wordfenceClass.php:
|
7087 |
msgid "Upgrade To Premium"
|
7088 |
msgstr ""
|
7089 |
|
7090 |
-
#: lib/wordfenceClass.php:
|
7091 |
msgid "wp_mail from address is incomplete, attempting to fix"
|
7092 |
msgstr ""
|
7093 |
|
7094 |
#. translators: Email address.
|
7095 |
-
#: lib/wordfenceClass.php:
|
7096 |
msgid "Fixing wp_mail from address: %s"
|
7097 |
msgstr ""
|
7098 |
|
7099 |
-
#: lib/wordfenceClass.php:
|
7100 |
msgid "You appear to have logged out or you are not an admin. Please sign-out and sign-in again."
|
7101 |
msgstr ""
|
7102 |
|
7103 |
-
#: lib/wordfenceClass.php:
|
7104 |
msgid "Your browser sent an invalid security token to Wordfence. Please try reloading this page or signing out and in again."
|
7105 |
msgstr ""
|
7106 |
|
7107 |
-
#: lib/wordfenceClass.php:
|
7108 |
msgid "Wordfence encountered an internal error executing that request."
|
7109 |
msgstr ""
|
7110 |
|
7111 |
#. translators: Error message.
|
7112 |
-
#: lib/wordfenceClass.php:
|
7113 |
msgid "2FA Migration Error: %s"
|
7114 |
msgstr ""
|
7115 |
|
7116 |
-
#: lib/wordfenceClass.php:
|
7117 |
msgid "Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words."
|
7118 |
msgstr ""
|
7119 |
|
7120 |
-
#: lib/wordfenceClass.php:
|
7121 |
msgid "Passwords containing a space followed by \"wf\" without quotes are not allowed."
|
7122 |
msgstr ""
|
7123 |
|
7124 |
#. translators: Support URL.
|
7125 |
-
#: lib/wordfenceClass.php:
|
7126 |
msgid "Please choose a different password. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. <a href=\"%s\">Learn More</a>"
|
7127 |
msgstr ""
|
7128 |
|
7129 |
-
#: lib/wordfenceClass.php:
|
7130 |
-
#: lib/wordfenceClass.php:
|
7131 |
msgid "Sorry but your browser sent an invalid security token when trying to use this form."
|
7132 |
msgstr ""
|
7133 |
|
7134 |
-
#: lib/wordfenceClass.php:
|
7135 |
msgid "Please wait 3 minutes and try again"
|
7136 |
msgstr ""
|
7137 |
|
7138 |
-
#: lib/wordfenceClass.php:
|
7139 |
msgid "You have used this form too much. Please wait 3 minutes and try again."
|
7140 |
msgstr ""
|
7141 |
|
7142 |
-
#: lib/wordfenceClass.php:
|
7143 |
msgid "Unlock email requested"
|
7144 |
msgstr ""
|
7145 |
|
7146 |
-
#: lib/wordfenceClass.php:
|
7147 |
msgid "Your request was received"
|
7148 |
msgstr ""
|
7149 |
|
7150 |
#. translators: Email address.
|
7151 |
-
#: lib/wordfenceClass.php:
|
7152 |
msgid "We received a request to email \"%s\" instructions to unlock their access. If that is the email address of a site administrator or someone on the Wordfence alert list, they have been emailed instructions on how to regain access to this system. The instructions we sent will expire 30 minutes from now."
|
7153 |
msgstr ""
|
7154 |
|
7155 |
-
#: lib/wordfenceClass.php:
|
7156 |
msgid "Invalid key provided for authentication."
|
7157 |
msgstr ""
|
7158 |
|
7159 |
-
#: lib/wordfenceClass.php:
|
7160 |
msgid "Request received via unlock email link to unblock all IPs."
|
7161 |
msgstr ""
|
7162 |
|
7163 |
-
#: lib/wordfenceClass.php:
|
7164 |
msgid "Request received via unlock email link to unblock all IPs via disabling firewall rules."
|
7165 |
msgstr ""
|
7166 |
|
7167 |
-
#: lib/wordfenceClass.php:
|
7168 |
msgid "Invalid function specified. Please check the link we emailed you and make sure it was not cut-off by your email reader."
|
7169 |
msgstr ""
|
7170 |
|
7171 |
-
#: lib/wordfenceClass.php:
|
7172 |
msgid "Unsubscribe Requested"
|
7173 |
msgstr ""
|
7174 |
|
7175 |
-
#: lib/wordfenceClass.php:
|
7176 |
msgid "An error occurred while saving the license."
|
7177 |
msgstr ""
|
7178 |
|
7179 |
#. translators: Error message.
|
7180 |
-
#: lib/wordfenceClass.php:
|
7181 |
-
#: lib/wordfenceClass.php:
|
7182 |
msgid "An error occurred while saving the license: %s"
|
7183 |
msgstr ""
|
7184 |
|
7185 |
-
#: lib/wordfenceClass.php:
|
7186 |
msgid "Rescheduled missing daily cron"
|
7187 |
msgstr ""
|
7188 |
|
7189 |
-
#: lib/wordfenceClass.php:
|
7190 |
msgid "Rescheduled missing hourly cron"
|
7191 |
msgstr ""
|
7192 |
|
7193 |
-
#: lib/wordfenceClass.php:
|
7194 |
-
#: lib/wordfenceClass.php:
|
7195 |
msgid "Accessed a banned URL"
|
7196 |
msgstr ""
|
7197 |
|
7198 |
-
#: lib/wordfenceClass.php:
|
7199 |
-
#: lib/wordfenceClass.php:
|
7200 |
msgid "POST received with blank user-agent and referer"
|
7201 |
msgstr ""
|
7202 |
|
7203 |
-
#: lib/wordfenceClass.php:
|
7204 |
msgid "<strong>ERROR</strong>: You can't register using that username"
|
7205 |
msgstr ""
|
7206 |
|
7207 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
7208 |
-
#: lib/wordfenceClass.php:
|
7209 |
-
#: lib/wordfenceClass.php:
|
7210 |
msgid "<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
|
7211 |
msgstr ""
|
7212 |
|
7213 |
#. translators: 1. Reset password URL. 2. Support URL.
|
7214 |
-
#: lib/wordfenceClass.php:
|
7215 |
-
#: lib/wordfenceClass.php:
|
7216 |
msgid "<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
|
7217 |
msgstr ""
|
7218 |
|
7219 |
#. translators: WordPress username.
|
7220 |
-
#: lib/wordfenceClass.php:
|
7221 |
msgid "A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not."
|
7222 |
msgstr ""
|
7223 |
|
7224 |
-
#: lib/wordfenceClass.php:
|
7225 |
msgid "Blocked by Wordfence Security Network"
|
7226 |
msgstr ""
|
7227 |
|
7228 |
-
#: lib/wordfenceClass.php:
|
7229 |
msgid "Blocked by login security setting"
|
7230 |
msgstr ""
|
7231 |
|
7232 |
#. translators: WordPress username.
|
7233 |
-
#: lib/wordfenceClass.php:
|
7234 |
msgid "Used an invalid username '%s' to try to sign in"
|
7235 |
msgstr ""
|
7236 |
|
7237 |
#. translators: 1. Login attempt limit. 2. WordPress username.
|
7238 |
-
#: lib/wordfenceClass.php:
|
7239 |
msgid "Exceeded the maximum number of login failures which is: %1$s. The last username they tried to sign in with was: '%2$s'"
|
7240 |
msgstr ""
|
7241 |
|
7242 |
-
#: lib/wordfenceClass.php:
|
7243 |
msgid "An invalid type was specified to get file."
|
7244 |
msgstr ""
|
7245 |
|
7246 |
-
#: lib/wordfenceClass.php:
|
7247 |
msgid "We could not fetch a core WordPress file from the Wordfence API."
|
7248 |
msgstr ""
|
7249 |
|
7250 |
-
#: lib/wordfenceClass.php:
|
7251 |
msgid "Wordfence Test Email"
|
7252 |
msgstr ""
|
7253 |
|
7254 |
#. translators: 1. Site URL. 2. IP address.
|
7255 |
-
#: lib/wordfenceClass.php:
|
7256 |
msgid ""
|
7257 |
"This is a test email from %1$s.\n"
|
7258 |
"The IP address that requested this was: %2$s"
|
7259 |
msgstr ""
|
7260 |
|
7261 |
-
#: lib/wordfenceClass.php:
|
7262 |
msgid "Cellphone Sign-in is only available to paid members. <a href=\"https://www.wordfence.com/gnl1twoFac3/wordfence-signup/\" target=\"_blank\" rel=\"noopener noreferrer\">Click here to upgrade now.</a>"
|
7263 |
msgstr ""
|
7264 |
|
7265 |
-
#: lib/wordfenceClass.php:
|
7266 |
msgid "The username you specified does not exist."
|
7267 |
msgstr ""
|
7268 |
|
7269 |
-
#: lib/wordfenceClass.php:
|
7270 |
msgid "The username you specified is already enabled."
|
7271 |
msgstr ""
|
7272 |
|
7273 |
-
#: lib/wordfenceClass.php:
|
7274 |
msgid "Unknown authentication mode."
|
7275 |
msgstr ""
|
7276 |
|
7277 |
-
#: lib/wordfenceClass.php:
|
7278 |
msgid "The phone number you entered must start with a '+', then country code and then area code and number. For example, a number in the United States with country code '1' would look like this: +1-123-555-1234"
|
7279 |
msgstr ""
|
7280 |
|
7281 |
#. translators: Error message.
|
7282 |
-
#: lib/wordfenceClass.php:
|
7283 |
-
#: lib/wordfenceClass.php:
|
7284 |
-
#: lib/wordfenceClass.php:
|
7285 |
msgid "Could not contact Wordfence servers to generate a verification code: %s"
|
7286 |
msgstr ""
|
7287 |
|
7288 |
#. translators: Error message.
|
7289 |
-
#: lib/wordfenceClass.php:
|
7290 |
-
#: lib/wordfenceClass.php:
|
7291 |
msgid "Could not generate verification code: %s"
|
7292 |
msgstr ""
|
7293 |
|
7294 |
#. translators: Error message.
|
7295 |
-
#: lib/wordfenceClass.php:
|
7296 |
-
#: lib/wordfenceClass.php:
|
7297 |
msgid "We could not generate a verification code."
|
7298 |
msgstr ""
|
7299 |
|
7300 |
-
#: lib/wordfenceClass.php:
|
7301 |
msgid "Unknown two-factor authentication mode."
|
7302 |
msgstr ""
|
7303 |
|
7304 |
-
#: lib/wordfenceClass.php:
|
7305 |
msgid "The code you entered is invalid. Cellphone sign-in will not be enabled for this user until you enter a valid code."
|
7306 |
msgstr ""
|
7307 |
|
7308 |
-
#: lib/wordfenceClass.php:
|
7309 |
msgid "We could not find the user you are trying to activate. They may have been removed from the list of Cellphone Sign-in users. Please reload this page."
|
7310 |
msgstr ""
|
7311 |
|
7312 |
-
#: lib/wordfenceClass.php:
|
7313 |
msgid "That user has already been removed from the list."
|
7314 |
msgstr ""
|
7315 |
|
7316 |
-
#: lib/wordfenceClass.php:
|
7317 |
msgid "No scan is scheduled"
|
7318 |
msgstr ""
|
7319 |
|
7320 |
-
#: lib/wordfenceClass.php:
|
7321 |
msgid "Next scan is starting now"
|
7322 |
msgstr ""
|
7323 |
|
7324 |
#. translators: 1. Time until. 2. Localized date.
|
7325 |
-
#: lib/wordfenceClass.php:
|
7326 |
msgid "Next scan in %1$s (%2$s)"
|
7327 |
msgstr ""
|
7328 |
|
7329 |
#. translators: Localized date.
|
7330 |
-
#: lib/wordfenceClass.php:
|
7331 |
msgid "Scheduled Wordfence scan starting at %s"
|
7332 |
msgstr ""
|
7333 |
|
7334 |
-
#: lib/wordfenceClass.php:
|
7335 |
msgid "Sorry but this feature is only available for paid customers."
|
7336 |
msgstr ""
|
7337 |
|
7338 |
#. translators: Site URL.
|
7339 |
-
#: lib/wordfenceClass.php:
|
7340 |
msgid "SITE: %s"
|
7341 |
msgstr ""
|
7342 |
|
7343 |
#. translators: Plugin version.
|
7344 |
-
#: lib/wordfenceClass.php:
|
7345 |
msgid "PLUGIN VERSION: %s"
|
7346 |
msgstr ""
|
7347 |
|
7348 |
#. translators: WordPress version.
|
7349 |
-
#: lib/wordfenceClass.php:
|
7350 |
msgid "WORDPRESS VERSION: %s"
|
7351 |
msgstr ""
|
7352 |
|
7353 |
#. translators: Wordfence license key.
|
7354 |
-
#: lib/wordfenceClass.php:
|
7355 |
msgid "LICENSE KEY: %s"
|
7356 |
msgstr ""
|
7357 |
|
7358 |
#. translators: Email address.
|
7359 |
-
#: lib/wordfenceClass.php:
|
7360 |
msgid "ADMIN EMAIL: %s"
|
7361 |
msgstr ""
|
7362 |
|
7363 |
#. translators: Email address.
|
7364 |
-
#: lib/wordfenceClass.php:
|
7365 |
msgid "LOG:"
|
7366 |
msgstr ""
|
7367 |
|
7368 |
-
#: lib/wordfenceClass.php:
|
7369 |
msgid "# Scan Issues"
|
7370 |
msgstr ""
|
7371 |
|
7372 |
#. translators: Number of scan results.
|
7373 |
-
#: lib/wordfenceClass.php:
|
7374 |
msgid "## New Issues (%d total)"
|
7375 |
msgstr ""
|
7376 |
|
7377 |
#. translators: Number of scan results.
|
7378 |
-
#: lib/wordfenceClass.php:
|
7379 |
msgid "## Ignored Issues (%d total)"
|
7380 |
msgstr ""
|
7381 |
|
7382 |
-
#: lib/wordfenceClass.php:
|
7383 |
msgid "No Ignored Issues"
|
7384 |
msgstr ""
|
7385 |
|
7386 |
-
#: lib/wordfenceClass.php:
|
7387 |
msgid "Wordfence Activity Log"
|
7388 |
msgstr ""
|
7389 |
|
7390 |
#. translators: Error message.
|
7391 |
-
#: lib/wordfenceClass.php:
|
7392 |
msgid "Could not fetch free license key from Wordfence: %s"
|
7393 |
msgstr ""
|
7394 |
|
7395 |
-
#: lib/wordfenceClass.php:
|
7396 |
msgid "We could not find your .htaccess file to modify it."
|
7397 |
msgstr ""
|
7398 |
|
7399 |
#. translators: Error message.
|
7400 |
-
#: lib/wordfenceClass.php:
|
7401 |
msgid "We found your .htaccess file but could not open it for writing: %s"
|
7402 |
msgstr ""
|
7403 |
|
7404 |
-
#: lib/wordfenceClass.php:
|
7405 |
msgid "All Countries"
|
7406 |
msgstr ""
|
7407 |
|
7408 |
-
#: lib/wordfenceClass.php:
|
7409 |
msgid "1 Country"
|
7410 |
msgstr ""
|
7411 |
|
7412 |
#. translators: Number of countries.
|
7413 |
-
#: lib/wordfenceClass.php:
|
7414 |
msgid "%d Countries"
|
7415 |
msgstr ""
|
7416 |
|
7417 |
-
#: lib/wordfenceClass.php:
|
7418 |
msgid "Entire Site"
|
7419 |
msgstr ""
|
7420 |
|
7421 |
-
#: lib/wordfenceClass.php:
|
7422 |
msgid "Login Only"
|
7423 |
msgstr ""
|
7424 |
|
7425 |
-
#: lib/wordfenceClass.php:
|
7426 |
msgid "Site Except Login"
|
7427 |
msgstr ""
|
7428 |
|
7429 |
-
#: lib/wordfenceClass.php:
|
7430 |
msgid "IP Range"
|
7431 |
msgstr ""
|
7432 |
|
7433 |
#. translators: 2FA backup codes.
|
7434 |
-
#: lib/wordfenceClass.php:
|
7435 |
-
#: lib/wordfenceClass.php:
|
7436 |
msgid "User Agent"
|
7437 |
msgstr ""
|
7438 |
|
7439 |
-
#: lib/wordfenceClass.php:
|
7440 |
#: views/blocking/blocking-create.php:201
|
7441 |
msgid "Referrer"
|
7442 |
msgstr ""
|
7443 |
|
7444 |
-
#: lib/wordfenceClass.php:
|
7445 |
msgid "Permanent"
|
7446 |
msgstr ""
|
7447 |
|
7448 |
-
#: lib/wordfenceClass.php:
|
7449 |
msgid "An error occurred while creating the block."
|
7450 |
msgstr ""
|
7451 |
|
7452 |
-
#: lib/wordfenceClass.php:
|
7453 |
msgid "No block parameters were provided."
|
7454 |
msgstr ""
|
7455 |
|
7456 |
-
#: lib/wordfenceClass.php:
|
7457 |
-
#: lib/wordfenceClass.php:
|
7458 |
msgid "No blocks were provided."
|
7459 |
msgstr ""
|
7460 |
|
7461 |
-
#: lib/wordfenceClass.php:
|
7462 |
msgid "The license provided is already in use on another site."
|
7463 |
msgstr ""
|
7464 |
|
7465 |
-
#: lib/wordfenceClass.php:
|
7466 |
msgid "The Wordfence activation server returned an unexpected response. Please try again."
|
7467 |
msgstr ""
|
7468 |
|
7469 |
-
#: lib/wordfenceClass.php:
|
7470 |
msgid "We received an error while trying to activate the license with the Wordfence servers: "
|
7471 |
msgstr ""
|
7472 |
|
7473 |
-
#: lib/wordfenceClass.php:
|
7474 |
msgid "No license was provided to install."
|
7475 |
msgstr ""
|
7476 |
|
7477 |
-
#: lib/wordfenceClass.php:
|
7478 |
msgid "An unknown configuration section was provided."
|
7479 |
msgstr ""
|
7480 |
|
7481 |
-
#: lib/wordfenceClass.php:
|
7482 |
msgid "No configuration section was provided."
|
7483 |
msgstr ""
|
7484 |
|
7485 |
-
#: lib/wordfenceClass.php:
|
7486 |
-
#: lib/wordfenceClass.php:
|
7487 |
msgid "An error occurred while saving the configuration."
|
7488 |
msgstr ""
|
7489 |
|
7490 |
-
#: lib/wordfenceClass.php:
|
7491 |
msgid "No configuration changes were provided to save."
|
7492 |
msgstr ""
|
7493 |
|
7494 |
-
#: lib/wordfenceClass.php:
|
7495 |
-
#: lib/wordfenceClass.php:
|
7496 |
-
#: lib/wordfenceClass.php:
|
7497 |
-
#: lib/wordfenceClass.php:
|
7498 |
-
#: lib/wordfenceClass.php:
|
7499 |
-
#: lib/wordfenceClass.php:
|
7500 |
msgid "We could not find that issue in our database."
|
7501 |
msgstr ""
|
7502 |
|
7503 |
-
#: lib/wordfenceClass.php:
|
7504 |
msgid "An error occurred while trying to hide the file."
|
7505 |
msgstr ""
|
7506 |
|
7507 |
-
#: lib/wordfenceClass.php:
|
7508 |
msgid "An invalid file was requested for hiding."
|
7509 |
msgstr ""
|
7510 |
|
7511 |
-
#: lib/wordfenceClass.php:
|
7512 |
-
#: lib/wordfenceClass.php:
|
7513 |
msgid "You don't have permission to repair .htaccess. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
|
7514 |
msgstr ""
|
7515 |
|
7516 |
-
#: lib/wordfenceClass.php:
|
7517 |
msgid "Manual permanent block by admin"
|
7518 |
msgstr ""
|
7519 |
|
7520 |
-
#: lib/wordfenceClass.php:
|
7521 |
msgid "Please enter a valid IP address to block."
|
7522 |
msgstr ""
|
7523 |
|
7524 |
-
#: lib/wordfenceClass.php:
|
7525 |
msgid "You can't block your own IP address."
|
7526 |
msgstr ""
|
7527 |
|
7528 |
#. translators: IP address.
|
7529 |
-
#: lib/wordfenceClass.php:
|
7530 |
msgid "The IP address %s is allowlisted and can't be blocked. You can remove this IP from the allowlist on the Wordfence options page."
|
7531 |
msgstr ""
|
7532 |
|
7533 |
#. translators: IP address.
|
7534 |
-
#: lib/wordfenceClass.php:
|
7535 |
msgid "The IP address %s is in a range of IP addresses that Wordfence does not block. The IP range may be internal or belong to a service safe to allow access for."
|
7536 |
msgstr ""
|
7537 |
|
7538 |
-
#: lib/wordfenceClass.php:
|
7539 |
msgid "The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google."
|
7540 |
msgstr ""
|
7541 |
|
7542 |
-
#: lib/wordfenceClass.php:
|
7543 |
msgid "An invalid operation was called."
|
7544 |
msgstr ""
|
7545 |
|
7546 |
-
#: lib/wordfenceClass.php:
|
7547 |
msgid "An invalid status was specified when trying to update that issue."
|
7548 |
msgstr ""
|
7549 |
|
7550 |
-
#: lib/wordfenceClass.php:
|
7551 |
msgid "Scan stop request received."
|
7552 |
msgstr ""
|
7553 |
|
7554 |
-
#: lib/wordfenceClass.php:
|
7555 |
msgid "A request was received to stop the previous scan."
|
7556 |
msgstr ""
|
7557 |
|
7558 |
-
#: lib/wordfenceClass.php:
|
7559 |
msgid "Idle"
|
7560 |
msgstr ""
|
7561 |
|
7562 |
#. translators: Localized date.
|
7563 |
-
#: lib/wordfenceClass.php:
|
7564 |
msgid "Scan completed on %s"
|
7565 |
msgstr ""
|
7566 |
|
7567 |
-
#: lib/wordfenceClass.php:
|
7568 |
msgid "Last scan failed"
|
7569 |
msgstr ""
|
7570 |
|
7571 |
#. translators: Time until.
|
7572 |
-
#: lib/wordfenceClass.php:
|
7573 |
msgid "more than %s"
|
7574 |
msgstr ""
|
7575 |
|
7576 |
#. translators: Localized date.
|
7577 |
-
#: lib/wordfenceClass.php:
|
7578 |
msgid "The current scan looks like it has failed. Its last status update was <span id=\"wf-scan-failed-time-ago\">%s</span> ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably."
|
7579 |
msgstr ""
|
7580 |
|
7581 |
#. translators: Localized date.
|
7582 |
-
#: lib/wordfenceClass.php:
|
7583 |
-
#: lib/wordfenceClass.php:
|
7584 |
-
#: lib/wordfenceClass.php:
|
7585 |
-
#: lib/wordfenceClass.php:
|
7586 |
-
#: lib/wordfenceClass.php:
|
7587 |
msgid "Click here for steps you can try."
|
7588 |
msgstr ""
|
7589 |
|
7590 |
#. translators: Localized date.
|
7591 |
-
#: lib/wordfenceClass.php:
|
7592 |
msgid "Cancel Scan"
|
7593 |
msgstr ""
|
7594 |
|
7595 |
-
#: lib/wordfenceClass.php:
|
7596 |
msgid "The previous scan has failed. Some sites may need adjustments to run scans reliably."
|
7597 |
msgstr ""
|
7598 |
|
7599 |
#. translators: Time limit (number).
|
7600 |
-
#: lib/wordfenceClass.php:
|
7601 |
msgid "The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page."
|
7602 |
msgstr ""
|
7603 |
|
7604 |
-
#: lib/wordfenceClass.php:
|
7605 |
msgid "The previous scan has terminated because we detected an update occurring during the scan."
|
7606 |
msgstr ""
|
7607 |
|
7608 |
-
#: lib/wordfenceClass.php:
|
7609 |
msgid "The scan has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself."
|
7610 |
msgstr ""
|
7611 |
|
7612 |
-
#: lib/wordfenceClass.php:
|
7613 |
msgid "Scans are not functional because SSL is unavailable."
|
7614 |
msgstr ""
|
7615 |
|
7616 |
-
#: lib/wordfenceClass.php:
|
7617 |
msgid "The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably."
|
7618 |
msgstr ""
|
7619 |
|
7620 |
-
#: lib/wordfenceClass.php:
|
7621 |
msgid "The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably."
|
7622 |
msgstr ""
|
7623 |
|
7624 |
-
#: lib/wordfenceClass.php:
|
7625 |
msgid "Invalid email address given."
|
7626 |
msgstr ""
|
7627 |
|
7628 |
-
#: lib/wordfenceClass.php:
|
7629 |
-
#: lib/wordfenceClass.php:
|
7630 |
msgid "Deleting an infected wp-config.php file must be done outside of Wordfence. The wp-config.php file contains your database credentials, which you will need to restore normal site operations. Your site will NOT function once the wp-config.php file has been deleted."
|
7631 |
msgstr ""
|
7632 |
|
7633 |
#. translators: 1. File path. 2. Error message.
|
7634 |
-
#: lib/wordfenceClass.php:
|
7635 |
msgid "Could not delete file %1$s. Error was: %2$s"
|
7636 |
msgstr ""
|
7637 |
|
7638 |
#. translators: File path.
|
7639 |
-
#: lib/wordfenceClass.php:
|
7640 |
msgid "We could not retrieve the original file of %s to do a repair."
|
7641 |
msgstr ""
|
7642 |
|
7643 |
#. translators: File path.
|
7644 |
-
#: lib/wordfenceClass.php:
|
7645 |
msgid "An invalid file %s was specified for repair."
|
7646 |
msgstr ""
|
7647 |
|
7648 |
#. translators: File path.
|
7649 |
-
#: lib/wordfenceClass.php:
|
7650 |
msgid "You don't have permission to repair %s. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
|
7651 |
msgstr ""
|
7652 |
|
7653 |
#. translators: 1. File path. 2. Error message.
|
7654 |
-
#: lib/wordfenceClass.php:
|
7655 |
msgid "We could not write to %1$s. The error was: %2$s"
|
7656 |
msgstr ""
|
7657 |
|
7658 |
#. translators: 1. File path. 2. Number of bytes.
|
7659 |
-
#: lib/wordfenceClass.php:
|
7660 |
msgid "We could not write to %1$s. (%2$d bytes written) You may not have permission to modify files on your WordPress server."
|
7661 |
msgstr ""
|
7662 |
|
7663 |
-
#: lib/wordfenceClass.php:
|
7664 |
msgid "Deleted some files with errors"
|
7665 |
msgstr ""
|
7666 |
|
7667 |
-
#: lib/wordfenceClass.php:
|
7668 |
msgid "Repaired some files with errors"
|
7669 |
msgstr ""
|
7670 |
|
7671 |
#. translators: 1. Number of files. 2. Error message.
|
7672 |
-
#: lib/wordfenceClass.php:
|
7673 |
msgid "Deleted %1$d files but we encountered the following errors with other files: %2$s"
|
7674 |
msgstr ""
|
7675 |
|
7676 |
#. translators: 1. Number of files. 2. Error message.
|
7677 |
-
#: lib/wordfenceClass.php:
|
7678 |
msgid "Repaired %1$d files but we encountered the following errors with other files: %2$s"
|
7679 |
msgstr ""
|
7680 |
|
7681 |
#. translators: Number of files.
|
7682 |
-
#: lib/wordfenceClass.php:
|
7683 |
msgid "Deleted %d files successfully"
|
7684 |
msgstr ""
|
7685 |
|
7686 |
#. translators: Number of files.
|
7687 |
-
#: lib/wordfenceClass.php:
|
7688 |
msgid "Repaired %d files successfully"
|
7689 |
msgstr ""
|
7690 |
|
7691 |
#. translators: Number of files.
|
7692 |
-
#: lib/wordfenceClass.php:
|
7693 |
msgid "Deleted %d files successfully. No errors were encountered."
|
7694 |
msgstr ""
|
7695 |
|
7696 |
#. translators: Number of files.
|
7697 |
-
#: lib/wordfenceClass.php:
|
7698 |
msgid "Repaired %d files successfully. No errors were encountered."
|
7699 |
msgstr ""
|
7700 |
|
7701 |
-
#: lib/wordfenceClass.php:
|
7702 |
msgid "Could not delete files"
|
7703 |
msgstr ""
|
7704 |
|
7705 |
-
#: lib/wordfenceClass.php:
|
7706 |
msgid "Could not repair files"
|
7707 |
msgstr ""
|
7708 |
|
7709 |
#. translators: Error message.
|
7710 |
-
#: lib/wordfenceClass.php:
|
7711 |
msgid "We could not delete any of the files you selected. We encountered the following errors: %s"
|
7712 |
msgstr ""
|
7713 |
|
7714 |
#. translators: Error message.
|
7715 |
-
#: lib/wordfenceClass.php:
|
7716 |
msgid "We could not repair any of the files you selected. We encountered the following errors: %s"
|
7717 |
msgstr ""
|
7718 |
|
7719 |
-
#: lib/wordfenceClass.php:
|
7720 |
msgid "Nothing done"
|
7721 |
msgstr ""
|
7722 |
|
7723 |
-
#: lib/wordfenceClass.php:
|
7724 |
msgid "We didn't delete anything and no errors were found."
|
7725 |
msgstr ""
|
7726 |
|
7727 |
-
#: lib/wordfenceClass.php:
|
7728 |
msgid "We didn't repair anything and no errors were found."
|
7729 |
msgstr ""
|
7730 |
|
7731 |
-
#: lib/wordfenceClass.php:
|
7732 |
msgid "Invalid bulk operation selected"
|
7733 |
msgstr ""
|
7734 |
|
7735 |
-
#: lib/wordfenceClass.php:
|
7736 |
msgid "Could not delete file because we could not find that issue."
|
7737 |
msgstr ""
|
7738 |
|
7739 |
-
#: lib/wordfenceClass.php:
|
7740 |
msgid "Could not delete file because that issue does not appear to be a file related issue."
|
7741 |
msgstr ""
|
7742 |
|
7743 |
-
#: lib/wordfenceClass.php:
|
7744 |
msgid "An invalid file was requested for deletion."
|
7745 |
msgstr ""
|
7746 |
|
7747 |
#. translators: 1. File path. 2. Error message.
|
7748 |
-
#: lib/wordfenceClass.php:
|
7749 |
msgid "Could not delete file %1$s. The error was: %2$s"
|
7750 |
msgstr ""
|
7751 |
|
7752 |
-
#: lib/wordfenceClass.php:
|
7753 |
msgid "Could not remove the option because we could not find that issue."
|
7754 |
msgstr ""
|
7755 |
|
7756 |
-
#: lib/wordfenceClass.php:
|
7757 |
msgid "Could not remove the option because that issue does not appear to be a database related issue."
|
7758 |
msgstr ""
|
7759 |
|
7760 |
#. translators: 1. WordPress option. 2. Error message.
|
7761 |
-
#: lib/wordfenceClass.php:
|
7762 |
msgid "Could not remove the option %1$s. The error was: %2$s"
|
7763 |
msgstr ""
|
7764 |
|
7765 |
-
#: lib/wordfenceClass.php:
|
7766 |
msgid "Modifying the .htaccess file did not resolve the issue, so the original .htaccess file was restored. You can fix this manually by setting <code>display_errors</code> to <code>Off</code> in your php.ini if your site is on a VPS or dedicated server that you control."
|
7767 |
msgstr ""
|
7768 |
|
7769 |
-
#: lib/wordfenceClass.php:
|
7770 |
msgid "We could not get the original file to do a repair."
|
7771 |
msgstr ""
|
7772 |
|
7773 |
-
#: lib/wordfenceClass.php:
|
7774 |
msgid "An invalid file was specified for repair."
|
7775 |
msgstr ""
|
7776 |
|
7777 |
-
#: lib/wordfenceClass.php:
|
7778 |
msgid "We could not write to that file. You may not have permission to modify files on your WordPress server."
|
7779 |
msgstr ""
|
7780 |
|
7781 |
-
#: lib/wordfenceClass.php:
|
7782 |
msgid "Ajax request received to start scan."
|
7783 |
msgstr ""
|
7784 |
|
7785 |
#. translators: Number of URLs.
|
7786 |
-
#: lib/wordfenceClass.php:
|
7787 |
msgid "Page contains %d malware URL: "
|
7788 |
msgid_plural "Page contains %d malware URLs: "
|
7789 |
msgstr[0] ""
|
7790 |
msgstr[1] ""
|
7791 |
|
7792 |
-
#: lib/wordfenceClass.php:
|
7793 |
msgid "Run a Scan"
|
7794 |
msgstr ""
|
7795 |
|
7796 |
-
#: lib/wordfenceClass.php:
|
7797 |
msgid "Unknown dashboard data set."
|
7798 |
msgstr ""
|
7799 |
|
7800 |
-
#: lib/wordfenceClass.php:
|
7801 |
msgid "Bad security token. It may have been more than 12 hours since you reloaded the page you came from. Try reloading the page you came from. If that doesn't work, please sign out and sign-in again."
|
7802 |
msgstr ""
|
7803 |
|
7804 |
-
#: lib/wordfenceClass.php:
|
7805 |
msgid "An invalid IP address was specified."
|
7806 |
msgstr ""
|
7807 |
|
7808 |
-
#: lib/wordfenceClass.php:
|
7809 |
-
#: lib/wordfenceClass.php:
|
7810 |
-
#: lib/wordfenceClass.php:
|
7811 |
msgid "File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)"
|
7812 |
msgstr ""
|
7813 |
|
7814 |
-
#: lib/wordfenceClass.php:
|
7815 |
-
#: lib/wordfenceClass.php:
|
7816 |
msgid "Invalid file requested. (Relative paths not allowed)"
|
7817 |
msgstr ""
|
7818 |
|
7819 |
-
#: lib/wordfenceClass.php:
|
7820 |
-
#: lib/wordfenceClass.php:
|
7821 |
-
#: lib/wordfenceClass.php:
|
7822 |
msgid "File contains illegal characters."
|
7823 |
msgstr ""
|
7824 |
|
7825 |
#. translators: Error message.
|
7826 |
-
#: lib/wordfenceClass.php:
|
7827 |
msgid "We could not open the requested file for reading. The error was: %s"
|
7828 |
msgstr ""
|
7829 |
|
7830 |
-
#: lib/wordfenceClass.php:
|
7831 |
msgid "Greater than 2 Gigs"
|
7832 |
msgstr ""
|
7833 |
|
7834 |
-
#: lib/wordfenceClass.php:
|
7835 |
msgid "Unknown file size."
|
7836 |
msgstr ""
|
7837 |
|
7838 |
-
#: lib/wordfenceClass.php:
|
7839 |
msgid "We could not get the contents of the original file to do a comparison."
|
7840 |
msgstr ""
|
7841 |
|
7842 |
-
#: lib/wordfenceClass.php:
|
7843 |
msgid "File does not exist."
|
7844 |
msgstr ""
|
7845 |
|
7846 |
-
#: lib/wordfenceClass.php:
|
7847 |
#: views/dashboard/options-group-import.php:167
|
7848 |
msgid "Reload"
|
7849 |
msgstr ""
|
7850 |
|
7851 |
-
#: lib/wordfenceClass.php:
|
7852 |
msgid "${totalIPs} addresses in this network"
|
7853 |
msgstr ""
|
7854 |
|
7855 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7856 |
-
#: lib/wordfenceClass.php:
|
7857 |
msgid "%s in POST body: %s"
|
7858 |
msgstr ""
|
7859 |
|
7860 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7861 |
-
#: lib/wordfenceClass.php:
|
7862 |
msgid "%s in cookie: %s"
|
7863 |
msgstr ""
|
7864 |
|
7865 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7866 |
-
#: lib/wordfenceClass.php:
|
7867 |
msgid "%s in file: %s"
|
7868 |
msgstr ""
|
7869 |
|
7870 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7871 |
-
#: lib/wordfenceClass.php:
|
7872 |
msgid "%s in query string: %s"
|
7873 |
msgstr ""
|
7874 |
|
7875 |
#. translators: Domain name.
|
7876 |
-
#: lib/wordfenceClass.php:
|
7877 |
msgid "%s is not valid hostname"
|
7878 |
msgstr ""
|
7879 |
|
7880 |
#. translators: Domain name.
|
7881 |
-
#: lib/wordfenceClass.php:
|
7882 |
msgid ".htaccess Updated"
|
7883 |
msgstr ""
|
7884 |
|
7885 |
-
#: lib/wordfenceClass.php:
|
7886 |
msgid ".htaccess change"
|
7887 |
msgstr ""
|
7888 |
|
7889 |
-
#: lib/wordfenceClass.php:
|
7890 |
msgid "404 Not Found"
|
7891 |
msgstr ""
|
7892 |
|
7893 |
-
#: lib/wordfenceClass.php:
|
7894 |
msgid "Activity Log Sent"
|
7895 |
msgstr ""
|
7896 |
|
7897 |
-
#: lib/wordfenceClass.php:
|
7898 |
msgid "Add action to allowlist"
|
7899 |
msgstr ""
|
7900 |
|
7901 |
-
#: lib/wordfenceClass.php:
|
7902 |
msgid "Add code to .htaccess"
|
7903 |
msgstr ""
|
7904 |
|
7905 |
-
#: lib/wordfenceClass.php:
|
7906 |
msgid "All Hits"
|
7907 |
msgstr ""
|
7908 |
|
7909 |
#. translators: WordPress username.
|
7910 |
-
#: lib/wordfenceClass.php:
|
7911 |
msgid "All capabilties of admin user %s were successfully revoked."
|
7912 |
msgstr ""
|
7913 |
|
7914 |
-
#: lib/wordfenceClass.php:
|
7915 |
msgid "An error occurred when adding the request to the allowlist."
|
7916 |
msgstr ""
|
7917 |
|
7918 |
-
#: lib/wordfenceClass.php:
|
7919 |
msgid "Are you sure you want to allowlist this action?"
|
7920 |
msgstr ""
|
7921 |
|
7922 |
-
#: lib/wordfenceClass.php:
|
7923 |
msgid "Authentication Code"
|
7924 |
msgstr ""
|
7925 |
|
7926 |
-
#: lib/wordfenceClass.php:
|
7927 |
msgid "Background Request Blocked"
|
7928 |
msgstr ""
|
7929 |
|
7930 |
-
#: lib/wordfenceClass.php:
|
7931 |
msgid "Block This Network"
|
7932 |
msgstr ""
|
7933 |
|
7934 |
-
#: lib/wordfenceClass.php:
|
7935 |
msgid "Blocked By Firewall"
|
7936 |
msgstr ""
|
7937 |
|
7938 |
-
#: lib/wordfenceClass.php:
|
7939 |
msgid "Blocked WAF"
|
7940 |
msgstr ""
|
7941 |
|
7942 |
-
#: lib/wordfenceClass.php:
|
7943 |
msgid "Blocked by Wordfence"
|
7944 |
msgstr ""
|
7945 |
|
7946 |
-
#: lib/wordfenceClass.php:
|
7947 |
msgid "Blocked by Wordfence plugin settings"
|
7948 |
msgstr ""
|
7949 |
|
7950 |
-
#: lib/wordfenceClass.php:
|
7951 |
msgid "Blocked by the Wordfence Application Firewall and plugin settings"
|
7952 |
msgstr ""
|
7953 |
|
7954 |
-
#: lib/wordfenceClass.php:
|
7955 |
msgid "Blocked by the Wordfence Security Network"
|
7956 |
msgstr ""
|
7957 |
|
7958 |
-
#: lib/wordfenceClass.php:
|
7959 |
msgid "Blocked by the Wordfence Web Application Firewall"
|
7960 |
msgstr ""
|
7961 |
|
7962 |
-
#: lib/wordfenceClass.php:
|
7963 |
msgid "Cellphone Sign-In Recovery Codes"
|
7964 |
msgstr ""
|
7965 |
|
7966 |
-
#: lib/wordfenceClass.php:
|
7967 |
msgid "Cellphone Sign-in activated for user."
|
7968 |
msgstr ""
|
7969 |
|
7970 |
-
#: lib/wordfenceClass.php:
|
7971 |
msgid "Click here to download a backup copy of this file now"
|
7972 |
msgstr ""
|
7973 |
|
7974 |
-
#: lib/wordfenceClass.php:
|
7975 |
msgid "Click here to download a backup copy of your .htaccess file now"
|
7976 |
msgstr ""
|
7977 |
|
7978 |
-
#: lib/wordfenceClass.php:
|
7979 |
msgid "Click to fix .htaccess"
|
7980 |
msgstr ""
|
7981 |
|
7982 |
-
#: lib/wordfenceClass.php:
|
7983 |
msgid "Crawlers"
|
7984 |
msgstr ""
|
7985 |
|
7986 |
-
#: lib/wordfenceClass.php:
|
7987 |
msgid "Diagnostic report has been sent successfully."
|
7988 |
msgstr ""
|
7989 |
|
7990 |
-
#: lib/wordfenceClass.php:
|
7991 |
msgid "Directory Listing Disabled"
|
7992 |
msgstr ""
|
7993 |
|
7994 |
-
#: lib/wordfenceClass.php:
|
7995 |
msgid "Directory listing has been disabled on your server."
|
7996 |
msgstr ""
|
7997 |
|
7998 |
-
#: lib/wordfenceClass.php:
|
7999 |
msgid "Don't ask again"
|
8000 |
msgstr ""
|
8001 |
|
8002 |
-
#: lib/wordfenceClass.php:
|
8003 |
msgid "Download Backup File"
|
8004 |
msgstr ""
|
8005 |
|
8006 |
-
#: lib/wordfenceClass.php:
|
8007 |
msgid "Each line of 16 letters and numbers is a single recovery code, with optional spaces for readability. When typing your password, enter \"wf\" followed by the entire code like \"mypassword wf1234 5678 90AB CDEF\". If your site shows a separate prompt for entering a code after entering only your username and password, enter only the code like \"1234 5678 90AB CDEF\". Your recovery codes are:"
|
8008 |
msgstr ""
|
8009 |
|
8010 |
-
#: lib/wordfenceClass.php:
|
8011 |
msgid "Email Diagnostic Report"
|
8012 |
msgstr ""
|
8013 |
|
8014 |
-
#: lib/wordfenceClass.php:
|
8015 |
msgid "Email Wordfence Activity Log"
|
8016 |
msgstr ""
|
8017 |
|
8018 |
-
#: lib/wordfenceClass.php:
|
8019 |
msgid "Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team. It also contains your PHP configuration from the phpinfo() function for diagnostic data."
|
8020 |
msgstr ""
|
8021 |
|
8022 |
-
#: lib/wordfenceClass.php:
|
8023 |
msgid "Error"
|
8024 |
msgstr ""
|
8025 |
|
8026 |
-
#: lib/wordfenceClass.php:
|
8027 |
msgid "Error Enabling All Options Page"
|
8028 |
msgstr ""
|
8029 |
|
8030 |
-
#: lib/wordfenceClass.php:
|
8031 |
msgid "Error Restoring Defaults"
|
8032 |
msgstr ""
|
8033 |
|
8034 |
-
#: lib/wordfenceClass.php:
|
8035 |
msgid "Error Saving Option"
|
8036 |
msgstr ""
|
8037 |
|
8038 |
-
#: lib/wordfenceClass.php:
|
8039 |
msgid "Error Saving Options"
|
8040 |
msgstr ""
|
8041 |
|
8042 |
-
#: lib/wordfenceClass.php:
|
8043 |
msgid "Failed Login"
|
8044 |
msgstr ""
|
8045 |
|
8046 |
-
#: lib/wordfenceClass.php:
|
8047 |
msgid "Failed Login: Invalid Username"
|
8048 |
msgstr ""
|
8049 |
|
8050 |
-
#: lib/wordfenceClass.php:
|
8051 |
msgid "Failed Login: Valid Username"
|
8052 |
msgstr ""
|
8053 |
|
8054 |
-
#: lib/wordfenceClass.php:
|
8055 |
msgid "File hidden successfully"
|
8056 |
msgstr ""
|
8057 |
|
8058 |
-
#: lib/wordfenceClass.php:
|
8059 |
msgid "File restored OK"
|
8060 |
msgstr ""
|
8061 |
|
8062 |
-
#: lib/wordfenceClass.php:
|
8063 |
msgid "Filter Traffic"
|
8064 |
msgstr ""
|
8065 |
|
8066 |
-
#: lib/wordfenceClass.php:
|
8067 |
msgid "Firewall Response"
|
8068 |
msgstr ""
|
8069 |
|
8070 |
-
#: lib/wordfenceClass.php:
|
8071 |
#: views/scanner/issue-wpscan_fullPathDiscl.php:8
|
8072 |
msgid "Full Path Disclosure"
|
8073 |
msgstr ""
|
8074 |
|
8075 |
-
#: lib/wordfenceClass.php:
|
8076 |
msgid "Google Bot"
|
8077 |
msgstr ""
|
8078 |
|
8079 |
-
#: lib/wordfenceClass.php:
|
8080 |
msgid "Google Crawlers"
|
8081 |
msgstr ""
|
8082 |
|
8083 |
-
#: lib/wordfenceClass.php:
|
8084 |
msgid "HTTP Response Code"
|
8085 |
msgstr ""
|
8086 |
|
8087 |
-
#: lib/wordfenceClass.php:
|
8088 |
msgid "Humans"
|
8089 |
msgstr ""
|
8090 |
|
8091 |
-
#: lib/wordfenceClass.php:
|
8092 |
msgid "Key:"
|
8093 |
msgstr ""
|
8094 |
|
8095 |
#. translators: Localized date.
|
8096 |
-
#: lib/wordfenceClass.php:
|
8097 |
msgid "Last Updated: %s"
|
8098 |
msgstr ""
|
8099 |
|
8100 |
#. translators: Localized date.
|
8101 |
-
#: lib/wordfenceClass.php:
|
8102 |
msgid "Learn more about repairing modified files."
|
8103 |
msgstr ""
|
8104 |
|
8105 |
-
#: lib/wordfenceClass.php:
|
8106 |
msgid "Locked Out"
|
8107 |
msgstr ""
|
8108 |
|
8109 |
-
#: lib/wordfenceClass.php:
|
8110 |
msgid "Locked out from logging in"
|
8111 |
msgstr ""
|
8112 |
|
8113 |
-
#: lib/wordfenceClass.php:
|
8114 |
msgid "Logged In"
|
8115 |
msgstr ""
|
8116 |
|
8117 |
-
#: lib/wordfenceClass.php:
|
8118 |
msgid "Logins"
|
8119 |
msgstr ""
|
8120 |
|
8121 |
-
#: lib/wordfenceClass.php:
|
8122 |
msgid "Logins and Logouts"
|
8123 |
msgstr ""
|
8124 |
|
8125 |
#. translators: Localized date.
|
8126 |
-
#: lib/wordfenceClass.php:
|
8127 |
msgid "Next Update Check: %s"
|
8128 |
msgstr ""
|
8129 |
|
8130 |
#. translators: Localized date.
|
8131 |
-
#: lib/wordfenceClass.php:
|
8132 |
msgid "No activity to report yet. Please complete your first scan."
|
8133 |
msgstr ""
|
8134 |
|
8135 |
-
#: lib/wordfenceClass.php:
|
8136 |
msgid "No issues have been ignored."
|
8137 |
msgstr ""
|
8138 |
|
8139 |
-
#: lib/wordfenceClass.php:
|
8140 |
msgid "No new issues have been found."
|
8141 |
msgstr ""
|
8142 |
|
8143 |
-
#: lib/wordfenceClass.php:
|
8144 |
msgid "No rules were updated. Please verify you have permissions to write to the /wp-content/wflogs directory."
|
8145 |
msgstr ""
|
8146 |
|
8147 |
-
#: lib/wordfenceClass.php:
|
8148 |
msgid "No rules were updated. Please verify your website can reach the Wordfence servers."
|
8149 |
msgstr ""
|
8150 |
|
8151 |
-
#: lib/wordfenceClass.php:
|
8152 |
msgid "No rules were updated. Your website has reached the maximum number of rule update requests. Please try again later."
|
8153 |
msgstr ""
|
8154 |
|
8155 |
-
#: lib/wordfenceClass.php:
|
8156 |
msgid "Note: Status will update when changes are saved"
|
8157 |
msgstr ""
|
8158 |
|
8159 |
-
#: lib/wordfenceClass.php:
|
8160 |
msgid "OK"
|
8161 |
msgstr ""
|
8162 |
|
8163 |
-
#: lib/wordfenceClass.php:
|
8164 |
msgid "Pages Not Found"
|
8165 |
msgstr ""
|
8166 |
|
8167 |
-
#: lib/wordfenceClass.php:
|
8168 |
msgid "Paid Members Only"
|
8169 |
msgstr ""
|
8170 |
|
8171 |
-
#: lib/wordfenceClass.php:
|
8172 |
msgid "Please enter a valid email address."
|
8173 |
msgstr ""
|
8174 |
|
8175 |
-
#: lib/wordfenceClass.php:
|
8176 |
msgid "Please include your support ticket number or forum username."
|
8177 |
msgstr ""
|
8178 |
|
8179 |
-
#: lib/wordfenceClass.php:
|
8180 |
msgid "Please make a backup of this file before proceeding. If you need to restore this backup file, you can copy it to the following path from your site's root:"
|
8181 |
msgstr ""
|
8182 |
|
8183 |
-
#: lib/wordfenceClass.php:
|
8184 |
msgid "Please specify a reason"
|
8185 |
msgstr ""
|
8186 |
|
8187 |
-
#: lib/wordfenceClass.php:
|
8188 |
msgid "Please specify a valid IP address range in the form of \"1.2.3.4 - 1.2.3.5\" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash."
|
8189 |
msgstr ""
|
8190 |
|
8191 |
-
#: lib/wordfenceClass.php:
|
8192 |
msgid "Please specify either an IP address range, Hostname or a web browser pattern to match."
|
8193 |
msgstr ""
|
8194 |
|
8195 |
-
#: lib/wordfenceClass.php:
|
8196 |
msgid "Recent Activity"
|
8197 |
msgstr ""
|
8198 |
|
8199 |
-
#: lib/wordfenceClass.php:
|
8200 |
msgid "Recovery Codes"
|
8201 |
msgstr ""
|
8202 |
|
8203 |
-
#: lib/wordfenceClass.php:
|
8204 |
msgid "Redirected"
|
8205 |
msgstr ""
|
8206 |
|
8207 |
-
#: lib/wordfenceClass.php:
|
8208 |
msgid "Redirected by Country Blocking bypass URL"
|
8209 |
msgstr ""
|
8210 |
|
8211 |
-
#: lib/wordfenceClass.php:
|
8212 |
msgid "Referer"
|
8213 |
msgstr ""
|
8214 |
|
8215 |
-
#: lib/wordfenceClass.php:
|
8216 |
msgid "Registered Users"
|
8217 |
msgstr ""
|
8218 |
|
8219 |
-
#: lib/wordfenceClass.php:
|
8220 |
msgid "Rule Update Failed"
|
8221 |
msgstr ""
|
8222 |
|
8223 |
-
#: lib/wordfenceClass.php:
|
8224 |
msgid "Rules Updated"
|
8225 |
msgstr ""
|
8226 |
|
8227 |
-
#: lib/wordfenceClass.php:
|
8228 |
msgid "Scan Complete."
|
8229 |
msgstr ""
|
8230 |
|
8231 |
-
#: lib/wordfenceClass.php:
|
8232 |
msgid "Scan the code below with your authenticator app to add this account. Some authenticator apps also allow you to type in the text version instead."
|
8233 |
msgstr ""
|
8234 |
|
8235 |
-
#: lib/wordfenceClass.php:
|
8236 |
msgid "Security Event"
|
8237 |
msgstr ""
|
8238 |
|
8239 |
-
#: lib/wordfenceClass.php:
|
8240 |
msgid "Send"
|
8241 |
msgstr ""
|
8242 |
|
8243 |
-
#: lib/wordfenceClass.php:
|
8244 |
msgid "Sorry, but no data for that IP or domain was found."
|
8245 |
msgstr ""
|
8246 |
|
8247 |
-
#: lib/wordfenceClass.php:
|
8248 |
msgid "Specify a valid IP range"
|
8249 |
msgstr ""
|
8250 |
|
8251 |
-
#: lib/wordfenceClass.php:
|
8252 |
msgid "Specify a valid hostname"
|
8253 |
msgstr ""
|
8254 |
|
8255 |
-
#: lib/wordfenceClass.php:
|
8256 |
msgid "Specify an IP range, Hostname or Browser pattern"
|
8257 |
msgstr ""
|
8258 |
|
8259 |
-
#: lib/wordfenceClass.php:
|
8260 |
msgid "Success deleting file"
|
8261 |
msgstr ""
|
8262 |
|
8263 |
-
#: lib/wordfenceClass.php:
|
8264 |
msgid "Success removing option"
|
8265 |
msgstr ""
|
8266 |
|
8267 |
-
#: lib/wordfenceClass.php:
|
8268 |
msgid "Success restoring file"
|
8269 |
msgstr ""
|
8270 |
|
8271 |
-
#: lib/wordfenceClass.php:
|
8272 |
msgid "Success updating option"
|
8273 |
msgstr ""
|
8274 |
|
8275 |
-
#: lib/wordfenceClass.php:
|
8276 |
msgid "Successfully deleted admin"
|
8277 |
msgstr ""
|
8278 |
|
8279 |
-
#: lib/wordfenceClass.php:
|
8280 |
msgid "Successfully revoked admin"
|
8281 |
msgstr ""
|
8282 |
|
8283 |
-
#: lib/wordfenceClass.php:
|
8284 |
msgid "Test Email Sent"
|
8285 |
msgstr ""
|
8286 |
|
8287 |
-
#: lib/wordfenceClass.php:
|
8288 |
msgid "The 'How does Wordfence get IPs' option was successfully updated to the recommended value."
|
8289 |
msgstr ""
|
8290 |
|
8291 |
-
#: lib/wordfenceClass.php:
|
8292 |
msgid "The Full Path disclosure issue has been fixed"
|
8293 |
msgstr ""
|
8294 |
|
8295 |
#. translators: WordPress username.
|
8296 |
-
#: lib/wordfenceClass.php:
|
8297 |
msgid "The admin user %s was successfully deleted."
|
8298 |
msgstr ""
|
8299 |
|
8300 |
#. translators: File path.
|
8301 |
-
#: lib/wordfenceClass.php:
|
8302 |
msgid "The file %s was successfully deleted."
|
8303 |
msgstr ""
|
8304 |
|
8305 |
#. translators: File path.
|
8306 |
-
#: lib/wordfenceClass.php:
|
8307 |
msgid "The file %s was successfully hidden from public view."
|
8308 |
msgstr ""
|
8309 |
|
8310 |
#. translators: File path.
|
8311 |
-
#: lib/wordfenceClass.php:
|
8312 |
msgid "The file %s was successfully restored."
|
8313 |
msgstr ""
|
8314 |
|
8315 |
#. translators: WordPress option.
|
8316 |
-
#: lib/wordfenceClass.php:
|
8317 |
msgid "The option %s was successfully removed."
|
8318 |
msgstr ""
|
8319 |
|
8320 |
#. translators: WordPress option.
|
8321 |
-
#: lib/wordfenceClass.php:
|
8322 |
msgid "The request has been allowlisted. Please try it again."
|
8323 |
msgstr ""
|
8324 |
|
8325 |
-
#: lib/wordfenceClass.php:
|
8326 |
msgid "There was an error while sending the email."
|
8327 |
msgstr ""
|
8328 |
|
8329 |
-
#: lib/wordfenceClass.php:
|
8330 |
msgid "This will be shown only once. Keep these codes somewhere safe."
|
8331 |
msgstr ""
|
8332 |
|
8333 |
-
#: lib/wordfenceClass.php:
|
8334 |
msgid "Throttled"
|
8335 |
msgstr ""
|
8336 |
|
8337 |
-
#: lib/wordfenceClass.php:
|
8338 |
msgid "Two Factor Status"
|
8339 |
msgstr ""
|
8340 |
|
8341 |
#. translators: HTTP client type.
|
8342 |
-
#: lib/wordfenceClass.php:
|
8343 |
msgid "Type: %s"
|
8344 |
msgstr ""
|
8345 |
|
8346 |
#. translators: HTTP client type.
|
8347 |
-
#: lib/wordfenceClass.php:
|
8348 |
#: views/scanner/issue-checkGSB.php:8
|
8349 |
#: views/scanner/issue-commentBadURL.php:8
|
8350 |
#: views/scanner/issue-configReadable.php:12
|
@@ -8364,563 +8369,567 @@ msgstr ""
|
|
8364 |
msgid "URL"
|
8365 |
msgstr ""
|
8366 |
|
8367 |
-
#: lib/wordfenceClass.php:
|
8368 |
msgid "Unable to automatically hide file"
|
8369 |
msgstr ""
|
8370 |
|
8371 |
#. translators: 2FA backup codes.
|
8372 |
-
#: lib/wordfenceClass.php:
|
8373 |
msgid "Use one of these %s codes to log in if you are unable to access your phone. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
|
8374 |
msgstr ""
|
8375 |
|
8376 |
#. translators: 2FA backup codes.
|
8377 |
-
#: lib/wordfenceClass.php:
|
8378 |
msgid "Use one of these %s codes to log in if you lose access to your authenticator device. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
|
8379 |
msgstr ""
|
8380 |
|
8381 |
-
#: lib/wordfenceClass.php:
|
8382 |
msgid "User ID"
|
8383 |
msgstr ""
|
8384 |
|
8385 |
-
#: lib/wordfenceClass.php:
|
8386 |
msgid "WHOIS LOOKUP"
|
8387 |
msgstr ""
|
8388 |
|
8389 |
-
#: lib/wordfenceClass.php:
|
8390 |
msgid "We are about to change your <em>.htaccess</em> file. Please make a backup of this file before proceeding."
|
8391 |
msgstr ""
|
8392 |
|
8393 |
#. translators: Error message.
|
8394 |
-
#: lib/wordfenceClass.php:
|
8395 |
msgid "We can't modify your .htaccess file for you because: %s"
|
8396 |
msgstr ""
|
8397 |
|
8398 |
#. translators: Error message.
|
8399 |
-
#: lib/wordfenceClass.php:
|
8400 |
msgid "We encountered a problem"
|
8401 |
msgstr ""
|
8402 |
|
8403 |
#. translators: URL.
|
8404 |
-
#: lib/wordfenceClass.php:
|
8405 |
msgid "Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future."
|
8406 |
msgstr ""
|
8407 |
|
8408 |
#. translators: URL.
|
8409 |
-
#: lib/wordfenceClass.php:
|
8410 |
msgid "Wordfence is working..."
|
8411 |
msgstr ""
|
8412 |
|
8413 |
-
#: lib/wordfenceClass.php:
|
8414 |
msgid "You are using Nginx as your web server. You'll need to disable autoindexing in your nginx.conf. See the <a target='_blank' rel='noopener noreferrer' href='http://nginx.org/en/docs/http/ngx_http_autoindex_module.html'>Nginx docs for more info</a> on how to do this."
|
8415 |
msgstr ""
|
8416 |
|
8417 |
-
#: lib/wordfenceClass.php:
|
8418 |
msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files."
|
8419 |
msgstr ""
|
8420 |
|
8421 |
-
#: lib/wordfenceClass.php:
|
8422 |
msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>"
|
8423 |
msgstr ""
|
8424 |
|
8425 |
-
#: lib/wordfenceClass.php:
|
8426 |
msgid "You forgot to include a reason you're blocking this IP range. We ask you to include this for your own record keeping."
|
8427 |
msgstr ""
|
8428 |
|
8429 |
-
#: lib/wordfenceClass.php:
|
8430 |
msgid "You have unsaved changes to your options. If you leave this page, those changes will be lost."
|
8431 |
msgstr ""
|
8432 |
|
8433 |
-
#: lib/wordfenceClass.php:
|
8434 |
msgid "Your .htaccess has been updated successfully. Please verify your site is functioning normally."
|
8435 |
msgstr ""
|
8436 |
|
8437 |
#. translators: Email address.
|
8438 |
-
#: lib/wordfenceClass.php:
|
8439 |
msgid "Your Wordfence activity log was sent to %s"
|
8440 |
msgstr ""
|
8441 |
|
8442 |
#. translators: Email address.
|
8443 |
-
#: lib/wordfenceClass.php:
|
8444 |
msgid "Your rules have been updated successfully."
|
8445 |
msgstr ""
|
8446 |
|
8447 |
-
#: lib/wordfenceClass.php:
|
8448 |
msgid "Your rules have been updated successfully. You are currently using the free version of Wordfence. Upgrade to Wordfence premium to have your rules updated automatically as new threats emerge. <a href=\"https://www.wordfence.com/wafUpdateRules1/wordfence-signup/\">Click here to purchase a premium license</a>. <em>Note: Your rules will still update every 30 days as a free user.</em>"
|
8449 |
msgstr ""
|
8450 |
|
8451 |
#. translators: wp_mail() return value.
|
8452 |
-
#: lib/wordfenceClass.php:
|
8453 |
msgid "Your test email was sent to the requested email address. The result we received from the WordPress wp_mail() function was: %s<br /><br />A 'True' result means WordPress thinks the mail was sent without errors. A 'False' result means that WordPress encountered an error sending your mail. Note that it's possible to get a 'True' response with an error elsewhere in your mail system that may cause emails to not be delivered."
|
8454 |
msgstr ""
|
8455 |
|
8456 |
#. translators: wp_mail() return value.
|
8457 |
-
#: lib/wordfenceClass.php:
|
8458 |
msgid "blocked by firewall"
|
8459 |
msgstr ""
|
8460 |
|
8461 |
#. translators: Reason for firewall action.
|
8462 |
-
#: lib/wordfenceClass.php:
|
8463 |
msgid "blocked by firewall for %s"
|
8464 |
msgstr ""
|
8465 |
|
8466 |
#. translators: Reason for firewall action.
|
8467 |
-
#: lib/wordfenceClass.php:
|
8468 |
msgid "blocked by real-time IP blocklist"
|
8469 |
msgstr ""
|
8470 |
|
8471 |
-
#: lib/wordfenceClass.php:
|
8472 |
msgid "blocked by the Wordfence Security Network"
|
8473 |
msgstr ""
|
8474 |
|
8475 |
#. translators: Reason for firewall action.
|
8476 |
-
#: lib/wordfenceClass.php:
|
8477 |
msgid "blocked for %s"
|
8478 |
msgstr ""
|
8479 |
|
8480 |
#. translators: Reason for firewall action.
|
8481 |
-
#: lib/wordfenceClass.php:
|
8482 |
msgid "locked out from logging in"
|
8483 |
msgstr ""
|
8484 |
|
8485 |
-
#: lib/wordfenceClass.php:
|
8486 |
msgid "Wordfence generated an error on activation. The output we received during activation was:"
|
8487 |
msgstr ""
|
8488 |
|
8489 |
-
#: lib/wordfenceClass.php:
|
8490 |
msgid "Wordfence could not register with the Wordfence scanning servers when it activated."
|
8491 |
msgstr ""
|
8492 |
|
8493 |
-
#: lib/wordfenceClass.php:
|
8494 |
msgid "You can try to fix this by deactivating Wordfence and then activating it again, so Wordfence will retry registering for you. If you keep seeing this error, it usually means your WordPress server can't connect to our scanning servers, or your wfConfig database table cannot be created to save the key. You can try asking your host to allow your server to connect to noc1.wordfence.com or check the wfConfig database table and database privileges."
|
8495 |
msgstr ""
|
8496 |
|
8497 |
-
#: lib/wordfenceClass.php:
|
8498 |
msgid "The Wordfence Web Application Firewall cannot run."
|
8499 |
msgstr ""
|
8500 |
|
8501 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
8502 |
-
#: lib/wordfenceClass.php:
|
8503 |
msgid "The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by <a href=\"%1$s\">clicking here</a>. It will automatically resume normal operation when it is fixed. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
|
8504 |
msgstr ""
|
8505 |
|
8506 |
-
#: lib/wordfenceClass.php:
|
8507 |
-
|
|
|
|
|
|
|
|
|
8508 |
msgid "The Wordfence Web Application Firewall needs a configuration update."
|
8509 |
msgstr ""
|
8510 |
|
8511 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
8512 |
-
#: lib/wordfenceClass.php:
|
8513 |
msgid "It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a>. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
|
8514 |
msgstr ""
|
8515 |
|
8516 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
8517 |
-
#: lib/wordfenceClass.php:
|
8518 |
msgid "It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a> or use the \"Optimize the Wordfence Firewall\" button on the Firewall Options page. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
|
8519 |
msgstr ""
|
8520 |
|
8521 |
-
#: lib/wordfenceClass.php:
|
8522 |
msgid "The Wordfence Web Application Firewall is in read-only mode."
|
8523 |
msgstr ""
|
8524 |
|
8525 |
-
#: lib/wordfenceClass.php:
|
8526 |
msgid "This site is currently using PHP's built in REMOTE_ADDR."
|
8527 |
msgstr ""
|
8528 |
|
8529 |
-
#: lib/wordfenceClass.php:
|
8530 |
msgid "This site is currently using the X-Forwarded-For HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
|
8531 |
msgstr ""
|
8532 |
|
8533 |
-
#: lib/wordfenceClass.php:
|
8534 |
msgid "This site is currently using the X-Real-IP HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
|
8535 |
msgstr ""
|
8536 |
|
8537 |
-
#: lib/wordfenceClass.php:
|
8538 |
msgid "This site is currently using the Cloudflare \"CF-Connecting-IP\" HTTP header, which should only be used when the site is behind Cloudflare."
|
8539 |
msgstr ""
|
8540 |
|
8541 |
-
#: lib/wordfenceClass.php:
|
8542 |
msgid "Your 'How does Wordfence get IPs' setting is misconfigured."
|
8543 |
msgstr ""
|
8544 |
|
8545 |
-
#: lib/wordfenceClass.php:
|
8546 |
msgid "Click here to use the recommended setting"
|
8547 |
msgstr ""
|
8548 |
|
8549 |
-
#: lib/wordfenceClass.php:
|
8550 |
#: views/onboarding/fresh-install.php:39
|
8551 |
msgid "or"
|
8552 |
msgstr ""
|
8553 |
|
8554 |
-
#: lib/wordfenceClass.php:
|
8555 |
msgid "visit the options page"
|
8556 |
msgstr ""
|
8557 |
|
8558 |
-
#: lib/wordfenceClass.php:
|
8559 |
msgid "to manually update it."
|
8560 |
msgstr ""
|
8561 |
|
8562 |
-
#: lib/wordfenceClass.php:
|
8563 |
msgid "Do you want Wordfence to stay up-to-date automatically?"
|
8564 |
msgstr ""
|
8565 |
|
8566 |
-
#: lib/wordfenceClass.php:
|
8567 |
msgid "Yes, enable auto-update."
|
8568 |
msgstr ""
|
8569 |
|
8570 |
-
#: lib/wordfenceClass.php:
|
8571 |
msgid "No thanks."
|
8572 |
msgstr ""
|
8573 |
|
8574 |
#. translators: Localized date.
|
8575 |
-
#: lib/wordfenceClass.php:
|
8576 |
msgid "The last rules update for the Wordfence Web Application Firewall was unsuccessful. The last successful update check was %s, so this site may be missing new rules added since then."
|
8577 |
msgstr ""
|
8578 |
|
8579 |
#. translators: 1. Localized date. 2. WordPress admin panel URL.
|
8580 |
-
#: lib/wordfenceClass.php:
|
8581 |
msgid "You may wait for the next automatic attempt at %1$s or try to <a href=\"%2$s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8582 |
msgstr ""
|
8583 |
|
8584 |
#. translators: WordPress admin panel URL.
|
8585 |
-
#: lib/wordfenceClass.php:
|
8586 |
msgid "You may wait for the next automatic attempt or try to <a href=\"%s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8587 |
msgstr ""
|
8588 |
|
8589 |
#. translators: WordPress admin panel URL.
|
8590 |
-
#: lib/wordfenceClass.php:
|
8591 |
msgid "You may wait for the next automatic attempt at %s or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8592 |
msgstr ""
|
8593 |
|
8594 |
-
#: lib/wordfenceClass.php:
|
8595 |
msgid "You may wait for the next automatic attempt or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8596 |
msgstr ""
|
8597 |
|
8598 |
-
#: lib/wordfenceClass.php:
|
8599 |
#: models/page/wfPage.php:101
|
8600 |
msgid "Dashboard"
|
8601 |
msgstr ""
|
8602 |
|
8603 |
#. translators: Number of notifications.
|
8604 |
-
#: lib/wordfenceClass.php:
|
8605 |
msgid "You have %d new Wordfence notification."
|
8606 |
msgid_plural "You have %d new Wordfence notifications."
|
8607 |
msgstr[0] ""
|
8608 |
msgstr[1] ""
|
8609 |
|
8610 |
-
#: lib/wordfenceClass.php:
|
8611 |
msgid "JavaScript Errors"
|
8612 |
msgstr ""
|
8613 |
|
8614 |
-
#: lib/wordfenceClass.php:
|
8615 |
msgid "Malware URLs"
|
8616 |
msgstr ""
|
8617 |
|
8618 |
#. translators: WordPress admin panel URL.
|
8619 |
-
#: lib/wordfenceClass.php:
|
8620 |
-
#: lib/wordfenceClass.php:
|
8621 |
msgid "<a href=\"%s\">Click here</a> to rebuild the configuration file."
|
8622 |
msgstr ""
|
8623 |
|
8624 |
#. translators: File path.
|
8625 |
-
#: lib/wordfenceClass.php:
|
8626 |
-
#: lib/wordfenceClass.php:
|
8627 |
msgid "We were unable to write to %s which the WAF uses for storage. Please update permissions on the parent directory so the web server can write to it."
|
8628 |
msgstr ""
|
8629 |
|
8630 |
-
#: lib/wordfenceClass.php:
|
8631 |
-
#: lib/wordfenceClass.php:
|
8632 |
msgid "An error occured when fetching the WAF configuration from the database."
|
8633 |
msgstr ""
|
8634 |
|
8635 |
#. translators: Plugin name.
|
8636 |
-
#: lib/wordfenceClass.php:
|
8637 |
msgid "The Wordfence Live Traffic feature has been disabled because you have %s active which is not compatible with Wordfence Live Traffic."
|
8638 |
msgstr ""
|
8639 |
|
8640 |
#. translators: 1. Plugin name.
|
8641 |
-
#: lib/wordfenceClass.php:
|
8642 |
msgid "If you want to reenable Wordfence Live Traffic, you need to deactivate %1$s and then go to the Wordfence options page and reenable Live Traffic there. Wordfence does work with %1$s, however Live Traffic will be disabled and the Wordfence firewall will also count less hits per visitor because of the %1$s caching function. All other functions should work correctly."
|
8643 |
msgstr ""
|
8644 |
|
8645 |
#. translators: File path.
|
8646 |
-
#: lib/wordfenceClass.php:
|
8647 |
msgid "The file <code>%s</code> was restored successfully."
|
8648 |
msgstr ""
|
8649 |
|
8650 |
-
#: lib/wordfenceClass.php:
|
8651 |
msgid "There was an error restoring the file."
|
8652 |
msgstr ""
|
8653 |
|
8654 |
-
#: lib/wordfenceClass.php:
|
8655 |
-
#: lib/wordfenceClass.php:
|
8656 |
msgid "Return to scan results"
|
8657 |
msgstr ""
|
8658 |
|
8659 |
#. translators: File path.
|
8660 |
-
#: lib/wordfenceClass.php:
|
8661 |
msgid "The file <code>%s</code> was deleted successfully."
|
8662 |
msgstr ""
|
8663 |
|
8664 |
-
#: lib/wordfenceClass.php:
|
8665 |
msgid "There was an error deleting the file."
|
8666 |
msgstr ""
|
8667 |
|
8668 |
#. translators: IP address.
|
8669 |
-
#: lib/wordfenceClass.php:
|
8670 |
msgid ""
|
8671 |
"User IP: %s\n"
|
8672 |
""
|
8673 |
msgstr ""
|
8674 |
|
8675 |
#. translators: Domain name.
|
8676 |
-
#: lib/wordfenceClass.php:
|
8677 |
msgid ""
|
8678 |
"User hostname: %s\n"
|
8679 |
""
|
8680 |
msgstr ""
|
8681 |
|
8682 |
-
#: lib/wordfenceClass.php:
|
8683 |
msgid "User location: "
|
8684 |
msgstr ""
|
8685 |
|
8686 |
#. translators: WordPress admin panel URL.
|
8687 |
-
#: lib/wordfenceClass.php:
|
8688 |
msgid "No longer an administrator for this site? Click here to stop receiving security alerts: %s"
|
8689 |
msgstr ""
|
8690 |
|
8691 |
-
#: lib/wordfenceClass.php:
|
8692 |
msgid "The IP you provided must be in dotted quad notation or use ranges with square brackets. e.g. 10.11.12.13 or 10.11.12.[1-50]"
|
8693 |
msgstr ""
|
8694 |
|
8695 |
-
#: lib/wordfenceClass.php:
|
8696 |
-
msgid "Invalid email address provided
|
8697 |
msgstr ""
|
8698 |
|
8699 |
-
#: lib/wordfenceClass.php:
|
8700 |
msgid "Test email sent successfully"
|
8701 |
msgstr ""
|
8702 |
|
8703 |
-
#: lib/wordfenceClass.php:
|
8704 |
-
msgid "Test email failed to send
|
8705 |
msgstr ""
|
8706 |
|
8707 |
#. translators: Localized date range.
|
8708 |
-
#: lib/wordfenceClass.php:
|
8709 |
msgid "Wordfence activity in the past %s"
|
8710 |
msgstr ""
|
8711 |
|
8712 |
-
#: lib/wordfenceClass.php:
|
8713 |
-
#: lib/wordfenceClass.php:
|
8714 |
-
#: lib/wordfenceClass.php:
|
8715 |
msgid "We could not find that user in the database."
|
8716 |
msgstr ""
|
8717 |
|
8718 |
-
#: lib/wordfenceClass.php:
|
8719 |
msgid "This user's email is the network admin email. It will need to be changed before deleting this user."
|
8720 |
msgstr ""
|
8721 |
|
8722 |
-
#: lib/wordfenceClass.php:
|
8723 |
msgid "Wordfence could not find your .htaccess file."
|
8724 |
msgstr ""
|
8725 |
|
8726 |
-
#: lib/wordfenceClass.php:
|
8727 |
msgid "Updating the .htaccess did not fix the issue. You may need to add <code>Options -Indexes</code> to your httpd.conf if using Apache, or find documentation on how to disable directory listing for your web server."
|
8728 |
msgstr ""
|
8729 |
|
8730 |
-
#: lib/wordfenceClass.php:
|
8731 |
msgid "There was an error writing to your .htaccess file."
|
8732 |
msgstr ""
|
8733 |
|
8734 |
-
#: lib/wordfenceClass.php:
|
8735 |
msgid "Required parameters not sent."
|
8736 |
msgstr ""
|
8737 |
|
8738 |
-
#: lib/wordfenceClass.php:
|
8739 |
msgid "The WAF is currently in read-only mode and will not save any configuration changes."
|
8740 |
msgstr ""
|
8741 |
|
8742 |
-
#: lib/wordfenceClass.php:
|
8743 |
#: views/waf/option-whitelist.php:60
|
8744 |
msgid "Allowlisted via Firewall Options page"
|
8745 |
msgstr ""
|
8746 |
|
8747 |
-
#: lib/wordfenceClass.php:
|
8748 |
msgid "Allowlisted via Live Traffic"
|
8749 |
msgstr ""
|
8750 |
|
8751 |
-
#: lib/wordfenceClass.php:
|
8752 |
-
#: lib/wordfenceClass.php:
|
8753 |
msgid "A valid server configuration was not provided."
|
8754 |
msgstr ""
|
8755 |
|
8756 |
-
#: lib/wordfenceClass.php:
|
8757 |
-
#: lib/wordfenceClass.php:
|
8758 |
msgid "Filesystem Credentials Required"
|
8759 |
msgstr ""
|
8760 |
|
8761 |
#. translators: Support URL.
|
8762 |
-
#: lib/wordfenceClass.php:
|
8763 |
-
#: lib/wordfenceClass.php:
|
8764 |
-
#: lib/wordfenceClass.php:
|
8765 |
msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>"
|
8766 |
msgstr ""
|
8767 |
|
8768 |
#. translators: Support URL.
|
8769 |
-
#: lib/wordfenceClass.php:
|
8770 |
msgid "Once you have entered credentials, click Continue to complete the setup."
|
8771 |
msgstr ""
|
8772 |
|
8773 |
-
#: lib/wordfenceClass.php:
|
8774 |
-
#: lib/wordfenceClass.php:
|
8775 |
msgid "Filesystem Permission Error"
|
8776 |
msgstr ""
|
8777 |
|
8778 |
-
#: lib/wordfenceClass.php:
|
8779 |
msgid "Manual Installation Instructions"
|
8780 |
msgstr ""
|
8781 |
|
8782 |
-
#: lib/wordfenceClass.php:
|
8783 |
msgid "Installation Successful"
|
8784 |
msgstr ""
|
8785 |
|
8786 |
-
#: lib/wordfenceClass.php:
|
8787 |
msgid "Installation Failed"
|
8788 |
msgstr ""
|
8789 |
|
8790 |
#. translators: Support URL.
|
8791 |
-
#: lib/wordfenceClass.php:
|
8792 |
-
#: lib/wordfenceClass.php:
|
8793 |
-
#: lib/wordfenceClass.php:
|
8794 |
-
#: lib/wordfenceClass.php:
|
8795 |
-
#: lib/wordfenceClass.php:
|
8796 |
#: views/waf/waf-uninstall.php:13
|
8797 |
msgid "If you cannot complete the uninstall process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>"
|
8798 |
msgstr ""
|
8799 |
|
8800 |
#. translators: Support URL.
|
8801 |
-
#: lib/wordfenceClass.php:
|
8802 |
msgid "Once you have entered credentials, click Continue to complete uninstallation."
|
8803 |
msgstr ""
|
8804 |
|
8805 |
-
#: lib/wordfenceClass.php:
|
8806 |
msgid "The <code>auto_prepend_file</code> setting has been successfully removed from <code>.htaccess</code> and <code>.user.ini</code>. Once this change takes effect, Extended Protection Mode will be disabled."
|
8807 |
msgstr ""
|
8808 |
|
8809 |
-
#: lib/wordfenceClass.php:
|
8810 |
msgid "Any previous value for <code>auto_prepend_file</code> will need to be re-enabled manually if still needed."
|
8811 |
msgstr ""
|
8812 |
|
8813 |
#. translators: Time until.
|
8814 |
-
#: lib/wordfenceClass.php:
|
8815 |
msgid "Waiting for it to take effect. This may take up to %s."
|
8816 |
msgstr ""
|
8817 |
|
8818 |
-
#: lib/wordfenceClass.php:
|
8819 |
msgid "Waiting for Changes"
|
8820 |
msgstr ""
|
8821 |
|
8822 |
-
#: lib/wordfenceClass.php:
|
8823 |
msgid "Extended Protection Mode has not been disabled. This may be because <code>auto_prepend_file</code> is configured somewhere else or the value is still cached by PHP."
|
8824 |
msgstr ""
|
8825 |
|
8826 |
-
#: lib/wordfenceClass.php:
|
8827 |
msgid "Retrying Failed."
|
8828 |
msgstr ""
|
8829 |
|
8830 |
-
#: lib/wordfenceClass.php:
|
8831 |
msgid "Try Again"
|
8832 |
msgstr ""
|
8833 |
|
8834 |
-
#: lib/wordfenceClass.php:
|
8835 |
msgid "Unable to Uninstall"
|
8836 |
msgstr ""
|
8837 |
|
8838 |
-
#: lib/wordfenceClass.php:
|
8839 |
msgid "Uninstallation Complete"
|
8840 |
msgstr ""
|
8841 |
|
8842 |
-
#: lib/wordfenceClass.php:
|
8843 |
msgid "Uninstallation Failed"
|
8844 |
msgstr ""
|
8845 |
|
8846 |
#. translators: 1. Number of attacks/blocks. 2. Time since.
|
8847 |
-
#: lib/wordfenceClass.php:
|
8848 |
msgid "The Wordfence Web Application Firewall has blocked %1$d attacks over the last %2$s. Below is a sample of these recent attacks:"
|
8849 |
msgstr ""
|
8850 |
|
8851 |
-
#: lib/wordfenceClass.php:
|
8852 |
msgid "To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:"
|
8853 |
msgstr ""
|
8854 |
|
8855 |
-
#: lib/wordfenceClass.php:
|
8856 |
msgid "Click here to configure"
|
8857 |
msgstr ""
|
8858 |
|
8859 |
#. translators: Support URL.
|
8860 |
-
#: lib/wordfenceClass.php:
|
8861 |
msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>."
|
8862 |
msgstr ""
|
8863 |
|
8864 |
-
#: lib/wordfenceClass.php:
|
8865 |
#: views/waf/waf-install-success.php:14
|
8866 |
msgid "Nice work! The firewall is now optimized."
|
8867 |
msgstr ""
|
8868 |
|
8869 |
-
#: lib/wordfenceClass.php:
|
8870 |
-
#: lib/wordfenceClass.php:
|
8871 |
#: views/waf/waf-install-success.php:16
|
8872 |
#: views/waf/waf-uninstall-success.php:19
|
8873 |
msgid "The changes have not yet taken effect. If you are using LiteSpeed or IIS as your web server or CGI/FastCGI interface, you may need to wait a few minutes for the changes to take effect since the configuration files are sometimes cached. You also may need to select a different server configuration in order to complete this step, but wait for a few minutes before trying. You can try refreshing this page."
|
8874 |
msgstr ""
|
8875 |
|
8876 |
-
#: lib/wordfenceClass.php:
|
8877 |
#: views/waf/waf-uninstall-success.php:15
|
8878 |
msgid "Uninstallation was successful!"
|
8879 |
msgstr ""
|
8880 |
|
8881 |
-
#: lib/wordfenceClass.php:
|
8882 |
#: views/waf/waf-uninstall-success.php:17
|
8883 |
msgid "Uninstallation from this site was successful! The Wordfence Firewall is still active because it is installed in another WordPress installation."
|
8884 |
msgstr ""
|
8885 |
|
8886 |
-
#: lib/wordfenceClass.php:
|
8887 |
msgid "The update was successful!"
|
8888 |
msgstr ""
|
8889 |
|
8890 |
-
#: lib/wordfenceClass.php:
|
8891 |
msgid "Auth grant is invalid."
|
8892 |
msgstr ""
|
8893 |
|
8894 |
-
#: lib/wordfenceClass.php:
|
8895 |
-
#: lib/wordfenceClass.php:
|
8896 |
msgid "Access token not found."
|
8897 |
msgstr ""
|
8898 |
|
8899 |
-
#: lib/wordfenceClass.php:
|
8900 |
-
#: lib/wordfenceClass.php:
|
8901 |
msgid "Invalid response from Wordfence Central."
|
8902 |
msgstr ""
|
8903 |
|
8904 |
-
#: lib/wordfenceClass.php:
|
8905 |
msgid "Auth grant not found."
|
8906 |
msgstr ""
|
8907 |
|
8908 |
-
#: lib/wordfenceClass.php:
|
8909 |
msgid "We were unable to create the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot write to the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the installation."
|
8910 |
msgstr ""
|
8911 |
|
8912 |
-
#: lib/wordfenceClass.php:
|
8913 |
-
#: lib/wordfenceClass.php:
|
8914 |
msgid "We were unable to make changes to the .htaccess file. It's possible WordPress cannot write to the .htaccess file because of file permissions, which may have been set by another security plugin, or you may have set them manually. Please verify the permissions allow the web server to write to the file, and retry the installation."
|
8915 |
msgstr ""
|
8916 |
|
8917 |
#. translators: File path.
|
8918 |
-
#: lib/wordfenceClass.php:
|
8919 |
-
#: lib/wordfenceClass.php:
|
8920 |
msgid "We were unable to make changes to the %1$s file. It's possible WordPress cannot write to the %1$s file because of file permissions. Please verify the permissions are correct and retry the installation."
|
8921 |
msgstr ""
|
8922 |
|
8923 |
-
#: lib/wordfenceClass.php:
|
8924 |
msgid "We were unable to remove the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot remove the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the removal."
|
8925 |
msgstr ""
|
8926 |
|
@@ -10400,7 +10409,7 @@ msgid "This email was sent from your website <a href=\"%1$s\">%1$s</a> and is a
|
|
10400 |
msgstr ""
|
10401 |
|
10402 |
#: views/reports/activity-report-email-inline.php:134
|
10403 |
-
msgid "NOTE: You are using the free version of Wordfence and are missing out on features like
|
10404 |
msgstr ""
|
10405 |
|
10406 |
#: views/reports/activity-report-email-inline.php:138
|
2 |
# This file is distributed under the same license as the Wordfence Security plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Wordfence Security 7.5.2\n"
|
6 |
+
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wordfence\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2021-04-05T20:09:14+00:00\n"
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
"X-Generator: WP-CLI 2.4.0\n"
|
15 |
"X-Domain: wordfence\n"
|
57 |
#: lib/dashboard/widget_content_logins.php:7
|
58 |
#: lib/dashboard/widget_ips.php:115
|
59 |
#: lib/dashboard/widget_logins.php:96
|
60 |
+
#: lib/wordfenceClass.php:6105
|
61 |
#: views/reports/activity-report-email-inline.php:146
|
62 |
#: views/reports/activity-report.php:16
|
63 |
#: views/waf/option-whitelist.php:110
|
68 |
|
69 |
#: lib/dashboard/widget_content_logins.php:6
|
70 |
#: lib/dashboard/widget_logins.php:95
|
71 |
+
#: lib/wordfenceClass.php:6180
|
72 |
#: views/reports/activity-report-email-inline.php:256
|
73 |
#: views/reports/activity-report.php:106
|
74 |
msgid "Username"
|
91 |
|
92 |
#: lib/dashboard/widget_countries.php:25
|
93 |
#: lib/dashboard/widget_networkattacks.php:8
|
94 |
+
#: lib/wfDiagnostic.php:784
|
95 |
msgid "Wordfence Network"
|
96 |
msgstr ""
|
97 |
|
133 |
#. translators: WordPress username.
|
134 |
#: lib/dashboard/widget_ips.php:96
|
135 |
#: lib/dashboard/widget_logins.php:77
|
136 |
+
#: lib/wordfenceClass.php:6051
|
137 |
msgid "An error occurred"
|
138 |
msgstr ""
|
139 |
|
224 |
msgstr ""
|
225 |
|
226 |
#: lib/dashboard/widget_notifications.php:8
|
227 |
+
#: lib/wordfenceClass.php:6654
|
228 |
msgid "Notifications"
|
229 |
msgstr ""
|
230 |
|
299 |
#: lib/menu_tools_diagnostic.php:981
|
300 |
#: lib/menu_tools_twoFactor.php:235
|
301 |
#: lib/menu_tools_twoFactor.php:273
|
302 |
+
#: lib/wordfenceClass.php:7944
|
303 |
+
#: lib/wordfenceClass.php:7988
|
304 |
+
#: lib/wordfenceClass.php:8052
|
305 |
+
#: lib/wordfenceClass.php:8112
|
306 |
+
#: lib/wordfenceClass.php:8158
|
307 |
#: views/blocking/block-list.php:501
|
308 |
#: views/blocking/blocking-create.php:212
|
309 |
#: views/dashboard/options-group-license.php:150
|
545 |
msgid "Update includes security-related fixes."
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: lib/email_newIssues.php:126
|
549 |
msgid "The malicious URL matched"
|
550 |
msgstr ""
|
551 |
|
552 |
#. translators: Number of scan results
|
553 |
+
#: lib/email_newIssues.php:135
|
554 |
msgid "%d existing issue was found again and is not shown."
|
555 |
msgid_plural "%d existing issues were found again and are not shown."
|
556 |
msgstr[0] ""
|
557 |
msgstr[1] ""
|
558 |
|
559 |
#. translators: Number of scan results
|
560 |
+
#: lib/email_newIssues.php:138
|
561 |
msgid "%d issue was omitted from this email due to length limits."
|
562 |
msgid_plural "%d issues were omitted from this email due to length limits."
|
563 |
msgstr[0] ""
|
564 |
msgstr[1] ""
|
565 |
|
566 |
#. translators: Number of scan results
|
567 |
+
#: lib/email_newIssues.php:139
|
568 |
msgid "View every issue:"
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: lib/email_newIssues.php:148
|
572 |
msgid "NOTE: You are using the free version of Wordfence. Upgrade today:"
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: lib/email_newIssues.php:151
|
576 |
msgid "Receive real-time Firewall and Scan engine rule updates for protection as threats emerge"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: lib/email_newIssues.php:152
|
580 |
msgid "Real-time IP Blocklist blocks the most malicious IPs from accessing your site"
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: lib/email_newIssues.php:153
|
584 |
msgid "Country blocking"
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: lib/email_newIssues.php:154
|
588 |
msgid "IP reputation monitoring"
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: lib/email_newIssues.php:155
|
592 |
msgid "Schedule scans to run more frequently and at optimal times"
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: lib/email_newIssues.php:156
|
596 |
msgid "Access to Premium Support"
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: lib/email_newIssues.php:157
|
600 |
msgid "Discounts for multi-year and multi-license purchases"
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: lib/email_newIssues.php:160
|
604 |
msgid "Click here to upgrade to Wordfence Premium:"
|
605 |
msgstr ""
|
606 |
|
717 |
msgstr ""
|
718 |
|
719 |
#: lib/menu_dashboard.php:24
|
720 |
+
#: lib/wordfenceClass.php:6556
|
721 |
msgid "Wordfence Dashboard"
|
722 |
msgstr ""
|
723 |
|
729 |
#: lib/menu_dashboard_options.php:98
|
730 |
#: lib/menu_firewall.php:20
|
731 |
#: lib/menu_firewall.php:30
|
732 |
+
#: lib/wordfenceClass.php:6560
|
733 |
#: models/page/wfPage.php:105
|
734 |
msgid "Firewall"
|
735 |
msgstr ""
|
766 |
#: lib/menu_dashboard_options.php:115
|
767 |
#: lib/menu_scanner.php:31
|
768 |
#: lib/menu_scanner.php:305
|
769 |
+
#: lib/wordfenceClass.php:6567
|
770 |
#: models/page/wfPage.php:113
|
771 |
msgid "Scan"
|
772 |
msgstr ""
|
930 |
msgstr ""
|
931 |
|
932 |
#: lib/menu_dashboard.php:220
|
933 |
+
#: lib/wordfenceClass.php:6571
|
934 |
msgid "Tools"
|
935 |
msgstr ""
|
936 |
|
942 |
#: lib/menu_firewall_waf.php:157
|
943 |
#: lib/menu_scanner.php:139
|
944 |
#: lib/menu_support.php:19
|
945 |
+
#: lib/wordfenceClass.php:6584
|
946 |
msgid "Help"
|
947 |
msgstr ""
|
948 |
|
1160 |
#: lib/menu_firewall.php:41
|
1161 |
#: lib/menu_firewall_blocking.php:119
|
1162 |
#: lib/menu_firewall_waf.php:142
|
1163 |
+
#: lib/wordfenceClass.php:6562
|
1164 |
#: models/page/wfPage.php:109
|
1165 |
msgid "Blocking"
|
1166 |
msgstr ""
|
1348 |
#: lib/menu_tools_diagnostic.php:300
|
1349 |
#: lib/menu_tools_diagnostic.php:301
|
1350 |
#: lib/menu_tools_diagnostic.php:304
|
1351 |
+
#: lib/wordfenceClass.php:6077
|
1352 |
#: models/firewall/wfFirewall.php:41
|
1353 |
#: views/diagnostics/text.php:154
|
1354 |
#: views/diagnostics/text.php:159
|
1469 |
|
1470 |
#: lib/menu_options.php:24
|
1471 |
#: lib/menu_options.php:262
|
1472 |
+
#: lib/wordfenceClass.php:6579
|
1473 |
msgid "All Options"
|
1474 |
msgstr ""
|
1475 |
|
2108 |
msgstr ""
|
2109 |
|
2110 |
#: lib/menu_scanner.php:80
|
2111 |
+
#: lib/wordfenceClass.php:6595
|
2112 |
msgid "Protect More Sites"
|
2113 |
msgstr ""
|
2114 |
|
2191 |
#: lib/menu_tools_twoFactor.php:255
|
2192 |
#: lib/menu_tools_twoFactor.php:264
|
2193 |
#: lib/menu_tools_twoFactor.php:284
|
2194 |
+
#: lib/wordfenceClass.php:4927
|
2195 |
+
#: lib/wordfenceClass.php:4933
|
2196 |
+
#: lib/wordfenceClass.php:4939
|
2197 |
+
#: lib/wordfenceClass.php:4946
|
2198 |
+
#: lib/wordfenceClass.php:4952
|
2199 |
+
#: lib/wordfenceClass.php:4959
|
2200 |
+
#: lib/wordfenceClass.php:4967
|
2201 |
+
#: lib/wordfenceClass.php:6019
|
2202 |
+
#: lib/wordfenceClass.php:6021
|
2203 |
+
#: lib/wordfenceClass.php:6072
|
2204 |
+
#: lib/wordfenceClass.php:7969
|
2205 |
+
#: lib/wordfenceClass.php:7976
|
2206 |
+
#: lib/wordfenceClass.php:8083
|
2207 |
+
#: lib/wordfenceClass.php:8147
|
2208 |
#: views/dashboard/options-group-import.php:147
|
2209 |
#: views/dashboard/options-group-import.php:157
|
2210 |
#: views/dashboard/options-group-import.php:177
|
2460 |
#: lib/menu_tools_diagnostic.php:318
|
2461 |
#: lib/menu_tools_diagnostic.php:319
|
2462 |
#: lib/menu_tools_diagnostic.php:329
|
2463 |
+
#: lib/wfDiagnostic.php:368
|
2464 |
#: views/diagnostics/text.php:86
|
2465 |
#: views/diagnostics/text.php:127
|
2466 |
#: views/diagnostics/text.php:128
|
2524 |
#: lib/menu_tools_diagnostic.php:319
|
2525 |
#: lib/menu_tools_diagnostic.php:323
|
2526 |
#: lib/menu_tools_livetraffic.php:152
|
2527 |
+
#: lib/wfDiagnostic.php:358
|
2528 |
+
#: lib/wfDiagnostic.php:380
|
2529 |
#: views/diagnostics/text.php:124
|
2530 |
#: views/diagnostics/text.php:135
|
2531 |
#: views/diagnostics/text.php:137
|
2565 |
#: lib/menu_tools_diagnostic.php:319
|
2566 |
#: lib/menu_tools_diagnostic.php:323
|
2567 |
#: lib/menu_tools_livetraffic.php:153
|
2568 |
+
#: lib/wfDiagnostic.php:358
|
2569 |
+
#: lib/wfDiagnostic.php:380
|
2570 |
#: views/diagnostics/text.php:124
|
2571 |
#: views/diagnostics/text.php:151
|
2572 |
#: views/diagnostics/text.php:164
|
2601 |
#: lib/menu_tools_diagnostic.php:267
|
2602 |
#: lib/menu_tools_diagnostic.php:270
|
2603 |
#: lib/menu_tools_diagnostic.php:271
|
2604 |
+
#: lib/wfDiagnostic.php:581
|
2605 |
#: views/diagnostics/text.php:126
|
2606 |
#: views/diagnostics/text.php:129
|
2607 |
#: views/diagnostics/text.php:130
|
2613 |
#: lib/menu_tools_diagnostic.php:267
|
2614 |
#: lib/menu_tools_diagnostic.php:270
|
2615 |
#: lib/menu_tools_diagnostic.php:271
|
2616 |
+
#: lib/wfDiagnostic.php:581
|
2617 |
#: views/diagnostics/text.php:126
|
2618 |
#: views/diagnostics/text.php:129
|
2619 |
#: views/diagnostics/text.php:130
|
2746 |
|
2747 |
#: lib/menu_tools_diagnostic.php:285
|
2748 |
#: lib/menu_tools_diagnostic.php:312
|
2749 |
+
#: lib/wfDiagnostic.php:203
|
2750 |
+
#: lib/wfDiagnostic.php:365
|
2751 |
+
#: lib/wfDiagnostic.php:416
|
2752 |
#: views/diagnostics/text.php:144
|
2753 |
#: views/diagnostics/text.php:171
|
2754 |
#: views/scanner/issue-base.php:116
|
2857 |
msgstr ""
|
2858 |
|
2859 |
#: lib/menu_tools_diagnostic.php:303
|
2860 |
+
#: lib/wordfenceClass.php:4246
|
2861 |
#: views/diagnostics/text.php:162
|
2862 |
msgid "Never"
|
2863 |
msgstr ""
|
3144 |
|
3145 |
#: lib/menu_tools_diagnostic.php:731
|
3146 |
#: lib/menu_tools_diagnostic.php:770
|
3147 |
+
#: lib/wordfenceClass.php:6080
|
3148 |
msgid "Download"
|
3149 |
msgstr ""
|
3150 |
|
3174 |
msgstr ""
|
3175 |
|
3176 |
#: lib/menu_tools_diagnostic.php:810
|
3177 |
+
#: lib/wordfenceClass.php:3951
|
3178 |
#: views/diagnostics/text.php:584
|
3179 |
msgid "No New Issues"
|
3180 |
msgstr ""
|
3244 |
msgstr ""
|
3245 |
|
3246 |
#: lib/menu_tools_diagnostic.php:960
|
3247 |
+
#: lib/wordfenceClass.php:6141
|
3248 |
msgid "Restore Defaults"
|
3249 |
msgstr ""
|
3250 |
|
3251 |
#: lib/menu_tools_diagnostic.php:961
|
3252 |
+
#: lib/wordfenceClass.php:6066
|
3253 |
msgid "Cancel Changes"
|
3254 |
msgstr ""
|
3255 |
|
3256 |
#: lib/menu_tools_diagnostic.php:962
|
3257 |
+
#: lib/wordfenceClass.php:6144
|
3258 |
msgid "Save Changes"
|
3259 |
msgstr ""
|
3260 |
|
3287 |
#: lib/menu_tools_livetraffic.php:41
|
3288 |
#: lib/menu_tools_livetraffic.php:571
|
3289 |
#: lib/menu_tools_livetraffic.php:602
|
3290 |
+
#: lib/wordfenceClass.php:6573
|
3291 |
#: models/page/wfPage.php:119
|
3292 |
msgid "Live Traffic"
|
3293 |
msgstr ""
|
3334 |
#: lib/menu_tools_livetraffic.php:100
|
3335 |
#: lib/menu_tools_livetraffic.php:227
|
3336 |
#: lib/menu_tools_livetraffic.php:458
|
3337 |
+
#: lib/wordfenceClass.php:6103
|
3338 |
msgid "Human"
|
3339 |
msgstr ""
|
3340 |
|
3341 |
#: lib/menu_tools_livetraffic.php:101
|
3342 |
#: lib/menu_tools_livetraffic.php:228
|
3343 |
#: lib/menu_tools_livetraffic.php:458
|
3344 |
+
#: lib/wordfenceClass.php:6065
|
3345 |
msgid "Bot"
|
3346 |
msgstr ""
|
3347 |
|
3350 |
msgstr ""
|
3351 |
|
3352 |
#: lib/menu_tools_livetraffic.php:103
|
3353 |
+
#: lib/wfDiagnostic.php:751
|
3354 |
+
#: lib/wordfenceClass.php:6057
|
3355 |
msgid "Blocked"
|
3356 |
msgstr ""
|
3357 |
|
3444 |
msgstr ""
|
3445 |
|
3446 |
#: lib/menu_tools_livetraffic.php:286
|
3447 |
+
#: lib/wordfenceClass.php:6172
|
3448 |
msgid "Type"
|
3449 |
msgstr ""
|
3450 |
|
3467 |
msgstr ""
|
3468 |
|
3469 |
#: lib/menu_tools_livetraffic.php:291
|
3470 |
+
#: lib/wordfenceClass.php:4228
|
3471 |
#: views/blocking/blocking-create.php:193
|
3472 |
msgid "Hostname"
|
3473 |
msgstr ""
|
3834 |
msgstr ""
|
3835 |
|
3836 |
#: lib/menu_tools_whois.php:95
|
3837 |
+
#: lib/wordfenceClass.php:6085
|
3838 |
msgid "Enter a valid IP or domain"
|
3839 |
msgstr ""
|
3840 |
|
3841 |
#: lib/menu_tools_whois.php:95
|
3842 |
+
#: lib/wordfenceClass.php:6128
|
3843 |
msgid "Please enter a valid IP address or domain name for your whois lookup."
|
3844 |
msgstr ""
|
3845 |
|
3846 |
#: lib/menu_tools_whois.php:99
|
3847 |
+
#: lib/wordfenceClass.php:6109
|
3848 |
msgid "Loading..."
|
3849 |
msgstr ""
|
3850 |
|
3851 |
#: lib/menu_tools_whois.php:104
|
3852 |
+
#: lib/wordfenceClass.php:6115
|
3853 |
msgid "Look up IP or Domain"
|
3854 |
msgstr ""
|
3855 |
|
3879 |
|
3880 |
#: lib/menu_wordfence_central.php:44
|
3881 |
#: lib/menu_wordfence_central.php:57
|
3882 |
+
#: lib/wordfenceClass.php:6589
|
3883 |
msgid "Wordfence Central"
|
3884 |
msgstr ""
|
3885 |
|
3962 |
#. translators: Error message.
|
3963 |
#: lib/rest-api/wfRESTConfigController.php:215
|
3964 |
#: lib/rest-api/wfRESTConfigController.php:258
|
3965 |
+
#: lib/wordfenceClass.php:4512
|
3966 |
msgid "An error occurred while saving the configuration: %s"
|
3967 |
msgstr ""
|
3968 |
|
3969 |
#. translators: Error message.
|
3970 |
#: lib/rest-api/wfRESTConfigController.php:226
|
3971 |
#: lib/rest-api/wfRESTConfigController.php:269
|
3972 |
+
#: lib/wordfenceClass.php:4521
|
3973 |
msgid "Errors occurred while saving the configuration: %s"
|
3974 |
msgstr ""
|
3975 |
|
3976 |
#: lib/rest-api/wfRESTConfigController.php:231
|
3977 |
#: lib/rest-api/wfRESTConfigController.php:274
|
3978 |
+
#: lib/wordfenceClass.php:4526
|
3979 |
msgid "Errors occurred while saving the configuration."
|
3980 |
msgstr ""
|
3981 |
|
4093 |
msgstr ""
|
4094 |
|
4095 |
#: lib/wfActivityReport.php:584
|
4096 |
+
#: lib/wordfenceClass.php:8322
|
4097 |
msgid "Blocked because the IP is blocklisted"
|
4098 |
msgstr ""
|
4099 |
|
4100 |
#. translators: Reason for firewall action.
|
4101 |
#: lib/wfActivityReport.php:587
|
4102 |
+
#: lib/wordfenceClass.php:8325
|
4103 |
msgid "Blocked for %s"
|
4104 |
msgstr ""
|
4105 |
|
4106 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4107 |
#: lib/wfActivityReport.php:599
|
4108 |
+
#: lib/wordfenceClass.php:8339
|
4109 |
msgid "Blocked for %1$s in query string: %2$s = %3$s"
|
4110 |
msgstr ""
|
4111 |
|
4112 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4113 |
#: lib/wfActivityReport.php:602
|
4114 |
+
#: lib/wordfenceClass.php:8344
|
4115 |
msgid "Blocked for %1$s in POST body: %2$s = %3$s"
|
4116 |
msgstr ""
|
4117 |
|
4118 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4119 |
#: lib/wfActivityReport.php:605
|
4120 |
+
#: lib/wordfenceClass.php:8349
|
4121 |
msgid "Blocked for %1$s in cookie: %2$s = %3$s"
|
4122 |
msgstr ""
|
4123 |
|
4124 |
#. translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value.
|
4125 |
#: lib/wfActivityReport.php:608
|
4126 |
+
#: lib/wordfenceClass.php:8354
|
4127 |
msgid "Blocked for %1$s in file: %2$s = %3$s"
|
4128 |
msgstr ""
|
4129 |
|
4130 |
#: lib/wfActivityReport.php:752
|
4131 |
+
#: lib/wfDiagnostic.php:483
|
4132 |
#: models/block/wfBlock.php:95
|
4133 |
msgid "Unknown"
|
4134 |
msgstr ""
|
4135 |
|
4136 |
#: lib/wfAdminNoticeQueue.php:180
|
4137 |
+
#: lib/wordfenceClass.php:6078
|
4138 |
+
#: lib/wordfenceClass.php:6333
|
4139 |
+
#: lib/wordfenceClass.php:8874
|
4140 |
msgid "Dismiss"
|
4141 |
msgstr ""
|
4142 |
|
5363 |
msgstr ""
|
5364 |
|
5365 |
#: lib/wfConfig.php:1174
|
5366 |
+
#: lib/wordfenceClass.php:7432
|
5367 |
msgid "The grace period end time must be in the future."
|
5368 |
msgstr ""
|
5369 |
|
5401 |
msgstr ""
|
5402 |
|
5403 |
#: lib/wfConfig.php:1300
|
5404 |
+
#: lib/wordfenceClass.php:4397
|
5405 |
msgid "The license key entered is not in a valid format. It must contain only numbers and the letters A-F."
|
5406 |
msgstr ""
|
5407 |
|
5495 |
msgstr ""
|
5496 |
|
5497 |
#: lib/wfDiagnostic.php:85
|
5498 |
+
msgid "Configured WAF storage engine (WFWAF_STORAGE_ENGINE)"
|
5499 |
msgstr ""
|
5500 |
|
5501 |
#: lib/wfDiagnostic.php:86
|
5502 |
+
msgid "Active WAF storage engine"
|
5503 |
msgstr ""
|
5504 |
|
5505 |
#: lib/wfDiagnostic.php:87
|
5506 |
+
msgid "WAF log path"
|
5507 |
msgstr ""
|
5508 |
|
5509 |
#: lib/wfDiagnostic.php:88
|
5510 |
+
msgid "WAF subdirectory installation"
|
5511 |
msgstr ""
|
5512 |
|
5513 |
#: lib/wfDiagnostic.php:89
|
5514 |
+
msgid "wordfence-waf.php path"
|
5515 |
msgstr ""
|
5516 |
|
5517 |
#: lib/wfDiagnostic.php:90
|
5518 |
+
msgid "WAF File Permissions"
|
5519 |
+
msgstr ""
|
5520 |
+
|
5521 |
+
#: lib/wfDiagnostic.php:91
|
5522 |
msgid "Recently removed wflogs files"
|
5523 |
msgstr ""
|
5524 |
|
5525 |
+
#: lib/wfDiagnostic.php:95
|
5526 |
msgid "Database version and privileges."
|
5527 |
msgstr ""
|
5528 |
|
5529 |
+
#: lib/wfDiagnostic.php:97
|
5530 |
msgid "Database Version"
|
5531 |
msgstr ""
|
5532 |
|
5533 |
+
#: lib/wfDiagnostic.php:98
|
5534 |
msgid "Checking if MySQL user has <code>DELETE</code> privilege"
|
5535 |
msgstr ""
|
5536 |
|
5537 |
+
#: lib/wfDiagnostic.php:99
|
5538 |
msgid "Checking if MySQL user has <code>INSERT</code> privilege"
|
5539 |
msgstr ""
|
5540 |
|
5541 |
+
#: lib/wfDiagnostic.php:100
|
5542 |
msgid "Checking if MySQL user has <code>UPDATE</code> privilege"
|
5543 |
msgstr ""
|
5544 |
|
5545 |
+
#: lib/wfDiagnostic.php:101
|
5546 |
msgid "Checking if MySQL user has <code>SELECT</code> privilege"
|
5547 |
msgstr ""
|
5548 |
|
5549 |
+
#: lib/wfDiagnostic.php:102
|
5550 |
msgid "Checking if MySQL user has <code>CREATE TABLE</code> privilege"
|
5551 |
msgstr ""
|
5552 |
|
5553 |
+
#: lib/wfDiagnostic.php:103
|
5554 |
msgid "Checking if MySQL user has <code>ALTER TABLE</code> privilege"
|
5555 |
msgstr ""
|
5556 |
|
5557 |
+
#: lib/wfDiagnostic.php:104
|
5558 |
msgid "Checking if MySQL user has <code>DROP</code> privilege"
|
5559 |
msgstr ""
|
5560 |
|
5561 |
+
#: lib/wfDiagnostic.php:105
|
5562 |
msgid "Checking if MySQL user has <code>TRUNCATE</code> privilege"
|
5563 |
msgstr ""
|
5564 |
|
5565 |
+
#: lib/wfDiagnostic.php:109
|
5566 |
msgid "PHP version, important PHP extensions."
|
5567 |
msgstr ""
|
5568 |
|
5569 |
#. translators: Support URL.
|
5570 |
+
#: lib/wfDiagnostic.php:111
|
5571 |
msgid "PHP version >= PHP 5.6.20<br><em> (<a href=\"https://wordpress.org/about/requirements/\" target=\"_blank\" rel=\"noopener noreferrer\">Minimum version required by WordPress</a>)</em> <a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"wfhelp\"></a>"
|
5572 |
msgstr ""
|
5573 |
|
5574 |
#. translators: Support URL.
|
5575 |
+
#: lib/wfDiagnostic.php:112
|
5576 |
msgid "Process Owner"
|
5577 |
msgstr ""
|
5578 |
|
5579 |
+
#: lib/wfDiagnostic.php:113
|
5580 |
msgid "Checking for OpenSSL support"
|
5581 |
msgstr ""
|
5582 |
|
5583 |
+
#: lib/wfDiagnostic.php:114
|
5584 |
msgid "Checking OpenSSL version"
|
5585 |
msgstr ""
|
5586 |
|
5587 |
+
#: lib/wfDiagnostic.php:115
|
5588 |
msgid "Checking for cURL support"
|
5589 |
msgstr ""
|
5590 |
|
5591 |
+
#: lib/wfDiagnostic.php:116
|
5592 |
msgid "cURL Features Code"
|
5593 |
msgstr ""
|
5594 |
|
5595 |
+
#: lib/wfDiagnostic.php:117
|
5596 |
msgid "cURL Host"
|
5597 |
msgstr ""
|
5598 |
|
5599 |
+
#: lib/wfDiagnostic.php:118
|
5600 |
msgid "cURL Support Protocols"
|
5601 |
msgstr ""
|
5602 |
|
5603 |
+
#: lib/wfDiagnostic.php:119
|
5604 |
msgid "cURL SSL Version"
|
5605 |
msgstr ""
|
5606 |
|
5607 |
+
#: lib/wfDiagnostic.php:120
|
5608 |
msgid "cURL libz Version"
|
5609 |
msgstr ""
|
5610 |
|
5611 |
+
#: lib/wfDiagnostic.php:121
|
5612 |
msgid "Checking <code>display_errors</code><br><em> (<a href=\"http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors\" target=\"_blank\" rel=\"noopener noreferrer\">Should be disabled on production servers</a>)</em>"
|
5613 |
msgstr ""
|
5614 |
|
5615 |
+
#: lib/wfDiagnostic.php:125
|
5616 |
msgid "Ability to connect to the Wordfence servers and your own site."
|
5617 |
msgstr ""
|
5618 |
|
5619 |
+
#: lib/wfDiagnostic.php:127
|
5620 |
msgid "Connecting to Wordfence servers (http)"
|
5621 |
msgstr ""
|
5622 |
|
5623 |
+
#: lib/wfDiagnostic.php:128
|
5624 |
msgid "Connecting to Wordfence servers (https)"
|
5625 |
msgstr ""
|
5626 |
|
5627 |
+
#: lib/wfDiagnostic.php:129
|
5628 |
msgid "Connecting back to this site"
|
5629 |
msgstr ""
|
5630 |
|
5631 |
+
#: lib/wfDiagnostic.php:130
|
5632 |
msgid "IP(s) used by this server"
|
5633 |
msgstr ""
|
5634 |
|
5635 |
+
#: lib/wfDiagnostic.php:134
|
5636 |
msgid "Server time accuracy and applied offsets."
|
5637 |
msgstr ""
|
5638 |
|
5639 |
+
#: lib/wfDiagnostic.php:136
|
5640 |
msgid "Wordfence Network Time"
|
5641 |
msgstr ""
|
5642 |
|
5643 |
+
#: lib/wfDiagnostic.php:137
|
5644 |
+
#: lib/wfDiagnostic.php:791
|
5645 |
msgid "Server Time"
|
5646 |
msgstr ""
|
5647 |
|
5648 |
+
#: lib/wfDiagnostic.php:138
|
5649 |
msgid "Wordfence Network Time Offset"
|
5650 |
msgstr ""
|
5651 |
|
5652 |
+
#: lib/wfDiagnostic.php:139
|
5653 |
msgid "NTP Time Offset"
|
5654 |
msgstr ""
|
5655 |
|
5656 |
+
#: lib/wfDiagnostic.php:140
|
5657 |
msgid "TOTP Time Source"
|
5658 |
msgstr ""
|
5659 |
|
5660 |
+
#: lib/wfDiagnostic.php:141
|
5661 |
msgid "WordPress Time Zone"
|
5662 |
msgstr ""
|
5663 |
|
5664 |
#. translators: Number of jobs.
|
5665 |
+
#: lib/wfDiagnostic.php:198
|
5666 |
msgid "%d Job Overdue"
|
5667 |
msgid_plural "%d Jobs Overdue"
|
5668 |
msgstr[0] ""
|
5669 |
msgstr[1] ""
|
5670 |
|
5671 |
#. translators: Number of jobs.
|
5672 |
+
#: lib/wfDiagnostic.php:198
|
5673 |
msgid "Normal"
|
5674 |
msgstr ""
|
5675 |
|
5676 |
+
#: lib/wfDiagnostic.php:217
|
5677 |
+
#: lib/wfDiagnostic.php:220
|
5678 |
msgid "No files readable"
|
5679 |
msgstr ""
|
5680 |
|
5681 |
#. translators: File name.
|
5682 |
+
#: lib/wfDiagnostic.php:232
|
5683 |
+
#: lib/wfDiagnostic.php:268
|
5684 |
msgid "File \"%s\" does not exist"
|
5685 |
msgstr ""
|
5686 |
|
5687 |
#. translators: File path.
|
5688 |
+
#: lib/wfDiagnostic.php:235
|
5689 |
msgid "File \"%s\" is unreadable"
|
5690 |
msgstr ""
|
5691 |
|
5692 |
+
#: lib/wfDiagnostic.php:253
|
5693 |
+
#: lib/wfDiagnostic.php:256
|
5694 |
msgid "No files writable"
|
5695 |
msgstr ""
|
5696 |
|
5697 |
#. translators: File name.
|
5698 |
+
#: lib/wfDiagnostic.php:271
|
5699 |
msgid "File \"%s\" is unwritable"
|
5700 |
msgstr ""
|
5701 |
|
5702 |
+
#: lib/wfDiagnostic.php:341
|
5703 |
msgid "Basic config writing"
|
5704 |
msgstr ""
|
5705 |
|
5706 |
+
#: lib/wfDiagnostic.php:353
|
5707 |
msgid "Serialized config writing"
|
5708 |
msgstr ""
|
5709 |
|
5710 |
+
#: lib/wfDiagnostic.php:361
|
5711 |
msgid "(default)"
|
5712 |
msgstr ""
|
5713 |
|
5714 |
#. translators: Unix file permissions in octal (example 0777).
|
5715 |
+
#: lib/wfDiagnostic.php:393
|
5716 |
msgid "%s - using constant"
|
5717 |
msgstr ""
|
5718 |
|
5719 |
#. translators: Unix file permissions in octal (example 0777).
|
5720 |
+
#: lib/wfDiagnostic.php:406
|
5721 |
msgid "%s - using template"
|
5722 |
msgstr ""
|
5723 |
|
5724 |
+
#: lib/wfDiagnostic.php:410
|
5725 |
msgid "0660 - using default"
|
5726 |
msgstr ""
|
5727 |
|
5728 |
+
#: lib/wfDiagnostic.php:444
|
5729 |
msgid "Unavailable"
|
5730 |
msgstr ""
|
5731 |
|
5732 |
+
#: lib/wfDiagnostic.php:612
|
5733 |
+
#: lib/wfDiagnostic.php:615
|
5734 |
msgid "wp_remote_post() test to noc1.wordfence.com failed! Response was: "
|
5735 |
msgstr ""
|
5736 |
|
5737 |
+
#: lib/wfDiagnostic.php:616
|
5738 |
msgid "This likely means that your hosting provider is blocking requests to noc1.wordfence.com or has set up a proxy that is not behaving itself."
|
5739 |
msgstr ""
|
5740 |
|
5741 |
+
#: lib/wfDiagnostic.php:649
|
5742 |
+
#: lib/wfDiagnostic.php:652
|
5743 |
msgid "wp_remote_post() test back to this server failed! Response was: "
|
5744 |
msgstr ""
|
5745 |
|
5746 |
+
#: lib/wfDiagnostic.php:653
|
5747 |
msgid "This additional info may help you diagnose the issue. The response headers we received were:"
|
5748 |
msgstr ""
|
5749 |
|
5750 |
#. translators: PHP super global key.
|
5751 |
+
#: lib/wfDiagnostic.php:682
|
5752 |
msgid "We cannot read $_SERVER[%s]"
|
5753 |
msgstr ""
|
5754 |
|
5755 |
+
#: lib/wfDiagnostic.php:694
|
5756 |
msgid "Should be: "
|
5757 |
msgstr ""
|
5758 |
|
5759 |
+
#: lib/wfDiagnostic.php:777
|
5760 |
msgid "NTP"
|
5761 |
msgstr ""
|
5762 |
|
5871 |
msgstr ""
|
5872 |
|
5873 |
#: lib/wfLog.php:615
|
5874 |
+
#: lib/wordfenceClass.php:6116
|
5875 |
#: waf/wfWAFIPBlocksController.php:97
|
5876 |
msgid "Manual block by administrator"
|
5877 |
msgstr ""
|
6203 |
msgstr ""
|
6204 |
|
6205 |
#: lib/wfScanEngine.php:707
|
6206 |
+
#: lib/wordfenceClass.php:6310
|
6207 |
msgid "For maximum security use PHP's built in REMOTE_ADDR."
|
6208 |
msgstr ""
|
6209 |
|
6210 |
#: lib/wfScanEngine.php:709
|
6211 |
+
#: lib/wordfenceClass.php:6313
|
6212 |
msgid "This site appears to be behind a front-end proxy, so using the X-Forwarded-For HTTP header will resolve to the correct IPs."
|
6213 |
msgstr ""
|
6214 |
|
6215 |
#: lib/wfScanEngine.php:711
|
6216 |
+
#: lib/wordfenceClass.php:6316
|
6217 |
msgid "This site appears to be behind a front-end proxy, so using the X-Real-IP HTTP header will resolve to the correct IPs."
|
6218 |
msgstr ""
|
6219 |
|
6220 |
#: lib/wfScanEngine.php:713
|
6221 |
+
#: lib/wordfenceClass.php:6319
|
6222 |
msgid "This site appears to be behind Cloudflare, so using the Cloudflare \"CF-Connecting-IP\" HTTP header will resolve to the correct IPs."
|
6223 |
msgstr ""
|
6224 |
|
6352 |
|
6353 |
#. translators: Scan result description.
|
6354 |
#: lib/wfScanEngine.php:1088
|
6355 |
+
#: lib/wfScanEngine.php:2257
|
6356 |
+
#: lib/wfScanEngine.php:2299
|
6357 |
msgid "Adding issue: %s"
|
6358 |
msgstr ""
|
6359 |
|
6398 |
msgstr ""
|
6399 |
|
6400 |
#: lib/wfScanEngine.php:1233
|
6401 |
+
#: lib/wfScanEngine.php:2220
|
6402 |
msgid "Done examining URLs"
|
6403 |
msgstr ""
|
6404 |
|
6634 |
msgstr ""
|
6635 |
|
6636 |
#. translators: 1. Plugin name. 2. Software version. 3. Software version.
|
6637 |
+
#: lib/wfScanEngine.php:1996
|
6638 |
msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s, tested to WP %3$s)."
|
6639 |
msgstr ""
|
6640 |
|
6641 |
#. translators: 1. Plugin name. 2. Software version.
|
6642 |
+
#: lib/wfScanEngine.php:2003
|
6643 |
msgid "It was last updated %1$s ago and tested up to WordPress %2$s."
|
6644 |
msgstr ""
|
6645 |
|
6646 |
#. translators: 1. Plugin name. 2. Software version.
|
6647 |
+
#: lib/wfScanEngine.php:2010
|
6648 |
msgid "The Plugin \"%1$s\" appears to be abandoned (updated %2$s)."
|
6649 |
msgstr ""
|
6650 |
|
6651 |
#. translators: Time duration.
|
6652 |
+
#: lib/wfScanEngine.php:2016
|
6653 |
msgid "It was last updated %s ago."
|
6654 |
msgstr ""
|
6655 |
|
6656 |
+
#: lib/wfScanEngine.php:2022
|
6657 |
+
#: lib/wfScanEngine.php:2061
|
6658 |
msgid "It has unpatched security issues and may have compatibility problems with the current version of WordPress."
|
6659 |
msgstr ""
|
6660 |
|
6661 |
+
#: lib/wfScanEngine.php:2024
|
6662 |
+
#: lib/wfScanEngine.php:2063
|
6663 |
msgid "Plugins can be removed from wordpress.org for various reasons. This can include benign issues like a plugin author discontinuing development or moving the plugin distribution to their own site, but some might also be due to security issues. In any case, future updates may or may not be available, so it is worth investigating the cause and deciding whether to temporarily or permanently replace or remove the plugin."
|
6664 |
msgstr ""
|
6665 |
|
6666 |
#. translators: Support URL.
|
6667 |
+
#: lib/wfScanEngine.php:2028
|
6668 |
+
#: lib/wfScanEngine.php:2067
|
6669 |
+
#: lib/wfScanEngine.php:2255
|
6670 |
+
#: lib/wfScanEngine.php:2297
|
6671 |
msgid "<a href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Get more information.</a>"
|
6672 |
msgstr ""
|
6673 |
|
6674 |
#. translators: Plugin name.
|
6675 |
+
#: lib/wfScanEngine.php:2059
|
6676 |
msgid "The Plugin \"%s\" has been removed from wordpress.org."
|
6677 |
msgstr ""
|
6678 |
|
6679 |
+
#: lib/wfScanEngine.php:2112
|
6680 |
msgid "Scanning for admin users not created through WordPress"
|
6681 |
msgstr ""
|
6682 |
|
6683 |
#. translators: WordPress username.
|
6684 |
+
#: lib/wfScanEngine.php:2134
|
6685 |
msgid "An admin user with the username %s was created outside of WordPress."
|
6686 |
msgstr ""
|
6687 |
|
6688 |
#. translators: WordPress username.
|
6689 |
+
#: lib/wfScanEngine.php:2135
|
6690 |
msgid "An admin user with the username %s was created outside of WordPress. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
|
6691 |
msgstr ""
|
6692 |
|
6693 |
#. translators: WordPress username.
|
6694 |
+
#: lib/wfScanEngine.php:2161
|
6695 |
msgid "An admin user with a suspicious username %s was found."
|
6696 |
msgstr ""
|
6697 |
|
6698 |
#. translators: WordPress username.
|
6699 |
+
#: lib/wfScanEngine.php:2162
|
6700 |
msgid "An admin user with a suspicious username %s was found. Administrators accounts with usernames similar to this are commonly seen created by hackers. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it."
|
6701 |
msgstr ""
|
6702 |
|
6703 |
+
#: lib/wfScanEngine.php:2183
|
6704 |
msgid "Scanning for suspicious site options"
|
6705 |
msgstr ""
|
6706 |
|
6707 |
+
#: lib/wfScanEngine.php:2218
|
6708 |
msgid "Examining URLs found in the options we scanned for dangerous websites"
|
6709 |
msgstr ""
|
6710 |
|
6711 |
#. translators: URL.
|
6712 |
+
#: lib/wfScanEngine.php:2242
|
6713 |
+
#: lib/wfScanEngine.php:2248
|
6714 |
msgid "Option contains a suspected malware URL: %s"
|
6715 |
msgstr ""
|
6716 |
|
6717 |
#. translators: URL.
|
6718 |
+
#: lib/wfScanEngine.php:2243
|
6719 |
msgid "This option contains a suspected malware URL listed on Google's list of malware sites. It may indicate your site is infected with malware. The URL is: %s"
|
6720 |
msgstr ""
|
6721 |
|
6722 |
#. translators: URL.
|
6723 |
+
#: lib/wfScanEngine.php:2245
|
6724 |
msgid "Option contains a suspected phishing site URL: %s"
|
6725 |
msgstr ""
|
6726 |
|
6727 |
#. translators: URL.
|
6728 |
+
#: lib/wfScanEngine.php:2246
|
6729 |
msgid "This option contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. It may indicate your site is infected with malware. The URL is: %s"
|
6730 |
msgstr ""
|
6731 |
|
6732 |
#. translators: URL.
|
6733 |
+
#: lib/wfScanEngine.php:2249
|
6734 |
msgid "This option contains a URL that is currently listed on Wordfence's domain blocklist. It may indicate your site is infected with malware. The URL is: %s"
|
6735 |
msgstr ""
|
6736 |
|
6737 |
+
#: lib/wfScanEngine.php:2289
|
6738 |
msgid "Checking for future GeoIP support"
|
6739 |
msgstr ""
|
6740 |
|
6741 |
+
#: lib/wfScanEngine.php:2294
|
6742 |
msgid "PHP Update Needed for Country Blocking"
|
6743 |
msgstr ""
|
6744 |
|
6745 |
#. translators: Software version.
|
6746 |
+
#: lib/wfScanEngine.php:2295
|
6747 |
msgid "The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP."
|
6748 |
msgstr ""
|
6749 |
|
6750 |
+
#: lib/wfScanEngine.php:2344
|
6751 |
msgid "Previous scan was stopped successfully."
|
6752 |
msgstr ""
|
6753 |
|
6754 |
+
#: lib/wfScanEngine.php:2345
|
6755 |
msgid "Scan was stopped on administrator request."
|
6756 |
msgstr ""
|
6757 |
|
6758 |
+
#: lib/wfScanEngine.php:2361
|
6759 |
msgid "Entering start scan routine"
|
6760 |
msgstr ""
|
6761 |
|
6762 |
+
#: lib/wfScanEngine.php:2364
|
6763 |
msgid "A scan is already running. Use the stop scan button if you would like to terminate the current scan."
|
6764 |
msgstr ""
|
6765 |
|
6766 |
#. translators: Support URL.
|
6767 |
+
#: lib/wfScanEngine.php:2382
|
6768 |
msgid "Test result of scan start URL fetch: %s"
|
6769 |
msgstr ""
|
6770 |
|
6771 |
#. translators: WordPress admin panel URL.
|
6772 |
+
#: lib/wfScanEngine.php:2391
|
6773 |
msgid "Starting cron with normal ajax at URL %s"
|
6774 |
msgstr ""
|
6775 |
|
6776 |
#. translators: Error message.
|
6777 |
#. translators: WordPress admin panel URL.
|
6778 |
+
#: lib/wfScanEngine.php:2413
|
6779 |
+
#: lib/wfScanEngine.php:2448
|
6780 |
msgid "There was an error starting the scan: %s."
|
6781 |
msgstr ""
|
6782 |
|
6783 |
+
#: lib/wfScanEngine.php:2415
|
6784 |
+
#: lib/wfScanEngine.php:2450
|
6785 |
msgid "There was an unknown error starting the scan."
|
6786 |
msgstr ""
|
6787 |
|
6788 |
+
#: lib/wfScanEngine.php:2422
|
6789 |
+
#: lib/wfScanEngine.php:2456
|
6790 |
msgid "Scan process ended after forking."
|
6791 |
msgstr ""
|
6792 |
|
6793 |
#. translators: WordPress admin panel URL.
|
6794 |
+
#: lib/wfScanEngine.php:2426
|
6795 |
msgid "Starting cron via proxy at URL %s"
|
6796 |
msgstr ""
|
6797 |
|
6798 |
#. translators: Time in seconds.
|
6799 |
+
#: lib/wfScanEngine.php:2502
|
6800 |
msgid "Got value from wf config maxExecutionTime: %s"
|
6801 |
msgstr ""
|
6802 |
|
6803 |
#. translators: Time in seconds.
|
6804 |
+
#: lib/wfScanEngine.php:2506
|
6805 |
msgid "getMaxExecutionTime() returning config value: %s"
|
6806 |
msgstr ""
|
6807 |
|
6808 |
#. translators: PHP ini value.
|
6809 |
+
#: lib/wfScanEngine.php:2513
|
6810 |
msgid "Got max_execution_time value from ini: %s"
|
6811 |
msgstr ""
|
6812 |
|
6813 |
#. translators: 1. PHP ini setting. 2. Time in seconds.
|
6814 |
+
#: lib/wfScanEngine.php:2520
|
6815 |
msgid "ini value of %1$d is higher than value for WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME (%2$d), reducing"
|
6816 |
msgstr ""
|
6817 |
|
6818 |
#. translators: PHP ini setting.
|
6819 |
+
#: lib/wfScanEngine.php:2530
|
6820 |
msgid "getMaxExecutionTime() returning half ini value: %d"
|
6821 |
msgstr ""
|
6822 |
|
6823 |
+
#: lib/wfScanEngine.php:2536
|
6824 |
msgid "getMaxExecutionTime() returning default of: 15"
|
6825 |
msgstr ""
|
6826 |
|
6827 |
#. translators: 1. HTTP status code.
|
6828 |
+
#: lib/wfScanEngine.php:2738
|
6829 |
msgid "Got error response from Wordfence servers: %s"
|
6830 |
msgstr ""
|
6831 |
|
6832 |
+
#: lib/wfScanEngine.php:2742
|
6833 |
msgid "Invalid response from Wordfence servers."
|
6834 |
msgstr ""
|
6835 |
|
6992 |
msgid "File last modified:"
|
6993 |
msgstr ""
|
6994 |
|
6995 |
+
#: lib/wordfenceClass.php:180
|
6996 |
msgid ""
|
6997 |
"To ensure uninterrupted Premium Wordfence protection on your site,\n"
|
6998 |
"please renew your license by visiting http://www.wordfence.com/ Sign in, go to your dashboard,\n"
|
6999 |
"select the license about to expire and click the button to renew that license."
|
7000 |
msgstr ""
|
7001 |
|
7002 |
+
#: lib/wordfenceClass.php:210
|
7003 |
msgid "Your Premium Wordfence License is set to auto-renew in 10 days."
|
7004 |
msgstr ""
|
7005 |
|
7006 |
+
#: lib/wordfenceClass.php:211
|
7007 |
msgid "To update your license settings please visit http://www.wordfence.com/zz9/dashboard"
|
7008 |
msgstr ""
|
7009 |
|
7010 |
+
#: lib/wordfenceClass.php:223
|
7011 |
msgid "Your Premium Wordfence License expires in less than 2 weeks."
|
7012 |
msgstr ""
|
7013 |
|
7014 |
+
#: lib/wordfenceClass.php:226
|
7015 |
msgid "Your Premium Wordfence License expires in less than a week."
|
7016 |
msgstr ""
|
7017 |
|
7018 |
+
#: lib/wordfenceClass.php:229
|
7019 |
msgid "Your Premium Wordfence License expires in 2 days."
|
7020 |
msgstr ""
|
7021 |
|
7022 |
+
#: lib/wordfenceClass.php:232
|
7023 |
msgid "Your Premium Wordfence License expires in 1 day."
|
7024 |
msgstr ""
|
7025 |
|
7026 |
+
#: lib/wordfenceClass.php:236
|
7027 |
msgid "Your Wordfence Premium License has Expired!"
|
7028 |
msgstr ""
|
7029 |
|
7030 |
+
#: lib/wordfenceClass.php:267
|
7031 |
msgid "The Wordfence Premium License in use on this site has been removed from your account."
|
7032 |
msgstr ""
|
7033 |
|
7034 |
+
#: lib/wordfenceClass.php:267
|
7035 |
msgid "The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets for more information. Our staff is happy to help."
|
7036 |
msgstr ""
|
7037 |
|
7038 |
#. translators: Wordfence license key.
|
7039 |
+
#: lib/wordfenceClass.php:273
|
7040 |
msgid "Could not verify Wordfence License: %s"
|
7041 |
msgstr ""
|
7042 |
|
7043 |
#. translators: WordPress version.
|
7044 |
+
#: lib/wordfenceClass.php:355
|
7045 |
msgid "WordPress (v%s)"
|
7046 |
msgstr ""
|
7047 |
|
7048 |
#. translators: Number of plugins.
|
7049 |
+
#: lib/wordfenceClass.php:359
|
7050 |
msgid "%d plugin"
|
7051 |
msgid_plural "%d plugins"
|
7052 |
msgstr[0] ""
|
7053 |
msgstr[1] ""
|
7054 |
|
7055 |
#. translators: Number of themes.
|
7056 |
+
#: lib/wordfenceClass.php:364
|
7057 |
msgid "%d theme"
|
7058 |
msgid_plural "%d themes"
|
7059 |
msgstr[0] ""
|
7060 |
msgstr[1] ""
|
7061 |
|
7062 |
+
#: lib/wordfenceClass.php:368
|
7063 |
msgid "An update is available for "
|
7064 |
msgid_plural "Updates are available for "
|
7065 |
msgstr[0] ""
|
7066 |
msgstr[1] ""
|
7067 |
|
7068 |
+
#: lib/wordfenceClass.php:373
|
7069 |
msgid "and "
|
7070 |
msgstr ""
|
7071 |
|
7072 |
#. translators: Wordfence version.
|
7073 |
+
#: lib/wordfenceClass.php:412
|
7074 |
msgid "`runInstall` called with previous version = %s"
|
7075 |
msgstr ""
|
7076 |
|
7077 |
+
#: lib/wordfenceClass.php:464
|
7078 |
+
#: lib/wordfenceClass.php:4025
|
7079 |
msgid "Could not understand the response we received from the Wordfence servers when applying for a free license key."
|
7080 |
msgstr ""
|
7081 |
|
7082 |
+
#: lib/wordfenceClass.php:828
|
7083 |
msgid "Automatically generated from previous country blocking settings"
|
7084 |
msgstr ""
|
7085 |
|
7086 |
+
#: lib/wordfenceClass.php:1259
|
7087 |
msgid "Application passwords have been disabled by Wordfence."
|
7088 |
msgstr ""
|
7089 |
|
7090 |
+
#: lib/wordfenceClass.php:1370
|
7091 |
+
#: lib/wordfenceClass.php:6598
|
7092 |
msgid "Upgrade To Premium"
|
7093 |
msgstr ""
|
7094 |
|
7095 |
+
#: lib/wordfenceClass.php:1389
|
7096 |
msgid "wp_mail from address is incomplete, attempting to fix"
|
7097 |
msgstr ""
|
7098 |
|
7099 |
#. translators: Email address.
|
7100 |
+
#: lib/wordfenceClass.php:1399
|
7101 |
msgid "Fixing wp_mail from address: %s"
|
7102 |
msgstr ""
|
7103 |
|
7104 |
+
#: lib/wordfenceClass.php:1492
|
7105 |
msgid "You appear to have logged out or you are not an admin. Please sign-out and sign-in again."
|
7106 |
msgstr ""
|
7107 |
|
7108 |
+
#: lib/wordfenceClass.php:1497
|
7109 |
msgid "Your browser sent an invalid security token to Wordfence. Please try reloading this page or signing out and in again."
|
7110 |
msgstr ""
|
7111 |
|
7112 |
+
#: lib/wordfenceClass.php:1503
|
7113 |
msgid "Wordfence encountered an internal error executing that request."
|
7114 |
msgstr ""
|
7115 |
|
7116 |
#. translators: Error message.
|
7117 |
+
#: lib/wordfenceClass.php:1609
|
7118 |
msgid "2FA Migration Error: %s"
|
7119 |
msgstr ""
|
7120 |
|
7121 |
+
#: lib/wordfenceClass.php:1649
|
7122 |
msgid "Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words."
|
7123 |
msgstr ""
|
7124 |
|
7125 |
+
#: lib/wordfenceClass.php:1655
|
7126 |
msgid "Passwords containing a space followed by \"wf\" without quotes are not allowed."
|
7127 |
msgstr ""
|
7128 |
|
7129 |
#. translators: Support URL.
|
7130 |
+
#: lib/wordfenceClass.php:1670
|
7131 |
msgid "Please choose a different password. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. <a href=\"%s\">Learn More</a>"
|
7132 |
msgstr ""
|
7133 |
|
7134 |
+
#: lib/wordfenceClass.php:1798
|
7135 |
+
#: lib/wordfenceClass.php:1981
|
7136 |
msgid "Sorry but your browser sent an invalid security token when trying to use this form."
|
7137 |
msgstr ""
|
7138 |
|
7139 |
+
#: lib/wordfenceClass.php:1803
|
7140 |
msgid "Please wait 3 minutes and try again"
|
7141 |
msgstr ""
|
7142 |
|
7143 |
+
#: lib/wordfenceClass.php:1804
|
7144 |
msgid "You have used this form too much. Please wait 3 minutes and try again."
|
7145 |
msgstr ""
|
7146 |
|
7147 |
+
#: lib/wordfenceClass.php:1843
|
7148 |
msgid "Unlock email requested"
|
7149 |
msgstr ""
|
7150 |
|
7151 |
+
#: lib/wordfenceClass.php:1845
|
7152 |
msgid "Your request was received"
|
7153 |
msgstr ""
|
7154 |
|
7155 |
#. translators: Email address.
|
7156 |
+
#: lib/wordfenceClass.php:1846
|
7157 |
msgid "We received a request to email \"%s\" instructions to unlock their access. If that is the email address of a site administrator or someone on the Wordfence alert list, they have been emailed instructions on how to regain access to this system. The instructions we sent will expire 30 minutes from now."
|
7158 |
msgstr ""
|
7159 |
|
7160 |
+
#: lib/wordfenceClass.php:1852
|
7161 |
msgid "Invalid key provided for authentication."
|
7162 |
msgstr ""
|
7163 |
|
7164 |
+
#: lib/wordfenceClass.php:1863
|
7165 |
msgid "Request received via unlock email link to unblock all IPs."
|
7166 |
msgstr ""
|
7167 |
|
7168 |
+
#: lib/wordfenceClass.php:1872
|
7169 |
msgid "Request received via unlock email link to unblock all IPs via disabling firewall rules."
|
7170 |
msgstr ""
|
7171 |
|
7172 |
+
#: lib/wordfenceClass.php:1880
|
7173 |
msgid "Invalid function specified. Please check the link we emailed you and make sure it was not cut-off by your email reader."
|
7174 |
msgstr ""
|
7175 |
|
7176 |
+
#: lib/wordfenceClass.php:1925
|
7177 |
msgid "Unsubscribe Requested"
|
7178 |
msgstr ""
|
7179 |
|
7180 |
+
#: lib/wordfenceClass.php:1987
|
7181 |
msgid "An error occurred while saving the license."
|
7182 |
msgstr ""
|
7183 |
|
7184 |
#. translators: Error message.
|
7185 |
+
#: lib/wordfenceClass.php:1989
|
7186 |
+
#: lib/wordfenceClass.php:2009
|
7187 |
msgid "An error occurred while saving the license: %s"
|
7188 |
msgstr ""
|
7189 |
|
7190 |
+
#: lib/wordfenceClass.php:2025
|
7191 |
msgid "Rescheduled missing daily cron"
|
7192 |
msgstr ""
|
7193 |
|
7194 |
+
#: lib/wordfenceClass.php:2030
|
7195 |
msgid "Rescheduled missing hourly cron"
|
7196 |
msgstr ""
|
7197 |
|
7198 |
+
#: lib/wordfenceClass.php:2384
|
7199 |
+
#: lib/wordfenceClass.php:2388
|
7200 |
msgid "Accessed a banned URL"
|
7201 |
msgstr ""
|
7202 |
|
7203 |
+
#: lib/wordfenceClass.php:2395
|
7204 |
+
#: lib/wordfenceClass.php:2399
|
7205 |
msgid "POST received with blank user-agent and referer"
|
7206 |
msgstr ""
|
7207 |
|
7208 |
+
#: lib/wordfenceClass.php:2533
|
7209 |
msgid "<strong>ERROR</strong>: You can't register using that username"
|
7210 |
msgstr ""
|
7211 |
|
7212 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
7213 |
+
#: lib/wordfenceClass.php:2741
|
7214 |
+
#: lib/wordfenceClass.php:2877
|
7215 |
msgid "<strong>WARNING: </strong>The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
|
7216 |
msgstr ""
|
7217 |
|
7218 |
#. translators: 1. Reset password URL. 2. Support URL.
|
7219 |
+
#: lib/wordfenceClass.php:3032
|
7220 |
+
#: lib/wordfenceClass.php:3068
|
7221 |
msgid "<strong>WARNING: </strong>Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please <a href=\"%1$s\">change your password</a>. <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn More</a>"
|
7222 |
msgstr ""
|
7223 |
|
7224 |
#. translators: WordPress username.
|
7225 |
+
#: lib/wordfenceClass.php:3057
|
7226 |
msgid "A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not."
|
7227 |
msgstr ""
|
7228 |
|
7229 |
+
#: lib/wordfenceClass.php:3098
|
7230 |
msgid "Blocked by Wordfence Security Network"
|
7231 |
msgstr ""
|
7232 |
|
7233 |
+
#: lib/wordfenceClass.php:3128
|
7234 |
msgid "Blocked by login security setting"
|
7235 |
msgstr ""
|
7236 |
|
7237 |
#. translators: WordPress username.
|
7238 |
+
#: lib/wordfenceClass.php:3138
|
7239 |
msgid "Used an invalid username '%s' to try to sign in"
|
7240 |
msgstr ""
|
7241 |
|
7242 |
#. translators: 1. Login attempt limit. 2. WordPress username.
|
7243 |
+
#: lib/wordfenceClass.php:3157
|
7244 |
msgid "Exceeded the maximum number of login failures which is: %1$s. The last username they tried to sign in with was: '%2$s'"
|
7245 |
msgstr ""
|
7246 |
|
7247 |
+
#: lib/wordfenceClass.php:3514
|
7248 |
msgid "An invalid type was specified to get file."
|
7249 |
msgstr ""
|
7250 |
|
7251 |
+
#: lib/wordfenceClass.php:3530
|
7252 |
msgid "We could not fetch a core WordPress file from the Wordfence API."
|
7253 |
msgstr ""
|
7254 |
|
7255 |
+
#: lib/wordfenceClass.php:3589
|
7256 |
msgid "Wordfence Test Email"
|
7257 |
msgstr ""
|
7258 |
|
7259 |
#. translators: 1. Site URL. 2. IP address.
|
7260 |
+
#: lib/wordfenceClass.php:3589
|
7261 |
msgid ""
|
7262 |
"This is a test email from %1$s.\n"
|
7263 |
"The IP address that requested this was: %2$s"
|
7264 |
msgstr ""
|
7265 |
|
7266 |
+
#: lib/wordfenceClass.php:3596
|
7267 |
msgid "Cellphone Sign-in is only available to paid members. <a href=\"https://www.wordfence.com/gnl1twoFac3/wordfence-signup/\" target=\"_blank\" rel=\"noopener noreferrer\">Click here to upgrade now.</a>"
|
7268 |
msgstr ""
|
7269 |
|
7270 |
+
#: lib/wordfenceClass.php:3603
|
7271 |
msgid "The username you specified does not exist."
|
7272 |
msgstr ""
|
7273 |
|
7274 |
+
#: lib/wordfenceClass.php:3612
|
7275 |
msgid "The username you specified is already enabled."
|
7276 |
msgstr ""
|
7277 |
|
7278 |
+
#: lib/wordfenceClass.php:3617
|
7279 |
msgid "Unknown authentication mode."
|
7280 |
msgstr ""
|
7281 |
|
7282 |
+
#: lib/wordfenceClass.php:3622
|
7283 |
msgid "The phone number you entered must start with a '+', then country code and then area code and number. For example, a number in the United States with country code '1' would look like this: +1-123-555-1234"
|
7284 |
msgstr ""
|
7285 |
|
7286 |
#. translators: Error message.
|
7287 |
+
#: lib/wordfenceClass.php:3629
|
7288 |
+
#: lib/wordfenceClass.php:3661
|
7289 |
+
#: lib/wordfenceClass.php:3724
|
7290 |
msgid "Could not contact Wordfence servers to generate a verification code: %s"
|
7291 |
msgstr ""
|
7292 |
|
7293 |
#. translators: Error message.
|
7294 |
+
#: lib/wordfenceClass.php:3641
|
7295 |
+
#: lib/wordfenceClass.php:3685
|
7296 |
msgid "Could not generate verification code: %s"
|
7297 |
msgstr ""
|
7298 |
|
7299 |
#. translators: Error message.
|
7300 |
+
#: lib/wordfenceClass.php:3642
|
7301 |
+
#: lib/wordfenceClass.php:3686
|
7302 |
msgid "We could not generate a verification code."
|
7303 |
msgstr ""
|
7304 |
|
7305 |
+
#: lib/wordfenceClass.php:3702
|
7306 |
msgid "Unknown two-factor authentication mode."
|
7307 |
msgstr ""
|
7308 |
|
7309 |
+
#: lib/wordfenceClass.php:3735
|
7310 |
msgid "The code you entered is invalid. Cellphone sign-in will not be enabled for this user until you enter a valid code."
|
7311 |
msgstr ""
|
7312 |
|
7313 |
+
#: lib/wordfenceClass.php:3740
|
7314 |
msgid "We could not find the user you are trying to activate. They may have been removed from the list of Cellphone Sign-in users. Please reload this page."
|
7315 |
msgstr ""
|
7316 |
|
7317 |
+
#: lib/wordfenceClass.php:3822
|
7318 |
msgid "That user has already been removed from the list."
|
7319 |
msgstr ""
|
7320 |
|
7321 |
+
#: lib/wordfenceClass.php:3842
|
7322 |
msgid "No scan is scheduled"
|
7323 |
msgstr ""
|
7324 |
|
7325 |
+
#: lib/wordfenceClass.php:3847
|
7326 |
msgid "Next scan is starting now"
|
7327 |
msgstr ""
|
7328 |
|
7329 |
#. translators: 1. Time until. 2. Localized date.
|
7330 |
+
#: lib/wordfenceClass.php:3850
|
7331 |
msgid "Next scan in %1$s (%2$s)"
|
7332 |
msgstr ""
|
7333 |
|
7334 |
#. translators: Localized date.
|
7335 |
+
#: lib/wordfenceClass.php:3867
|
7336 |
msgid "Scheduled Wordfence scan starting at %s"
|
7337 |
msgstr ""
|
7338 |
|
7339 |
+
#: lib/wordfenceClass.php:3890
|
7340 |
msgid "Sorry but this feature is only available for paid customers."
|
7341 |
msgstr ""
|
7342 |
|
7343 |
#. translators: Site URL.
|
7344 |
+
#: lib/wordfenceClass.php:3904
|
7345 |
msgid "SITE: %s"
|
7346 |
msgstr ""
|
7347 |
|
7348 |
#. translators: Plugin version.
|
7349 |
+
#: lib/wordfenceClass.php:3905
|
7350 |
msgid "PLUGIN VERSION: %s"
|
7351 |
msgstr ""
|
7352 |
|
7353 |
#. translators: WordPress version.
|
7354 |
+
#: lib/wordfenceClass.php:3906
|
7355 |
msgid "WORDPRESS VERSION: %s"
|
7356 |
msgstr ""
|
7357 |
|
7358 |
#. translators: Wordfence license key.
|
7359 |
+
#: lib/wordfenceClass.php:3907
|
7360 |
msgid "LICENSE KEY: %s"
|
7361 |
msgstr ""
|
7362 |
|
7363 |
#. translators: Email address.
|
7364 |
+
#: lib/wordfenceClass.php:3908
|
7365 |
msgid "ADMIN EMAIL: %s"
|
7366 |
msgstr ""
|
7367 |
|
7368 |
#. translators: Email address.
|
7369 |
+
#: lib/wordfenceClass.php:3909
|
7370 |
msgid "LOG:"
|
7371 |
msgstr ""
|
7372 |
|
7373 |
+
#: lib/wordfenceClass.php:3925
|
7374 |
msgid "# Scan Issues"
|
7375 |
msgstr ""
|
7376 |
|
7377 |
#. translators: Number of scan results.
|
7378 |
+
#: lib/wordfenceClass.php:3930
|
7379 |
msgid "## New Issues (%d total)"
|
7380 |
msgstr ""
|
7381 |
|
7382 |
#. translators: Number of scan results.
|
7383 |
+
#: lib/wordfenceClass.php:3957
|
7384 |
msgid "## Ignored Issues (%d total)"
|
7385 |
msgstr ""
|
7386 |
|
7387 |
+
#: lib/wordfenceClass.php:3978
|
7388 |
msgid "No Ignored Issues"
|
7389 |
msgstr ""
|
7390 |
|
7391 |
+
#: lib/wordfenceClass.php:4000
|
7392 |
msgid "Wordfence Activity Log"
|
7393 |
msgstr ""
|
7394 |
|
7395 |
#. translators: Error message.
|
7396 |
+
#: lib/wordfenceClass.php:4028
|
7397 |
msgid "Could not fetch free license key from Wordfence: %s"
|
7398 |
msgstr ""
|
7399 |
|
7400 |
+
#: lib/wordfenceClass.php:4113
|
7401 |
msgid "We could not find your .htaccess file to modify it."
|
7402 |
msgstr ""
|
7403 |
|
7404 |
#. translators: Error message.
|
7405 |
+
#: lib/wordfenceClass.php:4118
|
7406 |
msgid "We found your .htaccess file but could not open it for writing: %s"
|
7407 |
msgstr ""
|
7408 |
|
7409 |
+
#: lib/wordfenceClass.php:4201
|
7410 |
msgid "All Countries"
|
7411 |
msgstr ""
|
7412 |
|
7413 |
+
#: lib/wordfenceClass.php:4204
|
7414 |
msgid "1 Country"
|
7415 |
msgstr ""
|
7416 |
|
7417 |
#. translators: Number of countries.
|
7418 |
+
#: lib/wordfenceClass.php:4207
|
7419 |
msgid "%d Countries"
|
7420 |
msgstr ""
|
7421 |
|
7422 |
+
#: lib/wordfenceClass.php:4211
|
7423 |
msgid "Entire Site"
|
7424 |
msgstr ""
|
7425 |
|
7426 |
+
#: lib/wordfenceClass.php:4214
|
7427 |
msgid "Login Only"
|
7428 |
msgstr ""
|
7429 |
|
7430 |
+
#: lib/wordfenceClass.php:4217
|
7431 |
msgid "Site Except Login"
|
7432 |
msgstr ""
|
7433 |
|
7434 |
+
#: lib/wordfenceClass.php:4225
|
7435 |
msgid "IP Range"
|
7436 |
msgstr ""
|
7437 |
|
7438 |
#. translators: 2FA backup codes.
|
7439 |
+
#: lib/wordfenceClass.php:4226
|
7440 |
+
#: lib/wordfenceClass.php:6178
|
7441 |
msgid "User Agent"
|
7442 |
msgstr ""
|
7443 |
|
7444 |
+
#: lib/wordfenceClass.php:4227
|
7445 |
#: views/blocking/blocking-create.php:201
|
7446 |
msgid "Referrer"
|
7447 |
msgstr ""
|
7448 |
|
7449 |
+
#: lib/wordfenceClass.php:4242
|
7450 |
msgid "Permanent"
|
7451 |
msgstr ""
|
7452 |
|
7453 |
+
#: lib/wordfenceClass.php:4314
|
7454 |
msgid "An error occurred while creating the block."
|
7455 |
msgstr ""
|
7456 |
|
7457 |
+
#: lib/wordfenceClass.php:4320
|
7458 |
msgid "No block parameters were provided."
|
7459 |
msgstr ""
|
7460 |
|
7461 |
+
#: lib/wordfenceClass.php:4357
|
7462 |
+
#: lib/wordfenceClass.php:4389
|
7463 |
msgid "No blocks were provided."
|
7464 |
msgstr ""
|
7465 |
|
7466 |
+
#: lib/wordfenceClass.php:4421
|
7467 |
msgid "The license provided is already in use on another site."
|
7468 |
msgstr ""
|
7469 |
|
7470 |
+
#: lib/wordfenceClass.php:4426
|
7471 |
msgid "The Wordfence activation server returned an unexpected response. Please try again."
|
7472 |
msgstr ""
|
7473 |
|
7474 |
+
#: lib/wordfenceClass.php:4432
|
7475 |
msgid "We received an error while trying to activate the license with the Wordfence servers: "
|
7476 |
msgstr ""
|
7477 |
|
7478 |
+
#: lib/wordfenceClass.php:4445
|
7479 |
msgid "No license was provided to install."
|
7480 |
msgstr ""
|
7481 |
|
7482 |
+
#: lib/wordfenceClass.php:4496
|
7483 |
msgid "An unknown configuration section was provided."
|
7484 |
msgstr ""
|
7485 |
|
7486 |
+
#: lib/wordfenceClass.php:4502
|
7487 |
msgid "No configuration section was provided."
|
7488 |
msgstr ""
|
7489 |
|
7490 |
+
#: lib/wordfenceClass.php:4548
|
7491 |
+
#: lib/wordfenceClass.php:4553
|
7492 |
msgid "An error occurred while saving the configuration."
|
7493 |
msgstr ""
|
7494 |
|
7495 |
+
#: lib/wordfenceClass.php:4564
|
7496 |
msgid "No configuration changes were provided to save."
|
7497 |
msgstr ""
|
7498 |
|
7499 |
+
#: lib/wordfenceClass.php:4595
|
7500 |
+
#: lib/wordfenceClass.php:5220
|
7501 |
+
#: lib/wordfenceClass.php:5251
|
7502 |
+
#: lib/wordfenceClass.php:7230
|
7503 |
+
#: lib/wordfenceClass.php:7265
|
7504 |
+
#: lib/wordfenceClass.php:7297
|
7505 |
msgid "We could not find that issue in our database."
|
7506 |
msgstr ""
|
7507 |
|
7508 |
+
#: lib/wordfenceClass.php:4605
|
7509 |
msgid "An error occurred while trying to hide the file."
|
7510 |
msgstr ""
|
7511 |
|
7512 |
+
#: lib/wordfenceClass.php:4618
|
7513 |
msgid "An invalid file was requested for hiding."
|
7514 |
msgstr ""
|
7515 |
|
7516 |
+
#: lib/wordfenceClass.php:4645
|
7517 |
+
#: lib/wordfenceClass.php:5231
|
7518 |
msgid "You don't have permission to repair .htaccess. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
|
7519 |
msgstr ""
|
7520 |
|
7521 |
+
#: lib/wordfenceClass.php:4669
|
7522 |
msgid "Manual permanent block by admin"
|
7523 |
msgstr ""
|
7524 |
|
7525 |
+
#: lib/wordfenceClass.php:4705
|
7526 |
msgid "Please enter a valid IP address to block."
|
7527 |
msgstr ""
|
7528 |
|
7529 |
+
#: lib/wordfenceClass.php:4708
|
7530 |
msgid "You can't block your own IP address."
|
7531 |
msgstr ""
|
7532 |
|
7533 |
#. translators: IP address.
|
7534 |
+
#: lib/wordfenceClass.php:4712
|
7535 |
msgid "The IP address %s is allowlisted and can't be blocked. You can remove this IP from the allowlist on the Wordfence options page."
|
7536 |
msgstr ""
|
7537 |
|
7538 |
#. translators: IP address.
|
7539 |
+
#: lib/wordfenceClass.php:4714
|
7540 |
msgid "The IP address %s is in a range of IP addresses that Wordfence does not block. The IP range may be internal or belong to a service safe to allow access for."
|
7541 |
msgstr ""
|
7542 |
|
7543 |
+
#: lib/wordfenceClass.php:4720
|
7544 |
msgid "The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google."
|
7545 |
msgstr ""
|
7546 |
|
7547 |
+
#: lib/wordfenceClass.php:4763
|
7548 |
msgid "An invalid operation was called."
|
7549 |
msgstr ""
|
7550 |
|
7551 |
+
#: lib/wordfenceClass.php:4773
|
7552 |
msgid "An invalid status was specified when trying to update that issue."
|
7553 |
msgstr ""
|
7554 |
|
7555 |
+
#: lib/wordfenceClass.php:4785
|
7556 |
msgid "Scan stop request received."
|
7557 |
msgstr ""
|
7558 |
|
7559 |
+
#: lib/wordfenceClass.php:4786
|
7560 |
msgid "A request was received to stop the previous scan."
|
7561 |
msgstr ""
|
7562 |
|
7563 |
+
#: lib/wordfenceClass.php:4835
|
7564 |
msgid "Idle"
|
7565 |
msgstr ""
|
7566 |
|
7567 |
#. translators: Localized date.
|
7568 |
+
#: lib/wordfenceClass.php:4844
|
7569 |
msgid "Scan completed on %s"
|
7570 |
msgstr ""
|
7571 |
|
7572 |
+
#: lib/wordfenceClass.php:4851
|
7573 |
msgid "Last scan failed"
|
7574 |
msgstr ""
|
7575 |
|
7576 |
#. translators: Time until.
|
7577 |
+
#: lib/wordfenceClass.php:4914
|
7578 |
msgid "more than %s"
|
7579 |
msgstr ""
|
7580 |
|
7581 |
#. translators: Localized date.
|
7582 |
+
#: lib/wordfenceClass.php:4918
|
7583 |
msgid "The current scan looks like it has failed. Its last status update was <span id=\"wf-scan-failed-time-ago\">%s</span> ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably."
|
7584 |
msgstr ""
|
7585 |
|
7586 |
#. translators: Localized date.
|
7587 |
+
#: lib/wordfenceClass.php:4918
|
7588 |
+
#: lib/wordfenceClass.php:4926
|
7589 |
+
#: lib/wordfenceClass.php:4945
|
7590 |
+
#: lib/wordfenceClass.php:4957
|
7591 |
+
#: lib/wordfenceClass.php:4965
|
7592 |
msgid "Click here for steps you can try."
|
7593 |
msgstr ""
|
7594 |
|
7595 |
#. translators: Localized date.
|
7596 |
+
#: lib/wordfenceClass.php:4919
|
7597 |
msgid "Cancel Scan"
|
7598 |
msgstr ""
|
7599 |
|
7600 |
+
#: lib/wordfenceClass.php:4926
|
7601 |
msgid "The previous scan has failed. Some sites may need adjustments to run scans reliably."
|
7602 |
msgstr ""
|
7603 |
|
7604 |
#. translators: Time limit (number).
|
7605 |
+
#: lib/wordfenceClass.php:4932
|
7606 |
msgid "The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page."
|
7607 |
msgstr ""
|
7608 |
|
7609 |
+
#: lib/wordfenceClass.php:4938
|
7610 |
msgid "The previous scan has terminated because we detected an update occurring during the scan."
|
7611 |
msgstr ""
|
7612 |
|
7613 |
+
#: lib/wordfenceClass.php:4945
|
7614 |
msgid "The scan has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself."
|
7615 |
msgstr ""
|
7616 |
|
7617 |
+
#: lib/wordfenceClass.php:4951
|
7618 |
msgid "Scans are not functional because SSL is unavailable."
|
7619 |
msgstr ""
|
7620 |
|
7621 |
+
#: lib/wordfenceClass.php:4957
|
7622 |
msgid "The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably."
|
7623 |
msgstr ""
|
7624 |
|
7625 |
+
#: lib/wordfenceClass.php:4965
|
7626 |
msgid "The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably."
|
7627 |
msgstr ""
|
7628 |
|
7629 |
+
#: lib/wordfenceClass.php:4992
|
7630 |
msgid "Invalid email address given."
|
7631 |
msgstr ""
|
7632 |
|
7633 |
+
#: lib/wordfenceClass.php:5017
|
7634 |
+
#: lib/wordfenceClass.php:5142
|
7635 |
msgid "Deleting an infected wp-config.php file must be done outside of Wordfence. The wp-config.php file contains your database credentials, which you will need to restore normal site operations. Your site will NOT function once the wp-config.php file has been deleted."
|
7636 |
msgstr ""
|
7637 |
|
7638 |
#. translators: 1. File path. 2. Error message.
|
7639 |
+
#: lib/wordfenceClass.php:5026
|
7640 |
msgid "Could not delete file %1$s. Error was: %2$s"
|
7641 |
msgstr ""
|
7642 |
|
7643 |
#. translators: File path.
|
7644 |
+
#: lib/wordfenceClass.php:5050
|
7645 |
msgid "We could not retrieve the original file of %s to do a repair."
|
7646 |
msgstr ""
|
7647 |
|
7648 |
#. translators: File path.
|
7649 |
+
#: lib/wordfenceClass.php:5055
|
7650 |
msgid "An invalid file %s was specified for repair."
|
7651 |
msgstr ""
|
7652 |
|
7653 |
#. translators: File path.
|
7654 |
+
#: lib/wordfenceClass.php:5063
|
7655 |
msgid "You don't have permission to repair %s. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file."
|
7656 |
msgstr ""
|
7657 |
|
7658 |
#. translators: 1. File path. 2. Error message.
|
7659 |
+
#: lib/wordfenceClass.php:5066
|
7660 |
msgid "We could not write to %1$s. The error was: %2$s"
|
7661 |
msgstr ""
|
7662 |
|
7663 |
#. translators: 1. File path. 2. Number of bytes.
|
7664 |
+
#: lib/wordfenceClass.php:5077
|
7665 |
msgid "We could not write to %1$s. (%2$d bytes written) You may not have permission to modify files on your WordPress server."
|
7666 |
msgstr ""
|
7667 |
|
7668 |
+
#: lib/wordfenceClass.php:5089
|
7669 |
msgid "Deleted some files with errors"
|
7670 |
msgstr ""
|
7671 |
|
7672 |
+
#: lib/wordfenceClass.php:5089
|
7673 |
msgid "Repaired some files with errors"
|
7674 |
msgstr ""
|
7675 |
|
7676 |
#. translators: 1. Number of files. 2. Error message.
|
7677 |
+
#: lib/wordfenceClass.php:5092
|
7678 |
msgid "Deleted %1$d files but we encountered the following errors with other files: %2$s"
|
7679 |
msgstr ""
|
7680 |
|
7681 |
#. translators: 1. Number of files. 2. Error message.
|
7682 |
+
#: lib/wordfenceClass.php:5094
|
7683 |
msgid "Repaired %1$d files but we encountered the following errors with other files: %2$s"
|
7684 |
msgstr ""
|
7685 |
|
7686 |
#. translators: Number of files.
|
7687 |
+
#: lib/wordfenceClass.php:5098
|
7688 |
msgid "Deleted %d files successfully"
|
7689 |
msgstr ""
|
7690 |
|
7691 |
#. translators: Number of files.
|
7692 |
+
#: lib/wordfenceClass.php:5098
|
7693 |
msgid "Repaired %d files successfully"
|
7694 |
msgstr ""
|
7695 |
|
7696 |
#. translators: Number of files.
|
7697 |
+
#: lib/wordfenceClass.php:5099
|
7698 |
msgid "Deleted %d files successfully. No errors were encountered."
|
7699 |
msgstr ""
|
7700 |
|
7701 |
#. translators: Number of files.
|
7702 |
+
#: lib/wordfenceClass.php:5099
|
7703 |
msgid "Repaired %d files successfully. No errors were encountered."
|
7704 |
msgstr ""
|
7705 |
|
7706 |
+
#: lib/wordfenceClass.php:5102
|
7707 |
msgid "Could not delete files"
|
7708 |
msgstr ""
|
7709 |
|
7710 |
+
#: lib/wordfenceClass.php:5102
|
7711 |
msgid "Could not repair files"
|
7712 |
msgstr ""
|
7713 |
|
7714 |
#. translators: Error message.
|
7715 |
+
#: lib/wordfenceClass.php:5105
|
7716 |
msgid "We could not delete any of the files you selected. We encountered the following errors: %s"
|
7717 |
msgstr ""
|
7718 |
|
7719 |
#. translators: Error message.
|
7720 |
+
#: lib/wordfenceClass.php:5107
|
7721 |
msgid "We could not repair any of the files you selected. We encountered the following errors: %s"
|
7722 |
msgstr ""
|
7723 |
|
7724 |
+
#: lib/wordfenceClass.php:5110
|
7725 |
msgid "Nothing done"
|
7726 |
msgstr ""
|
7727 |
|
7728 |
+
#: lib/wordfenceClass.php:5111
|
7729 |
msgid "We didn't delete anything and no errors were found."
|
7730 |
msgstr ""
|
7731 |
|
7732 |
+
#: lib/wordfenceClass.php:5111
|
7733 |
msgid "We didn't repair anything and no errors were found."
|
7734 |
msgstr ""
|
7735 |
|
7736 |
+
#: lib/wordfenceClass.php:5119
|
7737 |
msgid "Invalid bulk operation selected"
|
7738 |
msgstr ""
|
7739 |
|
7740 |
+
#: lib/wordfenceClass.php:5129
|
7741 |
msgid "Could not delete file because we could not find that issue."
|
7742 |
msgstr ""
|
7743 |
|
7744 |
+
#: lib/wordfenceClass.php:5132
|
7745 |
msgid "Could not delete file because that issue does not appear to be a file related issue."
|
7746 |
msgstr ""
|
7747 |
|
7748 |
+
#: lib/wordfenceClass.php:5138
|
7749 |
msgid "An invalid file was requested for deletion."
|
7750 |
msgstr ""
|
7751 |
|
7752 |
#. translators: 1. File path. 2. Error message.
|
7753 |
+
#: lib/wordfenceClass.php:5181
|
7754 |
msgid "Could not delete file %1$s. The error was: %2$s"
|
7755 |
msgstr ""
|
7756 |
|
7757 |
+
#: lib/wordfenceClass.php:5194
|
7758 |
msgid "Could not remove the option because we could not find that issue."
|
7759 |
msgstr ""
|
7760 |
|
7761 |
+
#: lib/wordfenceClass.php:5197
|
7762 |
msgid "Could not remove the option because that issue does not appear to be a database related issue."
|
7763 |
msgstr ""
|
7764 |
|
7765 |
#. translators: 1. WordPress option. 2. Error message.
|
7766 |
+
#: lib/wordfenceClass.php:5210
|
7767 |
msgid "Could not remove the option %1$s. The error was: %2$s"
|
7768 |
msgstr ""
|
7769 |
|
7770 |
+
#: lib/wordfenceClass.php:5237
|
7771 |
msgid "Modifying the .htaccess file did not resolve the issue, so the original .htaccess file was restored. You can fix this manually by setting <code>display_errors</code> to <code>Off</code> in your php.ini if your site is on a VPS or dedicated server that you control."
|
7772 |
msgstr ""
|
7773 |
|
7774 |
+
#: lib/wordfenceClass.php:5279
|
7775 |
msgid "We could not get the original file to do a repair."
|
7776 |
msgstr ""
|
7777 |
|
7778 |
+
#: lib/wordfenceClass.php:5283
|
7779 |
msgid "An invalid file was specified for repair."
|
7780 |
msgstr ""
|
7781 |
|
7782 |
+
#: lib/wordfenceClass.php:5298
|
7783 |
msgid "We could not write to that file. You may not have permission to modify files on your WordPress server."
|
7784 |
msgstr ""
|
7785 |
|
7786 |
+
#: lib/wordfenceClass.php:5302
|
7787 |
msgid "Ajax request received to start scan."
|
7788 |
msgstr ""
|
7789 |
|
7790 |
#. translators: Number of URLs.
|
7791 |
+
#: lib/wordfenceClass.php:5357
|
7792 |
msgid "Page contains %d malware URL: "
|
7793 |
msgid_plural "Page contains %d malware URLs: "
|
7794 |
msgstr[0] ""
|
7795 |
msgstr[1] ""
|
7796 |
|
7797 |
+
#: lib/wordfenceClass.php:5360
|
7798 |
msgid "Run a Scan"
|
7799 |
msgstr ""
|
7800 |
|
7801 |
+
#: lib/wordfenceClass.php:5408
|
7802 |
msgid "Unknown dashboard data set."
|
7803 |
msgstr ""
|
7804 |
|
7805 |
+
#: lib/wordfenceClass.php:5439
|
7806 |
msgid "Bad security token. It may have been more than 12 hours since you reloaded the page you came from. Try reloading the page you came from. If that doesn't work, please sign out and sign-in again."
|
7807 |
msgstr ""
|
7808 |
|
7809 |
+
#: lib/wordfenceClass.php:5626
|
7810 |
msgid "An invalid IP address was specified."
|
7811 |
msgstr ""
|
7812 |
|
7813 |
+
#: lib/wordfenceClass.php:5679
|
7814 |
+
#: lib/wordfenceClass.php:5719
|
7815 |
+
#: lib/wordfenceClass.php:5757
|
7816 |
msgid "File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)"
|
7817 |
msgstr ""
|
7818 |
|
7819 |
+
#: lib/wordfenceClass.php:5684
|
7820 |
+
#: lib/wordfenceClass.php:5762
|
7821 |
msgid "Invalid file requested. (Relative paths not allowed)"
|
7822 |
msgstr ""
|
7823 |
|
7824 |
+
#: lib/wordfenceClass.php:5688
|
7825 |
+
#: lib/wordfenceClass.php:5723
|
7826 |
+
#: lib/wordfenceClass.php:5766
|
7827 |
msgid "File contains illegal characters."
|
7828 |
msgstr ""
|
7829 |
|
7830 |
#. translators: Error message.
|
7831 |
+
#: lib/wordfenceClass.php:5698
|
7832 |
msgid "We could not open the requested file for reading. The error was: %s"
|
7833 |
msgstr ""
|
7834 |
|
7835 |
+
#: lib/wordfenceClass.php:5706
|
7836 |
msgid "Greater than 2 Gigs"
|
7837 |
msgstr ""
|
7838 |
|
7839 |
+
#: lib/wordfenceClass.php:5711
|
7840 |
msgid "Unknown file size."
|
7841 |
msgstr ""
|
7842 |
|
7843 |
+
#: lib/wordfenceClass.php:5732
|
7844 |
msgid "We could not get the contents of the original file to do a comparison."
|
7845 |
msgstr ""
|
7846 |
|
7847 |
+
#: lib/wordfenceClass.php:5770
|
7848 |
msgid "File does not exist."
|
7849 |
msgstr ""
|
7850 |
|
7851 |
+
#: lib/wordfenceClass.php:6020
|
7852 |
#: views/dashboard/options-group-import.php:167
|
7853 |
msgid "Reload"
|
7854 |
msgstr ""
|
7855 |
|
7856 |
+
#: lib/wordfenceClass.php:6037
|
7857 |
msgid "${totalIPs} addresses in this network"
|
7858 |
msgstr ""
|
7859 |
|
7860 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7861 |
+
#: lib/wordfenceClass.php:6038
|
7862 |
msgid "%s in POST body: %s"
|
7863 |
msgstr ""
|
7864 |
|
7865 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7866 |
+
#: lib/wordfenceClass.php:6039
|
7867 |
msgid "%s in cookie: %s"
|
7868 |
msgstr ""
|
7869 |
|
7870 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7871 |
+
#: lib/wordfenceClass.php:6040
|
7872 |
msgid "%s in file: %s"
|
7873 |
msgstr ""
|
7874 |
|
7875 |
#. translators: 1. Description of firewall action. 2. Description of input parameters.
|
7876 |
+
#: lib/wordfenceClass.php:6041
|
7877 |
msgid "%s in query string: %s"
|
7878 |
msgstr ""
|
7879 |
|
7880 |
#. translators: Domain name.
|
7881 |
+
#: lib/wordfenceClass.php:6042
|
7882 |
msgid "%s is not valid hostname"
|
7883 |
msgstr ""
|
7884 |
|
7885 |
#. translators: Domain name.
|
7886 |
+
#: lib/wordfenceClass.php:6043
|
7887 |
msgid ".htaccess Updated"
|
7888 |
msgstr ""
|
7889 |
|
7890 |
+
#: lib/wordfenceClass.php:6044
|
7891 |
msgid ".htaccess change"
|
7892 |
msgstr ""
|
7893 |
|
7894 |
+
#: lib/wordfenceClass.php:6045
|
7895 |
msgid "404 Not Found"
|
7896 |
msgstr ""
|
7897 |
|
7898 |
+
#: lib/wordfenceClass.php:6046
|
7899 |
msgid "Activity Log Sent"
|
7900 |
msgstr ""
|
7901 |
|
7902 |
+
#: lib/wordfenceClass.php:6047
|
7903 |
msgid "Add action to allowlist"
|
7904 |
msgstr ""
|
7905 |
|
7906 |
+
#: lib/wordfenceClass.php:6048
|
7907 |
msgid "Add code to .htaccess"
|
7908 |
msgstr ""
|
7909 |
|
7910 |
+
#: lib/wordfenceClass.php:6049
|
7911 |
msgid "All Hits"
|
7912 |
msgstr ""
|
7913 |
|
7914 |
#. translators: WordPress username.
|
7915 |
+
#: lib/wordfenceClass.php:6050
|
7916 |
msgid "All capabilties of admin user %s were successfully revoked."
|
7917 |
msgstr ""
|
7918 |
|
7919 |
+
#: lib/wordfenceClass.php:6052
|
7920 |
msgid "An error occurred when adding the request to the allowlist."
|
7921 |
msgstr ""
|
7922 |
|
7923 |
+
#: lib/wordfenceClass.php:6053
|
7924 |
msgid "Are you sure you want to allowlist this action?"
|
7925 |
msgstr ""
|
7926 |
|
7927 |
+
#: lib/wordfenceClass.php:6054
|
7928 |
msgid "Authentication Code"
|
7929 |
msgstr ""
|
7930 |
|
7931 |
+
#: lib/wordfenceClass.php:6055
|
7932 |
msgid "Background Request Blocked"
|
7933 |
msgstr ""
|
7934 |
|
7935 |
+
#: lib/wordfenceClass.php:6056
|
7936 |
msgid "Block This Network"
|
7937 |
msgstr ""
|
7938 |
|
7939 |
+
#: lib/wordfenceClass.php:6058
|
7940 |
msgid "Blocked By Firewall"
|
7941 |
msgstr ""
|
7942 |
|
7943 |
+
#: lib/wordfenceClass.php:6059
|
7944 |
msgid "Blocked WAF"
|
7945 |
msgstr ""
|
7946 |
|
7947 |
+
#: lib/wordfenceClass.php:6060
|
7948 |
msgid "Blocked by Wordfence"
|
7949 |
msgstr ""
|
7950 |
|
7951 |
+
#: lib/wordfenceClass.php:6061
|
7952 |
msgid "Blocked by Wordfence plugin settings"
|
7953 |
msgstr ""
|
7954 |
|
7955 |
+
#: lib/wordfenceClass.php:6062
|
7956 |
msgid "Blocked by the Wordfence Application Firewall and plugin settings"
|
7957 |
msgstr ""
|
7958 |
|
7959 |
+
#: lib/wordfenceClass.php:6063
|
7960 |
msgid "Blocked by the Wordfence Security Network"
|
7961 |
msgstr ""
|
7962 |
|
7963 |
+
#: lib/wordfenceClass.php:6064
|
7964 |
msgid "Blocked by the Wordfence Web Application Firewall"
|
7965 |
msgstr ""
|
7966 |
|
7967 |
+
#: lib/wordfenceClass.php:6067
|
7968 |
msgid "Cellphone Sign-In Recovery Codes"
|
7969 |
msgstr ""
|
7970 |
|
7971 |
+
#: lib/wordfenceClass.php:6068
|
7972 |
msgid "Cellphone Sign-in activated for user."
|
7973 |
msgstr ""
|
7974 |
|
7975 |
+
#: lib/wordfenceClass.php:6069
|
7976 |
msgid "Click here to download a backup copy of this file now"
|
7977 |
msgstr ""
|
7978 |
|
7979 |
+
#: lib/wordfenceClass.php:6070
|
7980 |
msgid "Click here to download a backup copy of your .htaccess file now"
|
7981 |
msgstr ""
|
7982 |
|
7983 |
+
#: lib/wordfenceClass.php:6071
|
7984 |
msgid "Click to fix .htaccess"
|
7985 |
msgstr ""
|
7986 |
|
7987 |
+
#: lib/wordfenceClass.php:6073
|
7988 |
msgid "Crawlers"
|
7989 |
msgstr ""
|
7990 |
|
7991 |
+
#: lib/wordfenceClass.php:6074
|
7992 |
msgid "Diagnostic report has been sent successfully."
|
7993 |
msgstr ""
|
7994 |
|
7995 |
+
#: lib/wordfenceClass.php:6075
|
7996 |
msgid "Directory Listing Disabled"
|
7997 |
msgstr ""
|
7998 |
|
7999 |
+
#: lib/wordfenceClass.php:6076
|
8000 |
msgid "Directory listing has been disabled on your server."
|
8001 |
msgstr ""
|
8002 |
|
8003 |
+
#: lib/wordfenceClass.php:6079
|
8004 |
msgid "Don't ask again"
|
8005 |
msgstr ""
|
8006 |
|
8007 |
+
#: lib/wordfenceClass.php:6081
|
8008 |
msgid "Download Backup File"
|
8009 |
msgstr ""
|
8010 |
|
8011 |
+
#: lib/wordfenceClass.php:6082
|
8012 |
msgid "Each line of 16 letters and numbers is a single recovery code, with optional spaces for readability. When typing your password, enter \"wf\" followed by the entire code like \"mypassword wf1234 5678 90AB CDEF\". If your site shows a separate prompt for entering a code after entering only your username and password, enter only the code like \"1234 5678 90AB CDEF\". Your recovery codes are:"
|
8013 |
msgstr ""
|
8014 |
|
8015 |
+
#: lib/wordfenceClass.php:6083
|
8016 |
msgid "Email Diagnostic Report"
|
8017 |
msgstr ""
|
8018 |
|
8019 |
+
#: lib/wordfenceClass.php:6084
|
8020 |
msgid "Email Wordfence Activity Log"
|
8021 |
msgstr ""
|
8022 |
|
8023 |
+
#: lib/wordfenceClass.php:6086
|
8024 |
msgid "Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team. It also contains your PHP configuration from the phpinfo() function for diagnostic data."
|
8025 |
msgstr ""
|
8026 |
|
8027 |
+
#: lib/wordfenceClass.php:6087
|
8028 |
msgid "Error"
|
8029 |
msgstr ""
|
8030 |
|
8031 |
+
#: lib/wordfenceClass.php:6088
|
8032 |
msgid "Error Enabling All Options Page"
|
8033 |
msgstr ""
|
8034 |
|
8035 |
+
#: lib/wordfenceClass.php:6089
|
8036 |
msgid "Error Restoring Defaults"
|
8037 |
msgstr ""
|
8038 |
|
8039 |
+
#: lib/wordfenceClass.php:6090
|
8040 |
msgid "Error Saving Option"
|
8041 |
msgstr ""
|
8042 |
|
8043 |
+
#: lib/wordfenceClass.php:6091
|
8044 |
msgid "Error Saving Options"
|
8045 |
msgstr ""
|
8046 |
|
8047 |
+
#: lib/wordfenceClass.php:6092
|
8048 |
msgid "Failed Login"
|
8049 |
msgstr ""
|
8050 |
|
8051 |
+
#: lib/wordfenceClass.php:6093
|
8052 |
msgid "Failed Login: Invalid Username"
|
8053 |
msgstr ""
|
8054 |
|
8055 |
+
#: lib/wordfenceClass.php:6094
|
8056 |
msgid "Failed Login: Valid Username"
|
8057 |
msgstr ""
|
8058 |
|
8059 |
+
#: lib/wordfenceClass.php:6095
|
8060 |
msgid "File hidden successfully"
|
8061 |
msgstr ""
|
8062 |
|
8063 |
+
#: lib/wordfenceClass.php:6096
|
8064 |
msgid "File restored OK"
|
8065 |
msgstr ""
|
8066 |
|
8067 |
+
#: lib/wordfenceClass.php:6097
|
8068 |
msgid "Filter Traffic"
|
8069 |
msgstr ""
|
8070 |
|
8071 |
+
#: lib/wordfenceClass.php:6098
|
8072 |
msgid "Firewall Response"
|
8073 |
msgstr ""
|
8074 |
|
8075 |
+
#: lib/wordfenceClass.php:6099
|
8076 |
#: views/scanner/issue-wpscan_fullPathDiscl.php:8
|
8077 |
msgid "Full Path Disclosure"
|
8078 |
msgstr ""
|
8079 |
|
8080 |
+
#: lib/wordfenceClass.php:6100
|
8081 |
msgid "Google Bot"
|
8082 |
msgstr ""
|
8083 |
|
8084 |
+
#: lib/wordfenceClass.php:6101
|
8085 |
msgid "Google Crawlers"
|
8086 |
msgstr ""
|
8087 |
|
8088 |
+
#: lib/wordfenceClass.php:6102
|
8089 |
msgid "HTTP Response Code"
|
8090 |
msgstr ""
|
8091 |
|
8092 |
+
#: lib/wordfenceClass.php:6104
|
8093 |
msgid "Humans"
|
8094 |
msgstr ""
|
8095 |
|
8096 |
+
#: lib/wordfenceClass.php:6106
|
8097 |
msgid "Key:"
|
8098 |
msgstr ""
|
8099 |
|
8100 |
#. translators: Localized date.
|
8101 |
+
#: lib/wordfenceClass.php:6107
|
8102 |
msgid "Last Updated: %s"
|
8103 |
msgstr ""
|
8104 |
|
8105 |
#. translators: Localized date.
|
8106 |
+
#: lib/wordfenceClass.php:6108
|
8107 |
msgid "Learn more about repairing modified files."
|
8108 |
msgstr ""
|
8109 |
|
8110 |
+
#: lib/wordfenceClass.php:6110
|
8111 |
msgid "Locked Out"
|
8112 |
msgstr ""
|
8113 |
|
8114 |
+
#: lib/wordfenceClass.php:6111
|
8115 |
msgid "Locked out from logging in"
|
8116 |
msgstr ""
|
8117 |
|
8118 |
+
#: lib/wordfenceClass.php:6112
|
8119 |
msgid "Logged In"
|
8120 |
msgstr ""
|
8121 |
|
8122 |
+
#: lib/wordfenceClass.php:6113
|
8123 |
msgid "Logins"
|
8124 |
msgstr ""
|
8125 |
|
8126 |
+
#: lib/wordfenceClass.php:6114
|
8127 |
msgid "Logins and Logouts"
|
8128 |
msgstr ""
|
8129 |
|
8130 |
#. translators: Localized date.
|
8131 |
+
#: lib/wordfenceClass.php:6117
|
8132 |
msgid "Next Update Check: %s"
|
8133 |
msgstr ""
|
8134 |
|
8135 |
#. translators: Localized date.
|
8136 |
+
#: lib/wordfenceClass.php:6118
|
8137 |
msgid "No activity to report yet. Please complete your first scan."
|
8138 |
msgstr ""
|
8139 |
|
8140 |
+
#: lib/wordfenceClass.php:6119
|
8141 |
msgid "No issues have been ignored."
|
8142 |
msgstr ""
|
8143 |
|
8144 |
+
#: lib/wordfenceClass.php:6120
|
8145 |
msgid "No new issues have been found."
|
8146 |
msgstr ""
|
8147 |
|
8148 |
+
#: lib/wordfenceClass.php:6121
|
8149 |
msgid "No rules were updated. Please verify you have permissions to write to the /wp-content/wflogs directory."
|
8150 |
msgstr ""
|
8151 |
|
8152 |
+
#: lib/wordfenceClass.php:6122
|
8153 |
msgid "No rules were updated. Please verify your website can reach the Wordfence servers."
|
8154 |
msgstr ""
|
8155 |
|
8156 |
+
#: lib/wordfenceClass.php:6123
|
8157 |
msgid "No rules were updated. Your website has reached the maximum number of rule update requests. Please try again later."
|
8158 |
msgstr ""
|
8159 |
|
8160 |
+
#: lib/wordfenceClass.php:6124
|
8161 |
msgid "Note: Status will update when changes are saved"
|
8162 |
msgstr ""
|
8163 |
|
8164 |
+
#: lib/wordfenceClass.php:6125
|
8165 |
msgid "OK"
|
8166 |
msgstr ""
|
8167 |
|
8168 |
+
#: lib/wordfenceClass.php:6126
|
8169 |
msgid "Pages Not Found"
|
8170 |
msgstr ""
|
8171 |
|
8172 |
+
#: lib/wordfenceClass.php:6127
|
8173 |
msgid "Paid Members Only"
|
8174 |
msgstr ""
|
8175 |
|
8176 |
+
#: lib/wordfenceClass.php:6129
|
8177 |
msgid "Please enter a valid email address."
|
8178 |
msgstr ""
|
8179 |
|
8180 |
+
#: lib/wordfenceClass.php:6130
|
8181 |
msgid "Please include your support ticket number or forum username."
|
8182 |
msgstr ""
|
8183 |
|
8184 |
+
#: lib/wordfenceClass.php:6131
|
8185 |
msgid "Please make a backup of this file before proceeding. If you need to restore this backup file, you can copy it to the following path from your site's root:"
|
8186 |
msgstr ""
|
8187 |
|
8188 |
+
#: lib/wordfenceClass.php:6132
|
8189 |
msgid "Please specify a reason"
|
8190 |
msgstr ""
|
8191 |
|
8192 |
+
#: lib/wordfenceClass.php:6133
|
8193 |
msgid "Please specify a valid IP address range in the form of \"1.2.3.4 - 1.2.3.5\" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash."
|
8194 |
msgstr ""
|
8195 |
|
8196 |
+
#: lib/wordfenceClass.php:6134
|
8197 |
msgid "Please specify either an IP address range, Hostname or a web browser pattern to match."
|
8198 |
msgstr ""
|
8199 |
|
8200 |
+
#: lib/wordfenceClass.php:6135
|
8201 |
msgid "Recent Activity"
|
8202 |
msgstr ""
|
8203 |
|
8204 |
+
#: lib/wordfenceClass.php:6136
|
8205 |
msgid "Recovery Codes"
|
8206 |
msgstr ""
|
8207 |
|
8208 |
+
#: lib/wordfenceClass.php:6137
|
8209 |
msgid "Redirected"
|
8210 |
msgstr ""
|
8211 |
|
8212 |
+
#: lib/wordfenceClass.php:6138
|
8213 |
msgid "Redirected by Country Blocking bypass URL"
|
8214 |
msgstr ""
|
8215 |
|
8216 |
+
#: lib/wordfenceClass.php:6139
|
8217 |
msgid "Referer"
|
8218 |
msgstr ""
|
8219 |
|
8220 |
+
#: lib/wordfenceClass.php:6140
|
8221 |
msgid "Registered Users"
|
8222 |
msgstr ""
|
8223 |
|
8224 |
+
#: lib/wordfenceClass.php:6142
|
8225 |
msgid "Rule Update Failed"
|
8226 |
msgstr ""
|
8227 |
|
8228 |
+
#: lib/wordfenceClass.php:6143
|
8229 |
msgid "Rules Updated"
|
8230 |
msgstr ""
|
8231 |
|
8232 |
+
#: lib/wordfenceClass.php:6145
|
8233 |
msgid "Scan Complete."
|
8234 |
msgstr ""
|
8235 |
|
8236 |
+
#: lib/wordfenceClass.php:6146
|
8237 |
msgid "Scan the code below with your authenticator app to add this account. Some authenticator apps also allow you to type in the text version instead."
|
8238 |
msgstr ""
|
8239 |
|
8240 |
+
#: lib/wordfenceClass.php:6147
|
8241 |
msgid "Security Event"
|
8242 |
msgstr ""
|
8243 |
|
8244 |
+
#: lib/wordfenceClass.php:6148
|
8245 |
msgid "Send"
|
8246 |
msgstr ""
|
8247 |
|
8248 |
+
#: lib/wordfenceClass.php:6149
|
8249 |
msgid "Sorry, but no data for that IP or domain was found."
|
8250 |
msgstr ""
|
8251 |
|
8252 |
+
#: lib/wordfenceClass.php:6150
|
8253 |
msgid "Specify a valid IP range"
|
8254 |
msgstr ""
|
8255 |
|
8256 |
+
#: lib/wordfenceClass.php:6151
|
8257 |
msgid "Specify a valid hostname"
|
8258 |
msgstr ""
|
8259 |
|
8260 |
+
#: lib/wordfenceClass.php:6152
|
8261 |
msgid "Specify an IP range, Hostname or Browser pattern"
|
8262 |
msgstr ""
|
8263 |
|
8264 |
+
#: lib/wordfenceClass.php:6153
|
8265 |
msgid "Success deleting file"
|
8266 |
msgstr ""
|
8267 |
|
8268 |
+
#: lib/wordfenceClass.php:6154
|
8269 |
msgid "Success removing option"
|
8270 |
msgstr ""
|
8271 |
|
8272 |
+
#: lib/wordfenceClass.php:6155
|
8273 |
msgid "Success restoring file"
|
8274 |
msgstr ""
|
8275 |
|
8276 |
+
#: lib/wordfenceClass.php:6156
|
8277 |
msgid "Success updating option"
|
8278 |
msgstr ""
|
8279 |
|
8280 |
+
#: lib/wordfenceClass.php:6157
|
8281 |
msgid "Successfully deleted admin"
|
8282 |
msgstr ""
|
8283 |
|
8284 |
+
#: lib/wordfenceClass.php:6158
|
8285 |
msgid "Successfully revoked admin"
|
8286 |
msgstr ""
|
8287 |
|
8288 |
+
#: lib/wordfenceClass.php:6159
|
8289 |
msgid "Test Email Sent"
|
8290 |
msgstr ""
|
8291 |
|
8292 |
+
#: lib/wordfenceClass.php:6160
|
8293 |
msgid "The 'How does Wordfence get IPs' option was successfully updated to the recommended value."
|
8294 |
msgstr ""
|
8295 |
|
8296 |
+
#: lib/wordfenceClass.php:6161
|
8297 |
msgid "The Full Path disclosure issue has been fixed"
|
8298 |
msgstr ""
|
8299 |
|
8300 |
#. translators: WordPress username.
|
8301 |
+
#: lib/wordfenceClass.php:6162
|
8302 |
msgid "The admin user %s was successfully deleted."
|
8303 |
msgstr ""
|
8304 |
|
8305 |
#. translators: File path.
|
8306 |
+
#: lib/wordfenceClass.php:6163
|
8307 |
msgid "The file %s was successfully deleted."
|
8308 |
msgstr ""
|
8309 |
|
8310 |
#. translators: File path.
|
8311 |
+
#: lib/wordfenceClass.php:6164
|
8312 |
msgid "The file %s was successfully hidden from public view."
|
8313 |
msgstr ""
|
8314 |
|
8315 |
#. translators: File path.
|
8316 |
+
#: lib/wordfenceClass.php:6165
|
8317 |
msgid "The file %s was successfully restored."
|
8318 |
msgstr ""
|
8319 |
|
8320 |
#. translators: WordPress option.
|
8321 |
+
#: lib/wordfenceClass.php:6166
|
8322 |
msgid "The option %s was successfully removed."
|
8323 |
msgstr ""
|
8324 |
|
8325 |
#. translators: WordPress option.
|
8326 |
+
#: lib/wordfenceClass.php:6167
|
8327 |
msgid "The request has been allowlisted. Please try it again."
|
8328 |
msgstr ""
|
8329 |
|
8330 |
+
#: lib/wordfenceClass.php:6168
|
8331 |
msgid "There was an error while sending the email."
|
8332 |
msgstr ""
|
8333 |
|
8334 |
+
#: lib/wordfenceClass.php:6169
|
8335 |
msgid "This will be shown only once. Keep these codes somewhere safe."
|
8336 |
msgstr ""
|
8337 |
|
8338 |
+
#: lib/wordfenceClass.php:6170
|
8339 |
msgid "Throttled"
|
8340 |
msgstr ""
|
8341 |
|
8342 |
+
#: lib/wordfenceClass.php:6171
|
8343 |
msgid "Two Factor Status"
|
8344 |
msgstr ""
|
8345 |
|
8346 |
#. translators: HTTP client type.
|
8347 |
+
#: lib/wordfenceClass.php:6173
|
8348 |
msgid "Type: %s"
|
8349 |
msgstr ""
|
8350 |
|
8351 |
#. translators: HTTP client type.
|
8352 |
+
#: lib/wordfenceClass.php:6174
|
8353 |
#: views/scanner/issue-checkGSB.php:8
|
8354 |
#: views/scanner/issue-commentBadURL.php:8
|
8355 |
#: views/scanner/issue-configReadable.php:12
|
8369 |
msgid "URL"
|
8370 |
msgstr ""
|
8371 |
|
8372 |
+
#: lib/wordfenceClass.php:6175
|
8373 |
msgid "Unable to automatically hide file"
|
8374 |
msgstr ""
|
8375 |
|
8376 |
#. translators: 2FA backup codes.
|
8377 |
+
#: lib/wordfenceClass.php:6176
|
8378 |
msgid "Use one of these %s codes to log in if you are unable to access your phone. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
|
8379 |
msgstr ""
|
8380 |
|
8381 |
#. translators: 2FA backup codes.
|
8382 |
+
#: lib/wordfenceClass.php:6177
|
8383 |
msgid "Use one of these %s codes to log in if you lose access to your authenticator device. Codes are 16 characters long, plus optional spaces. Each one may be used only once."
|
8384 |
msgstr ""
|
8385 |
|
8386 |
+
#: lib/wordfenceClass.php:6179
|
8387 |
msgid "User ID"
|
8388 |
msgstr ""
|
8389 |
|
8390 |
+
#: lib/wordfenceClass.php:6181
|
8391 |
msgid "WHOIS LOOKUP"
|
8392 |
msgstr ""
|
8393 |
|
8394 |
+
#: lib/wordfenceClass.php:6182
|
8395 |
msgid "We are about to change your <em>.htaccess</em> file. Please make a backup of this file before proceeding."
|
8396 |
msgstr ""
|
8397 |
|
8398 |
#. translators: Error message.
|
8399 |
+
#: lib/wordfenceClass.php:6183
|
8400 |
msgid "We can't modify your .htaccess file for you because: %s"
|
8401 |
msgstr ""
|
8402 |
|
8403 |
#. translators: Error message.
|
8404 |
+
#: lib/wordfenceClass.php:6184
|
8405 |
msgid "We encountered a problem"
|
8406 |
msgstr ""
|
8407 |
|
8408 |
#. translators: URL.
|
8409 |
+
#: lib/wordfenceClass.php:6185
|
8410 |
msgid "Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future."
|
8411 |
msgstr ""
|
8412 |
|
8413 |
#. translators: URL.
|
8414 |
+
#: lib/wordfenceClass.php:6186
|
8415 |
msgid "Wordfence is working..."
|
8416 |
msgstr ""
|
8417 |
|
8418 |
+
#: lib/wordfenceClass.php:6187
|
8419 |
msgid "You are using Nginx as your web server. You'll need to disable autoindexing in your nginx.conf. See the <a target='_blank' rel='noopener noreferrer' href='http://nginx.org/en/docs/http/ngx_http_autoindex_module.html'>Nginx docs for more info</a> on how to do this."
|
8420 |
msgstr ""
|
8421 |
|
8422 |
+
#: lib/wordfenceClass.php:6188
|
8423 |
msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files."
|
8424 |
msgstr ""
|
8425 |
|
8426 |
+
#: lib/wordfenceClass.php:6189
|
8427 |
msgid "You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable <em>display_error</em>"
|
8428 |
msgstr ""
|
8429 |
|
8430 |
+
#: lib/wordfenceClass.php:6190
|
8431 |
msgid "You forgot to include a reason you're blocking this IP range. We ask you to include this for your own record keeping."
|
8432 |
msgstr ""
|
8433 |
|
8434 |
+
#: lib/wordfenceClass.php:6191
|
8435 |
msgid "You have unsaved changes to your options. If you leave this page, those changes will be lost."
|
8436 |
msgstr ""
|
8437 |
|
8438 |
+
#: lib/wordfenceClass.php:6192
|
8439 |
msgid "Your .htaccess has been updated successfully. Please verify your site is functioning normally."
|
8440 |
msgstr ""
|
8441 |
|
8442 |
#. translators: Email address.
|
8443 |
+
#: lib/wordfenceClass.php:6193
|
8444 |
msgid "Your Wordfence activity log was sent to %s"
|
8445 |
msgstr ""
|
8446 |
|
8447 |
#. translators: Email address.
|
8448 |
+
#: lib/wordfenceClass.php:6194
|
8449 |
msgid "Your rules have been updated successfully."
|
8450 |
msgstr ""
|
8451 |
|
8452 |
+
#: lib/wordfenceClass.php:6195
|
8453 |
msgid "Your rules have been updated successfully. You are currently using the free version of Wordfence. Upgrade to Wordfence premium to have your rules updated automatically as new threats emerge. <a href=\"https://www.wordfence.com/wafUpdateRules1/wordfence-signup/\">Click here to purchase a premium license</a>. <em>Note: Your rules will still update every 30 days as a free user.</em>"
|
8454 |
msgstr ""
|
8455 |
|
8456 |
#. translators: wp_mail() return value.
|
8457 |
+
#: lib/wordfenceClass.php:6196
|
8458 |
msgid "Your test email was sent to the requested email address. The result we received from the WordPress wp_mail() function was: %s<br /><br />A 'True' result means WordPress thinks the mail was sent without errors. A 'False' result means that WordPress encountered an error sending your mail. Note that it's possible to get a 'True' response with an error elsewhere in your mail system that may cause emails to not be delivered."
|
8459 |
msgstr ""
|
8460 |
|
8461 |
#. translators: wp_mail() return value.
|
8462 |
+
#: lib/wordfenceClass.php:6197
|
8463 |
msgid "blocked by firewall"
|
8464 |
msgstr ""
|
8465 |
|
8466 |
#. translators: Reason for firewall action.
|
8467 |
+
#: lib/wordfenceClass.php:6198
|
8468 |
msgid "blocked by firewall for %s"
|
8469 |
msgstr ""
|
8470 |
|
8471 |
#. translators: Reason for firewall action.
|
8472 |
+
#: lib/wordfenceClass.php:6199
|
8473 |
msgid "blocked by real-time IP blocklist"
|
8474 |
msgstr ""
|
8475 |
|
8476 |
+
#: lib/wordfenceClass.php:6200
|
8477 |
msgid "blocked by the Wordfence Security Network"
|
8478 |
msgstr ""
|
8479 |
|
8480 |
#. translators: Reason for firewall action.
|
8481 |
+
#: lib/wordfenceClass.php:6201
|
8482 |
msgid "blocked for %s"
|
8483 |
msgstr ""
|
8484 |
|
8485 |
#. translators: Reason for firewall action.
|
8486 |
+
#: lib/wordfenceClass.php:6202
|
8487 |
msgid "locked out from logging in"
|
8488 |
msgstr ""
|
8489 |
|
8490 |
+
#: lib/wordfenceClass.php:6215
|
8491 |
msgid "Wordfence generated an error on activation. The output we received during activation was:"
|
8492 |
msgstr ""
|
8493 |
|
8494 |
+
#: lib/wordfenceClass.php:6222
|
8495 |
msgid "Wordfence could not register with the Wordfence scanning servers when it activated."
|
8496 |
msgstr ""
|
8497 |
|
8498 |
+
#: lib/wordfenceClass.php:6223
|
8499 |
msgid "You can try to fix this by deactivating Wordfence and then activating it again, so Wordfence will retry registering for you. If you keep seeing this error, it usually means your WordPress server can't connect to our scanning servers, or your wfConfig database table cannot be created to save the key. You can try asking your host to allow your server to connect to noc1.wordfence.com or check the wfConfig database table and database privileges."
|
8500 |
msgstr ""
|
8501 |
|
8502 |
+
#: lib/wordfenceClass.php:6237
|
8503 |
msgid "The Wordfence Web Application Firewall cannot run."
|
8504 |
msgstr ""
|
8505 |
|
8506 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
8507 |
+
#: lib/wordfenceClass.php:6240
|
8508 |
msgid "The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by <a href=\"%1$s\">clicking here</a>. It will automatically resume normal operation when it is fixed. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
|
8509 |
msgstr ""
|
8510 |
|
8511 |
+
#: lib/wordfenceClass.php:6246
|
8512 |
+
msgid "The WAF storage engine is currently set to mysqli, but Wordfence is unable to use the database. The WAF will fall back to using local file system storage instead."
|
8513 |
+
msgstr ""
|
8514 |
+
|
8515 |
+
#: lib/wordfenceClass.php:6259
|
8516 |
+
#: lib/wordfenceClass.php:6278
|
8517 |
msgid "The Wordfence Web Application Firewall needs a configuration update."
|
8518 |
msgstr ""
|
8519 |
|
8520 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
8521 |
+
#: lib/wordfenceClass.php:6262
|
8522 |
msgid "It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a>. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
|
8523 |
msgstr ""
|
8524 |
|
8525 |
#. translators: 1. WordPress admin panel URL. 2. Support URL.
|
8526 |
+
#: lib/wordfenceClass.php:6281
|
8527 |
msgid "It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by <a href=\"%1$s\">clicking here</a> or use the \"Optimize the Wordfence Firewall\" button on the Firewall Options page. <a class=\"wfhelp\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"%2$s\"></a>"
|
8528 |
msgstr ""
|
8529 |
|
8530 |
+
#: lib/wordfenceClass.php:6287
|
8531 |
msgid "The Wordfence Web Application Firewall is in read-only mode."
|
8532 |
msgstr ""
|
8533 |
|
8534 |
+
#: lib/wordfenceClass.php:6296
|
8535 |
msgid "This site is currently using PHP's built in REMOTE_ADDR."
|
8536 |
msgstr ""
|
8537 |
|
8538 |
+
#: lib/wordfenceClass.php:6299
|
8539 |
msgid "This site is currently using the X-Forwarded-For HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
|
8540 |
msgstr ""
|
8541 |
|
8542 |
+
#: lib/wordfenceClass.php:6302
|
8543 |
msgid "This site is currently using the X-Real-IP HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header."
|
8544 |
msgstr ""
|
8545 |
|
8546 |
+
#: lib/wordfenceClass.php:6305
|
8547 |
msgid "This site is currently using the Cloudflare \"CF-Connecting-IP\" HTTP header, which should only be used when the site is behind Cloudflare."
|
8548 |
msgstr ""
|
8549 |
|
8550 |
+
#: lib/wordfenceClass.php:6322
|
8551 |
msgid "Your 'How does Wordfence get IPs' setting is misconfigured."
|
8552 |
msgstr ""
|
8553 |
|
8554 |
+
#: lib/wordfenceClass.php:6324
|
8555 |
msgid "Click here to use the recommended setting"
|
8556 |
msgstr ""
|
8557 |
|
8558 |
+
#: lib/wordfenceClass.php:6326
|
8559 |
#: views/onboarding/fresh-install.php:39
|
8560 |
msgid "or"
|
8561 |
msgstr ""
|
8562 |
|
8563 |
+
#: lib/wordfenceClass.php:6328
|
8564 |
msgid "visit the options page"
|
8565 |
msgstr ""
|
8566 |
|
8567 |
+
#: lib/wordfenceClass.php:6330
|
8568 |
msgid "to manually update it."
|
8569 |
msgstr ""
|
8570 |
|
8571 |
+
#: lib/wordfenceClass.php:6338
|
8572 |
msgid "Do you want Wordfence to stay up-to-date automatically?"
|
8573 |
msgstr ""
|
8574 |
|
8575 |
+
#: lib/wordfenceClass.php:6340
|
8576 |
msgid "Yes, enable auto-update."
|
8577 |
msgstr ""
|
8578 |
|
8579 |
+
#: lib/wordfenceClass.php:6342
|
8580 |
msgid "No thanks."
|
8581 |
msgstr ""
|
8582 |
|
8583 |
#. translators: Localized date.
|
8584 |
+
#: lib/wordfenceClass.php:6431
|
8585 |
msgid "The last rules update for the Wordfence Web Application Firewall was unsuccessful. The last successful update check was %s, so this site may be missing new rules added since then."
|
8586 |
msgstr ""
|
8587 |
|
8588 |
#. translators: 1. Localized date. 2. WordPress admin panel URL.
|
8589 |
+
#: lib/wordfenceClass.php:6439
|
8590 |
msgid "You may wait for the next automatic attempt at %1$s or try to <a href=\"%2$s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8591 |
msgstr ""
|
8592 |
|
8593 |
#. translators: WordPress admin panel URL.
|
8594 |
+
#: lib/wordfenceClass.php:6445
|
8595 |
msgid "You may wait for the next automatic attempt or try to <a href=\"%s\">Manually Update</a> by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8596 |
msgstr ""
|
8597 |
|
8598 |
#. translators: WordPress admin panel URL.
|
8599 |
+
#: lib/wordfenceClass.php:6450
|
8600 |
msgid "You may wait for the next automatic attempt at %s or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8601 |
msgstr ""
|
8602 |
|
8603 |
+
#: lib/wordfenceClass.php:6453
|
8604 |
msgid "You may wait for the next automatic attempt or log into the parent site to manually update by clicking the \"Manually Refresh Rules\" button below the Rules list."
|
8605 |
msgstr ""
|
8606 |
|
8607 |
+
#: lib/wordfenceClass.php:6556
|
8608 |
#: models/page/wfPage.php:101
|
8609 |
msgid "Dashboard"
|
8610 |
msgstr ""
|
8611 |
|
8612 |
#. translators: Number of notifications.
|
8613 |
+
#: lib/wordfenceClass.php:6636
|
8614 |
msgid "You have %d new Wordfence notification."
|
8615 |
msgid_plural "You have %d new Wordfence notifications."
|
8616 |
msgstr[0] ""
|
8617 |
msgstr[1] ""
|
8618 |
|
8619 |
+
#: lib/wordfenceClass.php:6660
|
8620 |
msgid "JavaScript Errors"
|
8621 |
msgstr ""
|
8622 |
|
8623 |
+
#: lib/wordfenceClass.php:6666
|
8624 |
msgid "Malware URLs"
|
8625 |
msgstr ""
|
8626 |
|
8627 |
#. translators: WordPress admin panel URL.
|
8628 |
+
#: lib/wordfenceClass.php:6784
|
8629 |
+
#: lib/wordfenceClass.php:6847
|
8630 |
msgid "<a href=\"%s\">Click here</a> to rebuild the configuration file."
|
8631 |
msgstr ""
|
8632 |
|
8633 |
#. translators: File path.
|
8634 |
+
#: lib/wordfenceClass.php:6795
|
8635 |
+
#: lib/wordfenceClass.php:6858
|
8636 |
msgid "We were unable to write to %s which the WAF uses for storage. Please update permissions on the parent directory so the web server can write to it."
|
8637 |
msgstr ""
|
8638 |
|
8639 |
+
#: lib/wordfenceClass.php:6805
|
8640 |
+
#: lib/wordfenceClass.php:6868
|
8641 |
msgid "An error occured when fetching the WAF configuration from the database."
|
8642 |
msgstr ""
|
8643 |
|
8644 |
#. translators: Plugin name.
|
8645 |
+
#: lib/wordfenceClass.php:6890
|
8646 |
msgid "The Wordfence Live Traffic feature has been disabled because you have %s active which is not compatible with Wordfence Live Traffic."
|
8647 |
msgstr ""
|
8648 |
|
8649 |
#. translators: 1. Plugin name.
|
8650 |
+
#: lib/wordfenceClass.php:6892
|
8651 |
msgid "If you want to reenable Wordfence Live Traffic, you need to deactivate %1$s and then go to the Wordfence options page and reenable Live Traffic there. Wordfence does work with %1$s, however Live Traffic will be disabled and the Wordfence firewall will also count less hits per visitor because of the %1$s caching function. All other functions should work correctly."
|
8652 |
msgstr ""
|
8653 |
|
8654 |
#. translators: File path.
|
8655 |
+
#: lib/wordfenceClass.php:6953
|
8656 |
msgid "The file <code>%s</code> was restored successfully."
|
8657 |
msgstr ""
|
8658 |
|
8659 |
+
#: lib/wordfenceClass.php:6958
|
8660 |
msgid "There was an error restoring the file."
|
8661 |
msgstr ""
|
8662 |
|
8663 |
+
#: lib/wordfenceClass.php:6968
|
8664 |
+
#: lib/wordfenceClass.php:6991
|
8665 |
msgid "Return to scan results"
|
8666 |
msgstr ""
|
8667 |
|
8668 |
#. translators: File path.
|
8669 |
+
#: lib/wordfenceClass.php:6977
|
8670 |
msgid "The file <code>%s</code> was deleted successfully."
|
8671 |
msgstr ""
|
8672 |
|
8673 |
+
#: lib/wordfenceClass.php:6981
|
8674 |
msgid "There was an error deleting the file."
|
8675 |
msgstr ""
|
8676 |
|
8677 |
#. translators: IP address.
|
8678 |
+
#: lib/wordfenceClass.php:7049
|
8679 |
msgid ""
|
8680 |
"User IP: %s\n"
|
8681 |
""
|
8682 |
msgstr ""
|
8683 |
|
8684 |
#. translators: Domain name.
|
8685 |
+
#: lib/wordfenceClass.php:7052
|
8686 |
msgid ""
|
8687 |
"User hostname: %s\n"
|
8688 |
""
|
8689 |
msgstr ""
|
8690 |
|
8691 |
+
#: lib/wordfenceClass.php:7056
|
8692 |
msgid "User location: "
|
8693 |
msgstr ""
|
8694 |
|
8695 |
#. translators: WordPress admin panel URL.
|
8696 |
+
#: lib/wordfenceClass.php:7111
|
8697 |
msgid "No longer an administrator for this site? Click here to stop receiving security alerts: %s"
|
8698 |
msgstr ""
|
8699 |
|
8700 |
+
#: lib/wordfenceClass.php:7151
|
8701 |
msgid "The IP you provided must be in dotted quad notation or use ranges with square brackets. e.g. 10.11.12.13 or 10.11.12.[1-50]"
|
8702 |
msgstr ""
|
8703 |
|
8704 |
+
#: lib/wordfenceClass.php:7170
|
8705 |
+
msgid "Invalid email address provided"
|
8706 |
msgstr ""
|
8707 |
|
8708 |
+
#: lib/wordfenceClass.php:7175
|
8709 |
msgid "Test email sent successfully"
|
8710 |
msgstr ""
|
8711 |
|
8712 |
+
#: lib/wordfenceClass.php:7176
|
8713 |
+
msgid "Test email failed to send"
|
8714 |
msgstr ""
|
8715 |
|
8716 |
#. translators: Localized date range.
|
8717 |
+
#: lib/wordfenceClass.php:7194
|
8718 |
msgid "Wordfence activity in the past %s"
|
8719 |
msgstr ""
|
8720 |
|
8721 |
+
#: lib/wordfenceClass.php:7234
|
8722 |
+
#: lib/wordfenceClass.php:7238
|
8723 |
+
#: lib/wordfenceClass.php:7269
|
8724 |
msgid "We could not find that user in the database."
|
8725 |
msgstr ""
|
8726 |
|
8727 |
+
#: lib/wordfenceClass.php:7242
|
8728 |
msgid "This user's email is the network admin email. It will need to be changed before deleting this user."
|
8729 |
msgstr ""
|
8730 |
|
8731 |
+
#: lib/wordfenceClass.php:7306
|
8732 |
msgid "Wordfence could not find your .htaccess file."
|
8733 |
msgstr ""
|
8734 |
|
8735 |
+
#: lib/wordfenceClass.php:7322
|
8736 |
msgid "Updating the .htaccess did not fix the issue. You may need to add <code>Options -Indexes</code> to your httpd.conf if using Apache, or find documentation on how to disable directory listing for your web server."
|
8737 |
msgstr ""
|
8738 |
|
8739 |
+
#: lib/wordfenceClass.php:7328
|
8740 |
msgid "There was an error writing to your .htaccess file."
|
8741 |
msgstr ""
|
8742 |
|
8743 |
+
#: lib/wordfenceClass.php:7407
|
8744 |
msgid "Required parameters not sent."
|
8745 |
msgstr ""
|
8746 |
|
8747 |
+
#: lib/wordfenceClass.php:7417
|
8748 |
msgid "The WAF is currently in read-only mode and will not save any configuration changes."
|
8749 |
msgstr ""
|
8750 |
|
8751 |
+
#: lib/wordfenceClass.php:7455
|
8752 |
#: views/waf/option-whitelist.php:60
|
8753 |
msgid "Allowlisted via Firewall Options page"
|
8754 |
msgstr ""
|
8755 |
|
8756 |
+
#: lib/wordfenceClass.php:7742
|
8757 |
msgid "Allowlisted via Live Traffic"
|
8758 |
msgstr ""
|
8759 |
|
8760 |
+
#: lib/wordfenceClass.php:7906
|
8761 |
+
#: lib/wordfenceClass.php:8003
|
8762 |
msgid "A valid server configuration was not provided."
|
8763 |
msgstr ""
|
8764 |
|
8765 |
+
#: lib/wordfenceClass.php:7917
|
8766 |
+
#: lib/wordfenceClass.php:8024
|
8767 |
msgid "Filesystem Credentials Required"
|
8768 |
msgstr ""
|
8769 |
|
8770 |
#. translators: Support URL.
|
8771 |
+
#: lib/wordfenceClass.php:7919
|
8772 |
+
#: lib/wordfenceClass.php:7943
|
8773 |
+
#: lib/wordfenceClass.php:7987
|
8774 |
msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>"
|
8775 |
msgstr ""
|
8776 |
|
8777 |
#. translators: Support URL.
|
8778 |
+
#: lib/wordfenceClass.php:7920
|
8779 |
msgid "Once you have entered credentials, click Continue to complete the setup."
|
8780 |
msgstr ""
|
8781 |
|
8782 |
+
#: lib/wordfenceClass.php:7941
|
8783 |
+
#: lib/wordfenceClass.php:8049
|
8784 |
msgid "Filesystem Permission Error"
|
8785 |
msgstr ""
|
8786 |
|
8787 |
+
#: lib/wordfenceClass.php:7967
|
8788 |
msgid "Manual Installation Instructions"
|
8789 |
msgstr ""
|
8790 |
|
8791 |
+
#: lib/wordfenceClass.php:7974
|
8792 |
msgid "Installation Successful"
|
8793 |
msgstr ""
|
8794 |
|
8795 |
+
#: lib/wordfenceClass.php:7985
|
8796 |
msgid "Installation Failed"
|
8797 |
msgstr ""
|
8798 |
|
8799 |
#. translators: Support URL.
|
8800 |
+
#: lib/wordfenceClass.php:8026
|
8801 |
+
#: lib/wordfenceClass.php:8051
|
8802 |
+
#: lib/wordfenceClass.php:8082
|
8803 |
+
#: lib/wordfenceClass.php:8111
|
8804 |
+
#: lib/wordfenceClass.php:8157
|
8805 |
#: views/waf/waf-uninstall.php:13
|
8806 |
msgid "If you cannot complete the uninstall process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>"
|
8807 |
msgstr ""
|
8808 |
|
8809 |
#. translators: Support URL.
|
8810 |
+
#: lib/wordfenceClass.php:8027
|
8811 |
msgid "Once you have entered credentials, click Continue to complete uninstallation."
|
8812 |
msgstr ""
|
8813 |
|
8814 |
+
#: lib/wordfenceClass.php:8071
|
8815 |
msgid "The <code>auto_prepend_file</code> setting has been successfully removed from <code>.htaccess</code> and <code>.user.ini</code>. Once this change takes effect, Extended Protection Mode will be disabled."
|
8816 |
msgstr ""
|
8817 |
|
8818 |
+
#: lib/wordfenceClass.php:8073
|
8819 |
msgid "Any previous value for <code>auto_prepend_file</code> will need to be re-enabled manually if still needed."
|
8820 |
msgstr ""
|
8821 |
|
8822 |
#. translators: Time until.
|
8823 |
+
#: lib/wordfenceClass.php:8077
|
8824 |
msgid "Waiting for it to take effect. This may take up to %s."
|
8825 |
msgstr ""
|
8826 |
|
8827 |
+
#: lib/wordfenceClass.php:8080
|
8828 |
msgid "Waiting for Changes"
|
8829 |
msgstr ""
|
8830 |
|
8831 |
+
#: lib/wordfenceClass.php:8102
|
8832 |
msgid "Extended Protection Mode has not been disabled. This may be because <code>auto_prepend_file</code> is configured somewhere else or the value is still cached by PHP."
|
8833 |
msgstr ""
|
8834 |
|
8835 |
+
#: lib/wordfenceClass.php:8104
|
8836 |
msgid "Retrying Failed."
|
8837 |
msgstr ""
|
8838 |
|
8839 |
+
#: lib/wordfenceClass.php:8106
|
8840 |
msgid "Try Again"
|
8841 |
msgstr ""
|
8842 |
|
8843 |
+
#: lib/wordfenceClass.php:8109
|
8844 |
msgid "Unable to Uninstall"
|
8845 |
msgstr ""
|
8846 |
|
8847 |
+
#: lib/wordfenceClass.php:8145
|
8848 |
msgid "Uninstallation Complete"
|
8849 |
msgstr ""
|
8850 |
|
8851 |
+
#: lib/wordfenceClass.php:8155
|
8852 |
msgid "Uninstallation Failed"
|
8853 |
msgstr ""
|
8854 |
|
8855 |
#. translators: 1. Number of attacks/blocks. 2. Time since.
|
8856 |
+
#: lib/wordfenceClass.php:8309
|
8857 |
msgid "The Wordfence Web Application Firewall has blocked %1$d attacks over the last %2$s. Below is a sample of these recent attacks:"
|
8858 |
msgstr ""
|
8859 |
|
8860 |
+
#: lib/wordfenceClass.php:8873
|
8861 |
msgid "To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:"
|
8862 |
msgstr ""
|
8863 |
|
8864 |
+
#: lib/wordfenceClass.php:8873
|
8865 |
msgid "Click here to configure"
|
8866 |
msgstr ""
|
8867 |
|
8868 |
#. translators: Support URL.
|
8869 |
+
#: lib/wordfenceClass.php:8876
|
8870 |
msgid "If you cannot complete the setup process, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"%s\">click here for help</a>."
|
8871 |
msgstr ""
|
8872 |
|
8873 |
+
#: lib/wordfenceClass.php:8882
|
8874 |
#: views/waf/waf-install-success.php:14
|
8875 |
msgid "Nice work! The firewall is now optimized."
|
8876 |
msgstr ""
|
8877 |
|
8878 |
+
#: lib/wordfenceClass.php:8884
|
8879 |
+
#: lib/wordfenceClass.php:8896
|
8880 |
#: views/waf/waf-install-success.php:16
|
8881 |
#: views/waf/waf-uninstall-success.php:19
|
8882 |
msgid "The changes have not yet taken effect. If you are using LiteSpeed or IIS as your web server or CGI/FastCGI interface, you may need to wait a few minutes for the changes to take effect since the configuration files are sometimes cached. You also may need to select a different server configuration in order to complete this step, but wait for a few minutes before trying. You can try refreshing this page."
|
8883 |
msgstr ""
|
8884 |
|
8885 |
+
#: lib/wordfenceClass.php:8890
|
8886 |
#: views/waf/waf-uninstall-success.php:15
|
8887 |
msgid "Uninstallation was successful!"
|
8888 |
msgstr ""
|
8889 |
|
8890 |
+
#: lib/wordfenceClass.php:8893
|
8891 |
#: views/waf/waf-uninstall-success.php:17
|
8892 |
msgid "Uninstallation from this site was successful! The Wordfence Firewall is still active because it is installed in another WordPress installation."
|
8893 |
msgstr ""
|
8894 |
|
8895 |
+
#: lib/wordfenceClass.php:8901
|
8896 |
msgid "The update was successful!"
|
8897 |
msgstr ""
|
8898 |
|
8899 |
+
#: lib/wordfenceClass.php:9028
|
8900 |
msgid "Auth grant is invalid."
|
8901 |
msgstr ""
|
8902 |
|
8903 |
+
#: lib/wordfenceClass.php:9091
|
8904 |
+
#: lib/wordfenceClass.php:9228
|
8905 |
msgid "Access token not found."
|
8906 |
msgstr ""
|
8907 |
|
8908 |
+
#: lib/wordfenceClass.php:9136
|
8909 |
+
#: lib/wordfenceClass.php:9203
|
8910 |
msgid "Invalid response from Wordfence Central."
|
8911 |
msgstr ""
|
8912 |
|
8913 |
+
#: lib/wordfenceClass.php:9179
|
8914 |
msgid "Auth grant not found."
|
8915 |
msgstr ""
|
8916 |
|
8917 |
+
#: lib/wordfenceClass.php:9445
|
8918 |
msgid "We were unable to create the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot write to the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the installation."
|
8919 |
msgstr ""
|
8920 |
|
8921 |
+
#: lib/wordfenceClass.php:9537
|
8922 |
+
#: lib/wordfenceClass.php:9608
|
8923 |
msgid "We were unable to make changes to the .htaccess file. It's possible WordPress cannot write to the .htaccess file because of file permissions, which may have been set by another security plugin, or you may have set them manually. Please verify the permissions allow the web server to write to the file, and retry the installation."
|
8924 |
msgstr ""
|
8925 |
|
8926 |
#. translators: File path.
|
8927 |
+
#: lib/wordfenceClass.php:9578
|
8928 |
+
#: lib/wordfenceClass.php:9626
|
8929 |
msgid "We were unable to make changes to the %1$s file. It's possible WordPress cannot write to the %1$s file because of file permissions. Please verify the permissions are correct and retry the installation."
|
8930 |
msgstr ""
|
8931 |
|
8932 |
+
#: lib/wordfenceClass.php:9642
|
8933 |
msgid "We were unable to remove the <code>wordfence-waf.php</code> file in the root of the WordPress installation. It's possible WordPress cannot remove the <code>wordfence-waf.php</code> file because of file permissions. Please verify the permissions are correct and retry the removal."
|
8934 |
msgstr ""
|
8935 |
|
10409 |
msgstr ""
|
10410 |
|
10411 |
#: views/reports/activity-report-email-inline.php:134
|
10412 |
+
msgid "NOTE: You are using the free version of Wordfence and are missing out on features like real-time firewall rule and malware signature updates, country blocking, and detecting if your site IP is sending spam. <a href=\"http://www.wordfence.com/zz6/\">Click here to upgrade to Wordfence Premium now</a>."
|
10413 |
msgstr ""
|
10414 |
|
10415 |
#: views/reports/activity-report-email-inline.php:138
|
@@ -11,7 +11,7 @@ if (!wfUtils::isAdmin()) {
|
|
11 |
<?php foreach ($results as $key => $v) { ?>
|
12 |
<tr>
|
13 |
<th><?php esc_html_e('Time:', 'wordfence') ?></th>
|
14 |
-
<td><?php
|
15 |
/* translators: 1. Time ago, example: 2 hours, 40 seconds. 2. Localized date. 3. Unix timestamp. */
|
16 |
__('%1$s ago -- %2$s -- %3$s in Unixtime', 'wordfence'), $v['timeAgo'], date(DATE_RFC822, $v['ctime']), $v['ctime'])) ?></td>
|
17 |
</tr>
|
11 |
<?php foreach ($results as $key => $v) { ?>
|
12 |
<tr>
|
13 |
<th><?php esc_html_e('Time:', 'wordfence') ?></th>
|
14 |
+
<td><?php esc_html_e(sprintf(
|
15 |
/* translators: 1. Time ago, example: 2 hours, 40 seconds. 2. Localized date. 3. Unix timestamp. */
|
16 |
__('%1$s ago -- %2$s -- %3$s in Unixtime', 'wordfence'), $v['timeAgo'], date(DATE_RFC822, $v['ctime']), $v['ctime'])) ?></td>
|
17 |
</tr>
|
@@ -109,6 +109,8 @@ foreach ($severitySections as $severityLevel => $severityLabel):
|
|
109 |
}
|
110 |
}
|
111 |
if (isset($i['tmplData']['wpURL'])) {
|
|
|
|
|
112 |
echo $i['tmplData']['wpURL'] . '/#developers';
|
113 |
}
|
114 |
if ($showWPParagraph) {
|
109 |
}
|
110 |
}
|
111 |
if (isset($i['tmplData']['wpURL'])) {
|
112 |
+
if(!empty($i['tmplData']['vulnerable']))
|
113 |
+
echo '<br>';
|
114 |
echo $i['tmplData']['wpURL'] . '/#developers';
|
115 |
}
|
116 |
if ($showWPParagraph) {
|
@@ -855,13 +855,13 @@ if (!isset($sendingDiagnosticEmail)) {
|
|
855 |
<span>
|
856 |
<?php esc_html_e('Send a test activity report email:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_ACTIVITY_REPORT); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
|
857 |
<input type="email" id="email_summary_email_address_debug" value="" size="20" maxlength="255" class="wfConfigElem"/>
|
858 |
-
<input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Activity Report', 'wordfence'); ?>" onclick="WFAD.
|
859 |
</span>
|
860 |
</li>
|
861 |
<li>
|
862 |
<span>
|
863 |
<?php esc_html_e('Clear all Wordfence Central connection data', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_REMOVE_CENTRAL_DATA); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
|
864 |
-
<input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Clear Connection Data', 'wordfence'); ?>" onclick="WFAD.ajax('wordfence_wfcentral_disconnect', {}, function() { WFAD.colorboxModal((self.isSmallScreen ? '300px' : '400px'), 'Successfully
|
865 |
</span>
|
866 |
</li>
|
867 |
</ul>
|
855 |
<span>
|
856 |
<?php esc_html_e('Send a test activity report email:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_ACTIVITY_REPORT); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
|
857 |
<input type="email" id="email_summary_email_address_debug" value="" size="20" maxlength="255" class="wfConfigElem"/>
|
858 |
+
<input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Activity Report', 'wordfence'); ?>" onclick="WFAD.sendTestActivityReport(jQuery('#email_summary_email_address_debug').val());"/>
|
859 |
</span>
|
860 |
</li>
|
861 |
<li>
|
862 |
<span>
|
863 |
<?php esc_html_e('Clear all Wordfence Central connection data', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_REMOVE_CENTRAL_DATA); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"></a>
|
864 |
+
<input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Clear Connection Data', 'wordfence'); ?>" onclick="WFAD.ajax('wordfence_wfcentral_disconnect', {}, function() { WFAD.colorboxModal((self.isSmallScreen ? '300px' : '400px'), 'Successfully removed data', 'All associated Wordfence Central data has been removed from the database.'); });"/>
|
865 |
</span>
|
866 |
</li>
|
867 |
</ul>
|
@@ -259,16 +259,16 @@ SQL
|
|
259 |
}
|
260 |
|
261 |
$table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog');
|
262 |
-
$
|
263 |
-
SELECT
|
264 |
SUM(blockCount) as blockCount
|
265 |
FROM {$table_wfBlockedIPLog}
|
266 |
WHERE unixday >= {$interval}
|
267 |
GROUP BY IP
|
268 |
ORDER BY blockCount DESC
|
269 |
LIMIT %d
|
270 |
-
SQL
|
271 |
-
|
272 |
if ($results) {
|
273 |
foreach ($results as &$row) {
|
274 |
$row->countryName = $this->getCountryNameByCode($row->countryCode);
|
@@ -299,14 +299,14 @@ SQL
|
|
299 |
}
|
300 |
|
301 |
$table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog');
|
302 |
-
$
|
303 |
-
SELECT *, COUNT(IP) as totalIPs, SUM(
|
304 |
-
FROM (SELECT
|
305 |
GROUP BY countryCode
|
306 |
ORDER BY totalBlockCount DESC
|
307 |
LIMIT %d
|
308 |
-
SQL
|
309 |
-
|
310 |
if ($results) {
|
311 |
foreach ($results as &$row) {
|
312 |
$row->countryName = $this->getCountryNameByCode($row->countryCode);
|
259 |
}
|
260 |
|
261 |
$table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog');
|
262 |
+
$query=<<<SQL
|
263 |
+
SELECT IP, countryCode, unixday, blockType,
|
264 |
SUM(blockCount) as blockCount
|
265 |
FROM {$table_wfBlockedIPLog}
|
266 |
WHERE unixday >= {$interval}
|
267 |
GROUP BY IP
|
268 |
ORDER BY blockCount DESC
|
269 |
LIMIT %d
|
270 |
+
SQL;
|
271 |
+
$results = $this->db->get_results($this->db->prepare($query, $limit));
|
272 |
if ($results) {
|
273 |
foreach ($results as &$row) {
|
274 |
$row->countryName = $this->getCountryNameByCode($row->countryCode);
|
299 |
}
|
300 |
|
301 |
$table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog');
|
302 |
+
$query=<<<SQL
|
303 |
+
SELECT *, COUNT(IP) as totalIPs, SUM(ipBlockCount) as totalBlockCount
|
304 |
+
FROM (SELECT *, SUM(blockCount) AS ipBlockCount FROM {$table_wfBlockedIPLog} WHERE unixday >= {$interval} GROUP BY IP) t
|
305 |
GROUP BY countryCode
|
306 |
ORDER BY totalBlockCount DESC
|
307 |
LIMIT %d
|
308 |
+
SQL;
|
309 |
+
$results = $this->db->get_results($this->db->prepare($query, $limit));
|
310 |
if ($results) {
|
311 |
foreach ($results as &$row) {
|
312 |
$row->countryName = $this->getCountryNameByCode($row->countryCode);
|
@@ -82,7 +82,8 @@ class wfDiagnostic
|
|
82 |
'description' => __('Current WAF configuration.', 'wordfence'),
|
83 |
'tests' => array(
|
84 |
'wafAutoPrepend' => __('WAF auto prepend active', 'wordfence'),
|
85 |
-
'wafStorageEngine' => __('WAF storage engine (WFWAF_STORAGE_ENGINE)', 'wordfence'),
|
|
|
86 |
'wafLogPath' => __('WAF log path', 'wordfence'),
|
87 |
'wafSubdirectoryInstall' => __('WAF subdirectory installation', 'wordfence'),
|
88 |
'wafAutoPrependFilePath' => __('wordfence-waf.php path', 'wordfence'),
|
@@ -359,6 +360,20 @@ class wfDiagnostic
|
|
359 |
public function wafStorageEngine() {
|
360 |
return array('test' => true, 'infoOnly' => true, 'message' => (defined('WFWAF_STORAGE_ENGINE') ? WFWAF_STORAGE_ENGINE : __('(default)', 'wordfence')));
|
361 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
362 |
public function wafLogPath() {
|
363 |
$logPath = __('(not set)', 'wordfence');
|
364 |
if (defined('WFWAF_LOG_PATH')) {
|
82 |
'description' => __('Current WAF configuration.', 'wordfence'),
|
83 |
'tests' => array(
|
84 |
'wafAutoPrepend' => __('WAF auto prepend active', 'wordfence'),
|
85 |
+
'wafStorageEngine' => __('Configured WAF storage engine (WFWAF_STORAGE_ENGINE)', 'wordfence'),
|
86 |
+
'wafActiveStorageEngine' => __('Active WAF storage engine', 'wordfence'),
|
87 |
'wafLogPath' => __('WAF log path', 'wordfence'),
|
88 |
'wafSubdirectoryInstall' => __('WAF subdirectory installation', 'wordfence'),
|
89 |
'wafAutoPrependFilePath' => __('wordfence-waf.php path', 'wordfence'),
|
360 |
public function wafStorageEngine() {
|
361 |
return array('test' => true, 'infoOnly' => true, 'message' => (defined('WFWAF_STORAGE_ENGINE') ? WFWAF_STORAGE_ENGINE : __('(default)', 'wordfence')));
|
362 |
}
|
363 |
+
private static function getStorageEngineDescription($storageEngine) {
|
364 |
+
if ($storageEngine === null) {
|
365 |
+
return __('None', 'wordfence');
|
366 |
+
}
|
367 |
+
else if (method_exists($storageEngine, 'getDescription')) {
|
368 |
+
return $storageEngine->getDescription();
|
369 |
+
}
|
370 |
+
else {
|
371 |
+
return __('Unknown (mixed plugin version)', 'wordfence');
|
372 |
+
}
|
373 |
+
}
|
374 |
+
public function wafActiveStorageEngine() {
|
375 |
+
return array('test' => true, 'infoOnly' => true, 'message' => self::getStorageEngineDescription(wfWAF::getSharedStorageEngine()));
|
376 |
+
}
|
377 |
public function wafLogPath() {
|
378 |
$logPath = __('(not set)', 'wordfence');
|
379 |
if (defined('WFWAF_LOG_PATH')) {
|
@@ -1720,8 +1720,8 @@ class wfScanEngine {
|
|
1720 |
$this->statusIDX['diskSpace'] = wfIssues::statusStart(__('Scanning to check available disk space', 'wordfence'));
|
1721 |
$this->scanController->startStage(wfScanner::STAGE_SERVER_STATE);
|
1722 |
wfUtils::errorsOff();
|
1723 |
-
$total =
|
1724 |
-
$free =
|
1725 |
wfUtils::errorsOn();
|
1726 |
if (!$total || !$free) {
|
1727 |
$this->status(2, 'info', __('Unable to access available disk space information', 'wordfence'));
|
@@ -1965,13 +1965,18 @@ class wfScanEngine {
|
|
1965 |
foreach ($this->pluginRepoStatus as $slug => $status) {
|
1966 |
if ($status !== false && !is_wp_error($status) && ((is_object($status) && property_exists($status, 'last_updated')) || (is_array($status) && array_key_exists('last_updated', $status)))) {
|
1967 |
$statusArray = (array) $status;
|
|
|
|
|
|
|
|
|
|
|
1968 |
$lastUpdateTimestamp = strtotime($statusArray['last_updated']);
|
1969 |
if ($lastUpdateTimestamp > 0 && (time() - $lastUpdateTimestamp) > 63072000 /* ~2 years */) {
|
1970 |
$statusArray['dateUpdated'] = wfUtils::formatLocalTime(get_option('date_format'), $lastUpdateTimestamp);
|
1971 |
$severity = wfIssues::SEVERITY_MEDIUM;
|
1972 |
$statusArray['abandoned'] = true;
|
1973 |
$statusArray['vulnerable'] = false;
|
1974 |
-
$vulnerable = $this->updateCheck->isPluginVulnerable($slug, $statusArray['version']);
|
1975 |
if ($vulnerable) {
|
1976 |
$severity = wfIssues::SEVERITY_CRITICAL;
|
1977 |
$statusArray['vulnerable'] = true;
|
1720 |
$this->statusIDX['diskSpace'] = wfIssues::statusStart(__('Scanning to check available disk space', 'wordfence'));
|
1721 |
$this->scanController->startStage(wfScanner::STAGE_SERVER_STATE);
|
1722 |
wfUtils::errorsOff();
|
1723 |
+
$total = function_exists('disk_total_space')?@disk_total_space('.'):false;
|
1724 |
+
$free = function_exists('disk_free_space')?@disk_free_space('.'):false; //Normally false if unreadable but can return 0 on some hosts even when there's space available
|
1725 |
wfUtils::errorsOn();
|
1726 |
if (!$total || !$free) {
|
1727 |
$this->status(2, 'info', __('Unable to access available disk space information', 'wordfence'));
|
1965 |
foreach ($this->pluginRepoStatus as $slug => $status) {
|
1966 |
if ($status !== false && !is_wp_error($status) && ((is_object($status) && property_exists($status, 'last_updated')) || (is_array($status) && array_key_exists('last_updated', $status)))) {
|
1967 |
$statusArray = (array) $status;
|
1968 |
+
$hasVersion = array_key_exists('version', $statusArray);
|
1969 |
+
if (!$hasVersion) {
|
1970 |
+
$statusArray['version'] = null;
|
1971 |
+
wordfence::status(3, 'error', "Unable to determine version for plugin $slug");
|
1972 |
+
}
|
1973 |
$lastUpdateTimestamp = strtotime($statusArray['last_updated']);
|
1974 |
if ($lastUpdateTimestamp > 0 && (time() - $lastUpdateTimestamp) > 63072000 /* ~2 years */) {
|
1975 |
$statusArray['dateUpdated'] = wfUtils::formatLocalTime(get_option('date_format'), $lastUpdateTimestamp);
|
1976 |
$severity = wfIssues::SEVERITY_MEDIUM;
|
1977 |
$statusArray['abandoned'] = true;
|
1978 |
$statusArray['vulnerable'] = false;
|
1979 |
+
$vulnerable = $hasVersion && $this->updateCheck->isPluginVulnerable($slug, $statusArray['version']);
|
1980 |
if ($vulnerable) {
|
1981 |
$severity = wfIssues::SEVERITY_CRITICAL;
|
1982 |
$statusArray['vulnerable'] = true;
|
@@ -113,10 +113,13 @@ class wfUpdateCheck {
|
|
113 |
/**
|
114 |
* Check if any plugins need an update.
|
115 |
*
|
|
|
|
|
116 |
* @return $this
|
117 |
*/
|
118 |
-
public function checkPluginUpdates($useCachedValued = true) {
|
119 |
-
$
|
|
|
120 |
|
121 |
if (!function_exists('wp_update_plugins')) {
|
122 |
require_once(ABSPATH . WPINC . '/update.php');
|
@@ -172,7 +175,7 @@ class wfUpdateCheck {
|
|
172 |
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
173 |
|
174 |
//Check the vulnerability database
|
175 |
-
if ($slug !== null && isset($data['Version'])) {
|
176 |
$status = $this->isPluginVulnerable($slug, $data['Version']);
|
177 |
$data['vulnerable'] = !!$status;
|
178 |
if (is_string($status)) {
|
@@ -188,7 +191,8 @@ class wfUpdateCheck {
|
|
188 |
$this->all_plugins[$slug] = $data;
|
189 |
}
|
190 |
|
191 |
-
$
|
|
|
192 |
unset($installedPlugins[$plugin]);
|
193 |
}
|
194 |
}
|
@@ -214,7 +218,7 @@ class wfUpdateCheck {
|
|
214 |
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
215 |
|
216 |
//Check the vulnerability database
|
217 |
-
if (isset($valsArray['slug']) && isset($data['Version'])) {
|
218 |
$status = $this->isPluginVulnerable($valsArray['slug'], $data['Version']);
|
219 |
$data['vulnerable'] = !!$status;
|
220 |
if (is_string($status)) {
|
@@ -263,10 +267,13 @@ class wfUpdateCheck {
|
|
263 |
/**
|
264 |
* Check if any themes need an update.
|
265 |
*
|
|
|
|
|
266 |
* @return $this
|
267 |
*/
|
268 |
-
public function checkThemeUpdates($useCachedValued = true) {
|
269 |
-
$
|
|
|
270 |
|
271 |
if (!function_exists('wp_update_themes')) {
|
272 |
require_once(ABSPATH . WPINC . '/update.php');
|
@@ -281,7 +288,7 @@ class wfUpdateCheck {
|
|
281 |
$update_themes = get_site_transient('update_themes');
|
282 |
}
|
283 |
|
284 |
-
if ($update_themes && (!empty($update_themes->response))) {
|
285 |
if (!function_exists('wp_get_themes')) {
|
286 |
require_once(ABSPATH . '/wp-includes/theme.php');
|
287 |
}
|
@@ -314,8 +321,11 @@ class wfUpdateCheck {
|
|
314 |
$this->checkPluginVulnerabilities();
|
315 |
$this->checkThemeVulnerabilities();
|
316 |
}
|
317 |
-
|
318 |
-
|
|
|
|
|
|
|
319 |
if (!function_exists('wp_update_plugins')) {
|
320 |
require_once(ABSPATH . WPINC . '/update.php');
|
321 |
}
|
@@ -333,7 +343,7 @@ class wfUpdateCheck {
|
|
333 |
$installedPlugins = get_plugins();
|
334 |
|
335 |
//Get the info for plugins on wordpress.org
|
336 |
-
$this->checkPluginUpdates();
|
337 |
$update_plugins = get_site_transient('update_plugins');
|
338 |
if ($update_plugins) {
|
339 |
if (!function_exists('get_plugin_data'))
|
@@ -455,8 +465,11 @@ class wfUpdateCheck {
|
|
455 |
wfConfig::set_ser('vulnerabilities_plugin', $vulnerabilities);
|
456 |
}
|
457 |
}
|
458 |
-
|
459 |
-
|
|
|
|
|
|
|
460 |
if (!function_exists('wp_update_themes')) {
|
461 |
require_once(ABSPATH . WPINC . '/update.php');
|
462 |
}
|
@@ -465,7 +478,7 @@ class wfUpdateCheck {
|
|
465 |
require_once(ABSPATH . '/wp-admin/includes/plugin-install.php');
|
466 |
}
|
467 |
|
468 |
-
$this->checkThemeUpdates();
|
469 |
$update_themes = get_site_transient('update_themes');
|
470 |
|
471 |
$vulnerabilities = array();
|
@@ -512,15 +525,22 @@ class wfUpdateCheck {
|
|
512 |
}
|
513 |
|
514 |
public function isPluginVulnerable($slug, $version) {
|
515 |
-
return $this->_isSlugVulnerable('vulnerabilities_plugin', $slug, $version);
|
516 |
}
|
517 |
|
518 |
public function isThemeVulnerable($slug, $version) {
|
519 |
-
return $this->_isSlugVulnerable('vulnerabilities_theme', $slug, $version);
|
520 |
}
|
521 |
|
522 |
-
private function _isSlugVulnerable($vulnerabilitiesKey, $slug, $version) {
|
523 |
-
$vulnerabilities = wfConfig::get_ser($vulnerabilitiesKey,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
524 |
foreach ($vulnerabilities as $v) {
|
525 |
if ($v['slug'] == $slug) {
|
526 |
if ($v['fromVersion'] == 'Unknown' && $v['toVersion'] == 'Unknown') {
|
113 |
/**
|
114 |
* Check if any plugins need an update.
|
115 |
*
|
116 |
+
* @param bool $checkVulnerabilities whether or not to check for vulnerabilities while checking updates
|
117 |
+
*
|
118 |
* @return $this
|
119 |
*/
|
120 |
+
public function checkPluginUpdates($useCachedValued = true, $checkVulnerabilities = true) {
|
121 |
+
if($checkVulnerabilities)
|
122 |
+
$this->plugin_updates = array();
|
123 |
|
124 |
if (!function_exists('wp_update_plugins')) {
|
125 |
require_once(ABSPATH . WPINC . '/update.php');
|
175 |
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
176 |
|
177 |
//Check the vulnerability database
|
178 |
+
if ($slug !== null && isset($data['Version']) && $checkVulnerabilities) {
|
179 |
$status = $this->isPluginVulnerable($slug, $data['Version']);
|
180 |
$data['vulnerable'] = !!$status;
|
181 |
if (is_string($status)) {
|
191 |
$this->all_plugins[$slug] = $data;
|
192 |
}
|
193 |
|
194 |
+
if($checkVulnerabilities)
|
195 |
+
$this->plugin_updates[] = $data;
|
196 |
unset($installedPlugins[$plugin]);
|
197 |
}
|
198 |
}
|
218 |
$data['wpURL'] = (isset($valsArray['url']) ? rtrim($valsArray['url'], '/') : null);
|
219 |
|
220 |
//Check the vulnerability database
|
221 |
+
if (isset($valsArray['slug']) && isset($data['Version']) && $checkVulnerabilities) {
|
222 |
$status = $this->isPluginVulnerable($valsArray['slug'], $data['Version']);
|
223 |
$data['vulnerable'] = !!$status;
|
224 |
if (is_string($status)) {
|
267 |
/**
|
268 |
* Check if any themes need an update.
|
269 |
*
|
270 |
+
* @param bool $checkVulnerabilities whether or not to check for vulnerabilities while checking for updates
|
271 |
+
*
|
272 |
* @return $this
|
273 |
*/
|
274 |
+
public function checkThemeUpdates($useCachedValued = true, $checkVulnerabilities = true) {
|
275 |
+
if($checkVulnerabilities)
|
276 |
+
$this->theme_updates = array();
|
277 |
|
278 |
if (!function_exists('wp_update_themes')) {
|
279 |
require_once(ABSPATH . WPINC . '/update.php');
|
288 |
$update_themes = get_site_transient('update_themes');
|
289 |
}
|
290 |
|
291 |
+
if ($update_themes && (!empty($update_themes->response)) && $checkVulnerabilities) {
|
292 |
if (!function_exists('wp_get_themes')) {
|
293 |
require_once(ABSPATH . '/wp-includes/theme.php');
|
294 |
}
|
321 |
$this->checkPluginVulnerabilities();
|
322 |
$this->checkThemeVulnerabilities();
|
323 |
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* @param bool $initial if true, treat as the initial scan run
|
327 |
+
*/
|
328 |
+
public function checkPluginVulnerabilities($initial=false) {
|
329 |
if (!function_exists('wp_update_plugins')) {
|
330 |
require_once(ABSPATH . WPINC . '/update.php');
|
331 |
}
|
343 |
$installedPlugins = get_plugins();
|
344 |
|
345 |
//Get the info for plugins on wordpress.org
|
346 |
+
$this->checkPluginUpdates(!$initial, false);
|
347 |
$update_plugins = get_site_transient('update_plugins');
|
348 |
if ($update_plugins) {
|
349 |
if (!function_exists('get_plugin_data'))
|
465 |
wfConfig::set_ser('vulnerabilities_plugin', $vulnerabilities);
|
466 |
}
|
467 |
}
|
468 |
+
|
469 |
+
/**
|
470 |
+
* @param bool $initial whether or not this is the initial run
|
471 |
+
*/
|
472 |
+
public function checkThemeVulnerabilities($initial = false) {
|
473 |
if (!function_exists('wp_update_themes')) {
|
474 |
require_once(ABSPATH . WPINC . '/update.php');
|
475 |
}
|
478 |
require_once(ABSPATH . '/wp-admin/includes/plugin-install.php');
|
479 |
}
|
480 |
|
481 |
+
$this->checkThemeUpdates(!$initial, false);
|
482 |
$update_themes = get_site_transient('update_themes');
|
483 |
|
484 |
$vulnerabilities = array();
|
525 |
}
|
526 |
|
527 |
public function isPluginVulnerable($slug, $version) {
|
528 |
+
return $this->_isSlugVulnerable('vulnerabilities_plugin', $slug, $version, function(){ $this->checkPluginVulnerabilities(true); });
|
529 |
}
|
530 |
|
531 |
public function isThemeVulnerable($slug, $version) {
|
532 |
+
return $this->_isSlugVulnerable('vulnerabilities_theme', $slug, $version, function(){ $this->checkThemeVulnerabilities(true); });
|
533 |
}
|
534 |
|
535 |
+
private function _isSlugVulnerable($vulnerabilitiesKey, $slug, $version, $populateVulnerabilities=null) {
|
536 |
+
$vulnerabilities = wfConfig::get_ser($vulnerabilitiesKey, null);
|
537 |
+
if($vulnerabilities===null){
|
538 |
+
if(is_callable($populateVulnerabilities)){
|
539 |
+
$populateVulnerabilities();
|
540 |
+
return $this->_isSlugVulnerable($vulnerabilitiesKey, $slug, $version);
|
541 |
+
}
|
542 |
+
return false;
|
543 |
+
}
|
544 |
foreach ($vulnerabilities as $v) {
|
545 |
if ($v['slug'] == $slug) {
|
546 |
if ($v['fromVersion'] == 'Unknown' && $v['toVersion'] == 'Unknown') {
|
@@ -3048,6 +3048,45 @@ class wfUtils {
|
|
3048 |
}
|
3049 |
return $payload;
|
3050 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3051 |
}
|
3052 |
|
3053 |
// GeoIP lib uses these as well
|
3048 |
}
|
3049 |
return $payload;
|
3050 |
}
|
3051 |
+
|
3052 |
+
/**
|
3053 |
+
* Split a path into its components
|
3054 |
+
* @param string $path
|
3055 |
+
*/
|
3056 |
+
public static function splitPath($path) {
|
3057 |
+
return preg_split('/[\\/\\\\]/', $path, -1, PREG_SPLIT_NO_EMPTY);
|
3058 |
+
}
|
3059 |
+
|
3060 |
+
/**
|
3061 |
+
* Convert an absolute path to a path relative to $to
|
3062 |
+
* @param string $absolute the absolute path to convert
|
3063 |
+
* @param string $to the absolute path from which to derive the relative path
|
3064 |
+
* @param bool $leadingSlash if true, prepend the resultant URL with a slash
|
3065 |
+
*/
|
3066 |
+
public static function relativePath($absolute, $to, $leadingSlash = false) {
|
3067 |
+
$trailingSlash = in_array(substr($absolute, -1), array('/', '\\'));
|
3068 |
+
$absoluteComponents = self::splitPath($absolute);
|
3069 |
+
$toComponents = self::splitPath($to);
|
3070 |
+
$relativeComponents = array();
|
3071 |
+
do {
|
3072 |
+
$currentAbsolute = array_shift($absoluteComponents);
|
3073 |
+
$currentTo = array_shift($toComponents);
|
3074 |
+
} while($currentAbsolute === $currentTo && $currentAbsolute !== null);
|
3075 |
+
while ($currentTo !== null) {
|
3076 |
+
array_push($relativeComponents, '..');
|
3077 |
+
$currentTo = array_shift($toComponents);
|
3078 |
+
}
|
3079 |
+
while ($currentAbsolute !== null) {
|
3080 |
+
array_push($relativeComponents, $currentAbsolute);
|
3081 |
+
$currentAbsolute = array_shift($absoluteComponents);
|
3082 |
+
}
|
3083 |
+
return implode(array(
|
3084 |
+
$leadingSlash ? '/' : '',
|
3085 |
+
implode('/', $relativeComponents),
|
3086 |
+
($trailingSlash && (count($relativeComponents) > 0 || !$leadingSlash)) ? '/' : ''
|
3087 |
+
));
|
3088 |
+
}
|
3089 |
+
|
3090 |
}
|
3091 |
|
3092 |
// GeoIP lib uses these as well
|
@@ -80,6 +80,9 @@ class wordfence {
|
|
80 |
private static $hitID = 0;
|
81 |
private static $debugOn = null;
|
82 |
private static $runInstallCalled = false;
|
|
|
|
|
|
|
83 |
public static function installPlugin(){
|
84 |
self::runInstall();
|
85 |
|
@@ -283,7 +286,7 @@ class wordfence {
|
|
283 |
$table_wfCrawlers = wfDB::networkTable('wfCrawlers');
|
284 |
$wfdb->queryWrite("delete from {$table_wfCrawlers} where lastUpdate < unix_timestamp() - (86400 * 7)");
|
285 |
|
286 |
-
self::trimWfHits();
|
287 |
|
288 |
$maxRows = absint(wfConfig::get('liveTraf_maxRows', 2000));; //affects stuff further down too
|
289 |
|
@@ -588,7 +591,7 @@ SQL
|
|
588 |
}
|
589 |
|
590 |
// Call this before creating the index in cases where the wp-cron isn't running.
|
591 |
-
self::trimWfHits();
|
592 |
$hitsTable = wfDB::networkTable('wfHits');
|
593 |
$hasAttackLogTimeIndex = $wpdb->get_var($wpdb->prepare(<<<SQL
|
594 |
SELECT COLUMN_KEY FROM information_schema.COLUMNS
|
@@ -1066,9 +1069,11 @@ SQL
|
|
1066 |
|
1067 |
//Must be the final line
|
1068 |
}
|
1069 |
-
public static function _refreshVulnerabilityCache() {
|
1070 |
-
$
|
1071 |
-
|
|
|
|
|
1072 |
}
|
1073 |
private static function doEarlyAccessLogging(){
|
1074 |
$wfLog = self::getLog();
|
@@ -1266,7 +1271,7 @@ SQL
|
|
1266 |
add_action('login_errors', array('wordfence', 'fixGDLimitLoginsErrors'), 11);
|
1267 |
}
|
1268 |
|
1269 |
-
add_action('upgrader_process_complete', 'wordfence::_refreshVulnerabilityCache');
|
1270 |
add_action('upgrader_process_complete', 'wfUpdateCheck::syncAllVersionInfo');
|
1271 |
add_action('upgrader_process_complete', 'wordfence::_scheduleRefreshUpdateNotification', 99, 2);
|
1272 |
add_action('automatic_updates_complete', 'wordfence::_scheduleRefreshUpdateNotification', 99, 0);
|
@@ -1327,7 +1332,7 @@ SQL
|
|
1327 |
}
|
1328 |
|
1329 |
add_action('wordfence_processAttackData', 'wordfence::processAttackData');
|
1330 |
-
if (!empty($_GET['wordfence_syncAttackData']) && get_site_option('wordfence_syncingAttackData') <= time() - 60 && get_site_option('wordfence_lastSyncAttackData', 0) < time() -
|
1331 |
@ignore_user_abort(true);
|
1332 |
update_site_option('wordfence_syncingAttackData', time());
|
1333 |
header('Content-Type: text/javascript');
|
@@ -2295,7 +2300,7 @@ SQL
|
|
2295 |
} else {
|
2296 |
$lastAttackMicroseconds = $wpdb->get_var("SELECT MAX(attackLogTime) FROM {$table_wfHits}");
|
2297 |
}
|
2298 |
-
if (get_site_option('wordfence_lastSyncAttackData', 0) < time() -
|
2299 |
if ($waf->getStorageEngine()->hasNewerAttackData($lastAttackMicroseconds)) {
|
2300 |
if (get_site_option('wordfence_syncingAttackData') <= time() - 60) {
|
2301 |
// Could be the request to itself is not completing, add ajax to the head as a workaround
|
@@ -3376,7 +3381,6 @@ SQL
|
|
3376 |
}
|
3377 |
}
|
3378 |
public static function wfsnEndpointType() {
|
3379 |
-
$wploginPath = ABSPATH . 'wp-login.php';
|
3380 |
$type = 0; //Unknown
|
3381 |
if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) {
|
3382 |
$type = 2;
|
@@ -3387,7 +3391,7 @@ SQL
|
|
3387 |
$type = 301;
|
3388 |
}
|
3389 |
}
|
3390 |
-
else if (
|
3391 |
$type = 1;
|
3392 |
}
|
3393 |
return $type;
|
@@ -5818,16 +5822,18 @@ HTML;
|
|
5818 |
if (!WFWAF_SUBDIRECTORY_INSTALL) {
|
5819 |
try {
|
5820 |
$authCookie = wfWAF::getInstance()->parseAuthCookie();
|
|
|
5821 |
if (is_user_logged_in() &&
|
5822 |
(
|
5823 |
!$authCookie ||
|
5824 |
(int) $currentUserID !== (int) $authCookie['userID'] ||
|
5825 |
-
$role !== $authCookie['role']
|
|
|
5826 |
)
|
5827 |
) {
|
5828 |
wfUtils::setcookie(wfWAF::getInstance()->getAuthCookieName(),
|
5829 |
-
$currentUserID . '|' . $role . '|' .
|
5830 |
-
wfWAF::getInstance()->getAuthCookieValue($currentUserID, $role),
|
5831 |
time() + 43200, COOKIEPATH, COOKIE_DOMAIN, wfUtils::isFullSSL(), true);
|
5832 |
}
|
5833 |
} catch (wfWAFStorageFileException $e) {
|
@@ -6238,6 +6244,9 @@ HTML;
|
|
6238 |
wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_INACCESSIBLE_CONFIG)
|
6239 |
) . '</p></div>';
|
6240 |
}
|
|
|
|
|
|
|
6241 |
public static function wafConfigNeedsUpdate_mod_php() {
|
6242 |
if (function_exists('network_admin_url') && is_multisite()) {
|
6243 |
$wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigfixmodphp=1');
|
@@ -6356,13 +6365,19 @@ HTML;
|
|
6356 |
}
|
6357 |
|
6358 |
$firewall = new wfFirewall();
|
6359 |
-
if (!empty($_GET['page']) && preg_match('/^Wordfence/i', $_GET['page'])
|
6360 |
-
|
6361 |
-
|
6362 |
-
|
|
|
|
|
|
|
|
|
|
|
6363 |
}
|
6364 |
-
else {
|
6365 |
-
|
|
|
6366 |
}
|
6367 |
}
|
6368 |
|
@@ -7154,13 +7169,13 @@ SQL
|
|
7154 |
public static function ajax_email_summary_email_address_debug_callback() {
|
7155 |
$email = !empty($_REQUEST['email']) ? $_REQUEST['email'] : null;
|
7156 |
if (!wfUtils::isValidEmail($email)) {
|
7157 |
-
return array('
|
7158 |
}
|
7159 |
|
7160 |
$report = new wfActivityReport();
|
7161 |
return $report->sendReportViaEmail($email) ?
|
7162 |
array('ok' => 1, 'result' => __('Test email sent successfully', 'wordfence')) :
|
7163 |
-
array('
|
7164 |
}
|
7165 |
|
7166 |
public static function addDashboardWidget() {
|
@@ -7541,7 +7556,7 @@ SQL
|
|
7541 |
|
7542 |
public static function ajax_updateWAFRules_callback() {
|
7543 |
try {
|
7544 |
-
$event = new wfWAFCronFetchRulesEvent(time() - 2);
|
7545 |
$event->setWaf(wfWAF::getInstance());
|
7546 |
$success = $event->fire();
|
7547 |
$failureReason = false;
|
@@ -8164,7 +8179,9 @@ SQL
|
|
8164 |
}
|
8165 |
}
|
8166 |
|
8167 |
-
public static function trimWfHits() {
|
|
|
|
|
8168 |
$wfdb = new wfDB();
|
8169 |
$lastAggregation = wfConfig::get('lastBlockAggregation', 0);
|
8170 |
$table_wfHits = wfDB::networkTable('wfHits');
|
@@ -8216,6 +8233,15 @@ SQL
|
|
8216 |
wfConfig::set('lastBlockAggregation', time());
|
8217 |
}
|
8218 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8219 |
private static function scheduleSendAttackData($timeToSend = null) {
|
8220 |
if ($timeToSend === null) {
|
8221 |
$timeToSend = time() + (60 * 5);
|
@@ -8365,10 +8391,21 @@ SQL
|
|
8365 |
//Send attack data
|
8366 |
$limit = 500;
|
8367 |
$lastSendTime = wfConfig::get('lastAttackDataSendTime');
|
8368 |
-
$
|
|
|
|
|
8369 |
WHERE action in ('blocked:waf', 'learned:waf', 'logged:waf', 'blocked:waf-always')
|
8370 |
AND attackLogTime > %f
|
8371 |
-
LIMIT %d", sprintf('%.6f', $lastSendTime), $limit)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8372 |
$totalRows = $wpdb->get_var('SELECT FOUND_ROWS()');
|
8373 |
|
8374 |
if ($attackData) { // Build JSON to send
|
@@ -8397,39 +8434,58 @@ SQL
|
|
8397 |
$lastSendTime = $attackDataRow->attackLogTime;
|
8398 |
}
|
8399 |
}
|
8400 |
-
|
8401 |
-
$
|
8402 |
-
$
|
8403 |
-
|
8404 |
-
|
8405 |
-
|
8406 |
-
|
8407 |
-
|
8408 |
-
|
8409 |
-
|
8410 |
-
|
8411 |
-
|
8412 |
-
|
8413 |
-
|
8414 |
-
|
8415 |
-
|
8416 |
-
'
|
8417 |
-
'
|
8418 |
-
|
8419 |
-
|
8420 |
-
|
8421 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8422 |
if (!is_wp_error($response) && ($body = wp_remote_retrieve_body($response))) {
|
8423 |
$jsonData = json_decode($body, true);
|
8424 |
if (is_array($jsonData) && array_key_exists('success', $jsonData)) {
|
8425 |
-
// Successfully sent data, remove the full request from the table to reduce storage size
|
8426 |
-
foreach ($attackDataToUpdate as $hitID => $dataToUpdate) {
|
8427 |
-
$wpdb->update($table_wfHits, $dataToUpdate, array(
|
8428 |
-
'id' => $hitID,
|
8429 |
-
));
|
8430 |
-
}
|
8431 |
wfConfig::set('lastAttackDataSendTime', $lastSendTime);
|
8432 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8433 |
self::scheduleSendAttackData();
|
8434 |
}
|
8435 |
|
@@ -8438,6 +8494,10 @@ SQL
|
|
8438 |
}
|
8439 |
}
|
8440 |
}
|
|
|
|
|
|
|
|
|
8441 |
}
|
8442 |
|
8443 |
//Send false positives
|
@@ -8523,11 +8583,11 @@ SQL
|
|
8523 |
}
|
8524 |
}
|
8525 |
else if (is_string($okToSendBody) && preg_match('/next check in: ([0-9]+)/', $okToSendBody, $matches)) {
|
8526 |
-
self::
|
8527 |
}
|
8528 |
}
|
8529 |
else { // Could be that the server is down, so hold off on sending data for a little while
|
8530 |
-
self::
|
8531 |
}
|
8532 |
}
|
8533 |
else if (!wfConfig::get('other_WFNet', true)) {
|
@@ -8854,6 +8914,7 @@ SQL
|
|
8854 |
}
|
8855 |
|
8856 |
public static function getWAFBootstrapContent($currentAutoPrependedFile = null) {
|
|
|
8857 |
$currentAutoPrepend = '';
|
8858 |
if ($currentAutoPrependedFile && is_file($currentAutoPrependedFile) && !WFWAF_SUBDIRECTORY_INSTALL) {
|
8859 |
$currentAutoPrepend = sprintf('
|
@@ -8865,25 +8926,15 @@ if (file_exists(%1$s)) {
|
|
8865 |
return sprintf('<?php
|
8866 |
// Before removing this file, please verify the PHP ini setting `auto_prepend_file` does not point to this.
|
8867 |
%3$s
|
8868 |
-
if (file_exists(
|
8869 |
-
define("WFWAF_LOG_PATH",
|
8870 |
-
include_once
|
8871 |
-
}
|
8872 |
-
|
8873 |
-
var_export(
|
8874 |
-
var_export(WFWAF_SUBDIRECTORY_INSTALL ? WP_CONTENT_DIR . '/wflogs/' : WFWAF_LOG_PATH, true),
|
8875 |
$currentAutoPrepend);
|
8876 |
}
|
8877 |
|
8878 |
-
public static function checkAndCreateBootstrap() {
|
8879 |
-
$bootstrapPath = self::getWAFBootstrapPath();
|
8880 |
-
if (!file_exists($bootstrapPath) || !filesize($bootstrapPath)) {
|
8881 |
-
@file_put_contents($bootstrapPath, self::getWAFBootstrapContent(), LOCK_EX);
|
8882 |
-
clearstatcache();
|
8883 |
-
}
|
8884 |
-
return file_exists($bootstrapPath) && filesize($bootstrapPath);
|
8885 |
-
}
|
8886 |
-
|
8887 |
/**
|
8888 |
* @return bool|string
|
8889 |
*/
|
@@ -8897,7 +8948,26 @@ if (file_exists(%1$s)) {
|
|
8897 |
return $role;
|
8898 |
}
|
8899 |
}
|
8900 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8901 |
}
|
8902 |
|
8903 |
public static function licenseStatusChanged() {
|
@@ -9689,4 +9759,4 @@ auto_prepend_file = '%s'
|
|
9689 |
}
|
9690 |
|
9691 |
class wfWAFAutoPrependHelperException extends Exception {
|
9692 |
-
}
|
80 |
private static $hitID = 0;
|
81 |
private static $debugOn = null;
|
82 |
private static $runInstallCalled = false;
|
83 |
+
|
84 |
+
const ATTACK_DATA_BODY_LIMIT=41943040; //40MB
|
85 |
+
|
86 |
public static function installPlugin(){
|
87 |
self::runInstall();
|
88 |
|
286 |
$table_wfCrawlers = wfDB::networkTable('wfCrawlers');
|
287 |
$wfdb->queryWrite("delete from {$table_wfCrawlers} where lastUpdate < unix_timestamp() - (86400 * 7)");
|
288 |
|
289 |
+
self::trimWfHits(true);
|
290 |
|
291 |
$maxRows = absint(wfConfig::get('liveTraf_maxRows', 2000));; //affects stuff further down too
|
292 |
|
591 |
}
|
592 |
|
593 |
// Call this before creating the index in cases where the wp-cron isn't running.
|
594 |
+
self::trimWfHits(true);
|
595 |
$hitsTable = wfDB::networkTable('wfHits');
|
596 |
$hasAttackLogTimeIndex = $wpdb->get_var($wpdb->prepare(<<<SQL
|
597 |
SELECT COLUMN_KEY FROM information_schema.COLUMNS
|
1069 |
|
1070 |
//Must be the final line
|
1071 |
}
|
1072 |
+
public static function _refreshVulnerabilityCache($upgrader = null, $hook_extra = null) {
|
1073 |
+
if($hook_extra ===null || in_array($hook_extra['type'], array('plugin', 'theme'))){
|
1074 |
+
$update_check = new wfUpdateCheck();
|
1075 |
+
$update_check->checkAllVulnerabilities();
|
1076 |
+
}
|
1077 |
}
|
1078 |
private static function doEarlyAccessLogging(){
|
1079 |
$wfLog = self::getLog();
|
1271 |
add_action('login_errors', array('wordfence', 'fixGDLimitLoginsErrors'), 11);
|
1272 |
}
|
1273 |
|
1274 |
+
add_action('upgrader_process_complete', 'wordfence::_refreshVulnerabilityCache', 10, 2);
|
1275 |
add_action('upgrader_process_complete', 'wfUpdateCheck::syncAllVersionInfo');
|
1276 |
add_action('upgrader_process_complete', 'wordfence::_scheduleRefreshUpdateNotification', 99, 2);
|
1277 |
add_action('automatic_updates_complete', 'wordfence::_scheduleRefreshUpdateNotification', 99, 0);
|
1332 |
}
|
1333 |
|
1334 |
add_action('wordfence_processAttackData', 'wordfence::processAttackData');
|
1335 |
+
if (!empty($_GET['wordfence_syncAttackData']) && get_site_option('wordfence_syncingAttackData') <= time() - 60 && get_site_option('wordfence_lastSyncAttackData', 0) < time() - 8) {
|
1336 |
@ignore_user_abort(true);
|
1337 |
update_site_option('wordfence_syncingAttackData', time());
|
1338 |
header('Content-Type: text/javascript');
|
2300 |
} else {
|
2301 |
$lastAttackMicroseconds = $wpdb->get_var("SELECT MAX(attackLogTime) FROM {$table_wfHits}");
|
2302 |
}
|
2303 |
+
if (get_site_option('wordfence_lastSyncAttackData', 0) < time() - 8) {
|
2304 |
if ($waf->getStorageEngine()->hasNewerAttackData($lastAttackMicroseconds)) {
|
2305 |
if (get_site_option('wordfence_syncingAttackData') <= time() - 60) {
|
2306 |
// Could be the request to itself is not completing, add ajax to the head as a workaround
|
3381 |
}
|
3382 |
}
|
3383 |
public static function wfsnEndpointType() {
|
|
|
3384 |
$type = 0; //Unknown
|
3385 |
if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) {
|
3386 |
$type = 2;
|
3391 |
$type = 301;
|
3392 |
}
|
3393 |
}
|
3394 |
+
else if (strpos($_SERVER['REQUEST_URI'], '/wp-login.php') !== false) {
|
3395 |
$type = 1;
|
3396 |
}
|
3397 |
return $type;
|
5822 |
if (!WFWAF_SUBDIRECTORY_INSTALL) {
|
5823 |
try {
|
5824 |
$authCookie = wfWAF::getInstance()->parseAuthCookie();
|
5825 |
+
$capabilities = wordfence::getCurrentUserCapabilities();
|
5826 |
if (is_user_logged_in() &&
|
5827 |
(
|
5828 |
!$authCookie ||
|
5829 |
(int) $currentUserID !== (int) $authCookie['userID'] ||
|
5830 |
+
$role !== $authCookie['role'] ||
|
5831 |
+
$authCookie['capabilities'] !== $capabilities //Capability ordering is fixed so a direct equality check is valid
|
5832 |
)
|
5833 |
) {
|
5834 |
wfUtils::setcookie(wfWAF::getInstance()->getAuthCookieName(),
|
5835 |
+
$currentUserID . '|' . $role . '|' . implode(',', $capabilities) . '|' .
|
5836 |
+
wfWAF::getInstance()->getAuthCookieValue($currentUserID, $role, $capabilities),
|
5837 |
time() + 43200, COOKIEPATH, COOKIE_DOMAIN, wfUtils::isFullSSL(), true);
|
5838 |
}
|
5839 |
} catch (wfWAFStorageFileException $e) {
|
6244 |
wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_INACCESSIBLE_CONFIG)
|
6245 |
) . '</p></div>';
|
6246 |
}
|
6247 |
+
public static function wafStorageEngineFallbackNotice() {
|
6248 |
+
echo '<div class="notice notice-warning"><p>'.__('The WAF storage engine is currently set to mysqli, but Wordfence is unable to use the database. The WAF will fall back to using local file system storage instead.', 'wordfence').'</p></div>';
|
6249 |
+
}
|
6250 |
public static function wafConfigNeedsUpdate_mod_php() {
|
6251 |
if (function_exists('network_admin_url') && is_multisite()) {
|
6252 |
$wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigfixmodphp=1');
|
6365 |
}
|
6366 |
|
6367 |
$firewall = new wfFirewall();
|
6368 |
+
if (!empty($_GET['page']) && preg_match('/^Wordfence/i', $_GET['page'])) {
|
6369 |
+
if (!$firewall->testConfig()) {
|
6370 |
+
$warningAdded = true;
|
6371 |
+
if (wfUtils::isAdminPageMU()) {
|
6372 |
+
add_action('network_admin_notices', 'wordfence::wafConfigInaccessibleNotice');
|
6373 |
+
}
|
6374 |
+
else {
|
6375 |
+
add_action('admin_notices', 'wordfence::wafConfigInaccessibleNotice');
|
6376 |
+
}
|
6377 |
}
|
6378 |
+
else if (!$warningAdded && method_exists('wfWAF', 'hasFallbackStorageEngine') && wfWAF::hasFallbackStorageEngine()) {
|
6379 |
+
$warningAdded = true;
|
6380 |
+
add_action(wfUtils::isAdminPageMU()?'network_admin_notices':'admin_notices', 'wordfence::wafStorageEngineFallbackNotice');
|
6381 |
}
|
6382 |
}
|
6383 |
|
7169 |
public static function ajax_email_summary_email_address_debug_callback() {
|
7170 |
$email = !empty($_REQUEST['email']) ? $_REQUEST['email'] : null;
|
7171 |
if (!wfUtils::isValidEmail($email)) {
|
7172 |
+
return array('result' => __('Invalid email address provided', 'wordfence'));
|
7173 |
}
|
7174 |
|
7175 |
$report = new wfActivityReport();
|
7176 |
return $report->sendReportViaEmail($email) ?
|
7177 |
array('ok' => 1, 'result' => __('Test email sent successfully', 'wordfence')) :
|
7178 |
+
array('result' => __("Test email failed to send", 'wordfence'));
|
7179 |
}
|
7180 |
|
7181 |
public static function addDashboardWidget() {
|
7556 |
|
7557 |
public static function ajax_updateWAFRules_callback() {
|
7558 |
try {
|
7559 |
+
$event = new wfWAFCronFetchRulesEvent(time() - 2, true);
|
7560 |
$event->setWaf(wfWAF::getInstance());
|
7561 |
$success = $event->fire();
|
7562 |
$failureReason = false;
|
8179 |
}
|
8180 |
}
|
8181 |
|
8182 |
+
public static function trimWfHits($force = false) {
|
8183 |
+
if(!$force && self::isApiDelayed())
|
8184 |
+
return;
|
8185 |
$wfdb = new wfDB();
|
8186 |
$lastAggregation = wfConfig::get('lastBlockAggregation', 0);
|
8187 |
$table_wfHits = wfDB::networkTable('wfHits');
|
8233 |
wfConfig::set('lastBlockAggregation', time());
|
8234 |
}
|
8235 |
|
8236 |
+
private static function isApiDelayed() {
|
8237 |
+
return wfConfig::get('apiDelayedUntil', 0) > time();
|
8238 |
+
}
|
8239 |
+
|
8240 |
+
private static function delaySendAttackData($until) {
|
8241 |
+
wfConfig::set('apiDelayedUntil', $until);
|
8242 |
+
self::scheduleSendAttackData($until);
|
8243 |
+
}
|
8244 |
+
|
8245 |
private static function scheduleSendAttackData($timeToSend = null) {
|
8246 |
if ($timeToSend === null) {
|
8247 |
$timeToSend = time() + (60 * 5);
|
8391 |
//Send attack data
|
8392 |
$limit = 500;
|
8393 |
$lastSendTime = wfConfig::get('lastAttackDataSendTime');
|
8394 |
+
$lastSendId = wfConfig::get('lastAttackDataSendId');
|
8395 |
+
if($lastSendId===false){
|
8396 |
+
$query=$wpdb->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM {$table_wfHits}
|
8397 |
WHERE action in ('blocked:waf', 'learned:waf', 'logged:waf', 'blocked:waf-always')
|
8398 |
AND attackLogTime > %f
|
8399 |
+
LIMIT %d", sprintf('%.6f', $lastSendTime), $limit);
|
8400 |
+
}
|
8401 |
+
else{
|
8402 |
+
$query=$wpdb->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM {$table_wfHits}
|
8403 |
+
WHERE action in ('blocked:waf', 'learned:waf', 'logged:waf', 'blocked:waf-always')
|
8404 |
+
AND id > %d
|
8405 |
+
ORDER BY id LIMIT %d", $lastSendId, $limit);
|
8406 |
+
}
|
8407 |
+
$params[]=$limit;
|
8408 |
+
$attackData = $wpdb->get_results($query);
|
8409 |
$totalRows = $wpdb->get_var('SELECT FOUND_ROWS()');
|
8410 |
|
8411 |
if ($attackData) { // Build JSON to send
|
8434 |
$lastSendTime = $attackDataRow->attackLogTime;
|
8435 |
}
|
8436 |
}
|
8437 |
+
|
8438 |
+
$bodyLimit=self::ATTACK_DATA_BODY_LIMIT;
|
8439 |
+
$response=null;
|
8440 |
+
do {
|
8441 |
+
$bodyData=null;
|
8442 |
+
do {
|
8443 |
+
if($bodyData!==null)
|
8444 |
+
array_splice($dataToSend, floor(count($dataToSend)/2));
|
8445 |
+
$bodyData=json_encode($dataToSend);
|
8446 |
+
} while(strlen($bodyData)>$bodyLimit&&count($dataToSend)>1);
|
8447 |
+
|
8448 |
+
$homeurl = wfUtils::wpHomeURL();
|
8449 |
+
$siteurl = wfUtils::wpSiteURL();
|
8450 |
+
$installType = wfUtils::wafInstallationType();
|
8451 |
+
$response = wp_remote_post(WFWAF_API_URL_SEC . "?" . http_build_query(array(
|
8452 |
+
'action' => 'send_waf_attack_data',
|
8453 |
+
'k' => $waf->getStorageEngine()->getConfig('apiKey', null, 'synced'),
|
8454 |
+
's' => $siteurl,
|
8455 |
+
'h' => $homeurl,
|
8456 |
+
't' => microtime(true),
|
8457 |
+
'c' => $installType,
|
8458 |
+
'lang' => get_site_option('WPLANG'),
|
8459 |
+
), null, '&'),
|
8460 |
+
array(
|
8461 |
+
'body' => $bodyData,
|
8462 |
+
'headers' => array(
|
8463 |
+
'Content-Type' => 'application/json',
|
8464 |
+
'Referer' => false,
|
8465 |
+
),
|
8466 |
+
'timeout' => 30,
|
8467 |
+
));
|
8468 |
+
$bodyLimit/=2;
|
8469 |
+
} while(wp_remote_retrieve_response_code($response)===413&&count($dataToSend)>1);
|
8470 |
+
|
8471 |
if (!is_wp_error($response) && ($body = wp_remote_retrieve_body($response))) {
|
8472 |
$jsonData = json_decode($body, true);
|
8473 |
if (is_array($jsonData) && array_key_exists('success', $jsonData)) {
|
|
|
|
|
|
|
|
|
|
|
|
|
8474 |
wfConfig::set('lastAttackDataSendTime', $lastSendTime);
|
8475 |
+
$lastSendIndex=count($dataToSend)-1;
|
8476 |
+
if($lastSendIndex>=0){
|
8477 |
+
$lastSendId = $attackData[$lastSendIndex]->id;
|
8478 |
+
wfConfig::set('lastAttackDataSendId', $lastSendId);
|
8479 |
+
// Successfully sent data, remove the full request from the table to reduce storage size
|
8480 |
+
foreach ($attackDataToUpdate as $hitID => $dataToUpdate) {
|
8481 |
+
if ($hitID <= $lastSendId) {
|
8482 |
+
$wpdb->update($table_wfHits, $dataToUpdate, array(
|
8483 |
+
'id' => $hitID,
|
8484 |
+
));
|
8485 |
+
}
|
8486 |
+
}
|
8487 |
+
}
|
8488 |
+
if (count($dataToSend) < $totalRows) {
|
8489 |
self::scheduleSendAttackData();
|
8490 |
}
|
8491 |
|
8494 |
}
|
8495 |
}
|
8496 |
}
|
8497 |
+
else{
|
8498 |
+
//Delay interactions for 30 minutes if an error occurs
|
8499 |
+
self::delaySendAttackData(time() + 30*60);
|
8500 |
+
}
|
8501 |
}
|
8502 |
|
8503 |
//Send false positives
|
8583 |
}
|
8584 |
}
|
8585 |
else if (is_string($okToSendBody) && preg_match('/next check in: ([0-9]+)/', $okToSendBody, $matches)) {
|
8586 |
+
self::delaySendAttackData(time() + $matches[1]);
|
8587 |
}
|
8588 |
}
|
8589 |
else { // Could be that the server is down, so hold off on sending data for a little while
|
8590 |
+
self::delaySendAttackData(time() + 7200);
|
8591 |
}
|
8592 |
}
|
8593 |
else if (!wfConfig::get('other_WFNet', true)) {
|
8914 |
}
|
8915 |
|
8916 |
public static function getWAFBootstrapContent($currentAutoPrependedFile = null) {
|
8917 |
+
$bootstrapPath = dirname(self::getWAFBootstrapPath());
|
8918 |
$currentAutoPrepend = '';
|
8919 |
if ($currentAutoPrependedFile && is_file($currentAutoPrependedFile) && !WFWAF_SUBDIRECTORY_INSTALL) {
|
8920 |
$currentAutoPrepend = sprintf('
|
8926 |
return sprintf('<?php
|
8927 |
// Before removing this file, please verify the PHP ini setting `auto_prepend_file` does not point to this.
|
8928 |
%3$s
|
8929 |
+
if (file_exists(__DIR__.%1$s)) {
|
8930 |
+
define("WFWAF_LOG_PATH", __DIR__.%2$s);
|
8931 |
+
include_once __DIR__.%1$s;
|
8932 |
+
}',
|
8933 |
+
var_export(wfUtils::relativePath(WORDFENCE_PATH . 'waf/bootstrap.php', $bootstrapPath, true), true),
|
8934 |
+
var_export(wfUtils::relativePath((WFWAF_SUBDIRECTORY_INSTALL ? WP_CONTENT_DIR . '/wflogs/' : WFWAF_LOG_PATH), $bootstrapPath, true), true),
|
|
|
8935 |
$currentAutoPrepend);
|
8936 |
}
|
8937 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8938 |
/**
|
8939 |
* @return bool|string
|
8940 |
*/
|
8948 |
return $role;
|
8949 |
}
|
8950 |
}
|
8951 |
+
return 'other';
|
8952 |
+
}
|
8953 |
+
|
8954 |
+
private static function getCurrentUserCapabilities() {
|
8955 |
+
$capabilities = array(
|
8956 |
+
'manage_options',
|
8957 |
+
'unfiltered_html',
|
8958 |
+
'edit_others_posts',
|
8959 |
+
'upload_files',
|
8960 |
+
'publish_posts',
|
8961 |
+
'edit_posts',
|
8962 |
+
'read',
|
8963 |
+
'manage_network'
|
8964 |
+
);
|
8965 |
+
foreach ($capabilities as $index=>$capability) {
|
8966 |
+
if (!current_user_can($capability)) {
|
8967 |
+
unset($capabilities[$index]);
|
8968 |
+
}
|
8969 |
+
}
|
8970 |
+
return array_values($capabilities);
|
8971 |
}
|
8972 |
|
8973 |
public static function licenseStatusChanged() {
|
9759 |
}
|
9760 |
|
9761 |
class wfWAFAutoPrependHelperException extends Exception {
|
9762 |
+
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -27,7 +27,7 @@ else {
|
|
27 |
define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading));
|
28 |
|
29 |
define('WORDFENCE_LS_VERSION', '1.0.6');
|
30 |
-
define('WORDFENCE_LS_BUILD_NUMBER', '
|
31 |
|
32 |
if (!defined('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES')) { define('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES', 15); }
|
33 |
|
27 |
define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading));
|
28 |
|
29 |
define('WORDFENCE_LS_VERSION', '1.0.6');
|
30 |
+
define('WORDFENCE_LS_BUILD_NUMBER', '1620658454');
|
31 |
|
32 |
if (!defined('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES')) { define('WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES', 15); }
|
33 |
|
@@ -4,7 +4,7 @@ Tags: security, firewall, malware scanner, web application firewall, two factor
|
|
4 |
Requires at least: 3.9
|
5 |
Requires PHP: 5.3
|
6 |
Tested up to: 5.7
|
7 |
-
Stable tag: 7.5.
|
8 |
|
9 |
Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
|
10 |
|
@@ -183,6 +183,22 @@ Secure your website with Wordfence.
|
|
183 |
|
184 |
== Changelog ==
|
185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
= 7.5.2 - March 24, 2021 =
|
187 |
|
188 |
* Fix: Fixed fatal error on single-sites running WordPress <4.9.
|
4 |
Requires at least: 3.9
|
5 |
Requires PHP: 5.3
|
6 |
Tested up to: 5.7
|
7 |
+
Stable tag: 7.5.3
|
8 |
|
9 |
Secure your website with the most comprehensive WordPress security plugin. Firewall, malware scan, blocking, live traffic, login security & more.
|
10 |
|
183 |
|
184 |
== Changelog ==
|
185 |
|
186 |
+
= 7.5.3 - May 10, 2021 =
|
187 |
+
|
188 |
+
* Improvement: Expanded WAF capabilities including better JSON and user permission handling
|
189 |
+
* Improvement: Switched to relative paths in WAF auto_prepend file to increase portability
|
190 |
+
* Improvement: Eliminated unnecessary calls to Wordfence servers
|
191 |
+
* Fix: Prevented errors on PHP 8.0 when disk_free_space and/or disk_total_space are included in disabled_functions
|
192 |
+
* Fix: Fixed PHP notices caused by unexpected plugin version data
|
193 |
+
* Fix: Gracefully handle unexpected responses from Wordfence servers
|
194 |
+
* Fix: Time field now displays correctly on "See Recent Traffic" overlay
|
195 |
+
* Fix: Corrected typo on Diagnostics page
|
196 |
+
* Fix: Corrected IP counts on activity report
|
197 |
+
* Fix: Added missing line break in scan result emails
|
198 |
+
* Fix: Sending test activity report now provides success/failure response
|
199 |
+
* Fix: Reduced SQLi false positives caused by comma-separated strings
|
200 |
+
* Fix: Fixed JS error when resolving last scan result
|
201 |
+
|
202 |
= 7.5.2 - March 24, 2021 =
|
203 |
|
204 |
* Fix: Fixed fatal error on single-sites running WordPress <4.9.
|
@@ -5,7 +5,7 @@ define('WFWAF_VERSION', '1.0.4');
|
|
5 |
define('WFWAF_PATH', dirname(__FILE__) . '/');
|
6 |
define('WFWAF_LIB_PATH', WFWAF_PATH . 'lib/');
|
7 |
define('WFWAF_VIEW_PATH', WFWAF_PATH . 'views/');
|
8 |
-
define('WFWAF_API_URL_SEC', 'https://noc4.wordfence.com/v1.
|
9 |
if (!defined('WFWAF_DEBUG')) {
|
10 |
define('WFWAF_DEBUG', false);
|
11 |
}
|
5 |
define('WFWAF_PATH', dirname(__FILE__) . '/');
|
6 |
define('WFWAF_LIB_PATH', WFWAF_PATH . 'lib/');
|
7 |
define('WFWAF_VIEW_PATH', WFWAF_PATH . 'views/');
|
8 |
+
define('WFWAF_API_URL_SEC', 'https://noc4.wordfence.com/v1.10/');
|
9 |
if (!defined('WFWAF_DEBUG')) {
|
10 |
define('WFWAF_DEBUG', false);
|
11 |
}
|
@@ -367,6 +367,7 @@ class wfWAFHTTPTransportCurl extends wfWAFHTTPTransport {
|
|
367 |
$response = new wfWAFHTTPResponse();
|
368 |
$response->setBody($body);
|
369 |
$response->setHeaders($header);
|
|
|
370 |
return $response;
|
371 |
}
|
372 |
return false;
|
367 |
$response = new wfWAFHTTPResponse();
|
368 |
$response->setBody($body);
|
369 |
$response->setHeaders($header);
|
370 |
+
$response->setStatusCode(curl_getinfo($ch, CURLINFO_HTTP_CODE));
|
371 |
return $response;
|
372 |
}
|
373 |
return false;
|
@@ -299,6 +299,7 @@ class wfWAFBaseParser {
|
|
299 |
protected $index;
|
300 |
/** @var wfWAFLexerInterface */
|
301 |
protected $lexer;
|
|
|
302 |
|
303 |
public function __construct($lexer) {
|
304 |
$this->lexer = $lexer;
|
@@ -426,6 +427,15 @@ class wfWAFBaseParser {
|
|
426 |
public function setTokens($tokens) {
|
427 |
$this->tokens = $tokens;
|
428 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
}
|
430 |
|
431 |
/**
|
@@ -687,4 +697,4 @@ class wfWAFStringScanner {
|
|
687 |
$this->captures = $captures;
|
688 |
}
|
689 |
}
|
690 |
-
}
|
299 |
protected $index;
|
300 |
/** @var wfWAFLexerInterface */
|
301 |
protected $lexer;
|
302 |
+
protected $checkpoint=0;
|
303 |
|
304 |
public function __construct($lexer) {
|
305 |
$this->lexer = $lexer;
|
427 |
public function setTokens($tokens) {
|
428 |
$this->tokens = $tokens;
|
429 |
}
|
430 |
+
|
431 |
+
protected function setCheckpoint() {
|
432 |
+
$this->checkpoint=$this->index;
|
433 |
+
}
|
434 |
+
|
435 |
+
protected function reset() {
|
436 |
+
$this->index=$this->checkpoint;
|
437 |
+
}
|
438 |
+
|
439 |
}
|
440 |
|
441 |
/**
|
697 |
$this->captures = $captures;
|
698 |
}
|
699 |
}
|
700 |
+
}
|
@@ -206,26 +206,63 @@ class wfWAFRuleParser extends wfWAFBaseParser {
|
|
206 |
return $comparisonGroup;
|
207 |
}
|
208 |
|
209 |
-
private function parseComparison() {
|
210 |
/**
|
211 |
* @var wfWAFLexerToken $actionToken
|
212 |
* @var wfWAFLexerToken $expectedToken
|
213 |
*/
|
|
|
214 |
$actionToken = $this->currentToken();
|
215 |
$this->expectTokenTypeEquals($this->expectNextToken(), wfWAFRuleLexer::T_OPEN_PARENTHESIS);
|
216 |
-
$value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
|
218 |
$subjects = array();
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
$
|
223 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
}
|
225 |
-
|
226 |
-
$subjects[] = new wfWAFRuleComparisonSubject($this->getWAF(), $subject, $filters);
|
227 |
}
|
228 |
-
$this->expectTokenTypeEquals($this->expectNextToken(), wfWAFRuleLexer::T_CLOSE_PARENTHESIS);
|
229 |
|
230 |
$comparison = new wfWAFRuleComparison($this->getWAF(), $actionToken->getValue(), $value, $subjects);
|
231 |
return $comparison;
|
@@ -284,7 +321,7 @@ class wfWAFRuleParser extends wfWAFBaseParser {
|
|
284 |
break 2;
|
285 |
|
286 |
case wfWAFRuleLexer::T_OPEN_PARENTHESIS:
|
287 |
-
$filters
|
288 |
break;
|
289 |
|
290 |
default:
|
@@ -297,7 +334,16 @@ class wfWAFRuleParser extends wfWAFBaseParser {
|
|
297 |
throw new wfWAFParserSyntaxError('No subject supplied to filter');
|
298 |
}
|
299 |
for ($i = 0; $i < count($filters); $i++) {
|
300 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
301 |
}
|
302 |
return array($filters, $subject);
|
303 |
}
|
@@ -305,15 +351,20 @@ class wfWAFRuleParser extends wfWAFBaseParser {
|
|
305 |
/**
|
306 |
* @throws wfWAFParserSyntaxError
|
307 |
*/
|
308 |
-
private function parseSubject() {
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
$
|
316 |
-
|
|
|
|
|
|
|
|
|
|
|
317 |
$savePoint = $this->index;
|
318 |
while (($property = $this->parsePropertyAccessor()) !== false) {
|
319 |
$subject[] = $property;
|
@@ -398,15 +449,15 @@ class wfWAFRuleParser extends wfWAFBaseParser {
|
|
398 |
* @return mixed|string
|
399 |
* @throws wfWAFRuleParserSyntaxError
|
400 |
*/
|
401 |
-
private function expectLiteral() {
|
402 |
$expectedToken = $this->expectNextToken();
|
403 |
-
$this->expectTokenTypeInArray($expectedToken, array(
|
404 |
wfWAFRuleLexer::T_SINGLE_STRING_LITERAL,
|
405 |
wfWAFRuleLexer::T_DOUBLE_STRING_LITERAL,
|
406 |
wfWAFRuleLexer::T_IDENTIFIER,
|
407 |
wfWAFRuleLexer::T_NUMBER_LITERAL,
|
408 |
wfWAFRuleLexer::T_OPEN_BRACKET,
|
409 |
-
));
|
410 |
if ($expectedToken->getType() === wfWAFRuleLexer::T_SINGLE_STRING_LITERAL) {
|
411 |
// Remove quotes, strip slashes
|
412 |
$value = wfWAFUtils::substr($expectedToken->getValue(), 1, -1);
|
@@ -431,6 +482,8 @@ class wfWAFRuleParser extends wfWAFBaseParser {
|
|
431 |
$this->index--;
|
432 |
$value[] = $this->expectLiteral();
|
433 |
}
|
|
|
|
|
434 |
} else {
|
435 |
$value = $expectedToken->getValue();
|
436 |
}
|
@@ -867,4 +920,4 @@ class wfWAFRuleVariable {
|
|
867 |
$this->waf = $waf;
|
868 |
}
|
869 |
}
|
870 |
-
}
|
206 |
return $comparisonGroup;
|
207 |
}
|
208 |
|
209 |
+
private function parseComparison($expectLiteral = true) {
|
210 |
/**
|
211 |
* @var wfWAFLexerToken $actionToken
|
212 |
* @var wfWAFLexerToken $expectedToken
|
213 |
*/
|
214 |
+
$this->setCheckpoint();
|
215 |
$actionToken = $this->currentToken();
|
216 |
$this->expectTokenTypeEquals($this->expectNextToken(), wfWAFRuleLexer::T_OPEN_PARENTHESIS);
|
217 |
+
$value=null;
|
218 |
+
if($expectLiteral) {
|
219 |
+
try {
|
220 |
+
$value = $this->expectLiteral(array(wfWAFRuleLexer::T_CLOSE_PARENTHESIS));
|
221 |
+
if ($value === null && $expectLiteral) {
|
222 |
+
$this->index--;
|
223 |
+
}
|
224 |
+
}
|
225 |
+
catch(wfWAFParserSyntaxError $e) {
|
226 |
+
if($expectLiteral) {
|
227 |
+
$this->reset();
|
228 |
+
return $this->parseComparison(false);
|
229 |
+
}
|
230 |
+
throw $e;
|
231 |
+
}
|
232 |
+
}
|
233 |
|
234 |
$subjects = array();
|
235 |
+
$nextToken = $this->nextToken();
|
236 |
+
if ($value!==null||!$expectLiteral) {
|
237 |
+
while (true) {
|
238 |
+
if ($nextToken && $nextToken->getType() === wfWAFRuleLexer::T_CLOSE_PARENTHESIS) {
|
239 |
+
break;
|
240 |
+
}
|
241 |
+
if (!($nextToken && $nextToken->getType() === wfWAFRuleLexer::T_COMMA)) {
|
242 |
+
if(empty($subjects) && $expectLiteral) {
|
243 |
+
$this->reset();
|
244 |
+
return $this->parseComparison(false);
|
245 |
+
}
|
246 |
+
$this->index--;
|
247 |
+
if(!empty($subjects))
|
248 |
+
break;
|
249 |
+
}
|
250 |
+
list($filters, $subject) = $this->parseFilters();
|
251 |
+
$current = new wfWAFRuleComparisonSubject($this->getWAF(), $subject, $filters);
|
252 |
+
$nextToken = $this->expectNextToken();
|
253 |
+
if (in_array($nextToken->getType(), array(wfWAFRuleLexer::T_DOT, wfWAFRuleLexer::T_OPEN_BRACKET))) {
|
254 |
+
$this->index--;
|
255 |
+
$childSubject = $this->parseSubject(false);
|
256 |
+
if (!is_array($childSubject) )
|
257 |
+
$childSubject = array($childSubject);
|
258 |
+
array_unshift($childSubject, $current);
|
259 |
+
$current = new wfWAFRuleComparisonSubject($this->getWAF(), $childSubject, array());
|
260 |
+
$nextToken = $this->expectNextToken();
|
261 |
+
}
|
262 |
+
$subjects[] = $current;
|
263 |
}
|
264 |
+
$this->expectTokenTypeEquals($nextToken, wfWAFRuleLexer::T_CLOSE_PARENTHESIS);
|
|
|
265 |
}
|
|
|
266 |
|
267 |
$comparison = new wfWAFRuleComparison($this->getWAF(), $actionToken->getValue(), $value, $subjects);
|
268 |
return $comparison;
|
321 |
break 2;
|
322 |
|
323 |
case wfWAFRuleLexer::T_OPEN_PARENTHESIS:
|
324 |
+
array_unshift($filters, array($globalToken->getValue()));
|
325 |
break;
|
326 |
|
327 |
default:
|
334 |
throw new wfWAFParserSyntaxError('No subject supplied to filter');
|
335 |
}
|
336 |
for ($i = 0; $i < count($filters); $i++) {
|
337 |
+
do {
|
338 |
+
$next = $this->expectNextToken();
|
339 |
+
$this->expectTokenTypeInArray($next, array(wfWAFRuleLexer::T_CLOSE_PARENTHESIS, wfWAFRuleLexer::T_COMMA));
|
340 |
+
if ($next->getType() === wfWAFRuleLexer::T_COMMA) {
|
341 |
+
$filters[$i][] = $this->expectLiteral();
|
342 |
+
}
|
343 |
+
else {
|
344 |
+
break;
|
345 |
+
}
|
346 |
+
} while(true);
|
347 |
}
|
348 |
return array($filters, $subject);
|
349 |
}
|
351 |
/**
|
352 |
* @throws wfWAFParserSyntaxError
|
353 |
*/
|
354 |
+
private function parseSubject($global = true) {
|
355 |
+
if ($global) {
|
356 |
+
$globalToken = $this->expectNextToken();
|
357 |
+
$this->expectTokenTypeEquals($globalToken, wfWAFRuleLexer::T_IDENTIFIER);
|
358 |
+
$this->expectTokenTypeEquals($this->expectNextToken(), wfWAFRuleLexer::T_DOT);
|
359 |
+
$globalToken2 = $this->expectNextToken();
|
360 |
+
$this->expectTokenTypeEquals($globalToken2, wfWAFRuleLexer::T_IDENTIFIER);
|
361 |
+
$subject = array(
|
362 |
+
$globalToken->getValue() . '.' . $globalToken2->getValue(),
|
363 |
+
);
|
364 |
+
}
|
365 |
+
else {
|
366 |
+
$subject = array();
|
367 |
+
}
|
368 |
$savePoint = $this->index;
|
369 |
while (($property = $this->parsePropertyAccessor()) !== false) {
|
370 |
$subject[] = $property;
|
449 |
* @return mixed|string
|
450 |
* @throws wfWAFRuleParserSyntaxError
|
451 |
*/
|
452 |
+
private function expectLiteral($allowExtra = array()) {
|
453 |
$expectedToken = $this->expectNextToken();
|
454 |
+
$this->expectTokenTypeInArray($expectedToken, array_merge(array(
|
455 |
wfWAFRuleLexer::T_SINGLE_STRING_LITERAL,
|
456 |
wfWAFRuleLexer::T_DOUBLE_STRING_LITERAL,
|
457 |
wfWAFRuleLexer::T_IDENTIFIER,
|
458 |
wfWAFRuleLexer::T_NUMBER_LITERAL,
|
459 |
wfWAFRuleLexer::T_OPEN_BRACKET,
|
460 |
+
), $allowExtra));
|
461 |
if ($expectedToken->getType() === wfWAFRuleLexer::T_SINGLE_STRING_LITERAL) {
|
462 |
// Remove quotes, strip slashes
|
463 |
$value = wfWAFUtils::substr($expectedToken->getValue(), 1, -1);
|
482 |
$this->index--;
|
483 |
$value[] = $this->expectLiteral();
|
484 |
}
|
485 |
+
} else if (in_array($expectedToken->getType(), $allowExtra)) {
|
486 |
+
return null;
|
487 |
} else {
|
488 |
$value = $expectedToken->getValue();
|
489 |
}
|
920 |
$this->waf = $waf;
|
921 |
}
|
922 |
}
|
923 |
+
}
|
@@ -21,67 +21,67 @@ class wfWAFSQLiParser extends wfWAFBaseParser {
|
|
21 |
// SQL statement and token count for lexer
|
22 |
$tests = array(
|
23 |
array('%s', 1),
|
24 |
-
array('SELECT * FROM t WHERE i = %s ',
|
25 |
-
array("SELECT * FROM t WHERE i = '%s' ",
|
26 |
-
array('SELECT * FROM t WHERE i = "%s" ',
|
27 |
-
array('SELECT * FROM t WHERE i = (%s) ',
|
28 |
-
array("SELECT * FROM t WHERE i = ('%s') ",
|
29 |
-
array('SELECT * FROM t WHERE i = ("%s") ',
|
30 |
-
array('SELECT * FROM t WHERE i = ((%s)) ',
|
31 |
-
array("SELECT * FROM t WHERE i = (('%s')) ",
|
32 |
-
array('SELECT * FROM t WHERE i = (("%s")) ',
|
33 |
-
array('SELECT * FROM t WHERE i = (((%s))) ',
|
34 |
-
array("SELECT * FROM t WHERE i = ((('%s'))) ",
|
35 |
-
array('SELECT * FROM t WHERE i = ((("%s"))) ',
|
36 |
|
37 |
array('SELECT * FROM t WHERE i = %s and j = (1
|
38 |
-
) ',
|
39 |
array("SELECT * FROM t WHERE i = '%s' and j = (1
|
40 |
-
) ",
|
41 |
array('SELECT * FROM t WHERE i = "%s" and j = (1
|
42 |
-
) ',
|
43 |
|
44 |
-
array('SELECT MATCH(t) AGAINST (%s) from t ',
|
45 |
-
array("SELECT MATCH(t) AGAINST ('%s') from t ",
|
46 |
-
array('SELECT MATCH(t) AGAINST ("%s") from t ',
|
47 |
|
48 |
-
// array('SELECT CASE WHEN %s THEN 1 ELSE 0 END from t ',
|
49 |
-
// array("SELECT CASE WHEN '%s' THEN 1 ELSE 0 END from t ",
|
50 |
-
// array('SELECT CASE WHEN "%s" THEN 1 ELSE 0 END from t ',
|
51 |
//
|
52 |
-
// array('SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END) from t ',
|
53 |
-
// array("SELECT (CASE WHEN ('%s') THEN 1 ELSE 0 END) from t ",
|
54 |
-
// array('SELECT (CASE WHEN ("%s") THEN 1 ELSE 0 END) from t ',
|
55 |
-
|
56 |
-
array('SELECT * FROM (select %s) ',
|
57 |
-
array("SELECT * FROM (select '%s') ",
|
58 |
-
array('SELECT * FROM (select "%s") ',
|
59 |
-
array('SELECT * FROM (select (%s)) ',
|
60 |
-
array("SELECT * FROM (select ('%s')) ",
|
61 |
-
array('SELECT * FROM (select ("%s")) ',
|
62 |
-
array('SELECT * FROM (select ((%s))) ',
|
63 |
-
array("SELECT * FROM (select (('%s'))) ",
|
64 |
-
array('SELECT * FROM (select (("%s"))) ',
|
65 |
//
|
66 |
-
// array('SELECT * FROM t JOIN t2 on i = %s ',
|
67 |
-
// array("SELECT * FROM t JOIN t2 on i = '%s' ",
|
68 |
-
// array('SELECT * FROM t JOIN t2 on i = "%s" ',
|
69 |
-
// array('SELECT * FROM t JOIN t2 on i = (%s) ',
|
70 |
-
// array("SELECT * FROM t JOIN t2 on i = ('%s') ",
|
71 |
-
// array('SELECT * FROM t JOIN t2 on i = ("%s") ',
|
72 |
-
// array('SELECT * FROM t JOIN t2 on i = ((%s)) ',
|
73 |
-
// array("SELECT * FROM t JOIN t2 on i = (('%s')) ",
|
74 |
-
// array('SELECT * FROM t JOIN t2 on i = (("%s")) ',
|
75 |
-
// array('SELECT * FROM t JOIN t2 on i = (((%s))) ',
|
76 |
-
// array("SELECT * FROM t JOIN t2 on i = ((('%s'))) ",
|
77 |
-
// array('SELECT * FROM t JOIN t2 on i = ((("%s"))) ',
|
78 |
-
|
79 |
-
array('SELECT * FROM %s ',
|
80 |
-
array('INSERT INTO t (col) VALUES (%s) ',
|
81 |
-
array("INSERT INTO t (col) VALUES ('%s') ",
|
82 |
-
array('INSERT INTO t (col) VALUES ("%s") ',
|
83 |
-
array('UPDATE t1 SET col1 = %s ',
|
84 |
-
array('UPDATE t1 SET col1 = \'%s\' ',
|
85 |
);
|
86 |
}
|
87 |
$lexerFlags = array(0, wfWAFSQLiLexer::FLAG_TOKENIZE_MYSQL_PORTABLE_COMMENTS);
|
@@ -1124,8 +1124,13 @@ class wfWAFSQLiParser extends wfWAFBaseParser {
|
|
1124 |
$this->_init();
|
1125 |
|
1126 |
$savePoint = $this->index;
|
1127 |
-
for ($i = 0; $i <= $num;
|
1128 |
-
|
|
|
|
|
|
|
|
|
|
|
1129 |
$this->index = $savePoint;
|
1130 |
return false;
|
1131 |
}
|
@@ -3648,6 +3653,27 @@ class wfWAFSQLiLexer implements wfWAFLexerInterface {
|
|
3648 |
public function setFlags($flags) {
|
3649 |
$this->flags = $flags;
|
3650 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3651 |
}
|
3652 |
|
3653 |
class wfWAFLexerTokenMatcher {
|
21 |
// SQL statement and token count for lexer
|
22 |
$tests = array(
|
23 |
array('%s', 1),
|
24 |
+
array('SELECT * FROM t WHERE i = %s ', 7),
|
25 |
+
array("SELECT * FROM t WHERE i = '%s' ", 7),
|
26 |
+
array('SELECT * FROM t WHERE i = "%s" ', 7),
|
27 |
+
array('SELECT * FROM t WHERE i = (%s) ', 9),
|
28 |
+
array("SELECT * FROM t WHERE i = ('%s') ", 9),
|
29 |
+
array('SELECT * FROM t WHERE i = ("%s") ', 9),
|
30 |
+
array('SELECT * FROM t WHERE i = ((%s)) ', 11),
|
31 |
+
array("SELECT * FROM t WHERE i = (('%s')) ", 11),
|
32 |
+
array('SELECT * FROM t WHERE i = (("%s")) ', 11),
|
33 |
+
array('SELECT * FROM t WHERE i = (((%s))) ', 13),
|
34 |
+
array("SELECT * FROM t WHERE i = ((('%s'))) ", 13),
|
35 |
+
array('SELECT * FROM t WHERE i = ((("%s"))) ', 13),
|
36 |
|
37 |
array('SELECT * FROM t WHERE i = %s and j = (1
|
38 |
+
) ', 12),
|
39 |
array("SELECT * FROM t WHERE i = '%s' and j = (1
|
40 |
+
) ", 12),
|
41 |
array('SELECT * FROM t WHERE i = "%s" and j = (1
|
42 |
+
) ', 12),
|
43 |
|
44 |
+
array('SELECT MATCH(t) AGAINST (%s) from t ', 10),
|
45 |
+
array("SELECT MATCH(t) AGAINST ('%s') from t ", 10),
|
46 |
+
array('SELECT MATCH(t) AGAINST ("%s") from t ', 10),
|
47 |
|
48 |
+
// array('SELECT CASE WHEN %s THEN 1 ELSE 0 END from t ', 8),
|
49 |
+
// array("SELECT CASE WHEN '%s' THEN 1 ELSE 0 END from t ", 8),
|
50 |
+
// array('SELECT CASE WHEN "%s" THEN 1 ELSE 0 END from t ', 8),
|
51 |
//
|
52 |
+
// array('SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END) from t ', 12),
|
53 |
+
// array("SELECT (CASE WHEN ('%s') THEN 1 ELSE 0 END) from t ", 12),
|
54 |
+
// array('SELECT (CASE WHEN ("%s") THEN 1 ELSE 0 END) from t ', 12),
|
55 |
+
|
56 |
+
array('SELECT * FROM (select %s) ', 6),
|
57 |
+
array("SELECT * FROM (select '%s') ", 6),
|
58 |
+
array('SELECT * FROM (select "%s") ', 6),
|
59 |
+
array('SELECT * FROM (select (%s)) ', 8),
|
60 |
+
array("SELECT * FROM (select ('%s')) ", 8),
|
61 |
+
array('SELECT * FROM (select ("%s")) ', 8),
|
62 |
+
array('SELECT * FROM (select ((%s))) ', 10),
|
63 |
+
array("SELECT * FROM (select (('%s'))) ", 10),
|
64 |
+
array('SELECT * FROM (select (("%s"))) ', 10),
|
65 |
//
|
66 |
+
// array('SELECT * FROM t JOIN t2 on i = %s ', 9),
|
67 |
+
// array("SELECT * FROM t JOIN t2 on i = '%s' ", 9),
|
68 |
+
// array('SELECT * FROM t JOIN t2 on i = "%s" ', 9),
|
69 |
+
// array('SELECT * FROM t JOIN t2 on i = (%s) ', 11),
|
70 |
+
// array("SELECT * FROM t JOIN t2 on i = ('%s') ", 11),
|
71 |
+
// array('SELECT * FROM t JOIN t2 on i = ("%s") ', 11),
|
72 |
+
// array('SELECT * FROM t JOIN t2 on i = ((%s)) ', 13),
|
73 |
+
// array("SELECT * FROM t JOIN t2 on i = (('%s')) ", 13),
|
74 |
+
// array('SELECT * FROM t JOIN t2 on i = (("%s")) ', 13),
|
75 |
+
// array('SELECT * FROM t JOIN t2 on i = (((%s))) ', 15),
|
76 |
+
// array("SELECT * FROM t JOIN t2 on i = ((('%s'))) ", 15),
|
77 |
+
// array('SELECT * FROM t JOIN t2 on i = ((("%s"))) ', 15),
|
78 |
+
|
79 |
+
array('SELECT * FROM %s ', 3),
|
80 |
+
array('INSERT INTO t (col) VALUES (%s) ', 9),
|
81 |
+
array("INSERT INTO t (col) VALUES ('%s') ", 9),
|
82 |
+
array('INSERT INTO t (col) VALUES ("%s") ', 9),
|
83 |
+
array('UPDATE t1 SET col1 = %s ', 5),
|
84 |
+
array('UPDATE t1 SET col1 = \'%s\' ', 5),
|
85 |
);
|
86 |
}
|
87 |
$lexerFlags = array(0, wfWAFSQLiLexer::FLAG_TOKENIZE_MYSQL_PORTABLE_COMMENTS);
|
1124 |
$this->_init();
|
1125 |
|
1126 |
$savePoint = $this->index;
|
1127 |
+
for ($i = 0; $i <= $num;) {
|
1128 |
+
$token=$this->nextToken();
|
1129 |
+
if($token){
|
1130 |
+
if(!$this->lexer->isValueLiteral($token->getType()))
|
1131 |
+
$i++;
|
1132 |
+
}
|
1133 |
+
else{
|
1134 |
$this->index = $savePoint;
|
1135 |
return false;
|
1136 |
}
|
3653 |
public function setFlags($flags) {
|
3654 |
$this->flags = $flags;
|
3655 |
}
|
3656 |
+
|
3657 |
+
/**
|
3658 |
+
* Check if the given token type represents a literal value
|
3659 |
+
* @param $type the token type
|
3660 |
+
* @return bool true if the provided type is a value literal, false otherwise
|
3661 |
+
*/
|
3662 |
+
public function isValueLiteral($type){
|
3663 |
+
switch($type){
|
3664 |
+
case self::DOUBLE_STRING_LITERAL:
|
3665 |
+
case self::SINGLE_STRING_LITERAL:
|
3666 |
+
case self::INTEGER_LITERAL:
|
3667 |
+
case self::REAL_NUMBER_LITERAL:
|
3668 |
+
case self::BINARY_NUMBER_LITERAL:
|
3669 |
+
case self::HEX_NUMBER_LITERAL:
|
3670 |
+
case self::COMMA:
|
3671 |
+
return true;
|
3672 |
+
default:
|
3673 |
+
return false;
|
3674 |
+
}
|
3675 |
+
}
|
3676 |
+
|
3677 |
}
|
3678 |
|
3679 |
class wfWAFLexerTokenMatcher {
|
@@ -9,6 +9,8 @@ interface wfWAFRequestInterface {
|
|
9 |
|
10 |
public function getMd5Body();
|
11 |
|
|
|
|
|
12 |
public function getQueryString();
|
13 |
|
14 |
public function getMd5QueryString();
|
@@ -263,7 +265,8 @@ class wfWAFRequest implements wfWAFRequestInterface {
|
|
263 |
$request->setRawBody('');
|
264 |
}
|
265 |
else {
|
266 |
-
$
|
|
|
267 |
}
|
268 |
|
269 |
$request->setQueryString(wfWAFUtils::stripMagicQuotes($_GET));
|
@@ -343,6 +346,8 @@ class wfWAFRequest implements wfWAFRequestInterface {
|
|
343 |
private $body;
|
344 |
private $rawBody;
|
345 |
private $md5Body;
|
|
|
|
|
346 |
private $cookies;
|
347 |
private $fileNames;
|
348 |
private $files;
|
@@ -402,6 +407,18 @@ class wfWAFRequest implements wfWAFRequestInterface {
|
|
402 |
return $this->md5Body;
|
403 |
}
|
404 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
public function getQueryString() {
|
406 |
if (func_num_args() > 0) {
|
407 |
$args = func_get_args();
|
@@ -989,6 +1006,11 @@ FORM;
|
|
989 |
$this->md5Body = $md5Body;
|
990 |
}
|
991 |
|
|
|
|
|
|
|
|
|
|
|
992 |
/**
|
993 |
* @param mixed $cookies
|
994 |
*/
|
@@ -1088,4 +1110,4 @@ FORM;
|
|
1088 |
$this->metadata = $metadata;
|
1089 |
}
|
1090 |
}
|
1091 |
-
}
|
9 |
|
10 |
public function getMd5Body();
|
11 |
|
12 |
+
public function getJsonBody();
|
13 |
+
|
14 |
public function getQueryString();
|
15 |
|
16 |
public function getMd5QueryString();
|
265 |
$request->setRawBody('');
|
266 |
}
|
267 |
else {
|
268 |
+
$rawBody=wfWAFUtils::rawPOSTBody();
|
269 |
+
$request->setRawBody($rawBody);
|
270 |
}
|
271 |
|
272 |
$request->setQueryString(wfWAFUtils::stripMagicQuotes($_GET));
|
346 |
private $body;
|
347 |
private $rawBody;
|
348 |
private $md5Body;
|
349 |
+
private $jsonBody;
|
350 |
+
private $jsonParsed = false;
|
351 |
private $cookies;
|
352 |
private $fileNames;
|
353 |
private $files;
|
407 |
return $this->md5Body;
|
408 |
}
|
409 |
|
410 |
+
public function getJsonBody() {
|
411 |
+
if ($this->jsonParsed === false) {
|
412 |
+
if (defined('WFWAF_DISABLE_RAW_BODY') && WFWAF_DISABLE_RAW_BODY) {
|
413 |
+
$this->setJsonBody(null);
|
414 |
+
}
|
415 |
+
else {
|
416 |
+
$this->setJsonBody(wfWAFUtils::json_decode($this->getRawBody(), true));
|
417 |
+
}
|
418 |
+
}
|
419 |
+
return $this->jsonBody;
|
420 |
+
}
|
421 |
+
|
422 |
public function getQueryString() {
|
423 |
if (func_num_args() > 0) {
|
424 |
$args = func_get_args();
|
1006 |
$this->md5Body = $md5Body;
|
1007 |
}
|
1008 |
|
1009 |
+
public function setJsonBody($jsonBody) {
|
1010 |
+
$this->jsonBody = $jsonBody;
|
1011 |
+
$this->jsonParsed = true;
|
1012 |
+
}
|
1013 |
+
|
1014 |
/**
|
1015 |
* @param mixed $cookies
|
1016 |
*/
|
1110 |
$this->metadata = $metadata;
|
1111 |
}
|
1112 |
}
|
1113 |
+
}
|
@@ -462,7 +462,7 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
462 |
*/
|
463 |
private $rule;
|
464 |
|
465 |
-
|
466 |
'contains',
|
467 |
'notcontains',
|
468 |
'match',
|
@@ -502,8 +502,25 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
502 |
'versiongreaterthanequalto',
|
503 |
'versionlessthan',
|
504 |
'versionlessthanequalto',
|
|
|
505 |
);
|
506 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
/**
|
508 |
* @var mixed
|
509 |
*/
|
@@ -554,6 +571,9 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
554 |
}
|
555 |
$return = '';
|
556 |
$global = array_shift($subject);
|
|
|
|
|
|
|
557 |
foreach ($subject as $key) {
|
558 |
$return .= '[' . $key . ']';
|
559 |
}
|
@@ -601,14 +621,43 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
601 |
$subjectExport);
|
602 |
}
|
603 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
604 |
public function isActionValid() {
|
605 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
606 |
}
|
607 |
|
608 |
public function evaluate() {
|
609 |
-
|
|
|
610 |
return false;
|
611 |
}
|
|
|
|
|
|
|
612 |
$subjects = $this->getSubjects();
|
613 |
if (!is_array($subjects)) {
|
614 |
return false;
|
@@ -620,7 +669,7 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
620 |
$global = $subject->getValue();
|
621 |
$subjectKey = $subject->getKey();
|
622 |
|
623 |
-
if ($this->_evaluate(array($this, $this->getAction()), $global, $subjectKey)) {
|
624 |
$this->result = true;
|
625 |
}
|
626 |
}
|
@@ -631,20 +680,19 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
631 |
* @param callback $callback
|
632 |
* @param mixed $global
|
633 |
* @param string $subjectKey
|
|
|
634 |
* @return bool
|
635 |
*/
|
636 |
-
private function _evaluate($callback, $global, $subjectKey) {
|
637 |
$result = false;
|
638 |
|
639 |
-
if ($this->
|
640 |
-
$this->getWAF()->isRuleParamWhitelisted($this->getRule()->getRuleID(), $this->getWAF()->getRequest()->getPath(), $subjectKey)
|
641 |
-
) {
|
642 |
return $result;
|
643 |
}
|
644 |
|
645 |
-
if (is_array($global)) {
|
646 |
foreach ($global as $key => $value) {
|
647 |
-
if ($this->_evaluate($callback, $value, $subjectKey . '[' . $key . ']')) {
|
648 |
$result = true;
|
649 |
}
|
650 |
}
|
@@ -652,7 +700,7 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
652 |
$result = true;
|
653 |
$this->failedSubjects[] = array(
|
654 |
'subject' => $subjectKey,
|
655 |
-
'value' => $global,
|
656 |
'multiplier' => $this->getMultiplier(),
|
657 |
'matches' => $this->getMatches(),
|
658 |
);
|
@@ -749,6 +797,22 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
749 |
return !$this->currentUserIs($subject);
|
750 |
}
|
751 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
752 |
public function md5Equals($subject) {
|
753 |
return md5((string) $subject) === $this->getExpected();
|
754 |
}
|
@@ -1185,6 +1249,28 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
1185 |
return version_compare($subject, $this->getExpected(), '<=');
|
1186 |
}
|
1187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1188 |
/**
|
1189 |
* @return mixed
|
1190 |
*/
|
@@ -1240,7 +1326,7 @@ class wfWAFRuleComparison implements wfWAFRuleInterface {
|
|
1240 |
* @return mixed
|
1241 |
*/
|
1242 |
public function getFailedSubjects() {
|
1243 |
-
return $this->failedSubjects;
|
1244 |
}
|
1245 |
|
1246 |
/**
|
@@ -1368,10 +1454,18 @@ class wfWAFRuleComparisonGroup implements wfWAFRuleInterface {
|
|
1368 |
}
|
1369 |
}
|
1370 |
if ($comparison instanceof wfWAFRuleComparison && $comparison->getResult()) {
|
1371 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1372 |
$this->failedComparisons[] = new wfWAFRuleComparisonFailure(
|
1373 |
-
|
1374 |
-
$comparison->getAction(),
|
1375 |
);
|
1376 |
}
|
1377 |
}
|
@@ -1682,17 +1776,26 @@ class wfWAFRuleComparisonSubject {
|
|
1682 |
);
|
1683 |
}
|
1684 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1685 |
/**
|
1686 |
* @return mixed|null
|
1687 |
*/
|
1688 |
public function getValue() {
|
1689 |
$subject = $this->getSubject();
|
1690 |
if (!is_array($subject)) {
|
1691 |
-
return $this->runFilters($this->
|
1692 |
}
|
1693 |
-
if (
|
1694 |
$globalKey = array_shift($subject);
|
1695 |
-
return $this->runFilters($this->_getValue($subject, $this->
|
1696 |
}
|
1697 |
return null;
|
1698 |
}
|
@@ -1733,9 +1836,9 @@ class wfWAFRuleComparisonSubject {
|
|
1733 |
private function runFilters($value) {
|
1734 |
$filters = $this->getFilters();
|
1735 |
if (is_array($filters)) {
|
1736 |
-
foreach ($filters as $
|
1737 |
-
if (method_exists($this, 'filter' . $
|
1738 |
-
$value =
|
1739 |
}
|
1740 |
}
|
1741 |
}
|
@@ -1753,11 +1856,65 @@ class wfWAFRuleComparisonSubject {
|
|
1753 |
return $value;
|
1754 |
}
|
1755 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1756 |
/**
|
1757 |
* @return string
|
1758 |
*/
|
1759 |
public function render() {
|
1760 |
-
return sprintf('%s::create($this, %s, %s)', get_class($this),
|
1761 |
var_export($this->getFilters(), true));
|
1762 |
}
|
1763 |
|
@@ -1787,7 +1944,7 @@ class wfWAFRuleComparisonSubject {
|
|
1787 |
}
|
1788 |
|
1789 |
foreach ($this->getFilters() as $filter) {
|
1790 |
-
$rule = $filter . '(' . $rule . ')';
|
1791 |
}
|
1792 |
return $rule;
|
1793 |
}
|
@@ -1834,4 +1991,4 @@ class wfWAFRuleComparisonSubject {
|
|
1834 |
$this->waf = $waf;
|
1835 |
}
|
1836 |
}
|
1837 |
-
}
|
462 |
*/
|
463 |
private $rule;
|
464 |
|
465 |
+
private static $scalarActions = array(
|
466 |
'contains',
|
467 |
'notcontains',
|
468 |
'match',
|
502 |
'versiongreaterthanequalto',
|
503 |
'versionlessthan',
|
504 |
'versionlessthanequalto',
|
505 |
+
'exists'
|
506 |
);
|
507 |
|
508 |
+
private static $arrayActions = array(
|
509 |
+
'keyexists',
|
510 |
+
'keymatches'
|
511 |
+
);
|
512 |
+
|
513 |
+
private static $globalActions = array(
|
514 |
+
'hasuser',
|
515 |
+
'nothasuser',
|
516 |
+
'currentusercan',
|
517 |
+
'currentusercannot'
|
518 |
+
);
|
519 |
+
|
520 |
+
const ACTION_TYPE_SCALAR=0;
|
521 |
+
const ACTION_TYPE_ARRAY=1;
|
522 |
+
const ACTION_TYPE_GLOBAL=2;
|
523 |
+
|
524 |
/**
|
525 |
* @var mixed
|
526 |
*/
|
571 |
}
|
572 |
$return = '';
|
573 |
$global = array_shift($subject);
|
574 |
+
if ($global instanceof wfWAFRuleComparisonSubject) {
|
575 |
+
$global = 'filtered';
|
576 |
+
}
|
577 |
foreach ($subject as $key) {
|
578 |
$return .= '[' . $key . ']';
|
579 |
}
|
621 |
$subjectExport);
|
622 |
}
|
623 |
|
624 |
+
public function getActionType() {
|
625 |
+
$action=wfWAFUtils::strtolower($this->getAction());
|
626 |
+
if (in_array($action, self::$scalarActions)) {
|
627 |
+
return self::ACTION_TYPE_SCALAR;
|
628 |
+
}
|
629 |
+
else if(in_array($action, self::$arrayActions)) {
|
630 |
+
return self::ACTION_TYPE_ARRAY;
|
631 |
+
}
|
632 |
+
else if(in_array($action, self::$globalActions)) {
|
633 |
+
return self::ACTION_TYPE_GLOBAL;
|
634 |
+
}
|
635 |
+
else {
|
636 |
+
return null;
|
637 |
+
}
|
638 |
+
}
|
639 |
+
|
640 |
public function isActionValid() {
|
641 |
+
return $this->getActionType() !== null;
|
642 |
+
}
|
643 |
+
|
644 |
+
public function hasSubject() {
|
645 |
+
return $this->getActionType() !== self::ACTION_TYPE_GLOBAL;
|
646 |
+
}
|
647 |
+
|
648 |
+
private function isWhitelisted($subjectKey = '') {
|
649 |
+
return $this->getWAF() && $this->getRule() &&
|
650 |
+
$this->getWAF()->isRuleParamWhitelisted($this->getRule()->getRuleID(), $this->getWAF()->getRequest()->getPath(), $subjectKey);
|
651 |
}
|
652 |
|
653 |
public function evaluate() {
|
654 |
+
$type = $this->getActionType();
|
655 |
+
if ($type===null) {
|
656 |
return false;
|
657 |
}
|
658 |
+
else if ($type===self::ACTION_TYPE_GLOBAL) {
|
659 |
+
return (!$this->isWhitelisted()) && ($this->result=call_user_func(array($this, $this->getAction())));
|
660 |
+
}
|
661 |
$subjects = $this->getSubjects();
|
662 |
if (!is_array($subjects)) {
|
663 |
return false;
|
669 |
$global = $subject->getValue();
|
670 |
$subjectKey = $subject->getKey();
|
671 |
|
672 |
+
if ($this->_evaluate(array($this, $this->getAction()), $global, $subjectKey, $type===self::ACTION_TYPE_SCALAR)) {
|
673 |
$this->result = true;
|
674 |
}
|
675 |
}
|
680 |
* @param callback $callback
|
681 |
* @param mixed $global
|
682 |
* @param string $subjectKey
|
683 |
+
* @param bool $iterate
|
684 |
* @return bool
|
685 |
*/
|
686 |
+
private function _evaluate($callback, $global, $subjectKey, $iterate) {
|
687 |
$result = false;
|
688 |
|
689 |
+
if ($this->isWhitelisted($subjectKey)) {
|
|
|
|
|
690 |
return $result;
|
691 |
}
|
692 |
|
693 |
+
if (is_array($global) && $iterate) {
|
694 |
foreach ($global as $key => $value) {
|
695 |
+
if ($this->_evaluate($callback, $value, $subjectKey . '[' . $key . ']', $iterate)) {
|
696 |
$result = true;
|
697 |
}
|
698 |
}
|
700 |
$result = true;
|
701 |
$this->failedSubjects[] = array(
|
702 |
'subject' => $subjectKey,
|
703 |
+
'value' => is_string($global) ? $global : wfWAFUtils::json_encode($global),
|
704 |
'multiplier' => $this->getMultiplier(),
|
705 |
'matches' => $this->getMatches(),
|
706 |
);
|
797 |
return !$this->currentUserIs($subject);
|
798 |
}
|
799 |
|
800 |
+
public function hasUser() {
|
801 |
+
return $this->getWAF()->parseAuthCookie()!==false;
|
802 |
+
}
|
803 |
+
|
804 |
+
public function notHasUser() {
|
805 |
+
return !$this->hasUser();
|
806 |
+
}
|
807 |
+
|
808 |
+
public function currentUserCan() {
|
809 |
+
return $this->getWAF()->checkCapability($this->getExpected());
|
810 |
+
}
|
811 |
+
|
812 |
+
public function currentUserCannot() {
|
813 |
+
return !$this->currentUserCan();
|
814 |
+
}
|
815 |
+
|
816 |
public function md5Equals($subject) {
|
817 |
return md5((string) $subject) === $this->getExpected();
|
818 |
}
|
1249 |
return version_compare($subject, $this->getExpected(), '<=');
|
1250 |
}
|
1251 |
|
1252 |
+
public function keyExists($subject) {
|
1253 |
+
if (!is_array($subject)) {
|
1254 |
+
return false;
|
1255 |
+
}
|
1256 |
+
return array_key_exists($this->getExpected(), $subject);
|
1257 |
+
}
|
1258 |
+
|
1259 |
+
public function keyMatches($subject) {
|
1260 |
+
if (!is_array($subject)) {
|
1261 |
+
return false;
|
1262 |
+
}
|
1263 |
+
foreach($subject as $key=>$value) {
|
1264 |
+
if (preg_match($this->getExpected(), $key))
|
1265 |
+
return true;
|
1266 |
+
}
|
1267 |
+
return false;
|
1268 |
+
}
|
1269 |
+
|
1270 |
+
public function exists($subject) {
|
1271 |
+
return isset($subject);
|
1272 |
+
}
|
1273 |
+
|
1274 |
/**
|
1275 |
* @return mixed
|
1276 |
*/
|
1326 |
* @return mixed
|
1327 |
*/
|
1328 |
public function getFailedSubjects() {
|
1329 |
+
return (array)$this->failedSubjects;
|
1330 |
}
|
1331 |
|
1332 |
/**
|
1454 |
}
|
1455 |
}
|
1456 |
if ($comparison instanceof wfWAFRuleComparison && $comparison->getResult()) {
|
1457 |
+
if ($comparison->hasSubject()) {
|
1458 |
+
foreach ($comparison->getFailedSubjects() as $failedSubject) {
|
1459 |
+
$this->failedComparisons[] = new wfWAFRuleComparisonFailure(
|
1460 |
+
$failedSubject['subject'], $failedSubject['value'], $comparison->getExpected(),
|
1461 |
+
$comparison->getAction(), $failedSubject['multiplier'], $failedSubject['matches']
|
1462 |
+
);
|
1463 |
+
}
|
1464 |
+
}
|
1465 |
+
else {
|
1466 |
$this->failedComparisons[] = new wfWAFRuleComparisonFailure(
|
1467 |
+
'', '', $comparison->getExpected(),
|
1468 |
+
$comparison->getAction(), 1, array()
|
1469 |
);
|
1470 |
}
|
1471 |
}
|
1776 |
);
|
1777 |
}
|
1778 |
|
1779 |
+
private function getRootValue($subject) {
|
1780 |
+
if ($subject instanceof wfWAFRuleComparisonSubject) {
|
1781 |
+
return $subject->getValue();
|
1782 |
+
}
|
1783 |
+
else {
|
1784 |
+
return $this->getWAF()->getGlobal($subject);
|
1785 |
+
}
|
1786 |
+
}
|
1787 |
+
|
1788 |
/**
|
1789 |
* @return mixed|null
|
1790 |
*/
|
1791 |
public function getValue() {
|
1792 |
$subject = $this->getSubject();
|
1793 |
if (!is_array($subject)) {
|
1794 |
+
return $this->runFilters($this->getRootValue($subject), $subject);
|
1795 |
}
|
1796 |
+
else if (count($subject) > 0) {
|
1797 |
$globalKey = array_shift($subject);
|
1798 |
+
return $this->runFilters($this->_getValue($subject, $this->getRootValue($globalKey)));
|
1799 |
}
|
1800 |
return null;
|
1801 |
}
|
1836 |
private function runFilters($value) {
|
1837 |
$filters = $this->getFilters();
|
1838 |
if (is_array($filters)) {
|
1839 |
+
foreach ($filters as $filterArgs) {
|
1840 |
+
if (method_exists($this, 'filter' . $filterArgs[0])) {
|
1841 |
+
$value = call_user_func_array(array($this, 'filter' . $filterArgs[0]), array_merge(array($value), array_slice($filterArgs, 1)));
|
1842 |
}
|
1843 |
}
|
1844 |
}
|
1856 |
return $value;
|
1857 |
}
|
1858 |
|
1859 |
+
public function filterReplace($value, $find, $replace) {
|
1860 |
+
return str_replace($find, $replace, $value);
|
1861 |
+
}
|
1862 |
+
|
1863 |
+
public function filterPregReplace($value, $pattern, $replacement, $limit=-1) {
|
1864 |
+
return preg_replace($pattern, $replacement, $value, $limit);
|
1865 |
+
}
|
1866 |
+
|
1867 |
+
private function getMatchingKeys($array, $patterns) {
|
1868 |
+
if (!is_array($array))
|
1869 |
+
return array();
|
1870 |
+
$filtered = array();
|
1871 |
+
$pattern = array_shift($patterns);
|
1872 |
+
foreach ($array as $key=>$value) {
|
1873 |
+
if (preg_match($pattern, $key)) {
|
1874 |
+
if (empty($patterns)) {
|
1875 |
+
$filtered[] = $value;
|
1876 |
+
}
|
1877 |
+
else {
|
1878 |
+
$filtered = array_merge($filtered, $this->getMatchingKeys($value, $patterns));
|
1879 |
+
}
|
1880 |
+
}
|
1881 |
+
}
|
1882 |
+
return $filtered;
|
1883 |
+
}
|
1884 |
+
|
1885 |
+
public function filterFilterKeys($values) {
|
1886 |
+
$patterns = array_slice(func_get_args(), 1);
|
1887 |
+
return $this->getMatchingKeys($values, $patterns);
|
1888 |
+
}
|
1889 |
+
|
1890 |
+
public function filterJson($value) {
|
1891 |
+
return wfWAFUtils::json_decode(@(string)$value, true);
|
1892 |
+
}
|
1893 |
+
|
1894 |
+
private function renderSubject() {
|
1895 |
+
$subjects = $this->getSubject();
|
1896 |
+
if (is_array($subjects)) {
|
1897 |
+
$rendered = array();
|
1898 |
+
foreach ($subjects as $subject) {
|
1899 |
+
if ($subject instanceof wfWAFRuleComparisonSubject) {
|
1900 |
+
array_push($rendered, $subject->render());
|
1901 |
+
}
|
1902 |
+
else {
|
1903 |
+
array_push($rendered, var_export($subject, true));
|
1904 |
+
}
|
1905 |
+
}
|
1906 |
+
return sprintf('array(%s)', implode(', ', $rendered));
|
1907 |
+
}
|
1908 |
+
else {
|
1909 |
+
return var_export($subjects, true);
|
1910 |
+
}
|
1911 |
+
}
|
1912 |
+
|
1913 |
/**
|
1914 |
* @return string
|
1915 |
*/
|
1916 |
public function render() {
|
1917 |
+
return sprintf('%s::create($this, %s, %s)', get_class($this), $this->renderSubject(),
|
1918 |
var_export($this->getFilters(), true));
|
1919 |
}
|
1920 |
|
1944 |
}
|
1945 |
|
1946 |
foreach ($this->getFilters() as $filter) {
|
1947 |
+
$rule = $filter[0] . '(' . implode(',', array_merge(array($rule), array_slice($filter, 1))) . ')';
|
1948 |
}
|
1949 |
return $rule;
|
1950 |
}
|
1991 |
$this->waf = $waf;
|
1992 |
}
|
1993 |
}
|
1994 |
+
}
|
@@ -75,5 +75,7 @@ interface wfWAFStorageInterface {
|
|
75 |
public function setRules($rules);
|
76 |
|
77 |
public function needsInitialRules();
|
|
|
|
|
78 |
}
|
79 |
}
|
75 |
public function setRules($rules);
|
76 |
|
77 |
public function needsInitialRules();
|
78 |
+
|
79 |
+
public function getDescription();
|
80 |
}
|
81 |
}
|
@@ -922,6 +922,10 @@ class wfWAFStorageFile implements wfWAFStorageInterface {
|
|
922 |
public function setRulesFile($rulesFile) {
|
923 |
$this->rulesFile = $rulesFile;
|
924 |
}
|
|
|
|
|
|
|
|
|
925 |
}
|
926 |
|
927 |
class wfWAFAttackDataStorageFileEngine {
|
922 |
public function setRulesFile($rulesFile) {
|
923 |
$this->rulesFile = $rulesFile;
|
924 |
}
|
925 |
+
|
926 |
+
public function getDescription() {
|
927 |
+
return __('file system', 'wordfence');
|
928 |
+
}
|
929 |
}
|
930 |
|
931 |
class wfWAFAttackDataStorageFileEngine {
|
@@ -617,6 +617,11 @@ class wfWAFStorageMySQL implements wfWAFStorageInterface {
|
|
617 |
}
|
618 |
return $table;
|
619 |
}
|
|
|
|
|
|
|
|
|
|
|
620 |
}
|
621 |
|
622 |
interface wfWAFStorageEngineDatabase {
|
617 |
}
|
618 |
return $table;
|
619 |
}
|
620 |
+
|
621 |
+
public function getDescription() {
|
622 |
+
return __('mysqli', 'wordfence');
|
623 |
+
}
|
624 |
+
|
625 |
}
|
626 |
|
627 |
interface wfWAFStorageEngineDatabase {
|
@@ -31,6 +31,7 @@ class wfWAF {
|
|
31 |
* @var wfWAFStorageInterface
|
32 |
*/
|
33 |
private static $sharedStorageEngine;
|
|
|
34 |
|
35 |
/**
|
36 |
* @return wfWAFStorageInterface
|
@@ -42,8 +43,13 @@ class wfWAF {
|
|
42 |
/**
|
43 |
* @param wfWAFStorageInterface $instance
|
44 |
*/
|
45 |
-
public static function setSharedStorageEngine($sharedStorageEngine) {
|
46 |
self::$sharedStorageEngine = $sharedStorageEngine;
|
|
|
|
|
|
|
|
|
|
|
47 |
}
|
48 |
|
49 |
protected $rulesFile;
|
@@ -1301,8 +1307,8 @@ HTML
|
|
1301 |
return false;
|
1302 |
}
|
1303 |
|
1304 |
-
if (is_array($this->whitelistedParams) && array_key_exists($paramKey, $this->whitelistedParams)
|
1305 |
-
&& is_array($this->whitelistedParams[$paramKey])
|
1306 |
) {
|
1307 |
foreach ($this->whitelistedParams[$paramKey] as $urlRegex) {
|
1308 |
if (is_array($urlRegex)) {
|
@@ -1477,6 +1483,17 @@ HTML
|
|
1477 |
return false;
|
1478 |
}
|
1479 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1480 |
/**
|
1481 |
* @param string|null $cookieVal
|
1482 |
* @return bool
|
@@ -1487,14 +1504,23 @@ HTML
|
|
1487 |
$cookieVal = !empty($_COOKIE[$cookieName]) && is_string($_COOKIE[$cookieName]) ? $_COOKIE[$cookieName] : '';
|
1488 |
}
|
1489 |
$pieces = explode('|', $cookieVal);
|
1490 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1491 |
return false;
|
1492 |
}
|
1493 |
-
|
1494 |
-
if (wfWAFUtils::hash_equals($signature, $this->getAuthCookieValue($userID, $role))) {
|
1495 |
return array(
|
1496 |
'userID' => $userID,
|
1497 |
'role' => $role,
|
|
|
1498 |
);
|
1499 |
}
|
1500 |
return false;
|
@@ -1503,11 +1529,14 @@ HTML
|
|
1503 |
/**
|
1504 |
* @param int|string $userID
|
1505 |
* @param string $role
|
|
|
1506 |
* @return bool|string
|
1507 |
*/
|
1508 |
-
public function getAuthCookieValue($userID, $role) {
|
|
|
|
|
1509 |
$algo = function_exists('hash') ? 'sha256' : 'sha1';
|
1510 |
-
return wfWAFUtils::hash_hmac($algo, $userID . $role . floor(time() / 43200), $this->getStorageEngine()->getConfig('authKey'));
|
1511 |
}
|
1512 |
|
1513 |
/**
|
@@ -1788,6 +1817,12 @@ class wfWAFCronFetchRulesEvent extends wfWAFCronEvent {
|
|
1788 |
* @var wfWAFHTTPResponse
|
1789 |
*/
|
1790 |
private $response;
|
|
|
|
|
|
|
|
|
|
|
|
|
1791 |
|
1792 |
public function fire() {
|
1793 |
$waf = $this->getWaf();
|
@@ -1807,110 +1842,132 @@ class wfWAFCronFetchRulesEvent extends wfWAFCronEvent {
|
|
1807 |
'betaFeed' => (int) $waf->getStorageEngine()->getConfig('betaThreatDefenseFeed', null, 'synced'),
|
1808 |
'lang' => $waf->getStorageEngine()->getConfig('WPLANG', null, 'synced'),
|
1809 |
);
|
|
|
|
|
|
|
1810 |
if ($waf->getStorageEngine()->getConfig('other_WFNet', true, 'synced')) {
|
1811 |
$payload['disabled'] = implode('|', $waf->getDisabledRuleIDs());
|
1812 |
}
|
1813 |
|
1814 |
$this->response = wfWAFHTTP::get(WFWAF_API_URL_SEC . "?" . http_build_query($payload, null, '&'), null, 10, 5);
|
1815 |
if ($this->response) {
|
1816 |
-
|
1817 |
-
|
1818 |
-
|
1819 |
-
|
1820 |
-
|
1821 |
-
|
1822 |
-
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
-
|
1827 |
-
$waf->getStorageEngine()->setConfig('
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1828 |
}
|
1829 |
-
|
1830 |
-
|
1831 |
-
isset($jsonData['data']['hash']) &&
|
1832 |
-
isset($jsonData['data']['rules']) &&
|
1833 |
-
$waf->verifyHashedRequest($jsonData['data']['hash'], $jsonData['data']['rules'])
|
1834 |
-
) {
|
1835 |
-
$waf->updateRuleSet(base64_decode($jsonData['data']['rules']),
|
1836 |
-
isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
|
1837 |
-
if (array_key_exists('premiumCount', $jsonData['data'])) {
|
1838 |
-
$waf->getStorageEngine()->setConfig('premiumCount', $jsonData['data']['premiumCount'], 'transient');
|
1839 |
}
|
1840 |
}
|
1841 |
else {
|
1842 |
$success = false;
|
1843 |
}
|
1844 |
}
|
1845 |
-
else {
|
1846 |
-
$success = false;
|
1847 |
-
}
|
1848 |
}
|
1849 |
else {
|
1850 |
$success = false;
|
1851 |
}
|
1852 |
-
|
1853 |
-
$
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
1859 |
-
|
1860 |
-
|
1861 |
-
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
|
1866 |
-
|
1867 |
-
|
1868 |
-
|
1869 |
-
) {
|
1870 |
-
$
|
1871 |
-
|
1872 |
-
|
1873 |
-
|
1874 |
-
|
1875 |
-
|
1876 |
-
|
1877 |
-
|
1878 |
-
|
1879 |
-
|
1880 |
-
|
1881 |
-
|
1882 |
-
|
1883 |
-
|
1884 |
-
|
1885 |
-
|
1886 |
-
|
1887 |
-
|
1888 |
-
|
1889 |
-
|
1890 |
-
|
1891 |
-
|
1892 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1893 |
}
|
1894 |
-
|
1895 |
-
|
1896 |
-
array_key_exists('commonStrings', $jsonData['data']) &&
|
1897 |
-
array_key_exists('signatureIndexes', $jsonData['data']) &&
|
1898 |
-
$waf->verifyHashedRequest($jsonData['data']['commonStringsHash'], $jsonData['data']['commonStrings'] . $jsonData['data']['signatureIndexes'])
|
1899 |
-
) {
|
1900 |
-
$waf->setMalwareSignatureCommonStrings(wfWAFUtils::json_decode(base64_decode($jsonData['data']['commonStrings'])), wfWAFUtils::json_decode(base64_decode($jsonData['data']['signatureIndexes'])));
|
1901 |
}
|
1902 |
}
|
1903 |
-
else {
|
1904 |
-
$success = false;
|
1905 |
-
}
|
1906 |
}
|
1907 |
else {
|
1908 |
$success = false;
|
1909 |
}
|
1910 |
}
|
1911 |
-
else {
|
1912 |
-
$success = false;
|
1913 |
-
}
|
1914 |
} catch (wfWAFHTTPTransportException $e) {
|
1915 |
error_log($e->getMessage());
|
1916 |
$success = false;
|
@@ -2285,4 +2342,4 @@ class wfWAFBuildRulesException extends wfWAFException {
|
|
2285 |
|
2286 |
class wfWAFEventBusException extends wfWAFException {
|
2287 |
}
|
2288 |
-
}
|
31 |
* @var wfWAFStorageInterface
|
32 |
*/
|
33 |
private static $sharedStorageEngine;
|
34 |
+
private static $fallbackStorageEngine;
|
35 |
|
36 |
/**
|
37 |
* @return wfWAFStorageInterface
|
43 |
/**
|
44 |
* @param wfWAFStorageInterface $instance
|
45 |
*/
|
46 |
+
public static function setSharedStorageEngine($sharedStorageEngine, $fallback = false) {
|
47 |
self::$sharedStorageEngine = $sharedStorageEngine;
|
48 |
+
self::$fallbackStorageEngine = $fallback;
|
49 |
+
}
|
50 |
+
|
51 |
+
public static function hasFallbackStorageEngine() {
|
52 |
+
return self::$fallbackStorageEngine;
|
53 |
}
|
54 |
|
55 |
protected $rulesFile;
|
1307 |
return false;
|
1308 |
}
|
1309 |
|
1310 |
+
if ($paramKey==='none' || (is_array($this->whitelistedParams) && array_key_exists($paramKey, $this->whitelistedParams)
|
1311 |
+
&& is_array($this->whitelistedParams[$paramKey]))
|
1312 |
) {
|
1313 |
foreach ($this->whitelistedParams[$paramKey] as $urlRegex) {
|
1314 |
if (is_array($urlRegex)) {
|
1483 |
return false;
|
1484 |
}
|
1485 |
|
1486 |
+
/**
|
1487 |
+
* @param string $capability
|
1488 |
+
* @return bool
|
1489 |
+
*/
|
1490 |
+
public function checkCapability($capability) {
|
1491 |
+
if ($authCookie = $this->parseAuthCookie()) {
|
1492 |
+
return $authCookie['capabilities']!==null && in_array($capability, $authCookie['capabilities']);
|
1493 |
+
}
|
1494 |
+
return false;
|
1495 |
+
}
|
1496 |
+
|
1497 |
/**
|
1498 |
* @param string|null $cookieVal
|
1499 |
* @return bool
|
1504 |
$cookieVal = !empty($_COOKIE[$cookieName]) && is_string($_COOKIE[$cookieName]) ? $_COOKIE[$cookieName] : '';
|
1505 |
}
|
1506 |
$pieces = explode('|', $cookieVal);
|
1507 |
+
$pieceCount = count($pieces);
|
1508 |
+
if ($pieceCount === 4) {
|
1509 |
+
list($userID, $role, $capabilityList, $signature) = $pieces;
|
1510 |
+
$capabilities = empty($capabilityList) ? array() : explode(',', $capabilityList);
|
1511 |
+
}
|
1512 |
+
else if ($pieceCount === 3) {
|
1513 |
+
list($userID, $role, $signature) = $pieces;
|
1514 |
+
$capabilities = null;
|
1515 |
+
}
|
1516 |
+
else {
|
1517 |
return false;
|
1518 |
}
|
1519 |
+
if (wfWAFUtils::hash_equals($signature, $this->getAuthCookieValue($userID, $role, $capabilities))) {
|
|
|
1520 |
return array(
|
1521 |
'userID' => $userID,
|
1522 |
'role' => $role,
|
1523 |
+
'capabilities' => $capabilities
|
1524 |
);
|
1525 |
}
|
1526 |
return false;
|
1529 |
/**
|
1530 |
* @param int|string $userID
|
1531 |
* @param string $role
|
1532 |
+
* @param array $capabilities
|
1533 |
* @return bool|string
|
1534 |
*/
|
1535 |
+
public function getAuthCookieValue($userID, $role, $capabilities = array()) {
|
1536 |
+
if (!is_array($capabilities))
|
1537 |
+
$capabilities = array();
|
1538 |
$algo = function_exists('hash') ? 'sha256' : 'sha1';
|
1539 |
+
return wfWAFUtils::hash_hmac($algo, $userID . $role . '|'. implode(',', $capabilities) . floor(time() / 43200), $this->getStorageEngine()->getConfig('authKey'));
|
1540 |
}
|
1541 |
|
1542 |
/**
|
1817 |
* @var wfWAFHTTPResponse
|
1818 |
*/
|
1819 |
private $response;
|
1820 |
+
private $forceUpdate;
|
1821 |
+
|
1822 |
+
public function __construct($fireTime, $forceUpdate = false) {
|
1823 |
+
parent::__construct($fireTime);
|
1824 |
+
$this->forceUpdate = $forceUpdate;
|
1825 |
+
}
|
1826 |
|
1827 |
public function fire() {
|
1828 |
$waf = $this->getWaf();
|
1842 |
'betaFeed' => (int) $waf->getStorageEngine()->getConfig('betaThreatDefenseFeed', null, 'synced'),
|
1843 |
'lang' => $waf->getStorageEngine()->getConfig('WPLANG', null, 'synced'),
|
1844 |
);
|
1845 |
+
$lastRuleHash=$this->forceUpdate ? null : $waf->getStorageEngine()->getConfig('lastRuleHash', null, 'transient');
|
1846 |
+
if($lastRuleHash!==null)
|
1847 |
+
$payload['hash']=$lastRuleHash;
|
1848 |
if ($waf->getStorageEngine()->getConfig('other_WFNet', true, 'synced')) {
|
1849 |
$payload['disabled'] = implode('|', $waf->getDisabledRuleIDs());
|
1850 |
}
|
1851 |
|
1852 |
$this->response = wfWAFHTTP::get(WFWAF_API_URL_SEC . "?" . http_build_query($payload, null, '&'), null, 10, 5);
|
1853 |
if ($this->response) {
|
1854 |
+
if($this->response->getStatusCode() !== 304){
|
1855 |
+
$jsonData = wfWAFUtils::json_decode($this->response->getBody(), true);
|
1856 |
+
if (is_array($jsonData)) {
|
1857 |
+
|
1858 |
+
if ($waf->hasOpenSSL() &&
|
1859 |
+
isset($jsonData['data']['signature']) &&
|
1860 |
+
isset($jsonData['data']['rules']) &&
|
1861 |
+
$waf->verifySignedRequest(base64_decode($jsonData['data']['signature']), $jsonData['data']['rules'])
|
1862 |
+
) {
|
1863 |
+
$waf->updateRuleSet(base64_decode($jsonData['data']['rules']),
|
1864 |
+
isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
|
1865 |
+
$waf->getStorageEngine()->setConfig('lastRuleHash', $jsonData['data']['signature'], 'transient');
|
1866 |
+
if (array_key_exists('premiumCount', $jsonData['data'])) {
|
1867 |
+
$waf->getStorageEngine()->setConfig('premiumCount', $jsonData['data']['premiumCount'], 'transient');
|
1868 |
+
}
|
1869 |
+
|
1870 |
+
} else if (!$waf->hasOpenSSL() &&
|
1871 |
+
isset($jsonData['data']['hash']) &&
|
1872 |
+
isset($jsonData['data']['rules']) &&
|
1873 |
+
$waf->verifyHashedRequest($jsonData['data']['hash'], $jsonData['data']['rules'])
|
1874 |
+
) {
|
1875 |
+
$waf->updateRuleSet(base64_decode($jsonData['data']['rules']),
|
1876 |
+
isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
|
1877 |
+
$waf->getStorageEngine()->setConfig('lastRuleHash', $jsonData['data']['hash'], 'transient');
|
1878 |
+
if (array_key_exists('premiumCount', $jsonData['data'])) {
|
1879 |
+
$waf->getStorageEngine()->setConfig('premiumCount', $jsonData['data']['premiumCount'], 'transient');
|
1880 |
+
}
|
1881 |
}
|
1882 |
+
else {
|
1883 |
+
$success = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1884 |
}
|
1885 |
}
|
1886 |
else {
|
1887 |
$success = false;
|
1888 |
}
|
1889 |
}
|
|
|
|
|
|
|
1890 |
}
|
1891 |
else {
|
1892 |
$success = false;
|
1893 |
}
|
1894 |
+
|
1895 |
+
$lastMalwareSignatureUpdate=$waf->getStorageEngine()->getConfig('signaturesLastUpdated', 0, 'transient');
|
1896 |
+
$isPaid=$waf->getStorageEngine()->getConfig('isPaid', false, 'synced');
|
1897 |
+
//Only update malware signatures for free sites if they are older than 3 days plus an hour
|
1898 |
+
if ($isPaid || $this->forceUpdate || $lastMalwareSignatureUpdate < (time() - (259200 + 3600))) {
|
1899 |
+
$this->response = wfWAFHTTP::get(WFWAF_API_URL_SEC . "?" . http_build_query(array(
|
1900 |
+
'action' => 'get_malware_signatures',
|
1901 |
+
'k' => $waf->getStorageEngine()->getConfig('apiKey', null, 'synced'),
|
1902 |
+
's' => $waf->getStorageEngine()->getConfig('siteURL', null, 'synced') ? $waf->getStorageEngine()->getConfig('siteURL', null, 'synced') : $guessSiteURL,
|
1903 |
+
'h' => $waf->getStorageEngine()->getConfig('homeURL', null, 'synced') ? $waf->getStorageEngine()->getConfig('homeURL', null, 'synced') : $guessSiteURL,
|
1904 |
+
'openssl' => $waf->hasOpenSSL() ? 1 : 0,
|
1905 |
+
'betaFeed' => (int) $waf->getStorageEngine()->getConfig('betaThreatDefenseFeed', null, 'synced'),
|
1906 |
+
'hash' => $this->forceUpdate ? null : $waf->getStorageEngine()->getConfig('lastMalwareHash', null, 'transient'),
|
1907 |
+
'cs-hash' => $this->forceUpdate ? null : $waf->getStorageEngine()->getConfig('lastMalwareHashCommonStrings', null, 'transient'),
|
1908 |
+
'lang' => $waf->getStorageEngine()->getConfig('WPLANG', null, 'synced')
|
1909 |
+
), null, '&'), null, 15, 5);
|
1910 |
+
if ($this->response) {
|
1911 |
+
if($this->response->getStatusCode() !== 304){
|
1912 |
+
$jsonData = wfWAFUtils::json_decode($this->response->getBody(), true);
|
1913 |
+
if (is_array($jsonData)) {
|
1914 |
+
if ($waf->hasOpenSSL() &&
|
1915 |
+
isset($jsonData['data']['signature']) &&
|
1916 |
+
isset($jsonData['data']['signatures']) &&
|
1917 |
+
$waf->verifySignedRequest(base64_decode($jsonData['data']['signature']), $jsonData['data']['signatures'])
|
1918 |
+
) {
|
1919 |
+
$waf->setMalwareSignatures(wfWAFUtils::json_decode(base64_decode($jsonData['data']['signatures'])),
|
1920 |
+
isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
|
1921 |
+
$waf->getStorageEngine()->setConfig('lastMalwareHash', $jsonData['data']['signature'], 'transient');
|
1922 |
+
if (array_key_exists('premiumCount', $jsonData['data'])) {
|
1923 |
+
$waf->getStorageEngine()->setConfig('signaturePremiumCount', $jsonData['data']['premiumCount'], 'transient');
|
1924 |
+
}
|
1925 |
+
|
1926 |
+
if (array_key_exists('commonStringsSignature', $jsonData['data']) &&
|
1927 |
+
array_key_exists('commonStrings', $jsonData['data']) &&
|
1928 |
+
array_key_exists('signatureIndexes', $jsonData['data']) &&
|
1929 |
+
$waf->verifySignedRequest(base64_decode($jsonData['data']['commonStringsSignature']), $jsonData['data']['commonStrings'] . $jsonData['data']['signatureIndexes'])
|
1930 |
+
) {
|
1931 |
+
$waf->setMalwareSignatureCommonStrings(wfWAFUtils::json_decode(base64_decode($jsonData['data']['commonStrings'])), wfWAFUtils::json_decode(base64_decode($jsonData['data']['signatureIndexes'])));
|
1932 |
+
|
1933 |
+
$waf->getStorageEngine()->setConfig('lastMalwareHashCommonStrings', $jsonData['data']['commonStringsSignature'], 'transient');
|
1934 |
+
}
|
1935 |
+
|
1936 |
+
} else if (!$waf->hasOpenSSL() &&
|
1937 |
+
isset($jsonData['data']['hash']) &&
|
1938 |
+
isset($jsonData['data']['signatures']) &&
|
1939 |
+
$waf->verifyHashedRequest($jsonData['data']['hash'], $jsonData['data']['signatures'])
|
1940 |
+
) {
|
1941 |
+
$waf->setMalwareSignatures(wfWAFUtils::json_decode(base64_decode($jsonData['data']['signatures'])),
|
1942 |
+
|
1943 |
+
isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
|
1944 |
+
$waf->getStorageEngine()->setConfig('lastMalwareHash', $jsonData['data']['hash'], 'transient');
|
1945 |
+
if (array_key_exists('premiumCount', $jsonData['data'])) {
|
1946 |
+
$waf->getStorageEngine()->setConfig('signaturePremiumCount', $jsonData['data']['premiumCount'], 'transient');
|
1947 |
+
}
|
1948 |
+
|
1949 |
+
if (array_key_exists('commonStringsHash', $jsonData['data']) &&
|
1950 |
+
array_key_exists('commonStrings', $jsonData['data']) &&
|
1951 |
+
array_key_exists('signatureIndexes', $jsonData['data']) &&
|
1952 |
+
$waf->verifyHashedRequest($jsonData['data']['commonStringsHash'], $jsonData['data']['commonStrings'] . $jsonData['data']['signatureIndexes'])
|
1953 |
+
) {
|
1954 |
+
$waf->setMalwareSignatureCommonStrings(wfWAFUtils::json_decode(base64_decode($jsonData['data']['commonStrings'])), wfWAFUtils::json_decode(base64_decode($jsonData['data']['signatureIndexes'])));
|
1955 |
+
$waf->getStorageEngine()->setConfig('lastMalwareHashCommonStrings', $jsonData['data']['commonStringsHash'], 'transient');
|
1956 |
+
}
|
1957 |
+
}
|
1958 |
+
else {
|
1959 |
+
$success = false;
|
1960 |
+
}
|
1961 |
}
|
1962 |
+
else {
|
1963 |
+
$success = false;
|
|
|
|
|
|
|
|
|
|
|
1964 |
}
|
1965 |
}
|
|
|
|
|
|
|
1966 |
}
|
1967 |
else {
|
1968 |
$success = false;
|
1969 |
}
|
1970 |
}
|
|
|
|
|
|
|
1971 |
} catch (wfWAFHTTPTransportException $e) {
|
1972 |
error_log($e->getMessage());
|
1973 |
$success = false;
|
2342 |
|
2343 |
class wfWAFEventBusException extends wfWAFException {
|
2344 |
}
|
2345 |
+
}
|
@@ -131,7 +131,7 @@ h6 a:visited { color: purple !important; }
|
|
131 |
network_site_url(),
|
132 |
$report_start,
|
133 |
$report_end
|
134 |
-
), array('a'=>array('href'=>array()))); ?> <?php if (!wfConfig::get('isPaid')): ?><?php echo wp_kses(__('NOTE: You are using the free version of Wordfence and are missing out on features like
|
135 |
</p>
|
136 |
|
137 |
<h2 style="font-size: 20px; vertical-align: baseline; clear: both; color: #222 !important; margin: 20px 0 4px; padding: 0; border: 0;">
|
131 |
network_site_url(),
|
132 |
$report_start,
|
133 |
$report_end
|
134 |
+
), array('a'=>array('href'=>array()))); ?> <?php if (!wfConfig::get('isPaid')): ?><?php echo wp_kses(__('NOTE: You are using the free version of Wordfence and are missing out on features like real-time firewall rule and malware signature updates, country blocking, and detecting if your site IP is sending spam. <a href="http://www.wordfence.com/zz6/">Click here to upgrade to Wordfence Premium now</a>.', 'wordfence'), array('a'=>array('href'=>array()))); ?><?php endif ?>
|
135 |
</p>
|
136 |
|
137 |
<h2 style="font-size: 20px; vertical-align: baseline; clear: both; color: #222 !important; margin: 20px 0 4px; padding: 0; border: 0;">
|
@@ -27,7 +27,7 @@ if (!defined('WORDFENCE_VERSION')) { exit; }
|
|
27 |
<pre class='wf-pre'><?php echo esc_html($currentAutoPrependFile); ?></pre>
|
28 |
<?php
|
29 |
$contents = file_get_contents($currentAutoPrependFile);
|
30 |
-
$refersToWAF = preg_match('/define\s*\(\s*(["\'])WFWAF_LOG_PATH\1\s*,\s*(["\']).+?\
|
31 |
|
32 |
if (!$refersToWAF):
|
33 |
?>
|
27 |
<pre class='wf-pre'><?php echo esc_html($currentAutoPrependFile); ?></pre>
|
28 |
<?php
|
29 |
$contents = file_get_contents($currentAutoPrependFile);
|
30 |
+
$refersToWAF = preg_match('/define\s*\(\s*(["\'])WFWAF_LOG_PATH\1\s*,\s*(__DIR__\s*\.\s*)?(["\']).+?\3\s*\)\s*/', $contents);
|
31 |
|
32 |
if (!$refersToWAF):
|
33 |
?>
|
@@ -293,7 +293,7 @@ class wfWAFWordPressObserver extends wfWAFBaseObserver {
|
|
293 |
|
294 |
if ($response instanceof wfWAFHTTPResponse && $response->getBody()) {
|
295 |
$jsonData = wfWAFUtils::json_decode($response->getBody(), true);
|
296 |
-
if (array_key_exists('data', $jsonData)) {
|
297 |
if (preg_match('/^block:(\d+)$/i', $jsonData['data'], $matches)) {
|
298 |
wfWAF::getInstance()->getStorageEngine()->blockIP((int)$matches[1] + time(), wfWAF::getInstance()->getRequest()->getIP(), wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
|
299 |
$e = new wfWAFBlockException();
|
@@ -825,7 +825,9 @@ try {
|
|
825 |
define('WFWAF_STORAGE_ENGINE', 'mysqli');
|
826 |
}
|
827 |
|
828 |
-
|
|
|
|
|
829 |
switch (WFWAF_STORAGE_ENGINE) {
|
830 |
case 'mysqli':
|
831 |
// Find the wp-config.php
|
@@ -879,9 +881,11 @@ try {
|
|
879 |
WFWAF_LOG_PATH . 'rules.php',
|
880 |
WFWAF_LOG_PATH . 'wafRules.rules'
|
881 |
);
|
|
|
|
|
882 |
}
|
883 |
|
884 |
-
wfWAF::setSharedStorageEngine($wfWAFStorageEngine);
|
885 |
wfWAF::setInstance(new wfWAFWordPress(wfWAFWordPressRequest::createFromGlobals(), wfWAF::getSharedStorageEngine()));
|
886 |
wfWAF::getInstance()->getEventBus()->attach(new wfWAFWordPressObserver);
|
887 |
|
293 |
|
294 |
if ($response instanceof wfWAFHTTPResponse && $response->getBody()) {
|
295 |
$jsonData = wfWAFUtils::json_decode($response->getBody(), true);
|
296 |
+
if (is_array($jsonData) && array_key_exists('data', $jsonData)) {
|
297 |
if (preg_match('/^block:(\d+)$/i', $jsonData['data'], $matches)) {
|
298 |
wfWAF::getInstance()->getStorageEngine()->blockIP((int)$matches[1] + time(), wfWAF::getInstance()->getRequest()->getIP(), wfWAFStorageInterface::IP_BLOCKS_BLACKLIST);
|
299 |
$e = new wfWAFBlockException();
|
825 |
define('WFWAF_STORAGE_ENGINE', 'mysqli');
|
826 |
}
|
827 |
|
828 |
+
$specifiedStorageEngine = defined('WFWAF_STORAGE_ENGINE');
|
829 |
+
$fallbackStorageEngine = false;
|
830 |
+
if ($specifiedStorageEngine) {
|
831 |
switch (WFWAF_STORAGE_ENGINE) {
|
832 |
case 'mysqli':
|
833 |
// Find the wp-config.php
|
881 |
WFWAF_LOG_PATH . 'rules.php',
|
882 |
WFWAF_LOG_PATH . 'wafRules.rules'
|
883 |
);
|
884 |
+
if ($specifiedStorageEngine)
|
885 |
+
$fallbackStorageEngine = true;
|
886 |
}
|
887 |
|
888 |
+
wfWAF::setSharedStorageEngine($wfWAFStorageEngine, $fallbackStorageEngine);
|
889 |
wfWAF::setInstance(new wfWAFWordPress(wfWAFWordPressRequest::createFromGlobals(), wfWAF::getSharedStorageEngine()));
|
890 |
wfWAF::getInstance()->getEventBus()->attach(new wfWAFWordPressObserver);
|
891 |
|
@@ -4,7 +4,7 @@ Plugin Name: Wordfence Security
|
|
4 |
Plugin URI: http://www.wordfence.com/
|
5 |
Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
|
6 |
Author: Wordfence
|
7 |
-
Version: 7.5.
|
8 |
Author URI: http://www.wordfence.com/
|
9 |
Text Domain: wordfence
|
10 |
Domain Path: /languages
|
@@ -17,8 +17,8 @@ if(defined('WP_INSTALLING') && WP_INSTALLING){
|
|
17 |
if (!defined('ABSPATH')) {
|
18 |
exit;
|
19 |
}
|
20 |
-
define('WORDFENCE_VERSION', '7.5.
|
21 |
-
define('WORDFENCE_BUILD_NUMBER', '
|
22 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
23 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
24 |
|
@@ -93,4 +93,4 @@ if(! defined('WORDFENCE_VERSIONONLY_MODE')){ //Used to get version from file.
|
|
93 |
require_once(dirname(__FILE__) . '/lib/wordfenceConstants.php');
|
94 |
require_once(dirname(__FILE__) . '/lib/wordfenceClass.php');
|
95 |
wordfence::install_actions();
|
96 |
-
}
|
4 |
Plugin URI: http://www.wordfence.com/
|
5 |
Description: Wordfence Security - Anti-virus, Firewall and Malware Scan
|
6 |
Author: Wordfence
|
7 |
+
Version: 7.5.3
|
8 |
Author URI: http://www.wordfence.com/
|
9 |
Text Domain: wordfence
|
10 |
Domain Path: /languages
|
17 |
if (!defined('ABSPATH')) {
|
18 |
exit;
|
19 |
}
|
20 |
+
define('WORDFENCE_VERSION', '7.5.3');
|
21 |
+
define('WORDFENCE_BUILD_NUMBER', '1620658454');
|
22 |
define('WORDFENCE_BASENAME', function_exists('plugin_basename') ? plugin_basename(__FILE__) :
|
23 |
basename(dirname(__FILE__)) . '/' . basename(__FILE__));
|
24 |
|
93 |
require_once(dirname(__FILE__) . '/lib/wordfenceConstants.php');
|
94 |
require_once(dirname(__FILE__) . '/lib/wordfenceClass.php');
|
95 |
wordfence::install_actions();
|
96 |
+
}
|