Version Description
Current Release = Released: 1st October, 2019 - Release Notes
(v.0) IMPROVED: [PRO] Malware scanner now uses network intelligence to the gather information on malware results.
(v.0) NEW: Traffic Watcher feature is now free for all users (no longer Pro-only).
(v.0) IMPROVED: Scanning cron is improved and more efficient.
(v.0) ADDED: Bulk Delete/Repair/Ignore actions now available for Malware scan results.
(v.0) IMPROVED: Malware scan results now provide details of affected line numbers and patterns discovered.
(v.0) IMPROVED: Malware scanner only scans
wp-admin
,wp-includes
,wp-content
folders, and files in top-level directory.(v.0) IMPROVED: Malware scanner now excludes
wp-content/cache/
directory.(v.0) IMPROVED: Malware scanner performance improved with caching.
(v.0) IMPROVED: Malware auto-repair now works more consistently.
(v.0) IMPROVED: Updated default firewall whitelist rules.
(v.0) IMPROVED: If the PWNED Passwords API request fails entirely, the password check is skipped.
(v.0) ADDED: Japanese translations are at 100%.
(v.0) IMPROVED: Dutch translations are greatly improved (a huge thank you to Fred!).
(v.0) FIXED: Audit Trail correctly logs multiple occurrences for the same type of event on the same page request.
(v.0) FIXED: Audit Trail now correctly logs Google reCAPTCHA failure events.
(v.0) FIXED: PHP error when firewall was set to kill response without a user message.
Release Info
Developer | paultgoodchild |
Plugin | Shield Security for WordPress |
Version | 8.2.0 |
Comparing to | |
See all releases |
Code changes from version 8.1.1 to 8.2.0
- icwp-wpsf.php +1 -1
- languages/wp-simple-firewall-en_GB.mo +0 -0
- languages/wp-simple-firewall-en_GB.po +967 -781
- languages/wp-simple-firewall-ja.mo +0 -0
- languages/wp-simple-firewall-nl_NL.mo +0 -0
- plugin-spec.php +3 -3
- readme.txt +23 -3
- src/common/icwp-serviceproviders.php +13 -6
- src/config/feature-audit_trail.php +27 -13
- src/config/feature-autoupdates.php +1 -1
- src/config/feature-events.php +3 -0
- src/config/feature-firewall.php +1 -0
- src/config/feature-hack_protect.php +68 -6
- src/config/feature-ips.php +3 -0
- src/config/feature-plugin.php +5 -7
- src/config/feature-sessions.php +3 -0
- src/config/feature-statistics.php +0 -86
- src/config/feature-traffic.php +4 -1
- src/features/admin_access_restriction.php +1 -0
- src/features/audit_trail.php +30 -12
- src/features/base.php +133 -61
- src/features/base_wpsf.php +20 -42
- src/features/events.php +21 -4
- src/features/hack_protect.php +83 -117
- src/features/insights.php +15 -15
- src/features/ips.php +20 -22
- src/features/lockdown.php +0 -20
- src/features/login_protect.php +9 -7
- src/features/plugin.php +3 -79
- src/features/sessions.php +21 -3
- src/features/statistics.php +4 -97
- src/features/traffic.php +29 -21
- src/features/user_management.php +2 -2
- src/lib/src/Controller/Controller.php +8 -2
- src/lib/src/Databases/AdminNotes/Handler.php +2 -2
- src/lib/src/Databases/AuditTrail/Handler.php +3 -3
- src/lib/src/Databases/Base/Handler.php +8 -8
- src/lib/src/Databases/ChangeTracking/Handler.php +2 -2
- src/lib/src/Databases/Comments/Handler.php +3 -3
- src/lib/src/Databases/Events/Handler.php +2 -2
- src/lib/src/Databases/GeoIp/Handler.php +3 -3
- src/lib/src/Databases/IPs/Handler.php +2 -2
- src/lib/src/Databases/ScanQueue/Handler.php +2 -2
- src/lib/src/Databases/Scanner/Handler.php +2 -2
- src/lib/src/Databases/Session/Handler.php +2 -2
- src/lib/src/Databases/Tally/Handler.php +2 -2
- src/lib/src/Databases/Traffic/Handler.php +3 -3
- src/lib/src/Modules/AuditTrail/AjaxHandler.php +2 -2
- src/lib/src/Modules/Base/AdminNotices.php +2 -2
- src/lib/src/Modules/Base/BaseModCon.php +74 -31
- src/lib/src/Modules/Base/Options.php +6 -11
- src/lib/src/Modules/Base/Strings.php +23 -3
- src/lib/src/Modules/BaseShield/ShieldProcessor.php +1 -1
- src/lib/src/Modules/Events/AjaxHandler.php +1 -3
- src/lib/src/Modules/HackGuard/AjaxHandler.php +2 -1
- src/lib/src/Modules/HackGuard/Options.php +49 -0
- src/lib/src/Modules/HackGuard/Scan/Queue/Build/QueueBuilder.php +4 -4
- src/lib/src/Modules/HackGuard/Scan/Queue/CompleteQueue.php +1 -2
- src/lib/src/Modules/HackGuard/Scan/Queue/Controller.php +2 -2
- src/lib/src/Modules/HackGuard/Scan/Queue/QueueProcessor.php +3 -2
- src/lib/src/Modules/HackGuard/Scan/Queue/ScanInitiate.php +1 -2
- src/lib/src/Modules/HackGuard/Strings.php +18 -1
- src/lib/src/Modules/IPs/AjaxHandler.php +9 -6
- src/lib/src/Modules/IPs/BotTrack/Base.php +6 -5
- src/lib/src/Modules/IPs/Components/UnblockIpByFlag.php +1 -1
- src/lib/src/Modules/IPs/Options.php +0 -1
- src/lib/src/Modules/Insights/Strings.php +4 -1
- src/lib/src/Modules/LoginGuard/Lib/CooldownFlagFile.php +59 -0
- src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php +62 -0
- src/lib/src/Modules/LoginGuard/Options.php +18 -0
- src/lib/src/Modules/Plugin/AdminNotices.php +4 -4
- src/lib/src/Modules/Plugin/AjaxHandler.php +3 -1
- src/lib/src/Modules/Plugin/Options.php +9 -0
- src/lib/src/Modules/Plugin/Strings.php +9 -0
- src/lib/src/Modules/Traffic/AjaxHandler.php +1 -1
- src/lib/src/Modules/Traffic/Limiter/TestIp.php +1 -1
- src/lib/src/Scans/Apc/ResultItem.php +0 -1
- src/lib/src/Scans/Base/BaseRepair.php +21 -0
- src/lib/src/Scans/Base/Files/BaseFileScanner.php +2 -1
- src/lib/src/Scans/Base/Files/BaseScanFromFileMap.php +4 -2
- src/lib/src/Scans/Mal/BuildFileMap.php +22 -15
- src/lib/src/Scans/Mal/BuildScanAction.php +1 -4
- src/lib/src/Scans/Mal/FileScanner.php +61 -39
- src/lib/src/Scans/Mal/Repair.php +41 -10
- src/lib/src/Scans/Mal/ResultItem.php +1 -2
- src/lib/src/Scans/Mal/Scan.php +38 -1
- src/lib/src/Scans/Mal/ScanActionVO.php +7 -5
- src/lib/src/Scans/Mal/ScanFromFileMap.php +3 -1
- src/lib/src/Scans/Mal/Utilities/FalsePositiveReporter.php +64 -0
- src/lib/src/Scans/Mal/Utilities/Patterns.php +52 -0
- src/lib/src/Scans/Mal/Utilities/Whitelist.php +44 -0
- src/lib/src/Scans/Ptg/BuildScanAction.php +1 -1
- src/lib/src/Scans/Ptg/ResultItem.php +0 -2
- src/lib/src/Scans/Ufc/BuildScanAction.php +1 -1
- src/lib/src/Scans/Ufc/ResultItem.php +0 -2
- src/lib/src/Scans/Ufc/Scan.php +3 -1
- src/lib/src/Scans/Ufc/ScanFromFileMap.php +4 -2
- src/lib/src/Scans/Wcf/BuildScanAction.php +1 -1
- src/lib/src/Scans/Wcf/ResultItem.php +0 -2
- src/lib/src/Scans/Wcf/Scan.php +3 -1
- src/lib/src/Scans/Wcf/ScanFromFileMap.php +3 -1
- src/lib/src/Scans/Wpv/ResultItem.php +0 -2
- src/lib/src/Tables/Build/ScanMal.php +43 -7
- src/lib/src/Tables/Render/ScanMal.php +2 -0
- src/lib/src/Utilities/ReCaptcha/TestRequest.php +0 -4
- src/lib/vendor/composer/autoload_classmap.php +15 -2
- src/lib/vendor/composer/autoload_static.php +15 -2
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/File/Cache/Base.php +49 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/File/Cache/CacheDefVO.php +17 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/File/Cache/LoadFromCache.php +35 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/File/Cache/StoreToCache.php +28 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/ApiBase.php +47 -3
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/Base.php +30 -7
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/ClassicPress.php +1 -1
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/Plugin.php +1 -1
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/RequestVO.php +1 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/WordPress.php +1 -1
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Patterns/Base.php +10 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Patterns/Retrieve.php +19 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/{Base.php → Whitelist/Base.php} +2 -10
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/ReportFalsePositive.php +34 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/{RequestVO.php → Whitelist/RequestVO.php} +6 -2
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/Retrieve.php +19 -0
- src/lib/vendor/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/WhitelistRetrieve.php +3 -8
- src/processors/admin_access_restriction.php +4 -4
- src/processors/adminaccess_whitelabel.php +1 -1
- src/processors/audit_trail.php +1 -1
- src/processors/audit_trail_auditor.php +9 -12
- src/processors/audit_trail_changetracking.php +1 -1
- src/processors/comments_filter.php +1 -1
- src/processors/events.php +11 -12
- src/processors/firewall.php +1 -1
- src/processors/hack_protect.php +2 -2
- src/processors/hackprotect_integrity.php +1 -1
- src/processors/hackprotect_scan_apc.php +3 -3
- src/processors/hackprotect_scan_base.php +31 -22
- src/processors/hackprotect_scan_mal.php +39 -12
- src/processors/hackprotect_scan_ptg.php +9 -9
- src/processors/hackprotect_scan_wcf.php +2 -2
- src/processors/hackprotect_scan_wpv.php +3 -3
- src/processors/hackprotect_scanner.php +4 -3
- src/processors/ips.php +22 -20
- src/processors/login_protect.php +11 -2
- src/processors/loginprotect_cooldown.php +5 -32
- src/processors/loginprotect_googlerecaptcha.php +1 -4
- src/processors/sessions.php +14 -12
- src/processors/traffic.php +1 -1
- src/processors/traffic_logger.php +2 -2
- src/processors/usermanagement_passwords.php +26 -12
- src/wizards/plugin.php +10 -5
- templates/twig/snippets/cooldown_login_block.twig +37 -0
- templates/twig/wpadmin_pages/base.twig +3 -3
- templates/twig/wpadmin_pages/insights/audit/audit_table.twig +2 -2
- templates/twig/wpadmin_pages/insights/insights/notices.twig +3 -2
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: https://icwp.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
-
* Version: 8.
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages
|
9 |
* Author: One Dollar Plugin
|
3 |
* Plugin Name: Shield Security
|
4 |
* Plugin URI: https://icwp.io/2f
|
5 |
* Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
|
6 |
+
* Version: 8.2.0
|
7 |
* Text Domain: wp-simple-firewall
|
8 |
* Domain Path: /languages
|
9 |
* Author: One Dollar Plugin
|
Binary file
|
@@ -1,15 +1,15 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WPSF v2.0\n"
|
4 |
-
"POT-Creation-Date: 2019-09-
|
5 |
-
"PO-Revision-Date: 2019-09-
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: en_GB\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.2.
|
13 |
"X-Poedit-KeywordsList: _wpsf__;gettext;gettext_noop;_wpsf_e;_n;_n:1,2;__;_e\n"
|
14 |
"X-Poedit-Basepath: ..\n"
|
15 |
"X-Poedit-SourceCharset: UTF-8\n"
|
@@ -37,8 +37,8 @@ msgstr ""
|
|
37 |
|
38 |
#: src/features/admin_access_restriction.php:351
|
39 |
#: src/features/admin_access_restriction.php:364
|
40 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
41 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
42 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:35
|
43 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:38
|
44 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:102
|
@@ -96,26 +96,26 @@ msgid "The Security Admin protection is not active."
|
|
96 |
msgstr ""
|
97 |
|
98 |
#: src/features/admin_access_restriction.php:420
|
99 |
-
#: src/features/autoupdates.php:168 src/features/hack_protect.php:
|
100 |
-
#: src/features/hack_protect.php:
|
101 |
-
#: src/features/hack_protect.php:
|
102 |
-
#: src/features/hack_protect.php:
|
103 |
-
#: src/features/insights.php:
|
104 |
-
#: src/features/insights.php:
|
105 |
-
#: src/features/insights.php:
|
106 |
#: src/features/lockdown.php:81 src/features/user_management.php:313
|
107 |
#, php-format
|
108 |
msgid "Go To %s"
|
109 |
msgstr ""
|
110 |
|
111 |
#: src/features/admin_access_restriction.php:420
|
112 |
-
#: src/features/autoupdates.php:168 src/features/hack_protect.php:
|
113 |
-
#: src/features/hack_protect.php:
|
114 |
-
#: src/features/hack_protect.php:
|
115 |
-
#: src/features/hack_protect.php:
|
116 |
-
#: src/features/insights.php:
|
117 |
-
#: src/features/user_management.php:313 src/lib/src/Modules/Base/Strings.php:
|
118 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
119 |
#: src/lib/src/Modules/Insights/Strings.php:66
|
120 |
msgid "Options"
|
121 |
msgstr ""
|
@@ -133,70 +133,70 @@ msgstr ""
|
|
133 |
msgid "You'll just need to authenticate first and try again."
|
134 |
msgstr ""
|
135 |
|
136 |
-
#: src/features/audit_trail.php:
|
137 |
#, php-format
|
138 |
msgid "[%s] Audit Trail Entries"
|
139 |
msgstr ""
|
140 |
|
141 |
-
#: src/features/audit_trail.php:
|
142 |
msgid "Activity Audit Log"
|
143 |
msgstr ""
|
144 |
|
145 |
-
#: src/features/audit_trail.php:
|
146 |
msgid "Track Activity: What, Who, When, Where"
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: src/features/audit_trail.php:
|
150 |
msgid "users"
|
151 |
msgstr ""
|
152 |
|
153 |
-
#: src/features/audit_trail.php:
|
154 |
msgid "plugins"
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: src/features/audit_trail.php:
|
158 |
msgid "themes"
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: src/features/audit_trail.php:
|
162 |
msgid "posts"
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: src/features/audit_trail.php:
|
166 |
msgid "emails"
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: src/features/audit_trail.php:
|
170 |
#: src/lib/src/Modules/AuditTrail/Strings.php:141
|
171 |
msgid "Audit Areas"
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: src/features/audit_trail.php:
|
175 |
msgid "All important events on your site are being logged"
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: src/features/audit_trail.php:
|
179 |
#, php-format
|
180 |
msgid "No areas are set to be audited: %s"
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: src/features/audit_trail.php:
|
184 |
msgid "Audit Events"
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: src/features/audit_trail.php:
|
188 |
#, php-format
|
189 |
msgid "Important events aren't being audited: %s"
|
190 |
msgstr ""
|
191 |
|
192 |
-
#: src/features/audit_trail.php:
|
193 |
-
#: src/features/insights.php:
|
194 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
195 |
#: src/wizards/plugin.php:486
|
196 |
msgid "Audit Trail"
|
197 |
msgstr ""
|
198 |
|
199 |
-
#: src/features/audit_trail.php:
|
200 |
#, php-format
|
201 |
msgid "Maximum Audit Trail entries limited to %s"
|
202 |
msgstr ""
|
@@ -204,7 +204,7 @@ msgstr ""
|
|
204 |
#: src/features/autoupdates.php:157 src/features/autoupdates.php:189
|
205 |
#: src/lib/src/Modules/Autoupdates/Strings.php:25
|
206 |
#: src/lib/src/Modules/HackGuard/Strings.php:226
|
207 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
208 |
msgid "Automatic Updates"
|
209 |
msgstr ""
|
210 |
|
@@ -273,28 +273,28 @@ msgstr ""
|
|
273 |
msgid "%s isn't automatically updated"
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: src/features/base.php:
|
277 |
#: src/wizards/plugin.php:482 src/wizards/plugin.php:515
|
278 |
-
#: src/wizards/plugin.php:550 src/wizards/plugin.php:
|
279 |
msgid "Disabled"
|
280 |
msgstr ""
|
281 |
|
282 |
-
#: src/features/base.php:
|
283 |
msgid ""
|
284 |
"Unfortunately your WordPress and/or PHP versions are too old to support this "
|
285 |
"feature."
|
286 |
msgstr ""
|
287 |
|
288 |
-
#: src/features/base.php:
|
289 |
msgid "You don't currently have permission to save settings."
|
290 |
msgstr ""
|
291 |
|
292 |
-
#: src/features/base.php:
|
293 |
msgid "Password values do not match."
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: src/features/base.php:
|
297 |
-
#: src/lib/src/Modules/Base/BaseModCon.php:
|
298 |
#: src/lib/src/Modules/HackGuard/Strings.php:195
|
299 |
#: src/lib/src/Modules/HackGuard/Strings.php:269
|
300 |
#: src/lib/src/Modules/LoginGuard/Strings.php:265
|
@@ -306,20 +306,20 @@ msgstr ""
|
|
306 |
msgid "Default"
|
307 |
msgstr ""
|
308 |
|
309 |
-
#: src/features/base.php:
|
310 |
msgid "For more information:"
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: src/features/base.php:
|
314 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
315 |
msgid "Support Forums"
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: src/features/base_wpsf.php:
|
319 |
msgid "Module Disabled"
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: src/features/base_wpsf.php:
|
323 |
msgid "All features of this module are completely disabled"
|
324 |
msgstr ""
|
325 |
|
@@ -389,16 +389,16 @@ msgid "You were blocked by the %s."
|
|
389 |
msgstr ""
|
390 |
|
391 |
#: src/features/firewall.php:86 src/features/firewall.php:98
|
392 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
393 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
394 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
395 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
396 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
397 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
398 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
399 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
400 |
#: src/lib/src/Modules/Firewall/Strings.php:24
|
401 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
402 |
msgid "Firewall"
|
403 |
msgstr ""
|
404 |
|
@@ -426,298 +426,298 @@ msgstr ""
|
|
426 |
msgid "Firewall rules aren't applied to admins"
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: src/features/hack_protect.php:
|
430 |
#, php-format
|
431 |
msgid "%s per day"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: src/features/hack_protect.php:
|
435 |
msgid "Re-install First"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: src/features/hack_protect.php:
|
439 |
msgid "Then Activate"
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: src/features/hack_protect.php:
|
443 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
444 |
#: src/lib/src/Tables/Build/ScanBase.php:62
|
445 |
#: src/lib/src/Tables/Build/Sessions.php:68
|
446 |
#: src/lib/src/Tables/Build/Traffic.php:109
|
447 |
msgid "Yes"
|
448 |
msgstr ""
|
449 |
|
450 |
-
#: src/features/hack_protect.php:
|
451 |
msgid "Re-Install It"
|
452 |
msgstr ""
|
453 |
|
454 |
-
#: src/features/hack_protect.php:
|
455 |
msgid "Activate Only"
|
456 |
msgstr ""
|
457 |
|
458 |
-
#: src/features/hack_protect.php:
|
459 |
msgid "Cancel"
|
460 |
msgstr ""
|
461 |
|
462 |
-
#: src/features/hack_protect.php:
|
463 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
464 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
465 |
#: src/processors/hack_protect.php:87 src/processors/hack_protect.php:117
|
466 |
msgid "Never"
|
467 |
msgstr ""
|
468 |
|
469 |
-
#: src/features/hack_protect.php:
|
470 |
#, php-format
|
471 |
msgid "Last Scan Time: %s"
|
472 |
msgstr ""
|
473 |
|
474 |
-
#: src/features/hack_protect.php:
|
475 |
#, php-format
|
476 |
msgid ""
|
477 |
"Sorry, this feature is not available because we cannot write to disk at this "
|
478 |
"location: \"%s\""
|
479 |
msgstr ""
|
480 |
|
481 |
-
#: src/features/hack_protect.php:
|
482 |
#, php-format
|
483 |
msgid "Not available because the %s extension is not available."
|
484 |
msgstr ""
|
485 |
|
486 |
-
#: src/features/hack_protect.php:
|
487 |
msgid ""
|
488 |
"Not available because PHP/WordPress doesn't have direct filesystem access."
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: src/features/hack_protect.php:
|
492 |
#, php-format
|
493 |
msgid "The %s file isn't writable and so can't be further protected."
|
494 |
msgstr ""
|
495 |
|
496 |
-
#: src/features/hack_protect.php:
|
497 |
msgid "Scans"
|
498 |
msgstr ""
|
499 |
|
500 |
-
#: src/features/hack_protect.php:
|
501 |
msgid "Core File scanner is not enabled."
|
502 |
msgstr ""
|
503 |
|
504 |
-
#: src/features/hack_protect.php:
|
505 |
msgid "Automatic WordPress Core File scanner should be turned-on."
|
506 |
msgstr ""
|
507 |
|
508 |
-
#: src/features/hack_protect.php:
|
509 |
msgid "Modified WordPress core files found."
|
510 |
msgstr ""
|
511 |
|
512 |
-
#: src/features/hack_protect.php:
|
513 |
-
#: src/features/hack_protect.php:
|
514 |
-
#: src/features/hack_protect.php:
|
515 |
msgid "Run Scan"
|
516 |
msgstr ""
|
517 |
|
518 |
-
#: src/features/hack_protect.php:
|
519 |
msgid "Scan WP core files and repair any files that are flagged as modified."
|
520 |
msgstr ""
|
521 |
|
522 |
-
#: src/features/hack_protect.php:
|
523 |
msgid "Unrecognised File scanner is not enabled."
|
524 |
msgstr ""
|
525 |
|
526 |
-
#: src/features/hack_protect.php:
|
527 |
msgid "Automatic scanning for non-WordPress core files is recommended."
|
528 |
msgstr ""
|
529 |
|
530 |
-
#: src/features/hack_protect.php:
|
531 |
msgid "Unrecognised files found in WordPress Core directory."
|
532 |
msgstr ""
|
533 |
|
534 |
-
#: src/features/hack_protect.php:
|
535 |
msgid ""
|
536 |
"Scan and remove any files that are not meant to be in the WP core "
|
537 |
"directories."
|
538 |
msgstr ""
|
539 |
|
540 |
-
#: src/features/hack_protect.php:
|
541 |
msgid "Automatic Plugin/Themes Guard is not enabled."
|
542 |
msgstr ""
|
543 |
|
544 |
-
#: src/features/hack_protect.php:
|
545 |
msgid "Automatic detection of plugin/theme modifications is recommended."
|
546 |
msgstr ""
|
547 |
|
548 |
-
#: src/features/hack_protect.php:
|
549 |
msgid "A plugin/theme was found to have been modified."
|
550 |
msgstr ""
|
551 |
|
552 |
-
#: src/features/hack_protect.php:
|
553 |
msgid "Reviewing modifications to your plugins/themes is recommended."
|
554 |
msgstr ""
|
555 |
|
556 |
-
#: src/features/hack_protect.php:
|
557 |
msgid "Vulnerability Scanner is not enabled."
|
558 |
msgstr ""
|
559 |
|
560 |
-
#: src/features/hack_protect.php:
|
561 |
msgid "Automatic detection of vulnerabilities is recommended."
|
562 |
msgstr ""
|
563 |
|
564 |
-
#: src/features/hack_protect.php:
|
565 |
msgid "At least 1 item has known vulnerabilities."
|
566 |
msgstr ""
|
567 |
|
568 |
-
#: src/features/hack_protect.php:
|
569 |
msgid ""
|
570 |
"Items with known vulnerabilities should be updated, removed, or replaced."
|
571 |
msgstr ""
|
572 |
|
573 |
-
#: src/features/hack_protect.php:
|
574 |
msgid "Abandoned Plugins Scanner is not enabled."
|
575 |
msgstr ""
|
576 |
|
577 |
-
#: src/features/hack_protect.php:
|
578 |
msgid "Automatic detection of abandoned plugins is recommended."
|
579 |
msgstr ""
|
580 |
|
581 |
-
#: src/features/hack_protect.php:
|
582 |
msgid "At least 1 plugin on your site is abandoned."
|
583 |
msgstr ""
|
584 |
|
585 |
-
#: src/features/hack_protect.php:
|
586 |
msgid ""
|
587 |
"Plugins that have been abandoned represent a potential risk to your site."
|
588 |
msgstr ""
|
589 |
|
590 |
-
#: src/features/hack_protect.php:
|
591 |
-
#: src/features/hack_protect.php:
|
592 |
#, php-format
|
593 |
msgid "%s Scanner is not enabled."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: src/features/hack_protect.php:
|
597 |
msgid "Automatic detection of Malware is recommended."
|
598 |
msgstr ""
|
599 |
|
600 |
-
#: src/features/hack_protect.php:
|
601 |
msgid "At least 1 file with potential Malware has been discovered."
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: src/features/hack_protect.php:
|
605 |
msgid ""
|
606 |
"Files identified as potential malware should be examined as soon as possible."
|
607 |
msgstr ""
|
608 |
|
609 |
-
#: src/features/hack_protect.php:
|
610 |
#: src/lib/src/Modules/HackGuard/Strings.php:94
|
611 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
612 |
msgid "Hack Guard"
|
613 |
msgstr ""
|
614 |
|
615 |
-
#: src/features/hack_protect.php:
|
616 |
msgid "Threats/Intrusions Detection & Repair"
|
617 |
msgstr ""
|
618 |
|
619 |
-
#: src/features/hack_protect.php:
|
620 |
msgid "Scan Frequency"
|
621 |
msgstr ""
|
622 |
|
623 |
-
#: src/features/hack_protect.php:
|
624 |
msgid "Automatic scanners run more than once per day"
|
625 |
msgstr ""
|
626 |
|
627 |
-
#: src/features/hack_protect.php:
|
628 |
msgid "Automatic scanners only run once per day"
|
629 |
msgstr ""
|
630 |
|
631 |
-
#: src/features/hack_protect.php:
|
632 |
msgid "WP Core File Scan"
|
633 |
msgstr ""
|
634 |
|
635 |
-
#: src/features/hack_protect.php:
|
636 |
msgid "Core files scanned regularly for hacks"
|
637 |
msgstr ""
|
638 |
|
639 |
-
#: src/features/hack_protect.php:
|
640 |
msgid "Core files are never scanned for hacks!"
|
641 |
msgstr ""
|
642 |
|
643 |
-
#: src/features/hack_protect.php:
|
644 |
msgid "WP Core File Repair"
|
645 |
msgstr ""
|
646 |
|
647 |
-
#: src/features/hack_protect.php:
|
648 |
msgid "Core files are automatically repaired"
|
649 |
msgstr ""
|
650 |
|
651 |
-
#: src/features/hack_protect.php:
|
652 |
msgid "Core files aren't automatically repaired!"
|
653 |
msgstr ""
|
654 |
|
655 |
-
#: src/features/hack_protect.php:
|
656 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
657 |
#: src/lib/src/Modules/HackGuard/Strings.php:26
|
658 |
#: src/lib/src/Modules/HackGuard/Strings.php:118
|
659 |
msgid "Unrecognised Files"
|
660 |
msgstr ""
|
661 |
|
662 |
-
#: src/features/hack_protect.php:
|
663 |
msgid "Core directories scanned regularly for unrecognised files"
|
664 |
msgstr ""
|
665 |
|
666 |
-
#: src/features/hack_protect.php:
|
667 |
msgid "WP Core is never scanned for unrecognised files!"
|
668 |
msgstr ""
|
669 |
|
670 |
-
#: src/features/hack_protect.php:
|
671 |
msgid "Unrecognised Files Removal"
|
672 |
msgstr ""
|
673 |
|
674 |
-
#: src/features/hack_protect.php:
|
675 |
msgid "Unrecognised files are automatically removed"
|
676 |
msgstr ""
|
677 |
|
678 |
-
#: src/features/hack_protect.php:
|
679 |
msgid "Unrecognised files aren't automatically removed!"
|
680 |
msgstr ""
|
681 |
|
682 |
-
#: src/features/hack_protect.php:
|
683 |
msgid "Vulnerability Scan"
|
684 |
msgstr ""
|
685 |
|
686 |
-
#: src/features/hack_protect.php:
|
687 |
msgid "Regularly scanning for known vulnerabilities"
|
688 |
msgstr ""
|
689 |
|
690 |
-
#: src/features/hack_protect.php:
|
691 |
msgid "Plugins/Themes never scanned for vulnerabilities!"
|
692 |
msgstr ""
|
693 |
|
694 |
-
#: src/features/hack_protect.php:
|
695 |
msgid "Auto Update"
|
696 |
msgstr ""
|
697 |
|
698 |
-
#: src/features/hack_protect.php:
|
699 |
msgid "Vulnerable items are automatically updated"
|
700 |
msgstr ""
|
701 |
|
702 |
-
#: src/features/hack_protect.php:
|
703 |
msgid "Vulnerable items aren't automatically updated!"
|
704 |
msgstr ""
|
705 |
|
706 |
-
#: src/features/hack_protect.php:
|
707 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
708 |
#: src/lib/src/Modules/HackGuard/Strings.php:24
|
709 |
msgid "Plugin/Theme Guard"
|
710 |
msgstr ""
|
711 |
|
712 |
-
#: src/features/hack_protect.php:
|
713 |
msgid "Plugins and Themes are guarded against tampering"
|
714 |
msgstr ""
|
715 |
|
716 |
-
#: src/features/hack_protect.php:
|
717 |
msgid "Plugins and Themes are never scanned for tampering!"
|
718 |
msgstr ""
|
719 |
|
720 |
-
#: src/features/hack_protect.php:
|
721 |
#, php-format
|
722 |
msgid "%s Scanner is enabled."
|
723 |
msgstr ""
|
@@ -730,7 +730,7 @@ msgstr ""
|
|
730 |
msgid "Protect Visitors With Powerful HTTP Headers"
|
731 |
msgstr ""
|
732 |
|
733 |
-
#: src/features/headers.php:147 src/lib/src/Modules/Plugin/Strings.php:
|
734 |
msgid "HTTP Headers"
|
735 |
msgstr ""
|
736 |
|
@@ -754,143 +754,147 @@ msgstr ""
|
|
754 |
msgid "Content Security Policies aren't active"
|
755 |
msgstr ""
|
756 |
|
757 |
-
#: src/features/insights.php:
|
758 |
msgid "Audit Trail Filters"
|
759 |
msgstr ""
|
760 |
|
761 |
-
#: src/features/insights.php:
|
762 |
msgid "Providing a username will cause the 'logged-in' filter to be ignored."
|
763 |
msgstr ""
|
764 |
|
765 |
-
#: src/features/insights.php:
|
766 |
msgid "Exclude Your Current IP"
|
767 |
msgstr ""
|
768 |
|
769 |
-
#: src/features/insights.php:
|
770 |
msgid "Exclude Your IP From Results"
|
771 |
msgstr ""
|
772 |
|
773 |
-
#: src/features/insights.php:
|
774 |
msgid "Context"
|
775 |
msgstr ""
|
776 |
|
777 |
-
#: src/features/insights.php:
|
|
|
|
|
|
|
|
|
778 |
msgid "show results that occurred after"
|
779 |
msgstr ""
|
780 |
|
781 |
-
#: src/features/insights.php:
|
782 |
msgid "show results that occurred before"
|
783 |
msgstr ""
|
784 |
|
785 |
-
#: src/features/insights.php:
|
786 |
#, php-format
|
787 |
msgid "Offenses required for IP block: %s"
|
788 |
msgstr ""
|
789 |
|
790 |
-
#: src/features/insights.php:
|
791 |
#, php-format
|
792 |
msgid "Black listed IPs auto-expire after: %s"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: src/features/insights.php:
|
796 |
msgid "IP Whitelist"
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: src/features/insights.php:
|
800 |
msgid "IP Blacklist"
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: src/features/insights.php:
|
804 |
#, php-format
|
805 |
msgid "IP addresses that are never blocked by %s."
|
806 |
msgstr ""
|
807 |
|
808 |
-
#: src/features/insights.php:
|
809 |
#, php-format
|
810 |
msgid "IP addresses that have tripped %s defenses."
|
811 |
msgstr ""
|
812 |
|
813 |
-
#: src/features/insights.php:
|
814 |
msgid "Enter IP address to block"
|
815 |
msgstr ""
|
816 |
|
817 |
-
#: src/features/insights.php:
|
818 |
msgid "Enter IP address to whitelist"
|
819 |
msgstr ""
|
820 |
|
821 |
-
#: src/features/insights.php:
|
822 |
msgid "Label for IP"
|
823 |
msgstr ""
|
824 |
|
825 |
-
#: src/features/insights.php:
|
826 |
msgid "New IP"
|
827 |
msgstr ""
|
828 |
|
829 |
-
#: src/features/insights.php:
|
830 |
msgid "Block IP"
|
831 |
msgstr ""
|
832 |
|
833 |
-
#: src/features/insights.php:
|
834 |
msgid "Administrator Notes"
|
835 |
msgstr ""
|
836 |
|
837 |
-
#: src/features/insights.php:
|
838 |
msgid "Use this feature to make ongoing notes and to-dos"
|
839 |
msgstr ""
|
840 |
|
841 |
-
#: src/features/insights.php:
|
842 |
msgid "Add Note"
|
843 |
msgstr ""
|
844 |
|
845 |
-
#: src/features/insights.php:
|
846 |
msgid "New Note"
|
847 |
msgstr ""
|
848 |
|
849 |
-
#: src/features/insights.php:
|
850 |
msgid "Enter new note here"
|
851 |
msgstr ""
|
852 |
|
853 |
-
#: src/features/insights.php:
|
854 |
msgid "Traffic Table Filters"
|
855 |
msgstr ""
|
856 |
|
857 |
-
#: src/features/insights.php:
|
858 |
msgid "Traffic Watch"
|
859 |
msgstr ""
|
860 |
|
861 |
-
#: src/features/insights.php:
|
862 |
msgid "Watch and review requests to your site"
|
863 |
msgstr ""
|
864 |
|
865 |
-
#: src/features/insights.php:
|
866 |
#: src/lib/src/Tables/Render/Traffic.php:14
|
867 |
msgid "Response"
|
868 |
msgstr ""
|
869 |
|
870 |
-
#: src/features/insights.php:
|
871 |
msgid "Page/Path Contains"
|
872 |
msgstr ""
|
873 |
|
874 |
-
#: src/features/insights.php:
|
875 |
msgid "Sessions Table Filters"
|
876 |
msgstr ""
|
877 |
|
878 |
-
#: src/features/insights.php:
|
879 |
msgid "User Sessions"
|
880 |
msgstr ""
|
881 |
|
882 |
-
#: src/features/insights.php:
|
883 |
msgid "Review and manage current user sessions"
|
884 |
msgstr ""
|
885 |
|
886 |
-
#: src/features/insights.php:
|
887 |
msgid ""
|
888 |
"Some sessions may have expired but haven't been automatically cleaned from "
|
889 |
"the database yet"
|
890 |
msgstr ""
|
891 |
|
892 |
-
#: src/features/insights.php:
|
893 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
894 |
#: src/lib/src/Modules/UserManagement/Strings.php:16
|
895 |
#: src/lib/src/Tables/Render/AdminNotes.php:31
|
896 |
#: src/processors/loginprotect_intentprovider_backup.php:164
|
@@ -900,127 +904,127 @@ msgstr ""
|
|
900 |
msgid "Username"
|
901 |
msgstr ""
|
902 |
|
903 |
-
#: src/features/insights.php:
|
904 |
msgid "Recent Events Log"
|
905 |
msgstr ""
|
906 |
|
907 |
-
#: src/features/insights.php:
|
908 |
msgid "Security Notices"
|
909 |
msgstr ""
|
910 |
|
911 |
-
#: src/features/insights.php:
|
912 |
msgid "Potential security issues on your site right now"
|
913 |
msgstr ""
|
914 |
|
915 |
-
#: src/features/insights.php:
|
916 |
msgid "Plugin Configuration Summary"
|
917 |
msgstr ""
|
918 |
|
919 |
-
#: src/features/insights.php:
|
920 |
msgid "click to toggle"
|
921 |
msgstr ""
|
922 |
|
923 |
-
#: src/features/insights.php:
|
924 |
msgid "Key"
|
925 |
msgstr ""
|
926 |
|
927 |
-
#: src/features/insights.php:
|
928 |
msgid "Positive Security"
|
929 |
msgstr ""
|
930 |
|
931 |
-
#: src/features/insights.php:
|
932 |
msgid "Potential Warning"
|
933 |
msgstr ""
|
934 |
|
935 |
-
#: src/features/insights.php:
|
936 |
msgid "Potential Danger"
|
937 |
msgstr ""
|
938 |
|
939 |
-
#: src/features/insights.php:
|
940 |
msgid "Information"
|
941 |
msgstr ""
|
942 |
|
943 |
-
#: src/features/insights.php:
|
944 |
msgid "Settings"
|
945 |
msgstr ""
|
946 |
|
947 |
-
#: src/features/insights.php:
|
948 |
msgid "Overview"
|
949 |
msgstr ""
|
950 |
|
951 |
-
#: src/features/insights.php:
|
952 |
msgid "IP Lists"
|
953 |
msgstr ""
|
954 |
|
955 |
-
#: src/features/insights.php:
|
956 |
#: src/lib/src/Modules/AuditTrail/Strings.php:90
|
957 |
msgid "Users"
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: src/features/insights.php:
|
961 |
msgid "Pro"
|
962 |
msgstr ""
|
963 |
|
964 |
-
#: src/features/insights.php:
|
965 |
msgid "Traffic"
|
966 |
msgstr ""
|
967 |
|
968 |
-
#: src/features/insights.php:
|
969 |
msgid "Notes"
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: src/features/insights.php:
|
973 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
974 |
msgid "Import"
|
975 |
msgstr ""
|
976 |
|
977 |
-
#: src/features/insights.php:
|
978 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
979 |
msgid "Export"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: src/features/insights.php:
|
983 |
msgid "Downloading file, please wait..."
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: src/features/insights.php:
|
987 |
msgid "There was a problem downloading the file."
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: src/features/insights.php:
|
991 |
msgid "Please select an action to perform."
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: src/features/insights.php:
|
995 |
msgid "Are you sure?"
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: src/features/insights.php:
|
999 |
msgid "Site"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: src/features/insights.php:
|
1003 |
msgid "SSL certificate for this site has expired."
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: src/features/insights.php:
|
1007 |
#, php-format
|
1008 |
msgid "SSL certificate will expire soon (in %s days)"
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: src/features/insights.php:
|
1012 |
msgid "Check or renew your SSL certificate."
|
1013 |
msgstr ""
|
1014 |
|
1015 |
-
#: src/features/insights.php:
|
1016 |
msgid "DB Password appears to be weak."
|
1017 |
msgstr ""
|
1018 |
|
1019 |
-
#: src/features/insights.php:
|
1020 |
msgid "The database password should be strong."
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: src/features/insights.php:
|
1024 |
#: src/lib/src/Modules/AuditTrail/Strings.php:91
|
1025 |
#: src/lib/src/Modules/AuditTrail/Strings.php:213
|
1026 |
#: src/lib/src/Modules/AuditTrail/Strings.php:214
|
@@ -1029,35 +1033,35 @@ msgstr ""
|
|
1029 |
msgid "Plugins"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
-
#: src/features/insights.php:
|
1033 |
msgid "Inactive"
|
1034 |
msgstr ""
|
1035 |
|
1036 |
-
#: src/features/insights.php:
|
1037 |
#, php-format
|
1038 |
msgid "%s inactive plugin(s)"
|
1039 |
msgstr ""
|
1040 |
|
1041 |
-
#: src/features/insights.php:
|
1042 |
msgid "Unused plugins should be removed."
|
1043 |
msgstr ""
|
1044 |
|
1045 |
-
#: src/features/insights.php:
|
1046 |
#, php-format
|
1047 |
msgid "%s plugin update(s)"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: src/features/insights.php:
|
1051 |
-
#: src/features/insights.php:
|
1052 |
msgid "Updates"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: src/features/insights.php:
|
1056 |
-
#: src/features/insights.php:
|
1057 |
msgid "Updates should be applied as early as possible."
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: src/features/insights.php:
|
1061 |
#: src/lib/src/Modules/AuditTrail/Strings.php:92
|
1062 |
#: src/lib/src/Modules/AuditTrail/Strings.php:219
|
1063 |
#: src/lib/src/Modules/AuditTrail/Strings.php:220
|
@@ -1066,90 +1070,90 @@ msgstr ""
|
|
1066 |
msgid "Themes"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
-
#: src/features/insights.php:
|
1070 |
#, php-format
|
1071 |
msgid "%s inactive themes(s)"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: src/features/insights.php:
|
1075 |
msgid "Unused themes should be removed."
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: src/features/insights.php:
|
1079 |
#, php-format
|
1080 |
msgid "%s theme update(s)"
|
1081 |
msgstr ""
|
1082 |
|
1083 |
-
#: src/features/insights.php:
|
1084 |
msgid "WordPress Core"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: src/features/insights.php:
|
1088 |
msgid "WordPress Core has an update available."
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: src/features/insights.php:
|
1092 |
msgid "WordPress does not automatically install updates."
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: src/features/insights.php:
|
1096 |
msgid "Minor WordPress upgrades should be applied automatically."
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: src/features/insights.php:
|
1100 |
msgid "Login Blocks"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: src/features/insights.php:
|
1104 |
msgid "Total login attempts blocked."
|
1105 |
msgstr ""
|
1106 |
|
1107 |
-
#: src/features/insights.php:
|
1108 |
msgid "Firewall Blocks"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
-
#: src/features/insights.php:
|
1112 |
msgid "Total requests blocked by firewall rules."
|
1113 |
msgstr ""
|
1114 |
|
1115 |
-
#: src/features/insights.php:
|
1116 |
msgid "Comment Blocks"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: src/features/insights.php:
|
1120 |
msgid "Total SPAM comments blocked."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: src/features/insights.php:
|
1124 |
#: src/lib/src/Tables/Render/IpBlack.php:14
|
1125 |
msgid "Offenses"
|
1126 |
msgstr ""
|
1127 |
|
1128 |
-
#: src/features/insights.php:
|
1129 |
msgid "Total offenses against the site."
|
1130 |
msgstr ""
|
1131 |
|
1132 |
-
#: src/features/insights.php:
|
1133 |
msgid "IP Blocks"
|
1134 |
msgstr ""
|
1135 |
|
1136 |
-
#: src/features/insights.php:
|
1137 |
msgid "Total connections blocked/killed after too many offenses."
|
1138 |
msgstr ""
|
1139 |
|
1140 |
-
#: src/features/insights.php:
|
1141 |
msgid "Blacklist IPs"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
-
#: src/features/insights.php:
|
1145 |
msgid "Current IP addresses with offenses against the site."
|
1146 |
msgstr ""
|
1147 |
|
1148 |
-
#: src/features/insights.php:
|
1149 |
msgid "Not yet recorded"
|
1150 |
msgstr ""
|
1151 |
|
1152 |
-
#: src/features/ips.php:
|
1153 |
#: src/lib/src/Modules/HackGuard/Strings.php:204
|
1154 |
#: src/lib/src/Modules/Headers/Strings.php:140
|
1155 |
#: src/lib/src/Modules/LoginGuard/Strings.php:81
|
@@ -1159,9 +1163,9 @@ msgstr ""
|
|
1159 |
#: src/lib/src/Modules/LoginGuard/Strings.php:213
|
1160 |
#: src/lib/src/Modules/LoginGuard/Strings.php:221
|
1161 |
#: src/lib/src/Modules/LoginGuard/Strings.php:235
|
1162 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1163 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1164 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1165 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:120
|
1166 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:139
|
1167 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:146
|
@@ -1172,33 +1176,33 @@ msgstr ""
|
|
1172 |
msgid "Note"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#: src/features/ips.php:
|
1176 |
msgid "IP blocking is turned-off because the offenses limit is set to 0."
|
1177 |
msgstr ""
|
1178 |
|
1179 |
-
#: src/features/ips.php:
|
1180 |
msgid "Since the offenses limit is set to 0, these options have no effect."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
-
#: src/features/ips.php:
|
1184 |
msgid ""
|
1185 |
"Your User Agent appears to be empty. We recommend not turning on this option."
|
1186 |
msgstr ""
|
1187 |
|
1188 |
-
#: src/features/ips.php:
|
1189 |
#: src/lib/src/Modules/Firewall/Strings.php:138
|
1190 |
#: src/lib/src/Modules/HackGuard/Strings.php:259
|
1191 |
#: src/lib/src/Modules/HackGuard/Strings.php:283
|
1192 |
#: src/lib/src/Modules/HackGuard/Strings.php:284
|
1193 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:
|
1194 |
#: src/lib/src/Modules/IPs/Strings.php:66
|
1195 |
#: src/lib/src/Modules/Lockdown/Strings.php:130
|
1196 |
#: src/lib/src/Modules/Lockdown/Strings.php:143
|
1197 |
#: src/lib/src/Modules/Plugin/AdminNotices.php:88
|
1198 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1199 |
#: src/lib/src/Modules/Traffic/Strings.php:54
|
1200 |
#: src/processors/hackprotect_scan_apc.php:100
|
1201 |
-
#: src/processors/hackprotect_scan_mal.php:
|
1202 |
#: src/processors/hackprotect_scan_ptg.php:617
|
1203 |
#: src/processors/hackprotect_scan_ufc.php:85
|
1204 |
#: src/processors/hackprotect_scan_wcf.php:71
|
@@ -1208,30 +1212,23 @@ msgstr ""
|
|
1208 |
msgid "Warning"
|
1209 |
msgstr ""
|
1210 |
|
1211 |
-
#: src/features/ips.php:
|
1212 |
msgid ""
|
1213 |
"Repeated login attempts that fail will result in a complete ban of your IP "
|
1214 |
"Address."
|
1215 |
msgstr ""
|
1216 |
|
1217 |
-
#: src/features/ips.php:
|
1218 |
#, php-format
|
1219 |
msgid ""
|
1220 |
"You have %s remaining offenses(s) against this site and then your IP address "
|
1221 |
"will be completely blocked."
|
1222 |
msgstr ""
|
1223 |
|
1224 |
-
#: src/features/ips.php:
|
1225 |
msgid "Seriously, stop repeating what you are doing or you will be locked out."
|
1226 |
msgstr ""
|
1227 |
|
1228 |
-
#: src/features/ips.php:185
|
1229 |
-
#, php-format
|
1230 |
-
msgid ""
|
1231 |
-
"Sorry, the %s feature may not be disabled while there are IP addresses in "
|
1232 |
-
"the White List"
|
1233 |
-
msgstr ""
|
1234 |
-
|
1235 |
#: src/features/license.php:116
|
1236 |
msgid "Automatic license verification failed."
|
1237 |
msgstr ""
|
@@ -1254,11 +1251,11 @@ msgstr ""
|
|
1254 |
msgid "All attempts to verify Shield Pro license have failed."
|
1255 |
msgstr ""
|
1256 |
|
1257 |
-
#: src/features/license.php:
|
1258 |
msgid "Not Active"
|
1259 |
msgstr ""
|
1260 |
|
1261 |
-
#: src/features/lockdown.php:70 src/lib/src/Modules/Plugin/Strings.php:
|
1262 |
msgid "WP Lockdown"
|
1263 |
msgstr ""
|
1264 |
|
@@ -1290,7 +1287,7 @@ msgstr ""
|
|
1290 |
msgid "File editing is permitted through WP admin"
|
1291 |
msgstr ""
|
1292 |
|
1293 |
-
#: src/features/lockdown.php:124 src/lib/src/Modules/Events/Strings.php:
|
1294 |
msgid "XML-RPC"
|
1295 |
msgstr ""
|
1296 |
|
@@ -1370,183 +1367,182 @@ msgstr ""
|
|
1370 |
msgid "Administrators"
|
1371 |
msgstr ""
|
1372 |
|
1373 |
-
#: src/features/login_protect.php:
|
1374 |
msgid "I'm a human."
|
1375 |
msgstr ""
|
1376 |
|
1377 |
-
#: src/features/login_protect.php:
|
1378 |
msgid "Please check the box to show us you're a human."
|
1379 |
msgstr ""
|
1380 |
|
1381 |
-
#: src/features/login_protect.php:
|
1382 |
#, php-format
|
1383 |
msgid "Support for login protection with %s is a Pro-only feature."
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: src/features/login_protect.php:
|
1387 |
msgid ""
|
1388 |
"2FA by email demands that your WP site is properly configured to send email."
|
1389 |
msgstr ""
|
1390 |
|
1391 |
-
#: src/features/login_protect.php:
|
1392 |
msgid ""
|
1393 |
"This is a common problem and you may get locked out in the future if you "
|
1394 |
"ignore this."
|
1395 |
msgstr ""
|
1396 |
|
1397 |
-
#: src/features/login_protect.php:
|
1398 |
#: src/lib/src/Modules/Plugin/AdminNotices.php:194
|
1399 |
#: src/processors/lockdown.php:96
|
1400 |
msgid "Learn More."
|
1401 |
msgstr ""
|
1402 |
|
1403 |
-
#: src/features/login_protect.php:
|
1404 |
#: src/lib/src/Modules/LoginGuard/Strings.php:71
|
1405 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1406 |
#: src/wizards/plugin.php:554
|
1407 |
msgid "Login Guard"
|
1408 |
msgstr ""
|
1409 |
|
1410 |
-
#: src/features/login_protect.php:
|
1411 |
msgid "Brute Force Protection & Identity Verification"
|
1412 |
msgstr ""
|
1413 |
|
1414 |
-
#: src/features/login_protect.php:
|
1415 |
msgid "Brute Force Login"
|
1416 |
msgstr ""
|
1417 |
|
1418 |
-
#: src/features/login_protect.php:
|
1419 |
msgid "Login forms are protected against bot attacks"
|
1420 |
msgstr ""
|
1421 |
|
1422 |
-
#: src/features/login_protect.php:
|
1423 |
msgid "Login forms are not protected against brute force bot attacks"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
-
#: src/features/login_protect.php:
|
1427 |
msgid "Bot User Register"
|
1428 |
msgstr ""
|
1429 |
|
1430 |
-
#: src/features/login_protect.php:
|
1431 |
msgid "Registration forms are protected against bot attacks"
|
1432 |
msgstr ""
|
1433 |
|
1434 |
-
#: src/features/login_protect.php:
|
1435 |
msgid "Registration forms are not protected against automated bots"
|
1436 |
msgstr ""
|
1437 |
|
1438 |
-
#: src/features/login_protect.php:
|
1439 |
msgid "Brute Force Lost Password"
|
1440 |
msgstr ""
|
1441 |
|
1442 |
-
#: src/features/login_protect.php:
|
1443 |
msgid "Lost Password forms are protected against bot attacks"
|
1444 |
msgstr ""
|
1445 |
|
1446 |
-
#: src/features/login_protect.php:
|
1447 |
msgid "Lost Password forms are not protected against automated bots"
|
1448 |
msgstr ""
|
1449 |
|
1450 |
-
#: src/features/login_protect.php:
|
1451 |
msgid "Identity Verification"
|
1452 |
msgstr ""
|
1453 |
|
1454 |
-
#: src/features/login_protect.php:
|
1455 |
msgid "At least 1 2FA option is enabled"
|
1456 |
msgstr ""
|
1457 |
|
1458 |
-
#: src/features/login_protect.php:
|
1459 |
msgid "No 2FA options, such as Google Authenticator, are active"
|
1460 |
msgstr ""
|
1461 |
|
1462 |
-
#: src/features/plugin.php:
|
1463 |
msgid "Options imported successfully"
|
1464 |
msgstr ""
|
1465 |
|
1466 |
-
#: src/features/plugin.php:
|
1467 |
-
#: src/lib/src/Modules/Plugin/Components/PluginBadge.php:76
|
1468 |
-
#, php-format
|
1469 |
-
msgid "This Site Is Protected By %s"
|
1470 |
-
msgstr ""
|
1471 |
-
|
1472 |
-
#: src/features/plugin.php:758 src/lib/src/Modules/Plugin/Strings.php:374
|
1473 |
#: src/processors/plugin_importexport.php:63
|
1474 |
msgid "General Settings"
|
1475 |
msgstr ""
|
1476 |
|
1477 |
-
#: src/features/plugin.php:
|
1478 |
#, php-format
|
1479 |
msgid "General %s Settings"
|
1480 |
msgstr ""
|
1481 |
|
1482 |
-
#: src/features/plugin.php:
|
1483 |
msgid "Visitor IP"
|
1484 |
msgstr ""
|
1485 |
|
1486 |
-
#: src/features/plugin.php:
|
1487 |
#, php-format
|
1488 |
msgid "Visitor IP address source is: %s"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
-
#: src/features/plugin.php:
|
1492 |
msgid "Reporting Email"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
-
#: src/features/plugin.php:
|
1496 |
#, php-format
|
1497 |
msgid "Email address for reports set to: %s"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
-
#: src/features/plugin.php:
|
1501 |
#, php-format
|
1502 |
msgid "No address provided - defaulting to: %s"
|
1503 |
msgstr ""
|
1504 |
|
1505 |
-
#: src/features/plugin.php:
|
1506 |
msgid "reCAPTCHA"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: src/features/plugin.php:
|
1510 |
msgid "Google reCAPTCHA keys have been provided"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#: src/features/plugin.php:
|
1514 |
msgid "Google reCAPTCHA keys haven't been provided"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
-
#: src/features/traffic.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
1518 |
#, php-format
|
1519 |
msgid "%s is a Pro-only feature."
|
1520 |
msgstr ""
|
1521 |
|
1522 |
-
#: src/features/traffic.php:
|
1523 |
-
msgid ""
|
1524 |
-
"Traffic Watcher will not run because visitor IP address detection is not "
|
1525 |
-
"correctly configured."
|
1526 |
msgstr ""
|
1527 |
|
1528 |
#: src/features/user_management.php:143
|
1529 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1530 |
msgid "Very Weak"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
#: src/features/user_management.php:144
|
1534 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1535 |
msgid "Weak"
|
1536 |
msgstr ""
|
1537 |
|
1538 |
#: src/features/user_management.php:145
|
1539 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
|
|
1540 |
msgid "Medium"
|
1541 |
msgstr ""
|
1542 |
|
1543 |
#: src/features/user_management.php:146
|
1544 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1545 |
msgid "Strong"
|
1546 |
msgstr ""
|
1547 |
|
1548 |
#: src/features/user_management.php:147
|
1549 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1550 |
msgid "Very Strong"
|
1551 |
msgstr ""
|
1552 |
|
@@ -1559,6 +1555,7 @@ msgid "Default 'admin' user should be disabled or removed."
|
|
1559 |
msgstr ""
|
1560 |
|
1561 |
#: src/features/user_management.php:310 src/features/user_management.php:380
|
|
|
1562 |
#: src/lib/src/Modules/UserManagement/Strings.php:45
|
1563 |
#: src/lib/src/Modules/UserManagement/Strings.php:46
|
1564 |
msgid "Password Policies"
|
@@ -1573,7 +1570,7 @@ msgid "Password policies should be turned-on."
|
|
1573 |
msgstr ""
|
1574 |
|
1575 |
#: src/features/user_management.php:332
|
1576 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1577 |
#: src/lib/src/Modules/Sessions/Strings.php:24
|
1578 |
#: src/lib/src/Modules/Traffic/Strings.php:43
|
1579 |
#: src/lib/src/Modules/Traffic/Strings.php:53
|
@@ -1805,10 +1802,6 @@ msgstr ""
|
|
1805 |
msgid "Time"
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: src/lib/src/Modules/AuditTrail/Strings.php:97
|
1809 |
-
msgid "Event"
|
1810 |
-
msgstr ""
|
1811 |
-
|
1812 |
#: src/lib/src/Modules/AuditTrail/Strings.php:98
|
1813 |
#: src/lib/src/Modules/IPs/Strings.php:226
|
1814 |
#: src/lib/src/Tables/Render/AuditTrail.php:69
|
@@ -1820,8 +1813,8 @@ msgid "Category"
|
|
1820 |
msgstr ""
|
1821 |
|
1822 |
#: src/lib/src/Modules/AuditTrail/Strings.php:101
|
1823 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
1824 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1825 |
#: src/lib/src/Tables/Render/IpBase.php:21
|
1826 |
#: src/lib/src/Tables/Render/IpBlack.php:16
|
1827 |
#: src/lib/src/Tables/Render/IpWhite.php:12 src/processors/firewall.php:403
|
@@ -1845,7 +1838,7 @@ msgstr ""
|
|
1845 |
|
1846 |
#: src/lib/src/Modules/AuditTrail/Strings.php:117
|
1847 |
#: src/lib/src/Modules/Autoupdates/Strings.php:21
|
1848 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
1849 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:38
|
1850 |
#: src/lib/src/Modules/Firewall/Strings.php:19
|
1851 |
#: src/lib/src/Modules/HackGuard/Strings.php:90
|
@@ -1864,7 +1857,7 @@ msgstr ""
|
|
1864 |
|
1865 |
#: src/lib/src/Modules/AuditTrail/Strings.php:117
|
1866 |
#: src/lib/src/Modules/Autoupdates/Strings.php:21
|
1867 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
1868 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:38
|
1869 |
#: src/lib/src/Modules/Firewall/Strings.php:19
|
1870 |
#: src/lib/src/Modules/HackGuard/Strings.php:90
|
@@ -1908,7 +1901,7 @@ msgstr ""
|
|
1908 |
#: src/lib/src/Modules/Autoupdates/Strings.php:42
|
1909 |
#: src/lib/src/Modules/Autoupdates/Strings.php:53
|
1910 |
#: src/lib/src/Modules/Autoupdates/Strings.php:63
|
1911 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
1912 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:41
|
1913 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:50
|
1914 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:57
|
@@ -1942,10 +1935,10 @@ msgstr ""
|
|
1942 |
#: src/lib/src/Modules/LoginGuard/Strings.php:117
|
1943 |
#: src/lib/src/Modules/LoginGuard/Strings.php:126
|
1944 |
#: src/lib/src/Modules/LoginGuard/Strings.php:135
|
1945 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1946 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1947 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1948 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
1949 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:37
|
1950 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:46
|
1951 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:55
|
@@ -1979,7 +1972,7 @@ msgstr ""
|
|
1979 |
#: src/lib/src/Modules/Autoupdates/Strings.php:33
|
1980 |
#: src/lib/src/Modules/Autoupdates/Strings.php:45
|
1981 |
#: src/lib/src/Modules/Autoupdates/Strings.php:54
|
1982 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
1983 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:42
|
1984 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:58
|
1985 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:68
|
@@ -2016,7 +2009,7 @@ msgstr ""
|
|
2016 |
#: src/lib/src/Modules/LoginGuard/Strings.php:108
|
2017 |
#: src/lib/src/Modules/LoginGuard/Strings.php:127
|
2018 |
#: src/lib/src/Modules/LoginGuard/Strings.php:242
|
2019 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
2020 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:38
|
2021 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:47
|
2022 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:56
|
@@ -2518,27 +2511,68 @@ msgid "Failed to update %s plugin options."
|
|
2518 |
msgstr ""
|
2519 |
|
2520 |
#: src/lib/src/Modules/Base/Strings.php:19
|
2521 |
-
msgid "
|
2522 |
msgstr ""
|
2523 |
|
2524 |
#: src/lib/src/Modules/Base/Strings.php:20
|
2525 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
2526 |
msgstr ""
|
2527 |
|
2528 |
#: src/lib/src/Modules/Base/Strings.php:22
|
2529 |
-
|
2530 |
-
msgid "Help"
|
2531 |
msgstr ""
|
2532 |
|
2533 |
#: src/lib/src/Modules/Base/Strings.php:23
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2534 |
msgid "Wizards"
|
2535 |
msgstr ""
|
2536 |
|
2537 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2538 |
msgid "No Wizards"
|
2539 |
msgstr ""
|
2540 |
|
2541 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2542 |
#: src/lib/src/Tables/Build/ScanBase.php:62
|
2543 |
#: src/lib/src/Tables/Build/Sessions.php:68
|
2544 |
#: src/lib/src/Tables/Build/Traffic.php:85
|
@@ -2546,192 +2580,206 @@ msgstr ""
|
|
2546 |
msgid "No"
|
2547 |
msgstr ""
|
2548 |
|
2549 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2550 |
msgid "Until"
|
2551 |
msgstr ""
|
2552 |
|
2553 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2554 |
msgid "Since"
|
2555 |
msgstr ""
|
2556 |
|
2557 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2558 |
msgid "Info"
|
2559 |
msgstr ""
|
2560 |
|
2561 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2562 |
#: src/lib/src/Tables/Build/Traffic.php:141
|
2563 |
#: src/lib/src/Tables/Render/Sessions.php:38
|
2564 |
msgid "Logged-In"
|
2565 |
msgstr ""
|
2566 |
|
2567 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2568 |
msgid "Blog"
|
2569 |
msgstr ""
|
2570 |
|
2571 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2572 |
#, php-format
|
2573 |
msgid "Save %s Settings"
|
2574 |
msgstr ""
|
2575 |
|
2576 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2577 |
msgid "Configure Module"
|
2578 |
msgstr ""
|
2579 |
|
2580 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2581 |
msgid "Actions and Info"
|
2582 |
msgstr ""
|
2583 |
|
2584 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2585 |
msgid "Perform actions for this module"
|
2586 |
msgstr ""
|
2587 |
|
2588 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2589 |
msgid "Learn More"
|
2590 |
msgstr ""
|
2591 |
|
2592 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2593 |
msgid "Select"
|
2594 |
msgstr ""
|
2595 |
|
2596 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2597 |
msgid "Clear Filters"
|
2598 |
msgstr ""
|
2599 |
|
2600 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2601 |
msgid "Apply Filters"
|
2602 |
msgstr ""
|
2603 |
|
2604 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2605 |
msgid "Find Plugin Option"
|
2606 |
msgstr ""
|
2607 |
|
2608 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2609 |
msgid "Type below to search all plugin options"
|
2610 |
msgstr ""
|
2611 |
|
2612 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2613 |
#: src/processors/loginprotect_intentprovider_yubikey.php:30
|
2614 |
#: src/processors/loginprotect_intentprovider_yubikey.php:37
|
2615 |
msgid "Pro Only"
|
2616 |
msgstr ""
|
2617 |
|
2618 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2619 |
msgid "This is a pro-only feature"
|
2620 |
msgstr ""
|
2621 |
|
2622 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2623 |
msgid "Go Pro!"
|
2624 |
msgstr ""
|
2625 |
|
2626 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2627 |
msgid "Please upgrade to Pro to control this option"
|
2628 |
msgstr ""
|
2629 |
|
2630 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2631 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:205
|
2632 |
msgid "Description"
|
2633 |
msgstr ""
|
2634 |
|
2635 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2636 |
#: src/processors/loginprotect_gasp.php:31
|
2637 |
msgid "Loading"
|
2638 |
msgstr ""
|
2639 |
|
2640 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2641 |
msgid "Plugin Access Restricted"
|
2642 |
msgstr ""
|
2643 |
|
2644 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2645 |
msgid ""
|
2646 |
"This security plugin is restricted to administrators with the Security "
|
2647 |
"Access Key."
|
2648 |
msgstr ""
|
2649 |
|
2650 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2651 |
msgid "Please provide the Security Access Key to manage this plugin."
|
2652 |
msgstr ""
|
2653 |
|
2654 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2655 |
msgid "To manage this plugin you must enter the access key."
|
2656 |
msgstr ""
|
2657 |
|
2658 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2659 |
msgid "Enter Access Key"
|
2660 |
msgstr ""
|
2661 |
|
2662 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2663 |
msgid "Submit Security Admin Key"
|
2664 |
msgstr ""
|
2665 |
|
2666 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2667 |
msgid "Forgotten Key"
|
2668 |
msgstr ""
|
2669 |
|
2670 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2671 |
msgid "Supply Password"
|
2672 |
msgstr ""
|
2673 |
|
2674 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2675 |
msgid "Confirm Password"
|
2676 |
msgstr ""
|
2677 |
|
2678 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2679 |
msgid "Show help video for this section"
|
2680 |
msgstr ""
|
2681 |
|
2682 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2683 |
msgid "offense"
|
2684 |
msgstr ""
|
2685 |
|
2686 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2687 |
msgid "Debug"
|
2688 |
msgstr ""
|
2689 |
|
2690 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2691 |
msgid "Agree To Privacy Policy"
|
2692 |
msgstr ""
|
2693 |
|
2694 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2695 |
msgid "I confirm that I've read and I agree to the Privacy Policy"
|
2696 |
msgstr ""
|
2697 |
|
2698 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2699 |
msgid ""
|
2700 |
"We treat your information under our strict, and GDPR-compliant, privacy "
|
2701 |
"policy."
|
2702 |
msgstr ""
|
2703 |
|
2704 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2705 |
msgid "Privacy Policy"
|
2706 |
msgstr ""
|
2707 |
|
2708 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2709 |
msgid "We never SPAM and you can remove yourself at any time."
|
2710 |
msgstr ""
|
2711 |
|
2712 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2713 |
msgid "User Messages"
|
2714 |
msgstr ""
|
2715 |
|
2716 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2717 |
msgid "Messages"
|
2718 |
msgstr ""
|
2719 |
|
2720 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2721 |
msgid "Customize the messages displayed to the user."
|
2722 |
msgstr ""
|
2723 |
|
2724 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2725 |
msgid ""
|
2726 |
"Use this section if you need to communicate to the user in a particular "
|
2727 |
"manner."
|
2728 |
msgstr ""
|
2729 |
|
2730 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2731 |
msgid "Hint"
|
2732 |
msgstr ""
|
2733 |
|
2734 |
-
#: src/lib/src/Modules/Base/Strings.php:
|
2735 |
#, php-format
|
2736 |
msgid "To reset any message to its default, enter the text exactly: %s"
|
2737 |
msgstr ""
|
@@ -2864,7 +2912,7 @@ msgstr ""
|
|
2864 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:76
|
2865 |
#: src/lib/src/Modules/LoginGuard/Strings.php:108
|
2866 |
#: src/lib/src/Modules/LoginGuard/Strings.php:127
|
2867 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
2868 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:47
|
2869 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:56
|
2870 |
#: src/lib/src/Modules/UserManagement/Strings.php:49
|
@@ -2890,7 +2938,7 @@ msgid "%s Comment SPAM Protection Filter"
|
|
2890 |
msgstr ""
|
2891 |
|
2892 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:73
|
2893 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
2894 |
msgid "Human"
|
2895 |
msgstr ""
|
2896 |
|
@@ -2909,7 +2957,7 @@ msgid "Enable (or Disable) The Comment SPAM Protection Feature"
|
|
2909 |
msgstr ""
|
2910 |
|
2911 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:106
|
2912 |
-
#: src/wizards/plugin.php:
|
2913 |
msgid "Comment SPAM Protection"
|
2914 |
msgstr ""
|
2915 |
|
@@ -2951,14 +2999,14 @@ msgstr ""
|
|
2951 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:121
|
2952 |
#: src/lib/src/Modules/HackGuard/Strings.php:342
|
2953 |
#: src/lib/src/Modules/HackGuard/Strings.php:343
|
2954 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:
|
2955 |
#: src/lib/src/Modules/LoginGuard/Strings.php:222
|
2956 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
2957 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
2958 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:70
|
2959 |
#: src/lib/src/Modules/UserManagement/Strings.php:213
|
2960 |
#: src/lib/src/Modules/UserManagement/Strings.php:230
|
2961 |
-
#: src/processors/hackprotect_scan_mal.php:
|
2962 |
#: src/processors/loginprotect_intentprovider_backup.php:29
|
2963 |
msgid "Important"
|
2964 |
msgstr ""
|
@@ -3124,7 +3172,7 @@ msgstr ""
|
|
3124 |
|
3125 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:183
|
3126 |
#: src/lib/src/Modules/LoginGuard/Strings.php:226
|
3127 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
3128 |
msgid "reCAPTCHA Style"
|
3129 |
msgstr ""
|
3130 |
|
@@ -3135,7 +3183,7 @@ msgstr ""
|
|
3135 |
|
3136 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:185
|
3137 |
#: src/lib/src/Modules/LoginGuard/Strings.php:228
|
3138 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
3139 |
msgid ""
|
3140 |
"You can choose the reCAPTCHA display format that best suits your site, "
|
3141 |
"including the new Invisible Recaptcha"
|
@@ -3216,391 +3264,392 @@ msgid ""
|
|
3216 |
"(0) turns this off. Suggested: 10"
|
3217 |
msgstr ""
|
3218 |
|
3219 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3220 |
msgid "Test Cron Run"
|
3221 |
msgstr ""
|
3222 |
|
3223 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3224 |
msgid "Import Notify Sent"
|
3225 |
msgstr ""
|
3226 |
|
3227 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3228 |
msgid "Import Notify Received"
|
3229 |
msgstr ""
|
3230 |
|
3231 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3232 |
msgid "Options Exported"
|
3233 |
msgstr ""
|
3234 |
|
3235 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3236 |
msgid "Options Imported"
|
3237 |
msgstr ""
|
3238 |
|
3239 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3240 |
msgid "Whitelist Site Added"
|
3241 |
msgstr ""
|
3242 |
|
3243 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3244 |
msgid "Whitelist Site Removed"
|
3245 |
msgstr ""
|
3246 |
|
3247 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3248 |
msgid "Master Site URL Set"
|
3249 |
msgstr ""
|
3250 |
|
3251 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3252 |
msgid "Google reCAPTCHA Test Success"
|
3253 |
msgstr ""
|
3254 |
|
3255 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
|
|
3256 |
msgid "Google reCAPTCHA Test Fail"
|
3257 |
msgstr ""
|
3258 |
|
3259 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3260 |
msgid "Security Admin Key Authentication Success"
|
3261 |
msgstr ""
|
3262 |
|
3263 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3264 |
msgid "Security Admin Key Authentication Failed"
|
3265 |
msgstr ""
|
3266 |
|
3267 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3268 |
msgid "Custom Offense"
|
3269 |
msgstr ""
|
3270 |
|
3271 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3272 |
msgid "Connection Killed"
|
3273 |
msgstr ""
|
3274 |
|
3275 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3276 |
msgid "Offense Triggered"
|
3277 |
msgstr ""
|
3278 |
|
3279 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3280 |
msgid "IP Blocked"
|
3281 |
msgstr ""
|
3282 |
|
3283 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3284 |
msgid "IP Unblocked Using Flag File"
|
3285 |
msgstr ""
|
3286 |
|
3287 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3288 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3289 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3290 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3291 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3292 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3293 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3294 |
msgid "Bot Detection"
|
3295 |
msgstr ""
|
3296 |
|
3297 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3298 |
#: src/lib/src/Modules/IPs/Strings.php:192
|
3299 |
msgid "Fake Web Crawler"
|
3300 |
msgstr ""
|
3301 |
|
3302 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3303 |
#: src/lib/src/Modules/IPs/Strings.php:172
|
3304 |
msgid "Link Cheese"
|
3305 |
msgstr ""
|
3306 |
|
3307 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3308 |
#: src/lib/src/Modules/IPs/Strings.php:186
|
3309 |
msgid "Failed Login"
|
3310 |
msgstr ""
|
3311 |
|
3312 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3313 |
msgid "Invalid Username Login"
|
3314 |
msgstr ""
|
3315 |
|
3316 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3317 |
msgid "Invalid User-Agent"
|
3318 |
msgstr ""
|
3319 |
|
3320 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3321 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3322 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3323 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3324 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3325 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3326 |
msgid "Alert Sent"
|
3327 |
msgstr ""
|
3328 |
|
3329 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3330 |
msgid "Abandoned Plugin Detected"
|
3331 |
msgstr ""
|
3332 |
|
3333 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3334 |
msgid "Malware Detected"
|
3335 |
msgstr ""
|
3336 |
|
3337 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3338 |
msgid "Modified Plugin/Theme Detected"
|
3339 |
msgstr ""
|
3340 |
|
3341 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3342 |
msgid "Unrecognised File Detected"
|
3343 |
msgstr ""
|
3344 |
|
3345 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3346 |
msgid "Modified/Missing WP Core File Detected"
|
3347 |
msgstr ""
|
3348 |
|
3349 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3350 |
msgid "Vulnerable Plugin Detected"
|
3351 |
msgstr ""
|
3352 |
|
3353 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3354 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3355 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3356 |
-
#: src/lib/src/Modules/Events/Strings.php:93
|
3357 |
-
#: src/lib/src/Modules/Events/Strings.php:97
|
3358 |
-
#: src/lib/src/Modules/Events/Strings.php:101
|
3359 |
-
msgid "Scan Completed"
|
3360 |
-
msgstr ""
|
3361 |
-
|
3362 |
-
#: src/lib/src/Modules/Events/Strings.php:82
|
3363 |
#: src/lib/src/Modules/Events/Strings.php:106
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3364 |
#: src/lib/src/Modules/HackGuard/Strings.php:23
|
3365 |
#: src/lib/src/Modules/HackGuard/Strings.php:128
|
3366 |
msgid "Abandoned Plugins"
|
3367 |
msgstr ""
|
3368 |
|
3369 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3370 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3371 |
#: src/lib/src/Modules/HackGuard/Strings.php:25
|
3372 |
#: src/lib/src/Modules/HackGuard/Strings.php:146
|
3373 |
msgid "Malware"
|
3374 |
msgstr ""
|
3375 |
|
3376 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3377 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3378 |
#: src/lib/src/Modules/HackGuard/Strings.php:27
|
3379 |
msgid "WP Core Files"
|
3380 |
msgstr ""
|
3381 |
|
3382 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3383 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3384 |
#: src/lib/src/Modules/HackGuard/Strings.php:28
|
3385 |
#: src/lib/src/Modules/HackGuard/Strings.php:99
|
3386 |
msgid "Vulnerabilities"
|
3387 |
msgstr ""
|
3388 |
|
3389 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3390 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3391 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3392 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3393 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3394 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3395 |
msgid "Scan Item Discovered"
|
3396 |
msgstr ""
|
3397 |
|
3398 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3399 |
#: src/lib/src/Modules/Insights/Strings.php:46
|
3400 |
msgid "Firewall Block"
|
3401 |
msgstr ""
|
3402 |
|
3403 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3404 |
#: src/lib/src/Modules/Firewall/Strings.php:194 src/processors/firewall.php:430
|
3405 |
msgid "Directory Traversal"
|
3406 |
msgstr ""
|
3407 |
|
3408 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3409 |
#: src/lib/src/Modules/Firewall/Strings.php:104
|
3410 |
#: src/lib/src/Modules/Firewall/Strings.php:197 src/processors/firewall.php:433
|
3411 |
msgid "WordPress Terms"
|
3412 |
msgstr ""
|
3413 |
|
3414 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3415 |
#: src/lib/src/Modules/Firewall/Strings.php:110
|
3416 |
#: src/lib/src/Modules/Firewall/Strings.php:200 src/processors/firewall.php:436
|
3417 |
msgid "Field Truncation"
|
3418 |
msgstr ""
|
3419 |
|
3420 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3421 |
#: src/lib/src/Modules/Firewall/Strings.php:98
|
3422 |
#: src/lib/src/Modules/Firewall/Strings.php:203 src/processors/firewall.php:439
|
3423 |
msgid "SQL Queries"
|
3424 |
msgstr ""
|
3425 |
|
3426 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3427 |
#: src/lib/src/Modules/Firewall/Strings.php:206 src/processors/firewall.php:445
|
3428 |
msgid "Leading Schema"
|
3429 |
msgstr ""
|
3430 |
|
3431 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3432 |
#: src/lib/src/Modules/Firewall/Strings.php:209 src/processors/firewall.php:451
|
3433 |
msgid "Aggressive Rules"
|
3434 |
msgstr ""
|
3435 |
|
3436 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3437 |
#: src/lib/src/Modules/Firewall/Strings.php:116
|
3438 |
#: src/lib/src/Modules/Firewall/Strings.php:212 src/processors/firewall.php:448
|
3439 |
msgid "PHP Code"
|
3440 |
msgstr ""
|
3441 |
|
3442 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3443 |
#: src/lib/src/Modules/Firewall/Strings.php:215 src/processors/firewall.php:442
|
3444 |
msgid "EXE File Uploads"
|
3445 |
msgstr ""
|
3446 |
|
3447 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3448 |
msgid "Session Not Found"
|
3449 |
msgstr ""
|
3450 |
|
3451 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3452 |
msgid "Session Expired"
|
3453 |
msgstr ""
|
3454 |
|
3455 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3456 |
msgid "Session Idle"
|
3457 |
msgstr ""
|
3458 |
|
3459 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3460 |
msgid "Session Locked To IP"
|
3461 |
msgstr ""
|
3462 |
|
3463 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3464 |
msgid "Session Locked To Browser"
|
3465 |
msgstr ""
|
3466 |
|
3467 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3468 |
msgid "Session Unverified"
|
3469 |
msgstr ""
|
3470 |
|
3471 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3472 |
msgid "Password Expired"
|
3473 |
msgstr ""
|
3474 |
|
3475 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3476 |
msgid "Forced Password Change"
|
3477 |
msgstr ""
|
3478 |
|
3479 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3480 |
msgid "Password Change Blocked"
|
3481 |
msgstr ""
|
3482 |
|
3483 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3484 |
msgid "User Hard-Suspended"
|
3485 |
msgstr ""
|
3486 |
|
3487 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3488 |
msgid "User Hard-Unsuspended"
|
3489 |
msgstr ""
|
3490 |
|
3491 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3492 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3493 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3494 |
msgid "SPAM Blocked"
|
3495 |
msgstr ""
|
3496 |
|
3497 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3498 |
msgid "Bot"
|
3499 |
msgstr ""
|
3500 |
|
3501 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3502 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3503 |
#: src/lib/src/Tables/Render/IpBlack.php:13
|
3504 |
msgid "Blocked"
|
3505 |
msgstr ""
|
3506 |
|
3507 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3508 |
msgid "Anonymous REST API"
|
3509 |
msgstr ""
|
3510 |
|
3511 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3512 |
msgid "Session Started"
|
3513 |
msgstr ""
|
3514 |
|
3515 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3516 |
msgid "Session Terminated"
|
3517 |
msgstr ""
|
3518 |
|
3519 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3520 |
msgid "Plugin Activated"
|
3521 |
msgstr ""
|
3522 |
|
3523 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3524 |
msgid "Plugin Deactivated"
|
3525 |
msgstr ""
|
3526 |
|
3527 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3528 |
msgid "Plugin File Edited"
|
3529 |
msgstr ""
|
3530 |
|
3531 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3532 |
msgid "Theme Activated"
|
3533 |
msgstr ""
|
3534 |
|
3535 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3536 |
msgid "Theme File Edited"
|
3537 |
msgstr ""
|
3538 |
|
3539 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3540 |
msgid "WP Core Updated"
|
3541 |
msgstr ""
|
3542 |
|
3543 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3544 |
msgid "Permalinks Updated"
|
3545 |
msgstr ""
|
3546 |
|
3547 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3548 |
msgid "Post Deleted"
|
3549 |
msgstr ""
|
3550 |
|
3551 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3552 |
msgid "Post Trashed"
|
3553 |
msgstr ""
|
3554 |
|
3555 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3556 |
msgid "Post Recovered"
|
3557 |
msgstr ""
|
3558 |
|
3559 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3560 |
msgid "Post Updated"
|
3561 |
msgstr ""
|
3562 |
|
3563 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3564 |
msgid "Post Published"
|
3565 |
msgstr ""
|
3566 |
|
3567 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3568 |
msgid "Post Unpublished"
|
3569 |
msgstr ""
|
3570 |
|
3571 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3572 |
msgid "User Login"
|
3573 |
msgstr ""
|
3574 |
|
3575 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3576 |
msgid "User Registered"
|
3577 |
msgstr ""
|
3578 |
|
3579 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3580 |
msgid "User Deleted"
|
3581 |
msgstr ""
|
3582 |
|
3583 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3584 |
msgid "User Deleted And Reassigned"
|
3585 |
msgstr ""
|
3586 |
|
3587 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3588 |
msgid "Email Sent"
|
3589 |
msgstr ""
|
3590 |
|
3591 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3592 |
msgid "Invalid Email Sent"
|
3593 |
msgstr ""
|
3594 |
|
3595 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3596 |
msgid "License Check Success"
|
3597 |
msgstr ""
|
3598 |
|
3599 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3600 |
msgid "License Failure Email"
|
3601 |
msgstr ""
|
3602 |
|
3603 |
-
#: src/lib/src/Modules/Events/Strings.php:
|
3604 |
msgid "License Deactivated"
|
3605 |
msgstr ""
|
3606 |
|
@@ -3927,75 +3976,75 @@ msgstr ""
|
|
3927 |
msgid "Firewall Block Response: %s."
|
3928 |
msgstr ""
|
3929 |
|
3930 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3931 |
msgid "Unsupported scanner"
|
3932 |
msgstr ""
|
3933 |
|
3934 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3935 |
msgid "Unsupported item(s) selected"
|
3936 |
msgstr ""
|
3937 |
|
3938 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3939 |
msgid "Action successful."
|
3940 |
msgstr ""
|
3941 |
|
3942 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3943 |
msgid "An error occurred."
|
3944 |
msgstr ""
|
3945 |
|
3946 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3947 |
msgid "Some items may not have been processed."
|
3948 |
msgstr ""
|
3949 |
|
3950 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3951 |
msgid "Rescanning"
|
3952 |
msgstr ""
|
3953 |
|
3954 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3955 |
msgid "Reloading"
|
3956 |
msgstr ""
|
3957 |
|
3958 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3959 |
msgid "No scan running."
|
3960 |
msgstr ""
|
3961 |
|
3962 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3963 |
msgid "Current Scan"
|
3964 |
msgstr ""
|
3965 |
|
3966 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3967 |
#, php-format
|
3968 |
msgid "%s of %s scans remaining."
|
3969 |
msgstr ""
|
3970 |
|
3971 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3972 |
msgid "Please be patient."
|
3973 |
msgstr ""
|
3974 |
|
3975 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3976 |
msgid "Some scans can take quite a while to complete."
|
3977 |
msgstr ""
|
3978 |
|
3979 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3980 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3981 |
msgid "Scans completed."
|
3982 |
msgstr ""
|
3983 |
|
3984 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3985 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3986 |
#: src/lib/src/Modules/License/AjaxHandler.php:88
|
3987 |
msgid "Reloading page"
|
3988 |
msgstr ""
|
3989 |
|
3990 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3991 |
msgid "No scans were selected"
|
3992 |
msgstr ""
|
3993 |
|
3994 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3995 |
msgid "Scans started."
|
3996 |
msgstr ""
|
3997 |
|
3998 |
-
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:
|
3999 |
msgid "Please wait, as this will take a few moments."
|
4000 |
msgstr ""
|
4001 |
|
@@ -4144,10 +4193,6 @@ msgstr ""
|
|
4144 |
msgid "Keep the Plugins/Theme Guard feature turned on."
|
4145 |
msgstr ""
|
4146 |
|
4147 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:147
|
4148 |
-
msgid "Malware Scanner"
|
4149 |
-
msgstr ""
|
4150 |
-
|
4151 |
#: src/lib/src/Modules/HackGuard/Strings.php:149
|
4152 |
msgid "Monitor and detect presence of Malware signatures."
|
4153 |
msgstr ""
|
@@ -4535,38 +4580,116 @@ msgid ""
|
|
4535 |
msgstr ""
|
4536 |
|
4537 |
#: src/lib/src/Modules/HackGuard/Strings.php:347
|
4538 |
-
msgid "
|
4539 |
msgstr ""
|
4540 |
|
4541 |
#: src/lib/src/Modules/HackGuard/Strings.php:348
|
4542 |
-
msgid "
|
4543 |
msgstr ""
|
4544 |
|
4545 |
#: src/lib/src/Modules/HackGuard/Strings.php:349
|
4546 |
-
msgid "
|
|
|
|
|
4547 |
msgstr ""
|
4548 |
|
4549 |
#: src/lib/src/Modules/HackGuard/Strings.php:350
|
4550 |
msgid ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4551 |
"This could break your site if code removal leaves remaining code in an "
|
4552 |
"inconsistent state."
|
4553 |
msgstr ""
|
4554 |
|
4555 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:
|
4556 |
msgid ""
|
4557 |
"Only applies to files that don't fall under the other categories for "
|
4558 |
"automatic repair."
|
4559 |
msgstr ""
|
4560 |
|
4561 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:
|
4562 |
msgid "WP Config"
|
4563 |
msgstr ""
|
4564 |
|
4565 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:
|
4566 |
msgid "Realtime Protection For WP Config File"
|
4567 |
msgstr ""
|
4568 |
|
4569 |
-
#: src/lib/src/Modules/HackGuard/Strings.php:
|
4570 |
msgid "Realtime protection for the wp-config.php file."
|
4571 |
msgstr ""
|
4572 |
|
@@ -4771,7 +4894,7 @@ msgid "%s is ignoring you"
|
|
4771 |
msgstr ""
|
4772 |
|
4773 |
#: src/lib/src/Modules/IPs/AdminNotices.php:40
|
4774 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
4775 |
#, php-format
|
4776 |
msgid "Your IP address is: %s"
|
4777 |
msgstr ""
|
@@ -4822,15 +4945,15 @@ msgstr ""
|
|
4822 |
msgid "IP address added successfully"
|
4823 |
msgstr ""
|
4824 |
|
4825 |
-
#: src/lib/src/Modules/IPs/AjaxHandler.php:
|
4826 |
msgid "Invalid entry selected"
|
4827 |
msgstr ""
|
4828 |
|
4829 |
-
#: src/lib/src/Modules/IPs/AjaxHandler.php:
|
4830 |
msgid "IP address deleted"
|
4831 |
msgstr ""
|
4832 |
|
4833 |
-
#: src/lib/src/Modules/IPs/AjaxHandler.php:
|
4834 |
msgid "IP address wasn't deleted from the list"
|
4835 |
msgstr ""
|
4836 |
|
@@ -4841,7 +4964,7 @@ msgid ""
|
|
4841 |
msgstr ""
|
4842 |
|
4843 |
#: src/lib/src/Modules/IPs/Strings.php:28
|
4844 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
4845 |
#: src/wizards/plugin.php:519
|
4846 |
msgid "IP Manager"
|
4847 |
msgstr ""
|
@@ -5411,6 +5534,18 @@ msgstr ""
|
|
5411 |
msgid "Please turn on this feature in the options."
|
5412 |
msgstr ""
|
5413 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5414 |
#: src/lib/src/Modules/License/AjaxHandler.php:87
|
5415 |
#: src/processors/loginprotect_intent.php:152
|
5416 |
msgid "Success"
|
@@ -5590,7 +5725,7 @@ msgid "Obscurity"
|
|
5590 |
msgstr ""
|
5591 |
|
5592 |
#: src/lib/src/Modules/Lockdown/Strings.php:95
|
5593 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
5594 |
#, php-format
|
5595 |
msgid "Disable %s"
|
5596 |
msgstr ""
|
@@ -5763,6 +5898,40 @@ msgstr ""
|
|
5763 |
msgid "Verification email resent."
|
5764 |
msgstr ""
|
5765 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5766 |
#: src/lib/src/Modules/LoginGuard/Strings.php:15
|
5767 |
#, php-format
|
5768 |
msgid "User \"%s\" attempted \"%s\" but Bot checkbox was not found."
|
@@ -6019,7 +6188,7 @@ msgid "Two-Factor Login Authentication By %s"
|
|
6019 |
msgstr ""
|
6020 |
|
6021 |
#: src/lib/src/Modules/LoginGuard/Strings.php:205
|
6022 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6023 |
#: src/processors/user_management.php:204
|
6024 |
msgid "Email"
|
6025 |
msgstr ""
|
@@ -6049,8 +6218,8 @@ msgid "This setting only applies to %s."
|
|
6049 |
msgstr ""
|
6050 |
|
6051 |
#: src/lib/src/Modules/LoginGuard/Strings.php:217
|
6052 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6053 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6054 |
msgid "Google reCAPTCHA"
|
6055 |
msgstr ""
|
6056 |
|
@@ -6069,7 +6238,7 @@ msgid "Use of any theme other than \"%s\", requires a Pro license."
|
|
6069 |
msgstr ""
|
6070 |
|
6071 |
#: src/lib/src/Modules/LoginGuard/Strings.php:220
|
6072 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6073 |
msgid "Light Theme"
|
6074 |
msgstr ""
|
6075 |
|
@@ -6491,6 +6660,11 @@ msgstr ""
|
|
6491 |
msgid "Site Secured"
|
6492 |
msgstr ""
|
6493 |
|
|
|
|
|
|
|
|
|
|
|
6494 |
#: src/lib/src/Modules/Plugin/Strings.php:15
|
6495 |
msgid "Plugin Actions"
|
6496 |
msgstr ""
|
@@ -6537,785 +6711,802 @@ msgstr ""
|
|
6537 |
msgid "Master Site URL set: %s"
|
6538 |
msgstr ""
|
6539 |
|
6540 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6541 |
msgid "Global Security Plugin Disable"
|
6542 |
msgstr ""
|
6543 |
|
6544 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6545 |
msgid "Use this option to completely disable all active Shield Protection."
|
6546 |
msgstr ""
|
6547 |
|
6548 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6549 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6550 |
msgid "Plugin Defaults"
|
6551 |
msgstr ""
|
6552 |
|
6553 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6554 |
msgid "Important default settings used throughout the plugin."
|
6555 |
msgstr ""
|
6556 |
|
6557 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6558 |
msgid ""
|
6559 |
"Automatically import options, and deploy configurations across your entire "
|
6560 |
"network."
|
6561 |
msgstr ""
|
6562 |
|
6563 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6564 |
msgid "This is a Pro-only feature."
|
6565 |
msgstr ""
|
6566 |
|
6567 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6568 |
msgid "General Plugin Options"
|
6569 |
msgstr ""
|
6570 |
|
6571 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6572 |
msgid "General Options"
|
6573 |
msgstr ""
|
6574 |
|
6575 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6576 |
#, php-format
|
6577 |
msgid "Setup Google reCAPTCHA for use across %s."
|
6578 |
msgstr ""
|
6579 |
|
6580 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6581 |
msgid "You must create your own Google reCAPTCHA API Keys."
|
6582 |
msgstr ""
|
6583 |
|
6584 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6585 |
msgid "Manage Keys Here"
|
6586 |
msgstr ""
|
6587 |
|
6588 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6589 |
#, php-format
|
6590 |
msgid "Invisible Google reCAPTCHA is available with %s Pro."
|
6591 |
msgstr ""
|
6592 |
|
6593 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6594 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6595 |
msgid "Duo Security"
|
6596 |
msgstr ""
|
6597 |
|
6598 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6599 |
#, php-format
|
6600 |
msgid "Enable %s Protection"
|
6601 |
msgstr ""
|
6602 |
|
6603 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6604 |
msgid "Switch Off To Disable All Security Protection"
|
6605 |
msgstr ""
|
6606 |
|
6607 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6608 |
msgid ""
|
6609 |
"You can keep the security plugin activated, but temporarily disable all "
|
6610 |
"protection it provides."
|
6611 |
msgstr ""
|
6612 |
|
6613 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6614 |
msgid "Anonymous Usage Statistics"
|
6615 |
msgstr ""
|
6616 |
|
6617 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6618 |
msgid "Permit Anonymous Usage Information Gathering"
|
6619 |
msgstr ""
|
6620 |
|
6621 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6622 |
msgid ""
|
6623 |
"Allows us to gather information on statistics and features in-use across our "
|
6624 |
"client installations."
|
6625 |
msgstr ""
|
6626 |
|
6627 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6628 |
msgid ""
|
6629 |
"This information is strictly anonymous and contains no personally, or "
|
6630 |
"otherwise, identifiable data."
|
6631 |
msgstr ""
|
6632 |
|
6633 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6634 |
msgid "Click to see the exact data that would be sent."
|
6635 |
msgstr ""
|
6636 |
|
6637 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6638 |
msgid "IP Source"
|
6639 |
msgstr ""
|
6640 |
|
6641 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6642 |
msgid "Which IP Address Is Yours"
|
6643 |
msgstr ""
|
6644 |
|
6645 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6646 |
msgid ""
|
6647 |
"There are many possible ways to detect visitor IP addresses. If Auto-Detect "
|
6648 |
"is not working, please select yours from the list."
|
6649 |
msgstr ""
|
6650 |
|
6651 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6652 |
msgid ""
|
6653 |
"If the option you select becomes unavailable, we will revert to auto "
|
6654 |
"detection."
|
6655 |
msgstr ""
|
6656 |
|
6657 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6658 |
#, php-format
|
6659 |
msgid "Current source is: %s (%s)"
|
6660 |
msgstr ""
|
6661 |
|
6662 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6663 |
msgid "Report Email"
|
6664 |
msgstr ""
|
6665 |
|
6666 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6667 |
msgid "Where to send email reports"
|
6668 |
msgstr ""
|
6669 |
|
6670 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6671 |
#, php-format
|
6672 |
msgid "If this is empty, it will default to the blog admin email address: %s"
|
6673 |
msgstr ""
|
6674 |
|
6675 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6676 |
msgid "In-Plugin Notices"
|
6677 |
msgstr ""
|
6678 |
|
6679 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6680 |
msgid "Display Plugin Specific Notices"
|
6681 |
msgstr ""
|
6682 |
|
6683 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6684 |
msgid ""
|
6685 |
"Disable this option to hide certain plugin admin notices about available "
|
6686 |
"updates and post-update notices."
|
6687 |
msgstr ""
|
6688 |
|
6689 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6690 |
msgid "Show Plugin Badge"
|
6691 |
msgstr ""
|
6692 |
|
6693 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6694 |
msgid "Display Plugin Badge On Your Site"
|
6695 |
msgstr ""
|
6696 |
|
6697 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6698 |
msgid ""
|
6699 |
"Enabling this option helps support the plugin by spreading the word about it "
|
6700 |
"on your website."
|
6701 |
msgstr ""
|
6702 |
|
6703 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6704 |
msgid ""
|
6705 |
"The plugin badge also lets visitors know your are taking your website "
|
6706 |
"security seriously."
|
6707 |
msgstr ""
|
6708 |
|
6709 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6710 |
msgid "Read this carefully before enabling this option."
|
6711 |
msgstr ""
|
6712 |
|
6713 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6714 |
msgid "Delete Plugin Settings"
|
6715 |
msgstr ""
|
6716 |
|
6717 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6718 |
msgid "Delete All Plugin Settings Upon Plugin Deactivation"
|
6719 |
msgstr ""
|
6720 |
|
6721 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6722 |
msgid "Careful: Removes all plugin options when you deactivate the plugin"
|
6723 |
msgstr ""
|
6724 |
|
6725 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6726 |
msgid "XML-RPC Compatibility"
|
6727 |
msgstr ""
|
6728 |
|
6729 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6730 |
msgid "Allow Login Through XML-RPC To By-Pass Accounts Management Rules"
|
6731 |
msgstr ""
|
6732 |
|
6733 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6734 |
msgid ""
|
6735 |
"Enable this if you need XML-RPC functionality e.g. if you use the WordPress "
|
6736 |
"iPhone/Android App."
|
6737 |
msgstr ""
|
6738 |
|
6739 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6740 |
msgid "Allow Import/Export"
|
6741 |
msgstr ""
|
6742 |
|
6743 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6744 |
msgid "Allow Import And Export Of Options On This Site"
|
6745 |
msgstr ""
|
6746 |
|
6747 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6748 |
msgid "Uncheck this box to completely disable import and export of options."
|
6749 |
msgstr ""
|
6750 |
|
6751 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6752 |
msgid "Import/Export is a premium-only feature."
|
6753 |
msgstr ""
|
6754 |
|
6755 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6756 |
msgid "Export Whitelist"
|
6757 |
msgstr ""
|
6758 |
|
6759 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6760 |
msgid "Whitelisted Sites To Export Options From This Site"
|
6761 |
msgstr ""
|
6762 |
|
6763 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6764 |
msgid "Whitelisted sites may export options from this site without the key."
|
6765 |
msgstr ""
|
6766 |
|
6767 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6768 |
msgid "List each site URL on a new line."
|
6769 |
msgstr ""
|
6770 |
|
6771 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6772 |
msgid "This is to be used in conjunction with the Master Import Site feature."
|
6773 |
msgstr ""
|
6774 |
|
6775 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6776 |
msgid "Master Import Site"
|
6777 |
msgstr ""
|
6778 |
|
6779 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6780 |
msgid "Automatically Import Options From This Site URL"
|
6781 |
msgstr ""
|
6782 |
|
6783 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6784 |
msgid "Supplying a site URL here will make this site an 'Options Slave'."
|
6785 |
msgstr ""
|
6786 |
|
6787 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6788 |
msgid "Options will be automatically exported from the Master site each day."
|
6789 |
msgstr ""
|
6790 |
|
6791 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6792 |
msgid ""
|
6793 |
"Use of this feature will overwrite existing options and replace them with "
|
6794 |
"those from the Master Import Site."
|
6795 |
msgstr ""
|
6796 |
|
6797 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6798 |
msgid "Notify Whitelist"
|
6799 |
msgstr ""
|
6800 |
|
6801 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6802 |
msgid "Notify Sites On The Whitelist To Update Options From Master"
|
6803 |
msgstr ""
|
6804 |
|
6805 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6806 |
msgid ""
|
6807 |
"When enabled, manual options saving will notify sites on the whitelist to "
|
6808 |
"export options from the Master site."
|
6809 |
msgstr ""
|
6810 |
|
6811 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6812 |
#: src/processors/plugin_importexport.php:59
|
6813 |
#: src/processors/plugin_importexport.php:63
|
6814 |
msgid "Secret Key"
|
6815 |
msgstr ""
|
6816 |
|
6817 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6818 |
msgid "Import/Export Secret Key"
|
6819 |
msgstr ""
|
6820 |
|
6821 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6822 |
msgid ""
|
6823 |
"Keep this Secret Key private as it will allow the import and export of "
|
6824 |
"options."
|
6825 |
msgstr ""
|
6826 |
|
6827 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6828 |
msgid "Installation ID"
|
6829 |
msgstr ""
|
6830 |
|
6831 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6832 |
msgid "Unique Plugin Installation ID"
|
6833 |
msgstr ""
|
6834 |
|
6835 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6836 |
msgid "Keep this ID private."
|
6837 |
msgstr ""
|
6838 |
|
6839 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6840 |
msgid "reCAPTCHA Secret"
|
6841 |
msgstr ""
|
6842 |
|
6843 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6844 |
msgid "Google reCAPTCHA Secret Key"
|
6845 |
msgstr ""
|
6846 |
|
6847 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6848 |
msgid "Enter your Google reCAPTCHA secret key for use throughout the plugin."
|
6849 |
msgstr ""
|
6850 |
|
6851 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6852 |
msgid "reCAPTCHA Site Key"
|
6853 |
msgstr ""
|
6854 |
|
6855 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6856 |
msgid "Google reCAPTCHA Site Key"
|
6857 |
msgstr ""
|
6858 |
|
6859 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6860 |
msgid "Enter your Google reCAPTCHA site key for use throughout the plugin"
|
6861 |
msgstr ""
|
6862 |
|
6863 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6864 |
msgid "How Google reCAPTCHA Will Be Displayed By Default"
|
6865 |
msgstr ""
|
6866 |
|
6867 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6868 |
msgid "Install"
|
6869 |
msgstr ""
|
6870 |
|
6871 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6872 |
msgid "Update"
|
6873 |
msgstr ""
|
6874 |
|
6875 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6876 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:146
|
6877 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:172
|
6878 |
msgid "Activate"
|
6879 |
msgstr ""
|
6880 |
|
6881 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6882 |
#: src/lib/src/Tables/Render/AdminNotes.php:20
|
6883 |
#: src/lib/src/Tables/Render/Base.php:203
|
|
|
6884 |
#: src/lib/src/Tables/Render/ScanUfc.php:29
|
6885 |
msgid "Delete"
|
6886 |
msgstr ""
|
6887 |
|
6888 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6889 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:173
|
6890 |
msgid "Edit Theme Options"
|
6891 |
msgstr ""
|
6892 |
|
6893 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6894 |
msgid "Create/Edit"
|
6895 |
msgstr ""
|
6896 |
|
6897 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6898 |
msgid "Publish"
|
6899 |
msgstr ""
|
6900 |
|
6901 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6902 |
msgid "Author Name"
|
6903 |
msgstr ""
|
6904 |
|
6905 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6906 |
msgid "Author Email"
|
6907 |
msgstr ""
|
6908 |
|
6909 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6910 |
msgid "Comment Content"
|
6911 |
msgstr ""
|
6912 |
|
6913 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6914 |
msgid "Browser User Agent"
|
6915 |
msgstr ""
|
6916 |
|
6917 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6918 |
msgid "Login"
|
6919 |
msgstr ""
|
6920 |
|
6921 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6922 |
msgid "Register"
|
6923 |
msgstr ""
|
6924 |
|
6925 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6926 |
msgid "Lost Password"
|
6927 |
msgstr ""
|
6928 |
|
6929 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6930 |
msgid "Checkout (WooCommerce)"
|
6931 |
msgstr ""
|
6932 |
|
6933 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6934 |
msgid "Simple Requests"
|
6935 |
msgstr ""
|
6936 |
|
6937 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6938 |
msgid "Logged-In Users"
|
6939 |
msgstr ""
|
6940 |
|
6941 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6942 |
msgid "Search Engines"
|
6943 |
msgstr ""
|
6944 |
|
6945 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6946 |
msgid "Uptime Monitoring Services"
|
6947 |
msgstr ""
|
6948 |
|
6949 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6950 |
msgid "Enabled With Email Reports"
|
6951 |
msgstr ""
|
6952 |
|
6953 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6954 |
msgid "Minor Versions Only"
|
6955 |
msgstr ""
|
6956 |
|
6957 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6958 |
msgid "Major and Minor Versions"
|
6959 |
msgstr ""
|
6960 |
|
6961 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6962 |
msgid "Let The Plugin Decide"
|
6963 |
msgstr ""
|
6964 |
|
6965 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6966 |
msgid "As Soon As Possible"
|
6967 |
msgstr ""
|
6968 |
|
6969 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6970 |
msgid "Move To Pending Moderation"
|
6971 |
msgstr ""
|
6972 |
|
6973 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6974 |
msgid "Move To SPAM"
|
6975 |
msgstr ""
|
6976 |
|
6977 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6978 |
msgid "Move To Trash"
|
6979 |
msgstr ""
|
6980 |
|
6981 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6982 |
msgid "Block And Redirect"
|
6983 |
msgstr ""
|
6984 |
|
6985 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6986 |
msgid "Invisible"
|
6987 |
msgstr ""
|
6988 |
|
6989 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6990 |
msgid "Default Style"
|
6991 |
msgstr ""
|
6992 |
|
6993 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6994 |
msgid "Redirect To Home Page"
|
6995 |
msgstr ""
|
6996 |
|
6997 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
6998 |
msgid "Return 404"
|
6999 |
msgstr ""
|
7000 |
|
7001 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7002 |
msgid "Die"
|
7003 |
msgstr ""
|
7004 |
|
7005 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7006 |
msgid "Scan Disabled"
|
7007 |
msgstr ""
|
7008 |
|
7009 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7010 |
msgid "Scan Enabled"
|
7011 |
msgstr ""
|
7012 |
|
7013 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7014 |
msgid "Automatic Scan Disabled"
|
7015 |
msgstr ""
|
7016 |
|
7017 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7018 |
msgid "Automatic Scan Enabled"
|
7019 |
msgstr ""
|
7020 |
|
7021 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7022 |
msgid "Scan Enabled - Send Email Notification"
|
7023 |
msgstr ""
|
7024 |
|
7025 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7026 |
msgid "Scan Enabled - No Email Notification"
|
7027 |
msgstr ""
|
7028 |
|
7029 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7030 |
msgid "Scan Enabled - Automatically Delete Files"
|
7031 |
msgstr ""
|
7032 |
|
7033 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7034 |
msgid "Scan Enabled - Delete Files and Send Email Notification"
|
7035 |
msgstr ""
|
7036 |
|
7037 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7038 |
msgid "Off: iFrames Not Blocked"
|
7039 |
msgstr ""
|
7040 |
|
7041 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7042 |
msgid "On: Allow iFrames On The Same Domain"
|
7043 |
msgstr ""
|
7044 |
|
7045 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7046 |
msgid "On: Block All iFrames"
|
7047 |
msgstr ""
|
7048 |
|
7049 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7050 |
msgid "Default: Full Referrer URL (aka 'Unsafe URL')"
|
7051 |
msgstr ""
|
7052 |
|
7053 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7054 |
msgid "No Referrer"
|
7055 |
msgstr ""
|
7056 |
|
7057 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7058 |
msgid "No Referrer When Downgrade"
|
7059 |
msgstr ""
|
7060 |
|
7061 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7062 |
msgid "Same Origin"
|
7063 |
msgstr ""
|
7064 |
|
7065 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7066 |
msgid "Origin"
|
7067 |
msgstr ""
|
7068 |
|
7069 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7070 |
msgid "Strict Origin"
|
7071 |
msgstr ""
|
7072 |
|
7073 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7074 |
msgid "Origin When Cross-Origin"
|
7075 |
msgstr ""
|
7076 |
|
7077 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7078 |
msgid "Strict Origin When Cross-Origin"
|
7079 |
msgstr ""
|
7080 |
|
7081 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7082 |
msgid "Empty Header"
|
7083 |
msgstr ""
|
7084 |
|
7085 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7086 |
msgid "Disabled - Don't Send This Header"
|
7087 |
msgstr ""
|
7088 |
|
7089 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7090 |
msgid "Minute"
|
7091 |
msgstr ""
|
7092 |
|
7093 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7094 |
msgid "Hour"
|
7095 |
msgstr ""
|
7096 |
|
7097 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7098 |
msgid "Day"
|
7099 |
msgstr ""
|
7100 |
|
7101 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7102 |
msgid "Week"
|
7103 |
msgstr ""
|
7104 |
|
7105 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7106 |
msgid "Month"
|
7107 |
msgstr ""
|
7108 |
|
7109 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7110 |
msgid "With Shield Bot Protection"
|
7111 |
msgstr ""
|
7112 |
|
7113 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7114 |
msgid "Audit Log Only"
|
7115 |
msgstr ""
|
7116 |
|
7117 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7118 |
msgid "Increment Offense Counter"
|
7119 |
msgstr ""
|
7120 |
|
7121 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7122 |
msgid "Double-Increment Offense Counter"
|
7123 |
msgstr ""
|
7124 |
|
7125 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7126 |
msgid "Immediate Block"
|
7127 |
msgstr ""
|
7128 |
|
7129 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7130 |
msgid "Security Dashboard"
|
7131 |
msgstr ""
|
7132 |
|
7133 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7134 |
msgid "Automatically Detect Visitor IP"
|
7135 |
msgstr ""
|
7136 |
|
7137 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7138 |
msgid "IP Address White List"
|
7139 |
msgstr ""
|
7140 |
|
7141 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7142 |
msgid ""
|
7143 |
"Any IP addresses on this list will by-pass all Plugin Security Checking."
|
7144 |
msgstr ""
|
7145 |
|
7146 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7147 |
msgid "Choose IP Addresses To Blacklist"
|
7148 |
msgstr ""
|
7149 |
|
7150 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7151 |
#, php-format
|
7152 |
msgid "Recommendation - %s"
|
7153 |
msgstr ""
|
7154 |
|
7155 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7156 |
msgid "Blacklist"
|
7157 |
msgstr ""
|
7158 |
|
7159 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7160 |
msgid "Logging"
|
7161 |
msgstr ""
|
7162 |
|
7163 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7164 |
#, php-format
|
7165 |
msgid ""
|
7166 |
"User \"%s\" was forcefully logged out as they were not verified by either "
|
7167 |
"cookie or IP address (or both)."
|
7168 |
msgstr ""
|
7169 |
|
7170 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7171 |
#, php-format
|
7172 |
msgid ""
|
7173 |
"User \"%s\" was found to be un-verified at the given IP Address: \"%s\"."
|
7174 |
msgstr ""
|
7175 |
|
7176 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7177 |
msgid "Cookie"
|
7178 |
msgstr ""
|
7179 |
|
7180 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7181 |
#: src/lib/src/Tables/Build/Traffic.php:140
|
7182 |
msgid "IP"
|
7183 |
msgstr ""
|
7184 |
|
7185 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7186 |
msgid ""
|
7187 |
"This will restrict all user login sessions to a single browser. Use this if "
|
7188 |
"your users have dynamic IP addresses."
|
7189 |
msgstr ""
|
7190 |
|
7191 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7192 |
msgid ""
|
7193 |
"All users will be required to authenticate their login by email-based two-"
|
7194 |
"factor authentication, when logging in from a new IP address"
|
7195 |
msgstr ""
|
7196 |
|
7197 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7198 |
msgid "2-Factor Auth"
|
7199 |
msgstr ""
|
7200 |
|
7201 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7202 |
msgid "Include Logged-In Users"
|
7203 |
msgstr ""
|
7204 |
|
7205 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7206 |
msgid "You may also enable GASP for logged in users"
|
7207 |
msgstr ""
|
7208 |
|
7209 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7210 |
msgid ""
|
7211 |
"Since logged-in users would be expected to be vetted already, this is off by "
|
7212 |
"default."
|
7213 |
msgstr ""
|
7214 |
|
7215 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7216 |
msgid "Protect your security plugin not just your WordPress site"
|
7217 |
msgstr ""
|
7218 |
|
7219 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7220 |
msgid "Get a view on what happens on your site, when it happens"
|
7221 |
msgstr ""
|
7222 |
|
7223 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7224 |
msgid "Audit Trail Viewer"
|
7225 |
msgstr ""
|
7226 |
|
7227 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7228 |
msgid "Take back full control of WordPress automatic updates"
|
7229 |
msgstr ""
|
7230 |
|
7231 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7232 |
msgid "Comments SPAM"
|
7233 |
msgstr ""
|
7234 |
|
7235 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7236 |
msgid "Block Bad IPs/Visitors"
|
7237 |
msgstr ""
|
7238 |
|
7239 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7240 |
msgid "Block comment SPAM and retain your privacy"
|
7241 |
msgstr ""
|
7242 |
|
7243 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7244 |
msgid "Automatically block malicious URLs and data sent to your site"
|
7245 |
msgstr ""
|
7246 |
|
7247 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7248 |
msgid "Control HTTP Security Headers"
|
7249 |
msgstr ""
|
7250 |
|
7251 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7252 |
msgid "Manage Visitor IP Address"
|
7253 |
msgstr ""
|
7254 |
|
7255 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7256 |
msgid "Harden the more loosely controlled settings of your site"
|
7257 |
msgstr ""
|
7258 |
|
7259 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7260 |
msgid ""
|
7261 |
"Block brute force attacks and secure user identities with Two-Factor "
|
7262 |
"Authentication"
|
7263 |
msgstr ""
|
7264 |
|
7265 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7266 |
msgid "Dashboard"
|
7267 |
msgstr ""
|
7268 |
|
7269 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7270 |
msgid "General Plugin Settings"
|
7271 |
msgstr ""
|
7272 |
|
7273 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7274 |
msgid "Statistics"
|
7275 |
msgstr ""
|
7276 |
|
7277 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7278 |
msgid "Summary of the main security actions taken by this plugin"
|
7279 |
msgstr ""
|
7280 |
|
7281 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7282 |
msgid "Stats Viewer"
|
7283 |
msgstr ""
|
7284 |
|
7285 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7286 |
msgid "Premium Support"
|
7287 |
msgstr ""
|
7288 |
|
7289 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7290 |
msgid "Premium Plugin Support Centre"
|
7291 |
msgstr ""
|
7292 |
|
7293 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7294 |
msgid ""
|
7295 |
"Get true user sessions and control account sharing, session duration and "
|
7296 |
"timeouts"
|
7297 |
msgstr ""
|
7298 |
|
7299 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7300 |
msgid "Two-Factor Authentication"
|
7301 |
msgstr ""
|
7302 |
|
7303 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7304 |
msgid "Dark Theme"
|
7305 |
msgstr ""
|
7306 |
|
7307 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7308 |
msgid "Once"
|
7309 |
msgstr ""
|
7310 |
|
7311 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7312 |
msgid "Twice"
|
7313 |
msgstr ""
|
7314 |
|
7315 |
-
#: src/lib/src/Modules/Plugin/Strings.php:
|
7316 |
msgid "Go To Security Dashboard"
|
7317 |
msgstr ""
|
7318 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7319 |
#: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:42
|
7320 |
#: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:67
|
7321 |
#, php-format
|
@@ -7436,12 +7627,6 @@ msgstr ""
|
|
7436 |
msgid "Access Restriction Zones"
|
7437 |
msgstr ""
|
7438 |
|
7439 |
-
#: src/lib/src/Modules/SecurityAdmin/Strings.php:62
|
7440 |
-
#: src/lib/src/Modules/SecurityAdmin/Strings.php:75
|
7441 |
-
#: src/lib/src/Modules/SecurityAdmin/Strings.php:180
|
7442 |
-
msgid "White Label"
|
7443 |
-
msgstr ""
|
7444 |
-
|
7445 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:66
|
7446 |
#, php-format
|
7447 |
msgid "Rename and re-brand the %s plugin for your client site installations."
|
@@ -8427,18 +8612,18 @@ msgstr ""
|
|
8427 |
msgid "Please contact your website administrator."
|
8428 |
msgstr ""
|
8429 |
|
8430 |
-
#: src/lib/src/Scans/Mal/Repair.php:
|
8431 |
#, php-format
|
8432 |
msgid "%s not installed from WordPress.org."
|
8433 |
msgstr ""
|
8434 |
|
8435 |
-
#: src/lib/src/Scans/Mal/Repair.php:
|
8436 |
#: src/processors/hackprotect_scan_apc.php:84
|
8437 |
#: src/processors/hackprotect_scan_wpv.php:241
|
8438 |
msgid "Plugin"
|
8439 |
msgstr ""
|
8440 |
|
8441 |
-
#: src/lib/src/Scans/Mal/Repair.php:
|
8442 |
msgid "Plugin developer doesn't use SVN tags for official releases."
|
8443 |
msgstr ""
|
8444 |
|
@@ -8459,12 +8644,24 @@ msgstr ""
|
|
8459 |
msgid "Abandoned"
|
8460 |
msgstr ""
|
8461 |
|
8462 |
-
#: src/lib/src/Tables/Build/ScanMal.php:
|
8463 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8464 |
msgid "Potential Malware Detected"
|
8465 |
msgstr ""
|
8466 |
|
8467 |
-
#: src/lib/src/Tables/Build/ScanMal.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8468 |
msgid "Repair Unavailable"
|
8469 |
msgstr ""
|
8470 |
|
@@ -8522,6 +8719,7 @@ msgid "Refresh"
|
|
8522 |
msgstr ""
|
8523 |
|
8524 |
#: src/lib/src/Tables/Render/Base.php:215
|
|
|
8525 |
#: src/lib/src/Tables/Render/ScanWcf.php:29
|
8526 |
msgid "Repair"
|
8527 |
msgstr ""
|
@@ -8594,14 +8792,6 @@ msgstr ""
|
|
8594 |
msgid "Deactivate"
|
8595 |
msgstr ""
|
8596 |
|
8597 |
-
#: src/lib/src/Tables/Render/ScanWpv.php:55
|
8598 |
-
#: src/processors/hackprotect_scan_mal.php:138
|
8599 |
-
#: src/processors/hackprotect_scan_wcf.php:112
|
8600 |
-
#: src/processors/hackprotect_scan_wpv.php:201
|
8601 |
-
#: src/processors/loginprotect_intent.php:285
|
8602 |
-
msgid "More Info"
|
8603 |
-
msgstr ""
|
8604 |
-
|
8605 |
#: src/lib/src/Tables/Render/ScanWpv.php:75
|
8606 |
msgid "Vulnerability"
|
8607 |
msgstr ""
|
@@ -8619,20 +8809,20 @@ msgstr ""
|
|
8619 |
msgid "Page"
|
8620 |
msgstr ""
|
8621 |
|
8622 |
-
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:
|
8623 |
-
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:
|
8624 |
msgid "Whoops."
|
8625 |
msgstr ""
|
8626 |
|
8627 |
-
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:
|
8628 |
msgid "Google reCAPTCHA was not submitted."
|
8629 |
msgstr ""
|
8630 |
|
8631 |
-
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:
|
8632 |
msgid "Google reCAPTCHA verification failed."
|
8633 |
msgstr ""
|
8634 |
|
8635 |
-
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:
|
8636 |
msgid "Maybe refresh the page and try again."
|
8637 |
msgstr ""
|
8638 |
|
@@ -8911,29 +9101,29 @@ msgstr ""
|
|
8911 |
msgid "Abandoned Plugin(s) Discovered On Your Site."
|
8912 |
msgstr ""
|
8913 |
|
8914 |
-
#: src/processors/hackprotect_scan_base.php:
|
8915 |
msgid "Run Scanner"
|
8916 |
msgstr ""
|
8917 |
|
8918 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8919 |
#, php-format
|
8920 |
msgid "The %s Malware Scanner found files with potential malware."
|
8921 |
msgstr ""
|
8922 |
|
8923 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8924 |
msgid ""
|
8925 |
"You must examine the file(s) carefully to determine whether suspicious code "
|
8926 |
"is really present."
|
8927 |
msgstr ""
|
8928 |
|
8929 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8930 |
#, php-format
|
8931 |
msgid ""
|
8932 |
"The %s Malware Scanner searches for common malware patterns and so false "
|
8933 |
"positives (detection errors) are to be expected sometimes."
|
8934 |
msgstr ""
|
8935 |
|
8936 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8937 |
#: src/processors/hackprotect_scan_ptg.php:592
|
8938 |
#: src/processors/hackprotect_scan_ufc.php:115
|
8939 |
#: src/processors/hackprotect_scan_wcf.php:98
|
@@ -8942,46 +9132,46 @@ msgstr ""
|
|
8942 |
msgid "Site URL"
|
8943 |
msgstr ""
|
8944 |
|
8945 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8946 |
#: src/processors/hackprotect_scan_wcf.php:106
|
8947 |
#, php-format
|
8948 |
msgid "%s has already attempted to repair the files."
|
8949 |
msgstr ""
|
8950 |
|
8951 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8952 |
#: src/processors/hackprotect_scan_wcf.php:107
|
8953 |
msgid ""
|
8954 |
"But, you should always check these files to ensure everything is as you "
|
8955 |
"expect."
|
8956 |
msgstr ""
|
8957 |
|
8958 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8959 |
#: src/processors/hackprotect_scan_wcf.php:110
|
8960 |
msgid ""
|
8961 |
"You should review these files and replace them with official versions if "
|
8962 |
"required."
|
8963 |
msgstr ""
|
8964 |
|
8965 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8966 |
#: src/processors/hackprotect_scan_wcf.php:111
|
8967 |
msgid ""
|
8968 |
"Alternatively you can have the plugin attempt to repair/replace these files "
|
8969 |
"automatically."
|
8970 |
msgstr ""
|
8971 |
|
8972 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8973 |
#: src/processors/hackprotect_scan_ufc.php:131
|
8974 |
#: src/processors/hackprotect_scan_wcf.php:117
|
8975 |
msgid "We recommend you run the scanner to review your site"
|
8976 |
msgstr ""
|
8977 |
|
8978 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8979 |
#: src/processors/hackprotect_scan_ufc.php:136
|
8980 |
#: src/processors/hackprotect_scan_wcf.php:122
|
8981 |
msgid "More Info On This Scanner"
|
8982 |
msgstr ""
|
8983 |
|
8984 |
-
#: src/processors/hackprotect_scan_mal.php:
|
8985 |
msgid "The following files contain suspected malware:"
|
8986 |
msgstr ""
|
8987 |
|
@@ -9145,54 +9335,54 @@ msgstr ""
|
|
9145 |
msgid "No custom message provided."
|
9146 |
msgstr ""
|
9147 |
|
9148 |
-
#: src/processors/ips.php:
|
9149 |
#, php-format
|
9150 |
msgid "You've been blocked by the %s plugin"
|
9151 |
msgstr ""
|
9152 |
|
9153 |
-
#: src/processors/ips.php:
|
9154 |
#, php-format
|
9155 |
msgid "Time remaining on black list: %s"
|
9156 |
msgstr ""
|
9157 |
|
9158 |
-
#: src/processors/ips.php:
|
9159 |
#, php-format
|
9160 |
msgid "%s minute"
|
9161 |
msgid_plural "%s minutes"
|
9162 |
msgstr[0] ""
|
9163 |
msgstr[1] ""
|
9164 |
|
9165 |
-
#: src/processors/ips.php:
|
9166 |
#, php-format
|
9167 |
msgid ""
|
9168 |
"You tripped the security plugin defenses a total of %s times making you a "
|
9169 |
"suspect."
|
9170 |
msgstr ""
|
9171 |
|
9172 |
-
#: src/processors/ips.php:
|
9173 |
msgid ""
|
9174 |
"If you believe this to be in error, please contact the site owner and quote "
|
9175 |
"your IP address below."
|
9176 |
msgstr ""
|
9177 |
|
9178 |
-
#: src/processors/ips.php:
|
9179 |
msgid "Auto-Unblock Your IP"
|
9180 |
msgstr ""
|
9181 |
|
9182 |
-
#: src/processors/ips.php:
|
9183 |
msgid ""
|
9184 |
"You can automatically unblock your IP address by clicking the button below."
|
9185 |
msgstr ""
|
9186 |
|
9187 |
-
#: src/processors/ips.php:
|
9188 |
msgid "Unblock My IP Address"
|
9189 |
msgstr ""
|
9190 |
|
9191 |
-
#: src/processors/ips.php:
|
9192 |
msgid "You MUST enable Javascript to be able to login"
|
9193 |
msgstr ""
|
9194 |
|
9195 |
-
#: src/processors/ips.php:
|
9196 |
msgid "No Label"
|
9197 |
msgstr ""
|
9198 |
|
@@ -9208,11 +9398,11 @@ msgstr ""
|
|
9208 |
msgid "Anonymous access to the WordPress Rest API has been restricted by %s."
|
9209 |
msgstr ""
|
9210 |
|
9211 |
-
#: src/processors/loginprotect_cooldown.php:
|
9212 |
msgid "Request Cooldown in effect."
|
9213 |
msgstr ""
|
9214 |
|
9215 |
-
#: src/processors/loginprotect_cooldown.php:
|
9216 |
#, php-format
|
9217 |
msgid "You must wait %s seconds before attempting this action again."
|
9218 |
msgstr ""
|
@@ -9719,10 +9909,6 @@ msgstr ""
|
|
9719 |
msgid "The secret key is found in: %s"
|
9720 |
msgstr ""
|
9721 |
|
9722 |
-
#: src/processors/plugin_importexport.php:63
|
9723 |
-
msgid "Import/Export"
|
9724 |
-
msgstr ""
|
9725 |
-
|
9726 |
#: src/processors/plugin_importexport.php:65
|
9727 |
msgid "Turn On"
|
9728 |
msgstr ""
|
@@ -9792,11 +9978,11 @@ msgstr ""
|
|
9792 |
msgid "Handshake verification failed."
|
9793 |
msgstr ""
|
9794 |
|
9795 |
-
#: src/processors/sessions.php:
|
9796 |
msgid "You're already logged-in."
|
9797 |
msgstr ""
|
9798 |
|
9799 |
-
#: src/processors/sessions.php:
|
9800 |
msgid "Go To Admin"
|
9801 |
msgstr ""
|
9802 |
|
@@ -9885,36 +10071,36 @@ msgid ""
|
|
9885 |
"password."
|
9886 |
msgstr ""
|
9887 |
|
9888 |
-
#: src/processors/usermanagement_passwords.php:
|
9889 |
msgid ""
|
9890 |
"Your security administrator has imposed requirements for password quality."
|
9891 |
msgstr ""
|
9892 |
|
9893 |
-
#: src/processors/usermanagement_passwords.php:
|
9894 |
msgid "Reason"
|
9895 |
msgstr ""
|
9896 |
|
9897 |
-
#: src/processors/usermanagement_passwords.php:
|
9898 |
#, php-format
|
9899 |
msgid "Password length (%s) too short (min: %s characters)"
|
9900 |
msgstr ""
|
9901 |
|
9902 |
-
#: src/processors/usermanagement_passwords.php:
|
9903 |
-
#: src/processors/usermanagement_passwords.php:
|
9904 |
msgid "Please use a different password."
|
9905 |
msgstr ""
|
9906 |
|
9907 |
-
#: src/processors/usermanagement_passwords.php:
|
9908 |
msgid "This password has already been pwned."
|
9909 |
msgstr ""
|
9910 |
|
9911 |
-
#: src/processors/usermanagement_passwords.php:
|
9912 |
-
#: src/processors/usermanagement_passwords.php:
|
9913 |
#, php-format
|
9914 |
msgid "%s times"
|
9915 |
msgstr ""
|
9916 |
|
9917 |
-
#: src/processors/usermanagement_passwords.php:
|
9918 |
msgid "This password has been pwned."
|
9919 |
msgstr ""
|
9920 |
|
@@ -10186,17 +10372,17 @@ msgstr ""
|
|
10186 |
|
10187 |
#: src/wizards/plugin.php:469 src/wizards/plugin.php:502
|
10188 |
#: src/wizards/plugin.php:535 src/wizards/plugin.php:571
|
10189 |
-
#: src/wizards/plugin.php:
|
10190 |
msgid "No changes were made as no option was selected"
|
10191 |
msgstr ""
|
10192 |
|
10193 |
#: src/wizards/plugin.php:482 src/wizards/plugin.php:515
|
10194 |
-
#: src/wizards/plugin.php:550 src/wizards/plugin.php:
|
10195 |
msgid "Enabled"
|
10196 |
msgstr ""
|
10197 |
|
10198 |
#: src/wizards/plugin.php:486 src/wizards/plugin.php:519
|
10199 |
-
#: src/wizards/plugin.php:554 src/wizards/plugin.php:
|
10200 |
#, php-format
|
10201 |
msgid "%s setting could not be changed at this time."
|
10202 |
msgstr ""
|
@@ -10209,11 +10395,11 @@ msgstr ""
|
|
10209 |
msgid "Search item added."
|
10210 |
msgstr ""
|
10211 |
|
10212 |
-
#: src/wizards/plugin.php:
|
10213 |
msgid "All entries were deleted"
|
10214 |
msgstr ""
|
10215 |
|
10216 |
-
#: src/wizards/plugin.php:
|
10217 |
msgid "Please check the box to confirm deletion."
|
10218 |
msgstr ""
|
10219 |
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WPSF v2.0\n"
|
4 |
+
"POT-Creation-Date: 2019-09-30 17:43+0100\n"
|
5 |
+
"PO-Revision-Date: 2019-09-30 17:43+0100\n"
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: en_GB\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.2.4\n"
|
13 |
"X-Poedit-KeywordsList: _wpsf__;gettext;gettext_noop;_wpsf_e;_n;_n:1,2;__;_e\n"
|
14 |
"X-Poedit-Basepath: ..\n"
|
15 |
"X-Poedit-SourceCharset: UTF-8\n"
|
37 |
|
38 |
#: src/features/admin_access_restriction.php:351
|
39 |
#: src/features/admin_access_restriction.php:364
|
40 |
+
#: src/lib/src/Modules/Plugin/Strings.php:399
|
41 |
+
#: src/lib/src/Modules/Plugin/Strings.php:401
|
42 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:35
|
43 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:38
|
44 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:102
|
96 |
msgstr ""
|
97 |
|
98 |
#: src/features/admin_access_restriction.php:420
|
99 |
+
#: src/features/autoupdates.php:168 src/features/hack_protect.php:754
|
100 |
+
#: src/features/hack_protect.php:775 src/features/hack_protect.php:796
|
101 |
+
#: src/features/hack_protect.php:817 src/features/hack_protect.php:838
|
102 |
+
#: src/features/hack_protect.php:859 src/features/insights.php:274
|
103 |
+
#: src/features/insights.php:662 src/features/insights.php:675
|
104 |
+
#: src/features/insights.php:702 src/features/insights.php:715
|
105 |
+
#: src/features/insights.php:741 src/features/insights.php:753
|
106 |
#: src/features/lockdown.php:81 src/features/user_management.php:313
|
107 |
#, php-format
|
108 |
msgid "Go To %s"
|
109 |
msgstr ""
|
110 |
|
111 |
#: src/features/admin_access_restriction.php:420
|
112 |
+
#: src/features/autoupdates.php:168 src/features/hack_protect.php:754
|
113 |
+
#: src/features/hack_protect.php:775 src/features/hack_protect.php:796
|
114 |
+
#: src/features/hack_protect.php:817 src/features/hack_protect.php:838
|
115 |
+
#: src/features/hack_protect.php:859 src/features/insights.php:275
|
116 |
+
#: src/features/insights.php:753 src/features/lockdown.php:81
|
117 |
+
#: src/features/user_management.php:313 src/lib/src/Modules/Base/Strings.php:36
|
118 |
+
#: src/lib/src/Modules/Base/Strings.php:53
|
119 |
#: src/lib/src/Modules/Insights/Strings.php:66
|
120 |
msgid "Options"
|
121 |
msgstr ""
|
133 |
msgid "You'll just need to authenticate first and try again."
|
134 |
msgstr ""
|
135 |
|
136 |
+
#: src/features/audit_trail.php:56
|
137 |
#, php-format
|
138 |
msgid "[%s] Audit Trail Entries"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: src/features/audit_trail.php:120
|
142 |
msgid "Activity Audit Log"
|
143 |
msgstr ""
|
144 |
|
145 |
+
#: src/features/audit_trail.php:121
|
146 |
msgid "Track Activity: What, Who, When, Where"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: src/features/audit_trail.php:134
|
150 |
msgid "users"
|
151 |
msgstr ""
|
152 |
|
153 |
+
#: src/features/audit_trail.php:135
|
154 |
msgid "plugins"
|
155 |
msgstr ""
|
156 |
|
157 |
+
#: src/features/audit_trail.php:136
|
158 |
msgid "themes"
|
159 |
msgstr ""
|
160 |
|
161 |
+
#: src/features/audit_trail.php:137
|
162 |
msgid "posts"
|
163 |
msgstr ""
|
164 |
|
165 |
+
#: src/features/audit_trail.php:138
|
166 |
msgid "emails"
|
167 |
msgstr ""
|
168 |
|
169 |
+
#: src/features/audit_trail.php:143 src/features/audit_trail.php:152
|
170 |
#: src/lib/src/Modules/AuditTrail/Strings.php:141
|
171 |
msgid "Audit Areas"
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: src/features/audit_trail.php:145
|
175 |
msgid "All important events on your site are being logged"
|
176 |
msgstr ""
|
177 |
|
178 |
+
#: src/features/audit_trail.php:154
|
179 |
#, php-format
|
180 |
msgid "No areas are set to be audited: %s"
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: src/features/audit_trail.php:161
|
184 |
msgid "Audit Events"
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: src/features/audit_trail.php:163
|
188 |
#, php-format
|
189 |
msgid "Important events aren't being audited: %s"
|
190 |
msgstr ""
|
191 |
|
192 |
+
#: src/features/audit_trail.php:170 src/features/insights.php:80
|
193 |
+
#: src/features/insights.php:292 src/lib/src/Modules/AuditTrail/Strings.php:122
|
194 |
+
#: src/lib/src/Modules/Plugin/Strings.php:402 src/wizards/plugin.php:481
|
195 |
#: src/wizards/plugin.php:486
|
196 |
msgid "Audit Trail"
|
197 |
msgstr ""
|
198 |
|
199 |
+
#: src/features/audit_trail.php:172
|
200 |
#, php-format
|
201 |
msgid "Maximum Audit Trail entries limited to %s"
|
202 |
msgstr ""
|
204 |
#: src/features/autoupdates.php:157 src/features/autoupdates.php:189
|
205 |
#: src/lib/src/Modules/Autoupdates/Strings.php:25
|
206 |
#: src/lib/src/Modules/HackGuard/Strings.php:226
|
207 |
+
#: src/lib/src/Modules/Plugin/Strings.php:405
|
208 |
msgid "Automatic Updates"
|
209 |
msgstr ""
|
210 |
|
273 |
msgid "%s isn't automatically updated"
|
274 |
msgstr ""
|
275 |
|
276 |
+
#: src/features/base.php:809 src/lib/src/Modules/Base/BaseModCon.php:732
|
277 |
#: src/wizards/plugin.php:482 src/wizards/plugin.php:515
|
278 |
+
#: src/wizards/plugin.php:550 src/wizards/plugin.php:695
|
279 |
msgid "Disabled"
|
280 |
msgstr ""
|
281 |
|
282 |
+
#: src/features/base.php:1118 src/lib/src/Modules/Base/BaseModCon.php:1033
|
283 |
msgid ""
|
284 |
"Unfortunately your WordPress and/or PHP versions are too old to support this "
|
285 |
"feature."
|
286 |
msgstr ""
|
287 |
|
288 |
+
#: src/features/base.php:1273 src/lib/src/Modules/Base/BaseModCon.php:1187
|
289 |
msgid "You don't currently have permission to save settings."
|
290 |
msgstr ""
|
291 |
|
292 |
+
#: src/features/base.php:1367 src/lib/src/Modules/Base/BaseModCon.php:1281
|
293 |
msgid "Password values do not match."
|
294 |
msgstr ""
|
295 |
|
296 |
+
#: src/features/base.php:1593 src/lib/src/Modules/AuditTrail/Strings.php:197
|
297 |
+
#: src/lib/src/Modules/Base/BaseModCon.php:1507
|
298 |
#: src/lib/src/Modules/HackGuard/Strings.php:195
|
299 |
#: src/lib/src/Modules/HackGuard/Strings.php:269
|
300 |
#: src/lib/src/Modules/LoginGuard/Strings.php:265
|
306 |
msgid "Default"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: src/features/base.php:1600 src/lib/src/Modules/Base/BaseModCon.php:1514
|
310 |
msgid "For more information:"
|
311 |
msgstr ""
|
312 |
|
313 |
+
#: src/features/base.php:1601 src/lib/src/Modules/Base/BaseModCon.php:1515
|
314 |
+
#: src/lib/src/Modules/Plugin/Strings.php:432
|
315 |
msgid "Support Forums"
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: src/features/base_wpsf.php:402
|
319 |
msgid "Module Disabled"
|
320 |
msgstr ""
|
321 |
|
322 |
+
#: src/features/base_wpsf.php:404
|
323 |
msgid "All features of this module are completely disabled"
|
324 |
msgstr ""
|
325 |
|
389 |
msgstr ""
|
390 |
|
391 |
#: src/features/firewall.php:86 src/features/firewall.php:98
|
392 |
+
#: src/lib/src/Modules/Events/Strings.php:174
|
393 |
+
#: src/lib/src/Modules/Events/Strings.php:178
|
394 |
+
#: src/lib/src/Modules/Events/Strings.php:182
|
395 |
+
#: src/lib/src/Modules/Events/Strings.php:186
|
396 |
+
#: src/lib/src/Modules/Events/Strings.php:190
|
397 |
+
#: src/lib/src/Modules/Events/Strings.php:194
|
398 |
+
#: src/lib/src/Modules/Events/Strings.php:198
|
399 |
+
#: src/lib/src/Modules/Events/Strings.php:202
|
400 |
#: src/lib/src/Modules/Firewall/Strings.php:24
|
401 |
+
#: src/lib/src/Modules/Plugin/Strings.php:411
|
402 |
msgid "Firewall"
|
403 |
msgstr ""
|
404 |
|
426 |
msgid "Firewall rules aren't applied to admins"
|
427 |
msgstr ""
|
428 |
|
429 |
+
#: src/features/hack_protect.php:165
|
430 |
#, php-format
|
431 |
msgid "%s per day"
|
432 |
msgstr ""
|
433 |
|
434 |
+
#: src/features/hack_protect.php:479
|
435 |
msgid "Re-install First"
|
436 |
msgstr ""
|
437 |
|
438 |
+
#: src/features/hack_protect.php:480
|
439 |
msgid "Then Activate"
|
440 |
msgstr ""
|
441 |
|
442 |
+
#: src/features/hack_protect.php:482 src/features/license.php:551
|
443 |
+
#: src/lib/src/Modules/Base/Strings.php:42 src/lib/src/Tables/Build/Ip.php:54
|
444 |
#: src/lib/src/Tables/Build/ScanBase.php:62
|
445 |
#: src/lib/src/Tables/Build/Sessions.php:68
|
446 |
#: src/lib/src/Tables/Build/Traffic.php:109
|
447 |
msgid "Yes"
|
448 |
msgstr ""
|
449 |
|
450 |
+
#: src/features/hack_protect.php:482
|
451 |
msgid "Re-Install It"
|
452 |
msgstr ""
|
453 |
|
454 |
+
#: src/features/hack_protect.php:483
|
455 |
msgid "Activate Only"
|
456 |
msgstr ""
|
457 |
|
458 |
+
#: src/features/hack_protect.php:484
|
459 |
msgid "Cancel"
|
460 |
msgstr ""
|
461 |
|
462 |
+
#: src/features/hack_protect.php:528 src/features/license.php:543
|
463 |
+
#: src/lib/src/Modules/Base/Strings.php:44
|
464 |
+
#: src/lib/src/Modules/Plugin/Strings.php:325
|
465 |
#: src/processors/hack_protect.php:87 src/processors/hack_protect.php:117
|
466 |
msgid "Never"
|
467 |
msgstr ""
|
468 |
|
469 |
+
#: src/features/hack_protect.php:529
|
470 |
#, php-format
|
471 |
msgid "Last Scan Time: %s"
|
472 |
msgstr ""
|
473 |
|
474 |
+
#: src/features/hack_protect.php:545
|
475 |
#, php-format
|
476 |
msgid ""
|
477 |
"Sorry, this feature is not available because we cannot write to disk at this "
|
478 |
"location: \"%s\""
|
479 |
msgstr ""
|
480 |
|
481 |
+
#: src/features/hack_protect.php:551
|
482 |
#, php-format
|
483 |
msgid "Not available because the %s extension is not available."
|
484 |
msgstr ""
|
485 |
|
486 |
+
#: src/features/hack_protect.php:554
|
487 |
msgid ""
|
488 |
"Not available because PHP/WordPress doesn't have direct filesystem access."
|
489 |
msgstr ""
|
490 |
|
491 |
+
#: src/features/hack_protect.php:559
|
492 |
#, php-format
|
493 |
msgid "The %s file isn't writable and so can't be further protected."
|
494 |
msgstr ""
|
495 |
|
496 |
+
#: src/features/hack_protect.php:744 src/features/insights.php:290
|
497 |
msgid "Scans"
|
498 |
msgstr ""
|
499 |
|
500 |
+
#: src/features/hack_protect.php:752
|
501 |
msgid "Core File scanner is not enabled."
|
502 |
msgstr ""
|
503 |
|
504 |
+
#: src/features/hack_protect.php:755
|
505 |
msgid "Automatic WordPress Core File scanner should be turned-on."
|
506 |
msgstr ""
|
507 |
|
508 |
+
#: src/features/hack_protect.php:761
|
509 |
msgid "Modified WordPress core files found."
|
510 |
msgstr ""
|
511 |
|
512 |
+
#: src/features/hack_protect.php:763 src/features/hack_protect.php:784
|
513 |
+
#: src/features/hack_protect.php:805 src/features/hack_protect.php:826
|
514 |
+
#: src/features/hack_protect.php:847 src/features/hack_protect.php:868
|
515 |
msgid "Run Scan"
|
516 |
msgstr ""
|
517 |
|
518 |
+
#: src/features/hack_protect.php:764
|
519 |
msgid "Scan WP core files and repair any files that are flagged as modified."
|
520 |
msgstr ""
|
521 |
|
522 |
+
#: src/features/hack_protect.php:773
|
523 |
msgid "Unrecognised File scanner is not enabled."
|
524 |
msgstr ""
|
525 |
|
526 |
+
#: src/features/hack_protect.php:776
|
527 |
msgid "Automatic scanning for non-WordPress core files is recommended."
|
528 |
msgstr ""
|
529 |
|
530 |
+
#: src/features/hack_protect.php:782
|
531 |
msgid "Unrecognised files found in WordPress Core directory."
|
532 |
msgstr ""
|
533 |
|
534 |
+
#: src/features/hack_protect.php:785
|
535 |
msgid ""
|
536 |
"Scan and remove any files that are not meant to be in the WP core "
|
537 |
"directories."
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: src/features/hack_protect.php:794
|
541 |
msgid "Automatic Plugin/Themes Guard is not enabled."
|
542 |
msgstr ""
|
543 |
|
544 |
+
#: src/features/hack_protect.php:797
|
545 |
msgid "Automatic detection of plugin/theme modifications is recommended."
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: src/features/hack_protect.php:803
|
549 |
msgid "A plugin/theme was found to have been modified."
|
550 |
msgstr ""
|
551 |
|
552 |
+
#: src/features/hack_protect.php:806
|
553 |
msgid "Reviewing modifications to your plugins/themes is recommended."
|
554 |
msgstr ""
|
555 |
|
556 |
+
#: src/features/hack_protect.php:815
|
557 |
msgid "Vulnerability Scanner is not enabled."
|
558 |
msgstr ""
|
559 |
|
560 |
+
#: src/features/hack_protect.php:818
|
561 |
msgid "Automatic detection of vulnerabilities is recommended."
|
562 |
msgstr ""
|
563 |
|
564 |
+
#: src/features/hack_protect.php:824
|
565 |
msgid "At least 1 item has known vulnerabilities."
|
566 |
msgstr ""
|
567 |
|
568 |
+
#: src/features/hack_protect.php:827
|
569 |
msgid ""
|
570 |
"Items with known vulnerabilities should be updated, removed, or replaced."
|
571 |
msgstr ""
|
572 |
|
573 |
+
#: src/features/hack_protect.php:836
|
574 |
msgid "Abandoned Plugins Scanner is not enabled."
|
575 |
msgstr ""
|
576 |
|
577 |
+
#: src/features/hack_protect.php:839
|
578 |
msgid "Automatic detection of abandoned plugins is recommended."
|
579 |
msgstr ""
|
580 |
|
581 |
+
#: src/features/hack_protect.php:845
|
582 |
msgid "At least 1 plugin on your site is abandoned."
|
583 |
msgstr ""
|
584 |
|
585 |
+
#: src/features/hack_protect.php:848
|
586 |
msgid ""
|
587 |
"Plugins that have been abandoned represent a potential risk to your site."
|
588 |
msgstr ""
|
589 |
|
590 |
+
#: src/features/hack_protect.php:857 src/features/hack_protect.php:1000
|
591 |
+
#: src/features/hack_protect.php:1012
|
592 |
#, php-format
|
593 |
msgid "%s Scanner is not enabled."
|
594 |
msgstr ""
|
595 |
|
596 |
+
#: src/features/hack_protect.php:860
|
597 |
msgid "Automatic detection of Malware is recommended."
|
598 |
msgstr ""
|
599 |
|
600 |
+
#: src/features/hack_protect.php:866
|
601 |
msgid "At least 1 file with potential Malware has been discovered."
|
602 |
msgstr ""
|
603 |
|
604 |
+
#: src/features/hack_protect.php:869
|
605 |
msgid ""
|
606 |
"Files identified as potential malware should be examined as soon as possible."
|
607 |
msgstr ""
|
608 |
|
609 |
+
#: src/features/hack_protect.php:893
|
610 |
#: src/lib/src/Modules/HackGuard/Strings.php:94
|
611 |
+
#: src/lib/src/Modules/Plugin/Strings.php:413
|
612 |
msgid "Hack Guard"
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: src/features/hack_protect.php:894
|
616 |
msgid "Threats/Intrusions Detection & Repair"
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: src/features/hack_protect.php:906
|
620 |
msgid "Scan Frequency"
|
621 |
msgstr ""
|
622 |
|
623 |
+
#: src/features/hack_protect.php:909
|
624 |
msgid "Automatic scanners run more than once per day"
|
625 |
msgstr ""
|
626 |
|
627 |
+
#: src/features/hack_protect.php:910
|
628 |
msgid "Automatic scanners only run once per day"
|
629 |
msgstr ""
|
630 |
|
631 |
+
#: src/features/hack_protect.php:917
|
632 |
msgid "WP Core File Scan"
|
633 |
msgstr ""
|
634 |
|
635 |
+
#: src/features/hack_protect.php:920
|
636 |
msgid "Core files scanned regularly for hacks"
|
637 |
msgstr ""
|
638 |
|
639 |
+
#: src/features/hack_protect.php:921
|
640 |
msgid "Core files are never scanned for hacks!"
|
641 |
msgstr ""
|
642 |
|
643 |
+
#: src/features/hack_protect.php:927
|
644 |
msgid "WP Core File Repair"
|
645 |
msgstr ""
|
646 |
|
647 |
+
#: src/features/hack_protect.php:930
|
648 |
msgid "Core files are automatically repaired"
|
649 |
msgstr ""
|
650 |
|
651 |
+
#: src/features/hack_protect.php:931
|
652 |
msgid "Core files aren't automatically repaired!"
|
653 |
msgstr ""
|
654 |
|
655 |
+
#: src/features/hack_protect.php:939 src/lib/src/Modules/Events/Strings.php:107
|
656 |
+
#: src/lib/src/Modules/Events/Strings.php:131
|
657 |
#: src/lib/src/Modules/HackGuard/Strings.php:26
|
658 |
#: src/lib/src/Modules/HackGuard/Strings.php:118
|
659 |
msgid "Unrecognised Files"
|
660 |
msgstr ""
|
661 |
|
662 |
+
#: src/features/hack_protect.php:942
|
663 |
msgid "Core directories scanned regularly for unrecognised files"
|
664 |
msgstr ""
|
665 |
|
666 |
+
#: src/features/hack_protect.php:943
|
667 |
msgid "WP Core is never scanned for unrecognised files!"
|
668 |
msgstr ""
|
669 |
|
670 |
+
#: src/features/hack_protect.php:949
|
671 |
msgid "Unrecognised Files Removal"
|
672 |
msgstr ""
|
673 |
|
674 |
+
#: src/features/hack_protect.php:952
|
675 |
msgid "Unrecognised files are automatically removed"
|
676 |
msgstr ""
|
677 |
|
678 |
+
#: src/features/hack_protect.php:953
|
679 |
msgid "Unrecognised files aren't automatically removed!"
|
680 |
msgstr ""
|
681 |
|
682 |
+
#: src/features/hack_protect.php:961
|
683 |
msgid "Vulnerability Scan"
|
684 |
msgstr ""
|
685 |
|
686 |
+
#: src/features/hack_protect.php:964
|
687 |
msgid "Regularly scanning for known vulnerabilities"
|
688 |
msgstr ""
|
689 |
|
690 |
+
#: src/features/hack_protect.php:965
|
691 |
msgid "Plugins/Themes never scanned for vulnerabilities!"
|
692 |
msgstr ""
|
693 |
|
694 |
+
#: src/features/hack_protect.php:971
|
695 |
msgid "Auto Update"
|
696 |
msgstr ""
|
697 |
|
698 |
+
#: src/features/hack_protect.php:974
|
699 |
msgid "Vulnerable items are automatically updated"
|
700 |
msgstr ""
|
701 |
|
702 |
+
#: src/features/hack_protect.php:975
|
703 |
msgid "Vulnerable items aren't automatically updated!"
|
704 |
msgstr ""
|
705 |
|
706 |
+
#: src/features/hack_protect.php:984 src/lib/src/Modules/Events/Strings.php:103
|
707 |
+
#: src/lib/src/Modules/Events/Strings.php:127
|
708 |
#: src/lib/src/Modules/HackGuard/Strings.php:24
|
709 |
msgid "Plugin/Theme Guard"
|
710 |
msgstr ""
|
711 |
|
712 |
+
#: src/features/hack_protect.php:987
|
713 |
msgid "Plugins and Themes are guarded against tampering"
|
714 |
msgstr ""
|
715 |
|
716 |
+
#: src/features/hack_protect.php:988
|
717 |
msgid "Plugins and Themes are never scanned for tampering!"
|
718 |
msgstr ""
|
719 |
|
720 |
+
#: src/features/hack_protect.php:999 src/features/hack_protect.php:1011
|
721 |
#, php-format
|
722 |
msgid "%s Scanner is enabled."
|
723 |
msgstr ""
|
730 |
msgid "Protect Visitors With Powerful HTTP Headers"
|
731 |
msgstr ""
|
732 |
|
733 |
+
#: src/features/headers.php:147 src/lib/src/Modules/Plugin/Strings.php:414
|
734 |
msgid "HTTP Headers"
|
735 |
msgstr ""
|
736 |
|
754 |
msgid "Content Security Policies aren't active"
|
755 |
msgstr ""
|
756 |
|
757 |
+
#: src/features/insights.php:81
|
758 |
msgid "Audit Trail Filters"
|
759 |
msgstr ""
|
760 |
|
761 |
+
#: src/features/insights.php:82 src/features/insights.php:176
|
762 |
msgid "Providing a username will cause the 'logged-in' filter to be ignored."
|
763 |
msgstr ""
|
764 |
|
765 |
+
#: src/features/insights.php:83 src/features/insights.php:174
|
766 |
msgid "Exclude Your Current IP"
|
767 |
msgstr ""
|
768 |
|
769 |
+
#: src/features/insights.php:84 src/features/insights.php:175
|
770 |
msgid "Exclude Your IP From Results"
|
771 |
msgstr ""
|
772 |
|
773 |
+
#: src/features/insights.php:85
|
774 |
msgid "Context"
|
775 |
msgstr ""
|
776 |
|
777 |
+
#: src/features/insights.php:86 src/lib/src/Modules/AuditTrail/Strings.php:97
|
778 |
+
msgid "Event"
|
779 |
+
msgstr ""
|
780 |
+
|
781 |
+
#: src/features/insights.php:87
|
782 |
msgid "show results that occurred after"
|
783 |
msgstr ""
|
784 |
|
785 |
+
#: src/features/insights.php:88
|
786 |
msgid "show results that occurred before"
|
787 |
msgstr ""
|
788 |
|
789 |
+
#: src/features/insights.php:110
|
790 |
#, php-format
|
791 |
msgid "Offenses required for IP block: %s"
|
792 |
msgstr ""
|
793 |
|
794 |
+
#: src/features/insights.php:114
|
795 |
#, php-format
|
796 |
msgid "Black listed IPs auto-expire after: %s"
|
797 |
msgstr ""
|
798 |
|
799 |
+
#: src/features/insights.php:121 src/lib/src/Modules/Plugin/Strings.php:380
|
800 |
msgid "IP Whitelist"
|
801 |
msgstr ""
|
802 |
|
803 |
+
#: src/features/insights.php:122
|
804 |
msgid "IP Blacklist"
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: src/features/insights.php:123
|
808 |
#, php-format
|
809 |
msgid "IP addresses that are never blocked by %s."
|
810 |
msgstr ""
|
811 |
|
812 |
+
#: src/features/insights.php:124
|
813 |
#, php-format
|
814 |
msgid "IP addresses that have tripped %s defenses."
|
815 |
msgstr ""
|
816 |
|
817 |
+
#: src/features/insights.php:125
|
818 |
msgid "Enter IP address to block"
|
819 |
msgstr ""
|
820 |
|
821 |
+
#: src/features/insights.php:126
|
822 |
msgid "Enter IP address to whitelist"
|
823 |
msgstr ""
|
824 |
|
825 |
+
#: src/features/insights.php:127
|
826 |
msgid "Label for IP"
|
827 |
msgstr ""
|
828 |
|
829 |
+
#: src/features/insights.php:128
|
830 |
msgid "New IP"
|
831 |
msgstr ""
|
832 |
|
833 |
+
#: src/features/insights.php:129
|
834 |
msgid "Block IP"
|
835 |
msgstr ""
|
836 |
|
837 |
+
#: src/features/insights.php:147
|
838 |
msgid "Administrator Notes"
|
839 |
msgstr ""
|
840 |
|
841 |
+
#: src/features/insights.php:148
|
842 |
msgid "Use this feature to make ongoing notes and to-dos"
|
843 |
msgstr ""
|
844 |
|
845 |
+
#: src/features/insights.php:149
|
846 |
msgid "Add Note"
|
847 |
msgstr ""
|
848 |
|
849 |
+
#: src/features/insights.php:150
|
850 |
msgid "New Note"
|
851 |
msgstr ""
|
852 |
|
853 |
+
#: src/features/insights.php:151
|
854 |
msgid "Enter new note here"
|
855 |
msgstr ""
|
856 |
|
857 |
+
#: src/features/insights.php:169
|
858 |
msgid "Traffic Table Filters"
|
859 |
msgstr ""
|
860 |
|
861 |
+
#: src/features/insights.php:170
|
862 |
msgid "Traffic Watch"
|
863 |
msgstr ""
|
864 |
|
865 |
+
#: src/features/insights.php:171
|
866 |
msgid "Watch and review requests to your site"
|
867 |
msgstr ""
|
868 |
|
869 |
+
#: src/features/insights.php:172 src/lib/src/Tables/Build/Traffic.php:148
|
870 |
#: src/lib/src/Tables/Render/Traffic.php:14
|
871 |
msgid "Response"
|
872 |
msgstr ""
|
873 |
|
874 |
+
#: src/features/insights.php:173
|
875 |
msgid "Page/Path Contains"
|
876 |
msgstr ""
|
877 |
|
878 |
+
#: src/features/insights.php:212
|
879 |
msgid "Sessions Table Filters"
|
880 |
msgstr ""
|
881 |
|
882 |
+
#: src/features/insights.php:213 src/processors/events.php:53
|
883 |
msgid "User Sessions"
|
884 |
msgstr ""
|
885 |
|
886 |
+
#: src/features/insights.php:214
|
887 |
msgid "Review and manage current user sessions"
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: src/features/insights.php:215
|
891 |
msgid ""
|
892 |
"Some sessions may have expired but haven't been automatically cleaned from "
|
893 |
"the database yet"
|
894 |
msgstr ""
|
895 |
|
896 |
+
#: src/features/insights.php:216 src/lib/src/Modules/AuditTrail/Strings.php:99
|
897 |
+
#: src/lib/src/Modules/Base/Strings.php:49
|
898 |
#: src/lib/src/Modules/UserManagement/Strings.php:16
|
899 |
#: src/lib/src/Tables/Render/AdminNotes.php:31
|
900 |
#: src/processors/loginprotect_intentprovider_backup.php:164
|
904 |
msgid "Username"
|
905 |
msgstr ""
|
906 |
|
907 |
+
#: src/features/insights.php:268
|
908 |
msgid "Recent Events Log"
|
909 |
msgstr ""
|
910 |
|
911 |
+
#: src/features/insights.php:269
|
912 |
msgid "Security Notices"
|
913 |
msgstr ""
|
914 |
|
915 |
+
#: src/features/insights.php:270
|
916 |
msgid "Potential security issues on your site right now"
|
917 |
msgstr ""
|
918 |
|
919 |
+
#: src/features/insights.php:271
|
920 |
msgid "Plugin Configuration Summary"
|
921 |
msgstr ""
|
922 |
|
923 |
+
#: src/features/insights.php:272
|
924 |
msgid "click to toggle"
|
925 |
msgstr ""
|
926 |
|
927 |
+
#: src/features/insights.php:277 src/lib/src/Modules/License/Strings.php:31
|
928 |
msgid "Key"
|
929 |
msgstr ""
|
930 |
|
931 |
+
#: src/features/insights.php:278
|
932 |
msgid "Positive Security"
|
933 |
msgstr ""
|
934 |
|
935 |
+
#: src/features/insights.php:279
|
936 |
msgid "Potential Warning"
|
937 |
msgstr ""
|
938 |
|
939 |
+
#: src/features/insights.php:280
|
940 |
msgid "Potential Danger"
|
941 |
msgstr ""
|
942 |
|
943 |
+
#: src/features/insights.php:281
|
944 |
msgid "Information"
|
945 |
msgstr ""
|
946 |
|
947 |
+
#: src/features/insights.php:288 src/lib/src/Modules/Base/Strings.php:39
|
948 |
msgid "Settings"
|
949 |
msgstr ""
|
950 |
|
951 |
+
#: src/features/insights.php:289
|
952 |
msgid "Overview"
|
953 |
msgstr ""
|
954 |
|
955 |
+
#: src/features/insights.php:291
|
956 |
msgid "IP Lists"
|
957 |
msgstr ""
|
958 |
|
959 |
+
#: src/features/insights.php:293 src/features/user_management.php:291
|
960 |
#: src/lib/src/Modules/AuditTrail/Strings.php:90
|
961 |
msgid "Users"
|
962 |
msgstr ""
|
963 |
|
964 |
+
#: src/features/insights.php:294 src/features/insights.php:302
|
965 |
msgid "Pro"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: src/features/insights.php:295
|
969 |
msgid "Traffic"
|
970 |
msgstr ""
|
971 |
|
972 |
+
#: src/features/insights.php:296
|
973 |
msgid "Notes"
|
974 |
msgstr ""
|
975 |
|
976 |
+
#: src/features/insights.php:298 src/lib/src/Modules/Plugin/Strings.php:80
|
977 |
+
#: src/lib/src/Modules/Plugin/Strings.php:85
|
978 |
msgid "Import"
|
979 |
msgstr ""
|
980 |
|
981 |
+
#: src/features/insights.php:298 src/lib/src/Modules/Plugin/Strings.php:80
|
982 |
+
#: src/lib/src/Modules/Plugin/Strings.php:85
|
983 |
msgid "Export"
|
984 |
msgstr ""
|
985 |
|
986 |
+
#: src/features/insights.php:480 src/processors/plugin_importexport.php:74
|
987 |
msgid "Downloading file, please wait..."
|
988 |
msgstr ""
|
989 |
|
990 |
+
#: src/features/insights.php:481 src/processors/plugin_importexport.php:75
|
991 |
msgid "There was a problem downloading the file."
|
992 |
msgstr ""
|
993 |
|
994 |
+
#: src/features/insights.php:482
|
995 |
msgid "Please select an action to perform."
|
996 |
msgstr ""
|
997 |
|
998 |
+
#: src/features/insights.php:483 src/processors/hackprotect_scan_ptg.php:157
|
999 |
msgid "Are you sure?"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
+
#: src/features/insights.php:577
|
1003 |
msgid "Site"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
+
#: src/features/insights.php:601
|
1007 |
msgid "SSL certificate for this site has expired."
|
1008 |
msgstr ""
|
1009 |
|
1010 |
+
#: src/features/insights.php:604
|
1011 |
#, php-format
|
1012 |
msgid "SSL certificate will expire soon (in %s days)"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
+
#: src/features/insights.php:611
|
1016 |
msgid "Check or renew your SSL certificate."
|
1017 |
msgstr ""
|
1018 |
|
1019 |
+
#: src/features/insights.php:634
|
1020 |
msgid "DB Password appears to be weak."
|
1021 |
msgstr ""
|
1022 |
|
1023 |
+
#: src/features/insights.php:636
|
1024 |
msgid "The database password should be strong."
|
1025 |
msgstr ""
|
1026 |
|
1027 |
+
#: src/features/insights.php:651 src/features/insights.php:662
|
1028 |
#: src/lib/src/Modules/AuditTrail/Strings.php:91
|
1029 |
#: src/lib/src/Modules/AuditTrail/Strings.php:213
|
1030 |
#: src/lib/src/Modules/AuditTrail/Strings.php:214
|
1033 |
msgid "Plugins"
|
1034 |
msgstr ""
|
1035 |
|
1036 |
+
#: src/features/insights.php:659
|
1037 |
msgid "Inactive"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
+
#: src/features/insights.php:660
|
1041 |
#, php-format
|
1042 |
msgid "%s inactive plugin(s)"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: src/features/insights.php:663
|
1046 |
msgid "Unused plugins should be removed."
|
1047 |
msgstr ""
|
1048 |
|
1049 |
+
#: src/features/insights.php:673
|
1050 |
#, php-format
|
1051 |
msgid "%s plugin update(s)"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
+
#: src/features/insights.php:675 src/features/insights.php:715
|
1055 |
+
#: src/features/insights.php:741
|
1056 |
msgid "Updates"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
+
#: src/features/insights.php:676 src/features/insights.php:716
|
1060 |
+
#: src/features/insights.php:742
|
1061 |
msgid "Updates should be applied as early as possible."
|
1062 |
msgstr ""
|
1063 |
|
1064 |
+
#: src/features/insights.php:691 src/features/insights.php:702
|
1065 |
#: src/lib/src/Modules/AuditTrail/Strings.php:92
|
1066 |
#: src/lib/src/Modules/AuditTrail/Strings.php:219
|
1067 |
#: src/lib/src/Modules/AuditTrail/Strings.php:220
|
1070 |
msgid "Themes"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
+
#: src/features/insights.php:700
|
1074 |
#, php-format
|
1075 |
msgid "%s inactive themes(s)"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
+
#: src/features/insights.php:703
|
1079 |
msgid "Unused themes should be removed."
|
1080 |
msgstr ""
|
1081 |
|
1082 |
+
#: src/features/insights.php:713
|
1083 |
#, php-format
|
1084 |
msgid "%s theme update(s)"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
+
#: src/features/insights.php:731
|
1088 |
msgid "WordPress Core"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
+
#: src/features/insights.php:739
|
1092 |
msgid "WordPress Core has an update available."
|
1093 |
msgstr ""
|
1094 |
|
1095 |
+
#: src/features/insights.php:751
|
1096 |
msgid "WordPress does not automatically install updates."
|
1097 |
msgstr ""
|
1098 |
|
1099 |
+
#: src/features/insights.php:754
|
1100 |
msgid "Minor WordPress upgrades should be applied automatically."
|
1101 |
msgstr ""
|
1102 |
|
1103 |
+
#: src/features/insights.php:780 src/processors/events.php:45
|
1104 |
msgid "Login Blocks"
|
1105 |
msgstr ""
|
1106 |
|
1107 |
+
#: src/features/insights.php:782
|
1108 |
msgid "Total login attempts blocked."
|
1109 |
msgstr ""
|
1110 |
|
1111 |
+
#: src/features/insights.php:785 src/processors/events.php:41
|
1112 |
msgid "Firewall Blocks"
|
1113 |
msgstr ""
|
1114 |
|
1115 |
+
#: src/features/insights.php:787
|
1116 |
msgid "Total requests blocked by firewall rules."
|
1117 |
msgstr ""
|
1118 |
|
1119 |
+
#: src/features/insights.php:790 src/processors/events.php:33
|
1120 |
msgid "Comment Blocks"
|
1121 |
msgstr ""
|
1122 |
|
1123 |
+
#: src/features/insights.php:796
|
1124 |
msgid "Total SPAM comments blocked."
|
1125 |
msgstr ""
|
1126 |
|
1127 |
+
#: src/features/insights.php:799 src/lib/src/Tables/Render/IpBase.php:23
|
1128 |
#: src/lib/src/Tables/Render/IpBlack.php:14
|
1129 |
msgid "Offenses"
|
1130 |
msgstr ""
|
1131 |
|
1132 |
+
#: src/features/insights.php:801
|
1133 |
msgid "Total offenses against the site."
|
1134 |
msgstr ""
|
1135 |
|
1136 |
+
#: src/features/insights.php:804 src/processors/events.php:57
|
1137 |
msgid "IP Blocks"
|
1138 |
msgstr ""
|
1139 |
|
1140 |
+
#: src/features/insights.php:806
|
1141 |
msgid "Total connections blocked/killed after too many offenses."
|
1142 |
msgstr ""
|
1143 |
|
1144 |
+
#: src/features/insights.php:809
|
1145 |
msgid "Blacklist IPs"
|
1146 |
msgstr ""
|
1147 |
|
1148 |
+
#: src/features/insights.php:817
|
1149 |
msgid "Current IP addresses with offenses against the site."
|
1150 |
msgstr ""
|
1151 |
|
1152 |
+
#: src/features/insights.php:863
|
1153 |
msgid "Not yet recorded"
|
1154 |
msgstr ""
|
1155 |
|
1156 |
+
#: src/features/ips.php:91 src/lib/src/Modules/HackGuard/Strings.php:45
|
1157 |
#: src/lib/src/Modules/HackGuard/Strings.php:204
|
1158 |
#: src/lib/src/Modules/Headers/Strings.php:140
|
1159 |
#: src/lib/src/Modules/LoginGuard/Strings.php:81
|
1163 |
#: src/lib/src/Modules/LoginGuard/Strings.php:213
|
1164 |
#: src/lib/src/Modules/LoginGuard/Strings.php:221
|
1165 |
#: src/lib/src/Modules/LoginGuard/Strings.php:235
|
1166 |
+
#: src/lib/src/Modules/Plugin/Strings.php:101
|
1167 |
+
#: src/lib/src/Modules/Plugin/Strings.php:105
|
1168 |
+
#: src/lib/src/Modules/Plugin/Strings.php:201
|
1169 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:120
|
1170 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:139
|
1171 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:146
|
1176 |
msgid "Note"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
+
#: src/features/ips.php:91
|
1180 |
msgid "IP blocking is turned-off because the offenses limit is set to 0."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
+
#: src/features/ips.php:99
|
1184 |
msgid "Since the offenses limit is set to 0, these options have no effect."
|
1185 |
msgstr ""
|
1186 |
|
1187 |
+
#: src/features/ips.php:103
|
1188 |
msgid ""
|
1189 |
"Your User Agent appears to be empty. We recommend not turning on this option."
|
1190 |
msgstr ""
|
1191 |
|
1192 |
+
#: src/features/ips.php:121 src/features/ips.php:128
|
1193 |
#: src/lib/src/Modules/Firewall/Strings.php:138
|
1194 |
#: src/lib/src/Modules/HackGuard/Strings.php:259
|
1195 |
#: src/lib/src/Modules/HackGuard/Strings.php:283
|
1196 |
#: src/lib/src/Modules/HackGuard/Strings.php:284
|
1197 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:367
|
1198 |
#: src/lib/src/Modules/IPs/Strings.php:66
|
1199 |
#: src/lib/src/Modules/Lockdown/Strings.php:130
|
1200 |
#: src/lib/src/Modules/Lockdown/Strings.php:143
|
1201 |
#: src/lib/src/Modules/Plugin/AdminNotices.php:88
|
1202 |
+
#: src/lib/src/Modules/Plugin/Strings.php:217
|
1203 |
#: src/lib/src/Modules/Traffic/Strings.php:54
|
1204 |
#: src/processors/hackprotect_scan_apc.php:100
|
1205 |
+
#: src/processors/hackprotect_scan_mal.php:119
|
1206 |
#: src/processors/hackprotect_scan_ptg.php:617
|
1207 |
#: src/processors/hackprotect_scan_ufc.php:85
|
1208 |
#: src/processors/hackprotect_scan_wcf.php:71
|
1212 |
msgid "Warning"
|
1213 |
msgstr ""
|
1214 |
|
1215 |
+
#: src/features/ips.php:122
|
1216 |
msgid ""
|
1217 |
"Repeated login attempts that fail will result in a complete ban of your IP "
|
1218 |
"Address."
|
1219 |
msgstr ""
|
1220 |
|
1221 |
+
#: src/features/ips.php:129
|
1222 |
#, php-format
|
1223 |
msgid ""
|
1224 |
"You have %s remaining offenses(s) against this site and then your IP address "
|
1225 |
"will be completely blocked."
|
1226 |
msgstr ""
|
1227 |
|
1228 |
+
#: src/features/ips.php:130
|
1229 |
msgid "Seriously, stop repeating what you are doing or you will be locked out."
|
1230 |
msgstr ""
|
1231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1232 |
#: src/features/license.php:116
|
1233 |
msgid "Automatic license verification failed."
|
1234 |
msgstr ""
|
1251 |
msgid "All attempts to verify Shield Pro license have failed."
|
1252 |
msgstr ""
|
1253 |
|
1254 |
+
#: src/features/license.php:551
|
1255 |
msgid "Not Active"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
+
#: src/features/lockdown.php:70 src/lib/src/Modules/Plugin/Strings.php:418
|
1259 |
msgid "WP Lockdown"
|
1260 |
msgstr ""
|
1261 |
|
1287 |
msgid "File editing is permitted through WP admin"
|
1288 |
msgstr ""
|
1289 |
|
1290 |
+
#: src/features/lockdown.php:124 src/lib/src/Modules/Events/Strings.php:234
|
1291 |
msgid "XML-RPC"
|
1292 |
msgstr ""
|
1293 |
|
1367 |
msgid "Administrators"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
+
#: src/features/login_protect.php:458
|
1371 |
msgid "I'm a human."
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: src/features/login_protect.php:462
|
1375 |
msgid "Please check the box to show us you're a human."
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: src/features/login_protect.php:497
|
1379 |
#, php-format
|
1380 |
msgid "Support for login protection with %s is a Pro-only feature."
|
1381 |
msgstr ""
|
1382 |
|
1383 |
+
#: src/features/login_protect.php:503
|
1384 |
msgid ""
|
1385 |
"2FA by email demands that your WP site is properly configured to send email."
|
1386 |
msgstr ""
|
1387 |
|
1388 |
+
#: src/features/login_protect.php:504
|
1389 |
msgid ""
|
1390 |
"This is a common problem and you may get locked out in the future if you "
|
1391 |
"ignore this."
|
1392 |
msgstr ""
|
1393 |
|
1394 |
+
#: src/features/login_protect.php:505
|
1395 |
#: src/lib/src/Modules/Plugin/AdminNotices.php:194
|
1396 |
#: src/processors/lockdown.php:96
|
1397 |
msgid "Learn More."
|
1398 |
msgstr ""
|
1399 |
|
1400 |
+
#: src/features/login_protect.php:586
|
1401 |
#: src/lib/src/Modules/LoginGuard/Strings.php:71
|
1402 |
+
#: src/lib/src/Modules/Plugin/Strings.php:420 src/wizards/plugin.php:549
|
1403 |
#: src/wizards/plugin.php:554
|
1404 |
msgid "Login Guard"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
+
#: src/features/login_protect.php:587
|
1408 |
msgid "Brute Force Protection & Identity Verification"
|
1409 |
msgstr ""
|
1410 |
|
1411 |
+
#: src/features/login_protect.php:603
|
1412 |
msgid "Brute Force Login"
|
1413 |
msgstr ""
|
1414 |
|
1415 |
+
#: src/features/login_protect.php:606
|
1416 |
msgid "Login forms are protected against bot attacks"
|
1417 |
msgstr ""
|
1418 |
|
1419 |
+
#: src/features/login_protect.php:607
|
1420 |
msgid "Login forms are not protected against brute force bot attacks"
|
1421 |
msgstr ""
|
1422 |
|
1423 |
+
#: src/features/login_protect.php:612
|
1424 |
msgid "Bot User Register"
|
1425 |
msgstr ""
|
1426 |
|
1427 |
+
#: src/features/login_protect.php:615
|
1428 |
msgid "Registration forms are protected against bot attacks"
|
1429 |
msgstr ""
|
1430 |
|
1431 |
+
#: src/features/login_protect.php:616
|
1432 |
msgid "Registration forms are not protected against automated bots"
|
1433 |
msgstr ""
|
1434 |
|
1435 |
+
#: src/features/login_protect.php:621
|
1436 |
msgid "Brute Force Lost Password"
|
1437 |
msgstr ""
|
1438 |
|
1439 |
+
#: src/features/login_protect.php:624
|
1440 |
msgid "Lost Password forms are protected against bot attacks"
|
1441 |
msgstr ""
|
1442 |
|
1443 |
+
#: src/features/login_protect.php:625
|
1444 |
msgid "Lost Password forms are not protected against automated bots"
|
1445 |
msgstr ""
|
1446 |
|
1447 |
+
#: src/features/login_protect.php:633
|
1448 |
msgid "Identity Verification"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
+
#: src/features/login_protect.php:636
|
1452 |
msgid "At least 1 2FA option is enabled"
|
1453 |
msgstr ""
|
1454 |
|
1455 |
+
#: src/features/login_protect.php:637
|
1456 |
msgid "No 2FA options, such as Google Authenticator, are active"
|
1457 |
msgstr ""
|
1458 |
|
1459 |
+
#: src/features/plugin.php:165 src/lib/src/Modules/Plugin/AjaxHandler.php:243
|
1460 |
msgid "Options imported successfully"
|
1461 |
msgstr ""
|
1462 |
|
1463 |
+
#: src/features/plugin.php:710 src/lib/src/Modules/Plugin/Strings.php:377
|
|
|
|
|
|
|
|
|
|
|
|
|
1464 |
#: src/processors/plugin_importexport.php:63
|
1465 |
msgid "General Settings"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
+
#: src/features/plugin.php:711
|
1469 |
#, php-format
|
1470 |
msgid "General %s Settings"
|
1471 |
msgstr ""
|
1472 |
|
1473 |
+
#: src/features/plugin.php:724
|
1474 |
msgid "Visitor IP"
|
1475 |
msgstr ""
|
1476 |
|
1477 |
+
#: src/features/plugin.php:726
|
1478 |
#, php-format
|
1479 |
msgid "Visitor IP address source is: %s"
|
1480 |
msgstr ""
|
1481 |
|
1482 |
+
#: src/features/plugin.php:734
|
1483 |
msgid "Reporting Email"
|
1484 |
msgstr ""
|
1485 |
|
1486 |
+
#: src/features/plugin.php:737
|
1487 |
#, php-format
|
1488 |
msgid "Email address for reports set to: %s"
|
1489 |
msgstr ""
|
1490 |
|
1491 |
+
#: src/features/plugin.php:738
|
1492 |
#, php-format
|
1493 |
msgid "No address provided - defaulting to: %s"
|
1494 |
msgstr ""
|
1495 |
|
1496 |
+
#: src/features/plugin.php:746 src/lib/src/Modules/Events/Strings.php:222
|
1497 |
msgid "reCAPTCHA"
|
1498 |
msgstr ""
|
1499 |
|
1500 |
+
#: src/features/plugin.php:749
|
1501 |
msgid "Google reCAPTCHA keys have been provided"
|
1502 |
msgstr ""
|
1503 |
|
1504 |
+
#: src/features/plugin.php:750
|
1505 |
msgid "Google reCAPTCHA keys haven't been provided"
|
1506 |
msgstr ""
|
1507 |
|
1508 |
+
#: src/features/traffic.php:57
|
1509 |
+
msgid ""
|
1510 |
+
"Traffic Watcher will not run because visitor IP address detection is not "
|
1511 |
+
"correctly configured."
|
1512 |
+
msgstr ""
|
1513 |
+
|
1514 |
+
#: src/features/traffic.php:63
|
1515 |
#, php-format
|
1516 |
msgid "%s is a Pro-only feature."
|
1517 |
msgstr ""
|
1518 |
|
1519 |
+
#: src/features/traffic.php:63
|
1520 |
+
msgid "Traffic Limiting"
|
|
|
|
|
1521 |
msgstr ""
|
1522 |
|
1523 |
#: src/features/user_management.php:143
|
1524 |
+
#: src/lib/src/Modules/Plugin/Strings.php:370
|
1525 |
msgid "Very Weak"
|
1526 |
msgstr ""
|
1527 |
|
1528 |
#: src/features/user_management.php:144
|
1529 |
+
#: src/lib/src/Modules/Plugin/Strings.php:371
|
1530 |
msgid "Weak"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
#: src/features/user_management.php:145
|
1534 |
+
#: src/lib/src/Modules/Plugin/Strings.php:372
|
1535 |
+
#: src/lib/src/Modules/Plugin/Strings.php:441
|
1536 |
msgid "Medium"
|
1537 |
msgstr ""
|
1538 |
|
1539 |
#: src/features/user_management.php:146
|
1540 |
+
#: src/lib/src/Modules/Plugin/Strings.php:373
|
1541 |
msgid "Strong"
|
1542 |
msgstr ""
|
1543 |
|
1544 |
#: src/features/user_management.php:147
|
1545 |
+
#: src/lib/src/Modules/Plugin/Strings.php:374
|
1546 |
msgid "Very Strong"
|
1547 |
msgstr ""
|
1548 |
|
1555 |
msgstr ""
|
1556 |
|
1557 |
#: src/features/user_management.php:310 src/features/user_management.php:380
|
1558 |
+
#: src/lib/src/Modules/Base/Strings.php:26
|
1559 |
#: src/lib/src/Modules/UserManagement/Strings.php:45
|
1560 |
#: src/lib/src/Modules/UserManagement/Strings.php:46
|
1561 |
msgid "Password Policies"
|
1570 |
msgstr ""
|
1571 |
|
1572 |
#: src/features/user_management.php:332
|
1573 |
+
#: src/lib/src/Modules/Plugin/Strings.php:429
|
1574 |
#: src/lib/src/Modules/Sessions/Strings.php:24
|
1575 |
#: src/lib/src/Modules/Traffic/Strings.php:43
|
1576 |
#: src/lib/src/Modules/Traffic/Strings.php:53
|
1802 |
msgid "Time"
|
1803 |
msgstr ""
|
1804 |
|
|
|
|
|
|
|
|
|
1805 |
#: src/lib/src/Modules/AuditTrail/Strings.php:98
|
1806 |
#: src/lib/src/Modules/IPs/Strings.php:226
|
1807 |
#: src/lib/src/Tables/Render/AuditTrail.php:69
|
1813 |
msgstr ""
|
1814 |
|
1815 |
#: src/lib/src/Modules/AuditTrail/Strings.php:101
|
1816 |
+
#: src/lib/src/Modules/Base/Strings.php:59
|
1817 |
+
#: src/lib/src/Modules/Plugin/Strings.php:391
|
1818 |
#: src/lib/src/Tables/Render/IpBase.php:21
|
1819 |
#: src/lib/src/Tables/Render/IpBlack.php:16
|
1820 |
#: src/lib/src/Tables/Render/IpWhite.php:12 src/processors/firewall.php:403
|
1838 |
|
1839 |
#: src/lib/src/Modules/AuditTrail/Strings.php:117
|
1840 |
#: src/lib/src/Modules/Autoupdates/Strings.php:21
|
1841 |
+
#: src/lib/src/Modules/Base/Strings.php:40
|
1842 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:38
|
1843 |
#: src/lib/src/Modules/Firewall/Strings.php:19
|
1844 |
#: src/lib/src/Modules/HackGuard/Strings.php:90
|
1857 |
|
1858 |
#: src/lib/src/Modules/AuditTrail/Strings.php:117
|
1859 |
#: src/lib/src/Modules/Autoupdates/Strings.php:21
|
1860 |
+
#: src/lib/src/Modules/Base/Strings.php:41
|
1861 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:38
|
1862 |
#: src/lib/src/Modules/Firewall/Strings.php:19
|
1863 |
#: src/lib/src/Modules/HackGuard/Strings.php:90
|
1901 |
#: src/lib/src/Modules/Autoupdates/Strings.php:42
|
1902 |
#: src/lib/src/Modules/Autoupdates/Strings.php:53
|
1903 |
#: src/lib/src/Modules/Autoupdates/Strings.php:63
|
1904 |
+
#: src/lib/src/Modules/Base/Strings.php:147
|
1905 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:41
|
1906 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:50
|
1907 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:57
|
1935 |
#: src/lib/src/Modules/LoginGuard/Strings.php:117
|
1936 |
#: src/lib/src/Modules/LoginGuard/Strings.php:126
|
1937 |
#: src/lib/src/Modules/LoginGuard/Strings.php:135
|
1938 |
+
#: src/lib/src/Modules/Plugin/Strings.php:67
|
1939 |
+
#: src/lib/src/Modules/Plugin/Strings.php:75
|
1940 |
+
#: src/lib/src/Modules/Plugin/Strings.php:82
|
1941 |
+
#: src/lib/src/Modules/Plugin/Strings.php:97
|
1942 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:37
|
1943 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:46
|
1944 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:55
|
1972 |
#: src/lib/src/Modules/Autoupdates/Strings.php:33
|
1973 |
#: src/lib/src/Modules/Autoupdates/Strings.php:45
|
1974 |
#: src/lib/src/Modules/Autoupdates/Strings.php:54
|
1975 |
+
#: src/lib/src/Modules/Base/Strings.php:148
|
1976 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:42
|
1977 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:58
|
1978 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:68
|
2009 |
#: src/lib/src/Modules/LoginGuard/Strings.php:108
|
2010 |
#: src/lib/src/Modules/LoginGuard/Strings.php:127
|
2011 |
#: src/lib/src/Modules/LoginGuard/Strings.php:242
|
2012 |
+
#: src/lib/src/Modules/Plugin/Strings.php:99
|
2013 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:38
|
2014 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:47
|
2015 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:56
|
2511 |
msgstr ""
|
2512 |
|
2513 |
#: src/lib/src/Modules/Base/Strings.php:19
|
2514 |
+
msgid "Customer Support"
|
2515 |
msgstr ""
|
2516 |
|
2517 |
#: src/lib/src/Modules/Base/Strings.php:20
|
2518 |
+
msgid "More Scans"
|
2519 |
+
msgstr ""
|
2520 |
+
|
2521 |
+
#: src/lib/src/Modules/Base/Strings.php:21
|
2522 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:147
|
2523 |
+
msgid "Malware Scanner"
|
2524 |
msgstr ""
|
2525 |
|
2526 |
#: src/lib/src/Modules/Base/Strings.php:22
|
2527 |
+
msgid "Scan Every Hour"
|
|
|
2528 |
msgstr ""
|
2529 |
|
2530 |
#: src/lib/src/Modules/Base/Strings.php:23
|
2531 |
+
#: src/lib/src/Modules/SecurityAdmin/Strings.php:62
|
2532 |
+
#: src/lib/src/Modules/SecurityAdmin/Strings.php:75
|
2533 |
+
#: src/lib/src/Modules/SecurityAdmin/Strings.php:180
|
2534 |
+
msgid "White Label"
|
2535 |
+
msgstr ""
|
2536 |
+
|
2537 |
+
#: src/lib/src/Modules/Base/Strings.php:24
|
2538 |
+
#: src/processors/plugin_importexport.php:63
|
2539 |
+
msgid "Import/Export"
|
2540 |
+
msgstr ""
|
2541 |
+
|
2542 |
+
#: src/lib/src/Modules/Base/Strings.php:25
|
2543 |
+
msgid "Better Bot Detection"
|
2544 |
+
msgstr ""
|
2545 |
+
|
2546 |
+
#: src/lib/src/Modules/Base/Strings.php:27
|
2547 |
+
msgid "WooCommerce Support"
|
2548 |
+
msgstr ""
|
2549 |
+
|
2550 |
+
#: src/lib/src/Modules/Base/Strings.php:30
|
2551 |
+
msgid "and much more!"
|
2552 |
+
msgstr ""
|
2553 |
+
|
2554 |
+
#: src/lib/src/Modules/Base/Strings.php:34
|
2555 |
+
msgid "Watch Help Video"
|
2556 |
+
msgstr ""
|
2557 |
+
|
2558 |
+
#: src/lib/src/Modules/Base/Strings.php:35
|
2559 |
+
msgid "Save Options"
|
2560 |
+
msgstr ""
|
2561 |
+
|
2562 |
+
#: src/lib/src/Modules/Base/Strings.php:37
|
2563 |
+
#: src/lib/src/Modules/Base/Strings.php:57
|
2564 |
+
msgid "Help"
|
2565 |
+
msgstr ""
|
2566 |
+
|
2567 |
+
#: src/lib/src/Modules/Base/Strings.php:38
|
2568 |
msgid "Wizards"
|
2569 |
msgstr ""
|
2570 |
|
2571 |
+
#: src/lib/src/Modules/Base/Strings.php:38
|
2572 |
msgid "No Wizards"
|
2573 |
msgstr ""
|
2574 |
|
2575 |
+
#: src/lib/src/Modules/Base/Strings.php:43 src/lib/src/Tables/Build/Ip.php:54
|
2576 |
#: src/lib/src/Tables/Build/ScanBase.php:62
|
2577 |
#: src/lib/src/Tables/Build/Sessions.php:68
|
2578 |
#: src/lib/src/Tables/Build/Traffic.php:85
|
2580 |
msgid "No"
|
2581 |
msgstr ""
|
2582 |
|
2583 |
+
#: src/lib/src/Modules/Base/Strings.php:45
|
2584 |
msgid "Until"
|
2585 |
msgstr ""
|
2586 |
|
2587 |
+
#: src/lib/src/Modules/Base/Strings.php:46
|
2588 |
msgid "Since"
|
2589 |
msgstr ""
|
2590 |
|
2591 |
+
#: src/lib/src/Modules/Base/Strings.php:47
|
2592 |
msgid "Info"
|
2593 |
msgstr ""
|
2594 |
|
2595 |
+
#: src/lib/src/Modules/Base/Strings.php:48
|
2596 |
#: src/lib/src/Tables/Build/Traffic.php:141
|
2597 |
#: src/lib/src/Tables/Render/Sessions.php:38
|
2598 |
msgid "Logged-In"
|
2599 |
msgstr ""
|
2600 |
|
2601 |
+
#: src/lib/src/Modules/Base/Strings.php:50
|
2602 |
msgid "Blog"
|
2603 |
msgstr ""
|
2604 |
|
2605 |
+
#: src/lib/src/Modules/Base/Strings.php:51
|
2606 |
#, php-format
|
2607 |
msgid "Save %s Settings"
|
2608 |
msgstr ""
|
2609 |
|
2610 |
+
#: src/lib/src/Modules/Base/Strings.php:54
|
2611 |
msgid "Configure Module"
|
2612 |
msgstr ""
|
2613 |
|
2614 |
+
#: src/lib/src/Modules/Base/Strings.php:55
|
2615 |
msgid "Actions and Info"
|
2616 |
msgstr ""
|
2617 |
|
2618 |
+
#: src/lib/src/Modules/Base/Strings.php:56
|
2619 |
msgid "Perform actions for this module"
|
2620 |
msgstr ""
|
2621 |
|
2622 |
+
#: src/lib/src/Modules/Base/Strings.php:58
|
2623 |
msgid "Learn More"
|
2624 |
msgstr ""
|
2625 |
|
2626 |
+
#: src/lib/src/Modules/Base/Strings.php:60
|
2627 |
msgid "Select"
|
2628 |
msgstr ""
|
2629 |
|
2630 |
+
#: src/lib/src/Modules/Base/Strings.php:61
|
2631 |
msgid "Clear Filters"
|
2632 |
msgstr ""
|
2633 |
|
2634 |
+
#: src/lib/src/Modules/Base/Strings.php:62
|
2635 |
msgid "Apply Filters"
|
2636 |
msgstr ""
|
2637 |
|
2638 |
+
#: src/lib/src/Modules/Base/Strings.php:63
|
2639 |
msgid "Find Plugin Option"
|
2640 |
msgstr ""
|
2641 |
|
2642 |
+
#: src/lib/src/Modules/Base/Strings.php:64
|
2643 |
msgid "Type below to search all plugin options"
|
2644 |
msgstr ""
|
2645 |
|
2646 |
+
#: src/lib/src/Modules/Base/Strings.php:65
|
2647 |
#: src/processors/loginprotect_intentprovider_yubikey.php:30
|
2648 |
#: src/processors/loginprotect_intentprovider_yubikey.php:37
|
2649 |
msgid "Pro Only"
|
2650 |
msgstr ""
|
2651 |
|
2652 |
+
#: src/lib/src/Modules/Base/Strings.php:66
|
2653 |
msgid "This is a pro-only feature"
|
2654 |
msgstr ""
|
2655 |
|
2656 |
+
#: src/lib/src/Modules/Base/Strings.php:67
|
2657 |
msgid "Go Pro!"
|
2658 |
msgstr ""
|
2659 |
|
2660 |
+
#: src/lib/src/Modules/Base/Strings.php:69
|
2661 |
msgid "Please upgrade to Pro to control this option"
|
2662 |
msgstr ""
|
2663 |
|
2664 |
+
#: src/lib/src/Modules/Base/Strings.php:71
|
2665 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:205
|
2666 |
msgid "Description"
|
2667 |
msgstr ""
|
2668 |
|
2669 |
+
#: src/lib/src/Modules/Base/Strings.php:72 src/processors/ips.php:283
|
2670 |
#: src/processors/loginprotect_gasp.php:31
|
2671 |
msgid "Loading"
|
2672 |
msgstr ""
|
2673 |
|
2674 |
+
#: src/lib/src/Modules/Base/Strings.php:73
|
2675 |
msgid "Plugin Access Restricted"
|
2676 |
msgstr ""
|
2677 |
|
2678 |
+
#: src/lib/src/Modules/Base/Strings.php:74
|
2679 |
msgid ""
|
2680 |
"This security plugin is restricted to administrators with the Security "
|
2681 |
"Access Key."
|
2682 |
msgstr ""
|
2683 |
|
2684 |
+
#: src/lib/src/Modules/Base/Strings.php:75
|
2685 |
msgid "Please provide the Security Access Key to manage this plugin."
|
2686 |
msgstr ""
|
2687 |
|
2688 |
+
#: src/lib/src/Modules/Base/Strings.php:76
|
2689 |
msgid "To manage this plugin you must enter the access key."
|
2690 |
msgstr ""
|
2691 |
|
2692 |
+
#: src/lib/src/Modules/Base/Strings.php:77
|
2693 |
msgid "Enter Access Key"
|
2694 |
msgstr ""
|
2695 |
|
2696 |
+
#: src/lib/src/Modules/Base/Strings.php:78
|
2697 |
msgid "Submit Security Admin Key"
|
2698 |
msgstr ""
|
2699 |
|
2700 |
+
#: src/lib/src/Modules/Base/Strings.php:79
|
2701 |
msgid "Forgotten Key"
|
2702 |
msgstr ""
|
2703 |
|
2704 |
+
#: src/lib/src/Modules/Base/Strings.php:80
|
2705 |
msgid "Supply Password"
|
2706 |
msgstr ""
|
2707 |
|
2708 |
+
#: src/lib/src/Modules/Base/Strings.php:81
|
2709 |
msgid "Confirm Password"
|
2710 |
msgstr ""
|
2711 |
|
2712 |
+
#: src/lib/src/Modules/Base/Strings.php:82
|
2713 |
msgid "Show help video for this section"
|
2714 |
msgstr ""
|
2715 |
|
2716 |
+
#: src/lib/src/Modules/Base/Strings.php:84
|
2717 |
msgid "offense"
|
2718 |
msgstr ""
|
2719 |
|
2720 |
+
#: src/lib/src/Modules/Base/Strings.php:85
|
2721 |
msgid "Debug"
|
2722 |
msgstr ""
|
2723 |
|
2724 |
+
#: src/lib/src/Modules/Base/Strings.php:87
|
2725 |
msgid "Agree To Privacy Policy"
|
2726 |
msgstr ""
|
2727 |
|
2728 |
+
#: src/lib/src/Modules/Base/Strings.php:88
|
2729 |
msgid "I confirm that I've read and I agree to the Privacy Policy"
|
2730 |
msgstr ""
|
2731 |
|
2732 |
+
#: src/lib/src/Modules/Base/Strings.php:89
|
2733 |
msgid ""
|
2734 |
"We treat your information under our strict, and GDPR-compliant, privacy "
|
2735 |
"policy."
|
2736 |
msgstr ""
|
2737 |
|
2738 |
+
#: src/lib/src/Modules/Base/Strings.php:90
|
2739 |
msgid "Privacy Policy"
|
2740 |
msgstr ""
|
2741 |
|
2742 |
+
#: src/lib/src/Modules/Base/Strings.php:91
|
2743 |
msgid "We never SPAM and you can remove yourself at any time."
|
2744 |
msgstr ""
|
2745 |
|
2746 |
+
#: src/lib/src/Modules/Base/Strings.php:93
|
2747 |
+
msgid "Pro features include"
|
2748 |
+
msgstr ""
|
2749 |
+
|
2750 |
+
#: src/lib/src/Modules/Base/Strings.php:94
|
2751 |
+
msgid ""
|
2752 |
+
"Join The 1,000s Who've Already Upgraded Their WordPress Security To Better "
|
2753 |
+
"Protect Their Sites."
|
2754 |
+
msgstr ""
|
2755 |
+
|
2756 |
+
#: src/lib/src/Modules/Base/Strings.php:96
|
2757 |
+
msgid "Upgrade To Pro Protection"
|
2758 |
+
msgstr ""
|
2759 |
+
|
2760 |
+
#: src/lib/src/Modules/Base/Strings.php:144
|
2761 |
msgid "User Messages"
|
2762 |
msgstr ""
|
2763 |
|
2764 |
+
#: src/lib/src/Modules/Base/Strings.php:145
|
2765 |
msgid "Messages"
|
2766 |
msgstr ""
|
2767 |
|
2768 |
+
#: src/lib/src/Modules/Base/Strings.php:147
|
2769 |
msgid "Customize the messages displayed to the user."
|
2770 |
msgstr ""
|
2771 |
|
2772 |
+
#: src/lib/src/Modules/Base/Strings.php:148
|
2773 |
msgid ""
|
2774 |
"Use this section if you need to communicate to the user in a particular "
|
2775 |
"manner."
|
2776 |
msgstr ""
|
2777 |
|
2778 |
+
#: src/lib/src/Modules/Base/Strings.php:149
|
2779 |
msgid "Hint"
|
2780 |
msgstr ""
|
2781 |
|
2782 |
+
#: src/lib/src/Modules/Base/Strings.php:149
|
2783 |
#, php-format
|
2784 |
msgid "To reset any message to its default, enter the text exactly: %s"
|
2785 |
msgstr ""
|
2912 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:76
|
2913 |
#: src/lib/src/Modules/LoginGuard/Strings.php:108
|
2914 |
#: src/lib/src/Modules/LoginGuard/Strings.php:127
|
2915 |
+
#: src/lib/src/Modules/Plugin/Strings.php:100
|
2916 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:47
|
2917 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:56
|
2918 |
#: src/lib/src/Modules/UserManagement/Strings.php:49
|
2938 |
msgstr ""
|
2939 |
|
2940 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:73
|
2941 |
+
#: src/lib/src/Modules/Events/Strings.php:226
|
2942 |
msgid "Human"
|
2943 |
msgstr ""
|
2944 |
|
2957 |
msgstr ""
|
2958 |
|
2959 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:106
|
2960 |
+
#: src/wizards/plugin.php:694 src/wizards/plugin.php:699
|
2961 |
msgid "Comment SPAM Protection"
|
2962 |
msgstr ""
|
2963 |
|
2999 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:121
|
3000 |
#: src/lib/src/Modules/HackGuard/Strings.php:342
|
3001 |
#: src/lib/src/Modules/HackGuard/Strings.php:343
|
3002 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:368
|
3003 |
#: src/lib/src/Modules/LoginGuard/Strings.php:222
|
3004 |
+
#: src/lib/src/Modules/Plugin/Strings.php:242
|
3005 |
+
#: src/lib/src/Modules/Plugin/Strings.php:249
|
3006 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:70
|
3007 |
#: src/lib/src/Modules/UserManagement/Strings.php:213
|
3008 |
#: src/lib/src/Modules/UserManagement/Strings.php:230
|
3009 |
+
#: src/processors/hackprotect_scan_mal.php:148
|
3010 |
#: src/processors/loginprotect_intentprovider_backup.php:29
|
3011 |
msgid "Important"
|
3012 |
msgstr ""
|
3172 |
|
3173 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:183
|
3174 |
#: src/lib/src/Modules/LoginGuard/Strings.php:226
|
3175 |
+
#: src/lib/src/Modules/Plugin/Strings.php:253
|
3176 |
msgid "reCAPTCHA Style"
|
3177 |
msgstr ""
|
3178 |
|
3183 |
|
3184 |
#: src/lib/src/Modules/CommentsFilter/Strings.php:185
|
3185 |
#: src/lib/src/Modules/LoginGuard/Strings.php:228
|
3186 |
+
#: src/lib/src/Modules/Plugin/Strings.php:255
|
3187 |
msgid ""
|
3188 |
"You can choose the reCAPTCHA display format that best suits your site, "
|
3189 |
"including the new Invisible Recaptcha"
|
3264 |
"(0) turns this off. Suggested: 10"
|
3265 |
msgstr ""
|
3266 |
|
3267 |
+
#: src/lib/src/Modules/Events/Strings.php:24
|
3268 |
msgid "Test Cron Run"
|
3269 |
msgstr ""
|
3270 |
|
3271 |
+
#: src/lib/src/Modules/Events/Strings.php:25
|
3272 |
msgid "Import Notify Sent"
|
3273 |
msgstr ""
|
3274 |
|
3275 |
+
#: src/lib/src/Modules/Events/Strings.php:26
|
3276 |
msgid "Import Notify Received"
|
3277 |
msgstr ""
|
3278 |
|
3279 |
+
#: src/lib/src/Modules/Events/Strings.php:27
|
3280 |
msgid "Options Exported"
|
3281 |
msgstr ""
|
3282 |
|
3283 |
+
#: src/lib/src/Modules/Events/Strings.php:28
|
3284 |
msgid "Options Imported"
|
3285 |
msgstr ""
|
3286 |
|
3287 |
+
#: src/lib/src/Modules/Events/Strings.php:29
|
3288 |
msgid "Whitelist Site Added"
|
3289 |
msgstr ""
|
3290 |
|
3291 |
+
#: src/lib/src/Modules/Events/Strings.php:30
|
3292 |
msgid "Whitelist Site Removed"
|
3293 |
msgstr ""
|
3294 |
|
3295 |
+
#: src/lib/src/Modules/Events/Strings.php:31
|
3296 |
msgid "Master Site URL Set"
|
3297 |
msgstr ""
|
3298 |
|
3299 |
+
#: src/lib/src/Modules/Events/Strings.php:32
|
3300 |
msgid "Google reCAPTCHA Test Success"
|
3301 |
msgstr ""
|
3302 |
|
3303 |
+
#: src/lib/src/Modules/Events/Strings.php:33
|
3304 |
+
#: src/lib/src/Modules/Plugin/Strings.php:48
|
3305 |
msgid "Google reCAPTCHA Test Fail"
|
3306 |
msgstr ""
|
3307 |
|
3308 |
+
#: src/lib/src/Modules/Events/Strings.php:34
|
3309 |
msgid "Security Admin Key Authentication Success"
|
3310 |
msgstr ""
|
3311 |
|
3312 |
+
#: src/lib/src/Modules/Events/Strings.php:35
|
3313 |
msgid "Security Admin Key Authentication Failed"
|
3314 |
msgstr ""
|
3315 |
|
3316 |
+
#: src/lib/src/Modules/Events/Strings.php:36
|
3317 |
msgid "Custom Offense"
|
3318 |
msgstr ""
|
3319 |
|
3320 |
+
#: src/lib/src/Modules/Events/Strings.php:37
|
3321 |
msgid "Connection Killed"
|
3322 |
msgstr ""
|
3323 |
|
3324 |
+
#: src/lib/src/Modules/Events/Strings.php:38
|
3325 |
msgid "Offense Triggered"
|
3326 |
msgstr ""
|
3327 |
|
3328 |
+
#: src/lib/src/Modules/Events/Strings.php:39
|
3329 |
msgid "IP Blocked"
|
3330 |
msgstr ""
|
3331 |
|
3332 |
+
#: src/lib/src/Modules/Events/Strings.php:40
|
3333 |
msgid "IP Unblocked Using Flag File"
|
3334 |
msgstr ""
|
3335 |
|
3336 |
+
#: src/lib/src/Modules/Events/Strings.php:42
|
3337 |
+
#: src/lib/src/Modules/Events/Strings.php:46
|
3338 |
+
#: src/lib/src/Modules/Events/Strings.php:50
|
3339 |
+
#: src/lib/src/Modules/Events/Strings.php:54
|
3340 |
+
#: src/lib/src/Modules/Events/Strings.php:58
|
3341 |
+
#: src/lib/src/Modules/Events/Strings.php:62
|
3342 |
+
#: src/lib/src/Modules/Events/Strings.php:66
|
3343 |
msgid "Bot Detection"
|
3344 |
msgstr ""
|
3345 |
|
3346 |
+
#: src/lib/src/Modules/Events/Strings.php:47
|
3347 |
#: src/lib/src/Modules/IPs/Strings.php:192
|
3348 |
msgid "Fake Web Crawler"
|
3349 |
msgstr ""
|
3350 |
|
3351 |
+
#: src/lib/src/Modules/Events/Strings.php:51
|
3352 |
#: src/lib/src/Modules/IPs/Strings.php:172
|
3353 |
msgid "Link Cheese"
|
3354 |
msgstr ""
|
3355 |
|
3356 |
+
#: src/lib/src/Modules/Events/Strings.php:55
|
3357 |
#: src/lib/src/Modules/IPs/Strings.php:186
|
3358 |
msgid "Failed Login"
|
3359 |
msgstr ""
|
3360 |
|
3361 |
+
#: src/lib/src/Modules/Events/Strings.php:59
|
3362 |
msgid "Invalid Username Login"
|
3363 |
msgstr ""
|
3364 |
|
3365 |
+
#: src/lib/src/Modules/Events/Strings.php:63
|
3366 |
msgid "Invalid User-Agent"
|
3367 |
msgstr ""
|
3368 |
|
3369 |
+
#: src/lib/src/Modules/Events/Strings.php:70
|
3370 |
+
#: src/lib/src/Modules/Events/Strings.php:74
|
3371 |
+
#: src/lib/src/Modules/Events/Strings.php:78
|
3372 |
+
#: src/lib/src/Modules/Events/Strings.php:82
|
3373 |
+
#: src/lib/src/Modules/Events/Strings.php:86
|
3374 |
+
#: src/lib/src/Modules/Events/Strings.php:90
|
3375 |
msgid "Alert Sent"
|
3376 |
msgstr ""
|
3377 |
|
3378 |
+
#: src/lib/src/Modules/Events/Strings.php:71
|
3379 |
msgid "Abandoned Plugin Detected"
|
3380 |
msgstr ""
|
3381 |
|
3382 |
+
#: src/lib/src/Modules/Events/Strings.php:75
|
3383 |
msgid "Malware Detected"
|
3384 |
msgstr ""
|
3385 |
|
3386 |
+
#: src/lib/src/Modules/Events/Strings.php:79
|
3387 |
msgid "Modified Plugin/Theme Detected"
|
3388 |
msgstr ""
|
3389 |
|
3390 |
+
#: src/lib/src/Modules/Events/Strings.php:83
|
3391 |
msgid "Unrecognised File Detected"
|
3392 |
msgstr ""
|
3393 |
|
3394 |
+
#: src/lib/src/Modules/Events/Strings.php:87
|
3395 |
msgid "Modified/Missing WP Core File Detected"
|
3396 |
msgstr ""
|
3397 |
|
3398 |
+
#: src/lib/src/Modules/Events/Strings.php:91
|
3399 |
msgid "Vulnerable Plugin Detected"
|
3400 |
msgstr ""
|
3401 |
|
3402 |
+
#: src/lib/src/Modules/Events/Strings.php:94
|
3403 |
+
#: src/lib/src/Modules/Events/Strings.php:98
|
3404 |
+
#: src/lib/src/Modules/Events/Strings.php:102
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3405 |
#: src/lib/src/Modules/Events/Strings.php:106
|
3406 |
+
#: src/lib/src/Modules/Events/Strings.php:110
|
3407 |
+
#: src/lib/src/Modules/Events/Strings.php:114
|
3408 |
+
msgid "Scan Completed"
|
3409 |
+
msgstr ""
|
3410 |
+
|
3411 |
+
#: src/lib/src/Modules/Events/Strings.php:95
|
3412 |
+
#: src/lib/src/Modules/Events/Strings.php:119
|
3413 |
#: src/lib/src/Modules/HackGuard/Strings.php:23
|
3414 |
#: src/lib/src/Modules/HackGuard/Strings.php:128
|
3415 |
msgid "Abandoned Plugins"
|
3416 |
msgstr ""
|
3417 |
|
3418 |
+
#: src/lib/src/Modules/Events/Strings.php:99
|
3419 |
+
#: src/lib/src/Modules/Events/Strings.php:123
|
3420 |
#: src/lib/src/Modules/HackGuard/Strings.php:25
|
3421 |
#: src/lib/src/Modules/HackGuard/Strings.php:146
|
3422 |
msgid "Malware"
|
3423 |
msgstr ""
|
3424 |
|
3425 |
+
#: src/lib/src/Modules/Events/Strings.php:111
|
3426 |
+
#: src/lib/src/Modules/Events/Strings.php:135
|
3427 |
#: src/lib/src/Modules/HackGuard/Strings.php:27
|
3428 |
msgid "WP Core Files"
|
3429 |
msgstr ""
|
3430 |
|
3431 |
+
#: src/lib/src/Modules/Events/Strings.php:115
|
3432 |
+
#: src/lib/src/Modules/Events/Strings.php:139
|
3433 |
#: src/lib/src/Modules/HackGuard/Strings.php:28
|
3434 |
#: src/lib/src/Modules/HackGuard/Strings.php:99
|
3435 |
msgid "Vulnerabilities"
|
3436 |
msgstr ""
|
3437 |
|
3438 |
+
#: src/lib/src/Modules/Events/Strings.php:118
|
3439 |
+
#: src/lib/src/Modules/Events/Strings.php:122
|
3440 |
+
#: src/lib/src/Modules/Events/Strings.php:126
|
3441 |
+
#: src/lib/src/Modules/Events/Strings.php:130
|
3442 |
+
#: src/lib/src/Modules/Events/Strings.php:134
|
3443 |
+
#: src/lib/src/Modules/Events/Strings.php:138
|
3444 |
msgid "Scan Item Discovered"
|
3445 |
msgstr ""
|
3446 |
|
3447 |
+
#: src/lib/src/Modules/Events/Strings.php:172
|
3448 |
#: src/lib/src/Modules/Insights/Strings.php:46
|
3449 |
msgid "Firewall Block"
|
3450 |
msgstr ""
|
3451 |
|
3452 |
+
#: src/lib/src/Modules/Events/Strings.php:175
|
3453 |
#: src/lib/src/Modules/Firewall/Strings.php:194 src/processors/firewall.php:430
|
3454 |
msgid "Directory Traversal"
|
3455 |
msgstr ""
|
3456 |
|
3457 |
+
#: src/lib/src/Modules/Events/Strings.php:179
|
3458 |
#: src/lib/src/Modules/Firewall/Strings.php:104
|
3459 |
#: src/lib/src/Modules/Firewall/Strings.php:197 src/processors/firewall.php:433
|
3460 |
msgid "WordPress Terms"
|
3461 |
msgstr ""
|
3462 |
|
3463 |
+
#: src/lib/src/Modules/Events/Strings.php:183
|
3464 |
#: src/lib/src/Modules/Firewall/Strings.php:110
|
3465 |
#: src/lib/src/Modules/Firewall/Strings.php:200 src/processors/firewall.php:436
|
3466 |
msgid "Field Truncation"
|
3467 |
msgstr ""
|
3468 |
|
3469 |
+
#: src/lib/src/Modules/Events/Strings.php:187
|
3470 |
#: src/lib/src/Modules/Firewall/Strings.php:98
|
3471 |
#: src/lib/src/Modules/Firewall/Strings.php:203 src/processors/firewall.php:439
|
3472 |
msgid "SQL Queries"
|
3473 |
msgstr ""
|
3474 |
|
3475 |
+
#: src/lib/src/Modules/Events/Strings.php:191
|
3476 |
#: src/lib/src/Modules/Firewall/Strings.php:206 src/processors/firewall.php:445
|
3477 |
msgid "Leading Schema"
|
3478 |
msgstr ""
|
3479 |
|
3480 |
+
#: src/lib/src/Modules/Events/Strings.php:195
|
3481 |
#: src/lib/src/Modules/Firewall/Strings.php:209 src/processors/firewall.php:451
|
3482 |
msgid "Aggressive Rules"
|
3483 |
msgstr ""
|
3484 |
|
3485 |
+
#: src/lib/src/Modules/Events/Strings.php:199
|
3486 |
#: src/lib/src/Modules/Firewall/Strings.php:116
|
3487 |
#: src/lib/src/Modules/Firewall/Strings.php:212 src/processors/firewall.php:448
|
3488 |
msgid "PHP Code"
|
3489 |
msgstr ""
|
3490 |
|
3491 |
+
#: src/lib/src/Modules/Events/Strings.php:203
|
3492 |
#: src/lib/src/Modules/Firewall/Strings.php:215 src/processors/firewall.php:442
|
3493 |
msgid "EXE File Uploads"
|
3494 |
msgstr ""
|
3495 |
|
3496 |
+
#: src/lib/src/Modules/Events/Strings.php:205
|
3497 |
msgid "Session Not Found"
|
3498 |
msgstr ""
|
3499 |
|
3500 |
+
#: src/lib/src/Modules/Events/Strings.php:206
|
3501 |
msgid "Session Expired"
|
3502 |
msgstr ""
|
3503 |
|
3504 |
+
#: src/lib/src/Modules/Events/Strings.php:207
|
3505 |
msgid "Session Idle"
|
3506 |
msgstr ""
|
3507 |
|
3508 |
+
#: src/lib/src/Modules/Events/Strings.php:208
|
3509 |
msgid "Session Locked To IP"
|
3510 |
msgstr ""
|
3511 |
|
3512 |
+
#: src/lib/src/Modules/Events/Strings.php:209
|
3513 |
msgid "Session Locked To Browser"
|
3514 |
msgstr ""
|
3515 |
|
3516 |
+
#: src/lib/src/Modules/Events/Strings.php:210
|
3517 |
msgid "Session Unverified"
|
3518 |
msgstr ""
|
3519 |
|
3520 |
+
#: src/lib/src/Modules/Events/Strings.php:211
|
3521 |
msgid "Password Expired"
|
3522 |
msgstr ""
|
3523 |
|
3524 |
+
#: src/lib/src/Modules/Events/Strings.php:212
|
3525 |
msgid "Forced Password Change"
|
3526 |
msgstr ""
|
3527 |
|
3528 |
+
#: src/lib/src/Modules/Events/Strings.php:213
|
3529 |
msgid "Password Change Blocked"
|
3530 |
msgstr ""
|
3531 |
|
3532 |
+
#: src/lib/src/Modules/Events/Strings.php:214
|
3533 |
msgid "User Hard-Suspended"
|
3534 |
msgstr ""
|
3535 |
|
3536 |
+
#: src/lib/src/Modules/Events/Strings.php:215
|
3537 |
msgid "User Hard-Unsuspended"
|
3538 |
msgstr ""
|
3539 |
|
3540 |
+
#: src/lib/src/Modules/Events/Strings.php:217
|
3541 |
+
#: src/lib/src/Modules/Events/Strings.php:221
|
3542 |
+
#: src/lib/src/Modules/Events/Strings.php:225
|
3543 |
msgid "SPAM Blocked"
|
3544 |
msgstr ""
|
3545 |
|
3546 |
+
#: src/lib/src/Modules/Events/Strings.php:218
|
3547 |
msgid "Bot"
|
3548 |
msgstr ""
|
3549 |
|
3550 |
+
#: src/lib/src/Modules/Events/Strings.php:229
|
3551 |
+
#: src/lib/src/Modules/Events/Strings.php:233
|
3552 |
#: src/lib/src/Tables/Render/IpBlack.php:13
|
3553 |
msgid "Blocked"
|
3554 |
msgstr ""
|
3555 |
|
3556 |
+
#: src/lib/src/Modules/Events/Strings.php:230
|
3557 |
msgid "Anonymous REST API"
|
3558 |
msgstr ""
|
3559 |
|
3560 |
+
#: src/lib/src/Modules/Events/Strings.php:236
|
3561 |
msgid "Session Started"
|
3562 |
msgstr ""
|
3563 |
|
3564 |
+
#: src/lib/src/Modules/Events/Strings.php:237
|
3565 |
msgid "Session Terminated"
|
3566 |
msgstr ""
|
3567 |
|
3568 |
+
#: src/lib/src/Modules/Events/Strings.php:238
|
3569 |
msgid "Plugin Activated"
|
3570 |
msgstr ""
|
3571 |
|
3572 |
+
#: src/lib/src/Modules/Events/Strings.php:239
|
3573 |
msgid "Plugin Deactivated"
|
3574 |
msgstr ""
|
3575 |
|
3576 |
+
#: src/lib/src/Modules/Events/Strings.php:240
|
3577 |
msgid "Plugin File Edited"
|
3578 |
msgstr ""
|
3579 |
|
3580 |
+
#: src/lib/src/Modules/Events/Strings.php:241
|
3581 |
msgid "Theme Activated"
|
3582 |
msgstr ""
|
3583 |
|
3584 |
+
#: src/lib/src/Modules/Events/Strings.php:242
|
3585 |
msgid "Theme File Edited"
|
3586 |
msgstr ""
|
3587 |
|
3588 |
+
#: src/lib/src/Modules/Events/Strings.php:243
|
3589 |
msgid "WP Core Updated"
|
3590 |
msgstr ""
|
3591 |
|
3592 |
+
#: src/lib/src/Modules/Events/Strings.php:244
|
3593 |
msgid "Permalinks Updated"
|
3594 |
msgstr ""
|
3595 |
|
3596 |
+
#: src/lib/src/Modules/Events/Strings.php:245
|
3597 |
msgid "Post Deleted"
|
3598 |
msgstr ""
|
3599 |
|
3600 |
+
#: src/lib/src/Modules/Events/Strings.php:246
|
3601 |
msgid "Post Trashed"
|
3602 |
msgstr ""
|
3603 |
|
3604 |
+
#: src/lib/src/Modules/Events/Strings.php:247
|
3605 |
msgid "Post Recovered"
|
3606 |
msgstr ""
|
3607 |
|
3608 |
+
#: src/lib/src/Modules/Events/Strings.php:248
|
3609 |
msgid "Post Updated"
|
3610 |
msgstr ""
|
3611 |
|
3612 |
+
#: src/lib/src/Modules/Events/Strings.php:249
|
3613 |
msgid "Post Published"
|
3614 |
msgstr ""
|
3615 |
|
3616 |
+
#: src/lib/src/Modules/Events/Strings.php:250
|
3617 |
msgid "Post Unpublished"
|
3618 |
msgstr ""
|
3619 |
|
3620 |
+
#: src/lib/src/Modules/Events/Strings.php:251
|
3621 |
msgid "User Login"
|
3622 |
msgstr ""
|
3623 |
|
3624 |
+
#: src/lib/src/Modules/Events/Strings.php:252
|
3625 |
msgid "User Registered"
|
3626 |
msgstr ""
|
3627 |
|
3628 |
+
#: src/lib/src/Modules/Events/Strings.php:253
|
3629 |
msgid "User Deleted"
|
3630 |
msgstr ""
|
3631 |
|
3632 |
+
#: src/lib/src/Modules/Events/Strings.php:254
|
3633 |
msgid "User Deleted And Reassigned"
|
3634 |
msgstr ""
|
3635 |
|
3636 |
+
#: src/lib/src/Modules/Events/Strings.php:255
|
3637 |
msgid "Email Sent"
|
3638 |
msgstr ""
|
3639 |
|
3640 |
+
#: src/lib/src/Modules/Events/Strings.php:256
|
3641 |
msgid "Invalid Email Sent"
|
3642 |
msgstr ""
|
3643 |
|
3644 |
+
#: src/lib/src/Modules/Events/Strings.php:257
|
3645 |
msgid "License Check Success"
|
3646 |
msgstr ""
|
3647 |
|
3648 |
+
#: src/lib/src/Modules/Events/Strings.php:258
|
3649 |
msgid "License Failure Email"
|
3650 |
msgstr ""
|
3651 |
|
3652 |
+
#: src/lib/src/Modules/Events/Strings.php:259
|
3653 |
msgid "License Deactivated"
|
3654 |
msgstr ""
|
3655 |
|
3976 |
msgid "Firewall Block Response: %s."
|
3977 |
msgstr ""
|
3978 |
|
3979 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:159
|
3980 |
msgid "Unsupported scanner"
|
3981 |
msgstr ""
|
3982 |
|
3983 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:162
|
3984 |
msgid "Unsupported item(s) selected"
|
3985 |
msgstr ""
|
3986 |
|
3987 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:180
|
3988 |
msgid "Action successful."
|
3989 |
msgstr ""
|
3990 |
|
3991 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:183
|
3992 |
msgid "An error occurred."
|
3993 |
msgstr ""
|
3994 |
|
3995 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:183
|
3996 |
msgid "Some items may not have been processed."
|
3997 |
msgstr ""
|
3998 |
|
3999 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:189
|
4000 |
msgid "Rescanning"
|
4001 |
msgstr ""
|
4002 |
|
4003 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:192
|
4004 |
msgid "Reloading"
|
4005 |
msgstr ""
|
4006 |
|
4007 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:228
|
4008 |
msgid "No scan running."
|
4009 |
msgstr ""
|
4010 |
|
4011 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:238
|
4012 |
msgid "Current Scan"
|
4013 |
msgstr ""
|
4014 |
|
4015 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:240
|
4016 |
#, php-format
|
4017 |
msgid "%s of %s scans remaining."
|
4018 |
msgstr ""
|
4019 |
|
4020 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:243
|
4021 |
msgid "Please be patient."
|
4022 |
msgstr ""
|
4023 |
|
4024 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:244
|
4025 |
msgid "Some scans can take quite a while to complete."
|
4026 |
msgstr ""
|
4027 |
|
4028 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:245
|
4029 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:296
|
4030 |
msgid "Scans completed."
|
4031 |
msgstr ""
|
4032 |
|
4033 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:245
|
4034 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:296
|
4035 |
#: src/lib/src/Modules/License/AjaxHandler.php:88
|
4036 |
msgid "Reloading page"
|
4037 |
msgstr ""
|
4038 |
|
4039 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:261
|
4040 |
msgid "No scans were selected"
|
4041 |
msgstr ""
|
4042 |
|
4043 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:295
|
4044 |
msgid "Scans started."
|
4045 |
msgstr ""
|
4046 |
|
4047 |
+
#: src/lib/src/Modules/HackGuard/AjaxHandler.php:295
|
4048 |
msgid "Please wait, as this will take a few moments."
|
4049 |
msgstr ""
|
4050 |
|
4193 |
msgid "Keep the Plugins/Theme Guard feature turned on."
|
4194 |
msgstr ""
|
4195 |
|
|
|
|
|
|
|
|
|
4196 |
#: src/lib/src/Modules/HackGuard/Strings.php:149
|
4197 |
msgid "Monitor and detect presence of Malware signatures."
|
4198 |
msgstr ""
|
4580 |
msgstr ""
|
4581 |
|
4582 |
#: src/lib/src/Modules/HackGuard/Strings.php:347
|
4583 |
+
msgid "Ignore False Positives Threshold"
|
4584 |
msgstr ""
|
4585 |
|
4586 |
#: src/lib/src/Modules/HackGuard/Strings.php:348
|
4587 |
+
msgid "Ignore False Positives In Scan Results Automatically"
|
4588 |
msgstr ""
|
4589 |
|
4590 |
#: src/lib/src/Modules/HackGuard/Strings.php:349
|
4591 |
+
msgid ""
|
4592 |
+
"You can choose to ignore files with potential malware, depending on whether "
|
4593 |
+
"the confidence that it's a 'false positive' meets your minimum threshold."
|
4594 |
msgstr ""
|
4595 |
|
4596 |
#: src/lib/src/Modules/HackGuard/Strings.php:350
|
4597 |
msgid ""
|
4598 |
+
"A false positive happens when a file appears to contain malware and shows up "
|
4599 |
+
"in scan results, but it's actually clean."
|
4600 |
+
msgstr ""
|
4601 |
+
|
4602 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:351
|
4603 |
+
msgid ""
|
4604 |
+
"A false positive is similar to when an anti-virus alerts to a file that "
|
4605 |
+
"doesnt have a virus."
|
4606 |
+
msgstr ""
|
4607 |
+
|
4608 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:352
|
4609 |
+
msgid ""
|
4610 |
+
"The higher the confidence level, the more likely a result is a false "
|
4611 |
+
"positive."
|
4612 |
+
msgstr ""
|
4613 |
+
|
4614 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:353
|
4615 |
+
msgid "A low level means it's less likely to be a false positive."
|
4616 |
+
msgstr ""
|
4617 |
+
|
4618 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:354
|
4619 |
+
msgid ""
|
4620 |
+
"The scan will automatically ignore results whose 'false positive' confidence "
|
4621 |
+
"level is greater than your chosen threshold."
|
4622 |
+
msgstr ""
|
4623 |
+
|
4624 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:355
|
4625 |
+
msgid ""
|
4626 |
+
"The higher the confidence threshold you select, the more likely that 'false "
|
4627 |
+
"positives' will appears in your scan results."
|
4628 |
+
msgstr ""
|
4629 |
+
|
4630 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:356
|
4631 |
+
msgid ""
|
4632 |
+
"Disabling network intelligence turns off 'false positive confidence' levels."
|
4633 |
+
msgstr ""
|
4634 |
+
|
4635 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:357
|
4636 |
+
msgid ""
|
4637 |
+
"You will no longer benefit from the intelligence gathered from the entire "
|
4638 |
+
"network."
|
4639 |
+
msgstr ""
|
4640 |
+
|
4641 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:358
|
4642 |
+
msgid "All data shared is completely anonymous."
|
4643 |
+
msgstr ""
|
4644 |
+
|
4645 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:359
|
4646 |
+
#: src/lib/src/Tables/Render/ScanWpv.php:55
|
4647 |
+
#: src/processors/hackprotect_scan_mal.php:165
|
4648 |
+
#: src/processors/hackprotect_scan_wcf.php:112
|
4649 |
+
#: src/processors/hackprotect_scan_wpv.php:201
|
4650 |
+
#: src/processors/loginprotect_intent.php:285
|
4651 |
+
msgid "More Info"
|
4652 |
+
msgstr ""
|
4653 |
+
|
4654 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:360
|
4655 |
+
msgid ""
|
4656 |
+
"The more sites that share this information, the stronger and smarter the "
|
4657 |
+
"network becomes."
|
4658 |
+
msgstr ""
|
4659 |
+
|
4660 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:364
|
4661 |
+
msgid "Surgical Auto-Repair"
|
4662 |
+
msgstr ""
|
4663 |
+
|
4664 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:365
|
4665 |
+
msgid "Automatically Attempt To Surgically Remove Malware Code"
|
4666 |
+
msgstr ""
|
4667 |
+
|
4668 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:366
|
4669 |
+
msgid "Attempts to automatically remove code from infected files."
|
4670 |
+
msgstr ""
|
4671 |
+
|
4672 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:367
|
4673 |
+
msgid ""
|
4674 |
"This could break your site if code removal leaves remaining code in an "
|
4675 |
"inconsistent state."
|
4676 |
msgstr ""
|
4677 |
|
4678 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:368
|
4679 |
msgid ""
|
4680 |
"Only applies to files that don't fall under the other categories for "
|
4681 |
"automatic repair."
|
4682 |
msgstr ""
|
4683 |
|
4684 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:372
|
4685 |
msgid "WP Config"
|
4686 |
msgstr ""
|
4687 |
|
4688 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:373
|
4689 |
msgid "Realtime Protection For WP Config File"
|
4690 |
msgstr ""
|
4691 |
|
4692 |
+
#: src/lib/src/Modules/HackGuard/Strings.php:374
|
4693 |
msgid "Realtime protection for the wp-config.php file."
|
4694 |
msgstr ""
|
4695 |
|
4894 |
msgstr ""
|
4895 |
|
4896 |
#: src/lib/src/Modules/IPs/AdminNotices.php:40
|
4897 |
+
#: src/lib/src/Modules/Plugin/Strings.php:383 src/processors/plugin.php:84
|
4898 |
#, php-format
|
4899 |
msgid "Your IP address is: %s"
|
4900 |
msgstr ""
|
4945 |
msgid "IP address added successfully"
|
4946 |
msgstr ""
|
4947 |
|
4948 |
+
#: src/lib/src/Modules/IPs/AjaxHandler.php:124
|
4949 |
msgid "Invalid entry selected"
|
4950 |
msgstr ""
|
4951 |
|
4952 |
+
#: src/lib/src/Modules/IPs/AjaxHandler.php:127
|
4953 |
msgid "IP address deleted"
|
4954 |
msgstr ""
|
4955 |
|
4956 |
+
#: src/lib/src/Modules/IPs/AjaxHandler.php:131
|
4957 |
msgid "IP address wasn't deleted from the list"
|
4958 |
msgstr ""
|
4959 |
|
4964 |
msgstr ""
|
4965 |
|
4966 |
#: src/lib/src/Modules/IPs/Strings.php:28
|
4967 |
+
#: src/lib/src/Modules/Plugin/Strings.php:416 src/wizards/plugin.php:514
|
4968 |
#: src/wizards/plugin.php:519
|
4969 |
msgid "IP Manager"
|
4970 |
msgstr ""
|
5534 |
msgid "Please turn on this feature in the options."
|
5535 |
msgstr ""
|
5536 |
|
5537 |
+
#: src/lib/src/Modules/Insights/Strings.php:71
|
5538 |
+
msgid "There are no important security notices at this time."
|
5539 |
+
msgstr ""
|
5540 |
+
|
5541 |
+
#: src/lib/src/Modules/Insights/Strings.php:72
|
5542 |
+
msgid "This is wonderful!"
|
5543 |
+
msgstr ""
|
5544 |
+
|
5545 |
+
#: src/lib/src/Modules/Insights/Strings.php:73
|
5546 |
+
msgid "YYYY-MM-DD"
|
5547 |
+
msgstr ""
|
5548 |
+
|
5549 |
#: src/lib/src/Modules/License/AjaxHandler.php:87
|
5550 |
#: src/processors/loginprotect_intent.php:152
|
5551 |
msgid "Success"
|
5725 |
msgstr ""
|
5726 |
|
5727 |
#: src/lib/src/Modules/Lockdown/Strings.php:95
|
5728 |
+
#: src/lib/src/Modules/Plugin/Strings.php:65
|
5729 |
#, php-format
|
5730 |
msgid "Disable %s"
|
5731 |
msgstr ""
|
5898 |
msgid "Verification email resent."
|
5899 |
msgstr ""
|
5900 |
|
5901 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:40
|
5902 |
+
msgid "The login page is protected against too many login attempts."
|
5903 |
+
msgstr ""
|
5904 |
+
|
5905 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:42
|
5906 |
+
msgid ""
|
5907 |
+
"If you attempt to login again too quickly you may be blocked from accessing "
|
5908 |
+
"this site entirely."
|
5909 |
+
msgstr ""
|
5910 |
+
|
5911 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:43
|
5912 |
+
msgid ""
|
5913 |
+
"If you share this website with others, you may also block their access to "
|
5914 |
+
"the site."
|
5915 |
+
msgstr ""
|
5916 |
+
|
5917 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:44
|
5918 |
+
msgid ""
|
5919 |
+
"To ignore this message and return to the login page, please check the box "
|
5920 |
+
"and click continue."
|
5921 |
+
msgstr ""
|
5922 |
+
|
5923 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:46
|
5924 |
+
msgid "I understand I may block my access to the site."
|
5925 |
+
msgstr ""
|
5926 |
+
|
5927 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:47
|
5928 |
+
msgid "Seconds remaining"
|
5929 |
+
msgstr ""
|
5930 |
+
|
5931 |
+
#: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:48
|
5932 |
+
msgid "Proceed To Login Page"
|
5933 |
+
msgstr ""
|
5934 |
+
|
5935 |
#: src/lib/src/Modules/LoginGuard/Strings.php:15
|
5936 |
#, php-format
|
5937 |
msgid "User \"%s\" attempted \"%s\" but Bot checkbox was not found."
|
6188 |
msgstr ""
|
6189 |
|
6190 |
#: src/lib/src/Modules/LoginGuard/Strings.php:205
|
6191 |
+
#: src/lib/src/Modules/Plugin/Strings.php:410
|
6192 |
#: src/processors/user_management.php:204
|
6193 |
msgid "Email"
|
6194 |
msgstr ""
|
6218 |
msgstr ""
|
6219 |
|
6220 |
#: src/lib/src/Modules/LoginGuard/Strings.php:217
|
6221 |
+
#: src/lib/src/Modules/Plugin/Strings.php:94
|
6222 |
+
#: src/lib/src/Modules/Plugin/Strings.php:95
|
6223 |
msgid "Google reCAPTCHA"
|
6224 |
msgstr ""
|
6225 |
|
6238 |
msgstr ""
|
6239 |
|
6240 |
#: src/lib/src/Modules/LoginGuard/Strings.php:220
|
6241 |
+
#: src/lib/src/Modules/Plugin/Strings.php:433
|
6242 |
msgid "Light Theme"
|
6243 |
msgstr ""
|
6244 |
|
6660 |
msgid "Site Secured"
|
6661 |
msgstr ""
|
6662 |
|
6663 |
+
#: src/lib/src/Modules/Plugin/Components/PluginBadge.php:76
|
6664 |
+
#, php-format
|
6665 |
+
msgid "This Site Is Protected By %s"
|
6666 |
+
msgstr ""
|
6667 |
+
|
6668 |
#: src/lib/src/Modules/Plugin/Strings.php:15
|
6669 |
msgid "Plugin Actions"
|
6670 |
msgstr ""
|
6711 |
msgid "Master Site URL set: %s"
|
6712 |
msgstr ""
|
6713 |
|
6714 |
+
#: src/lib/src/Modules/Plugin/Strings.php:64
|
6715 |
msgid "Global Security Plugin Disable"
|
6716 |
msgstr ""
|
6717 |
|
6718 |
+
#: src/lib/src/Modules/Plugin/Strings.php:67
|
6719 |
msgid "Use this option to completely disable all active Shield Protection."
|
6720 |
msgstr ""
|
6721 |
|
6722 |
+
#: src/lib/src/Modules/Plugin/Strings.php:72
|
6723 |
+
#: src/lib/src/Modules/Plugin/Strings.php:73
|
6724 |
msgid "Plugin Defaults"
|
6725 |
msgstr ""
|
6726 |
|
6727 |
+
#: src/lib/src/Modules/Plugin/Strings.php:75
|
6728 |
msgid "Important default settings used throughout the plugin."
|
6729 |
msgstr ""
|
6730 |
|
6731 |
+
#: src/lib/src/Modules/Plugin/Strings.php:82
|
6732 |
msgid ""
|
6733 |
"Automatically import options, and deploy configurations across your entire "
|
6734 |
"network."
|
6735 |
msgstr ""
|
6736 |
|
6737 |
+
#: src/lib/src/Modules/Plugin/Strings.php:83
|
6738 |
msgid "This is a Pro-only feature."
|
6739 |
msgstr ""
|
6740 |
|
6741 |
+
#: src/lib/src/Modules/Plugin/Strings.php:89
|
6742 |
msgid "General Plugin Options"
|
6743 |
msgstr ""
|
6744 |
|
6745 |
+
#: src/lib/src/Modules/Plugin/Strings.php:90
|
6746 |
msgid "General Options"
|
6747 |
msgstr ""
|
6748 |
|
6749 |
+
#: src/lib/src/Modules/Plugin/Strings.php:97
|
6750 |
#, php-format
|
6751 |
msgid "Setup Google reCAPTCHA for use across %s."
|
6752 |
msgstr ""
|
6753 |
|
6754 |
+
#: src/lib/src/Modules/Plugin/Strings.php:101
|
6755 |
msgid "You must create your own Google reCAPTCHA API Keys."
|
6756 |
msgstr ""
|
6757 |
|
6758 |
+
#: src/lib/src/Modules/Plugin/Strings.php:103
|
6759 |
msgid "Manage Keys Here"
|
6760 |
msgstr ""
|
6761 |
|
6762 |
+
#: src/lib/src/Modules/Plugin/Strings.php:105
|
6763 |
#, php-format
|
6764 |
msgid "Invisible Google reCAPTCHA is available with %s Pro."
|
6765 |
msgstr ""
|
6766 |
|
6767 |
+
#: src/lib/src/Modules/Plugin/Strings.php:110
|
6768 |
+
#: src/lib/src/Modules/Plugin/Strings.php:111
|
6769 |
msgid "Duo Security"
|
6770 |
msgstr ""
|
6771 |
|
6772 |
+
#: src/lib/src/Modules/Plugin/Strings.php:138
|
6773 |
#, php-format
|
6774 |
msgid "Enable %s Protection"
|
6775 |
msgstr ""
|
6776 |
|
6777 |
+
#: src/lib/src/Modules/Plugin/Strings.php:139
|
6778 |
msgid "Switch Off To Disable All Security Protection"
|
6779 |
msgstr ""
|
6780 |
|
6781 |
+
#: src/lib/src/Modules/Plugin/Strings.php:140
|
6782 |
msgid ""
|
6783 |
"You can keep the security plugin activated, but temporarily disable all "
|
6784 |
"protection it provides."
|
6785 |
msgstr ""
|
6786 |
|
6787 |
+
#: src/lib/src/Modules/Plugin/Strings.php:144
|
6788 |
msgid "Anonymous Usage Statistics"
|
6789 |
msgstr ""
|
6790 |
|
6791 |
+
#: src/lib/src/Modules/Plugin/Strings.php:145
|
6792 |
msgid "Permit Anonymous Usage Information Gathering"
|
6793 |
msgstr ""
|
6794 |
|
6795 |
+
#: src/lib/src/Modules/Plugin/Strings.php:146
|
6796 |
msgid ""
|
6797 |
"Allows us to gather information on statistics and features in-use across our "
|
6798 |
"client installations."
|
6799 |
msgstr ""
|
6800 |
|
6801 |
+
#: src/lib/src/Modules/Plugin/Strings.php:147
|
6802 |
msgid ""
|
6803 |
"This information is strictly anonymous and contains no personally, or "
|
6804 |
"otherwise, identifiable data."
|
6805 |
msgstr ""
|
6806 |
|
6807 |
+
#: src/lib/src/Modules/Plugin/Strings.php:148
|
6808 |
msgid "Click to see the exact data that would be sent."
|
6809 |
msgstr ""
|
6810 |
|
6811 |
+
#: src/lib/src/Modules/Plugin/Strings.php:152
|
6812 |
msgid "IP Source"
|
6813 |
msgstr ""
|
6814 |
|
6815 |
+
#: src/lib/src/Modules/Plugin/Strings.php:153
|
6816 |
msgid "Which IP Address Is Yours"
|
6817 |
msgstr ""
|
6818 |
|
6819 |
+
#: src/lib/src/Modules/Plugin/Strings.php:154
|
6820 |
msgid ""
|
6821 |
"There are many possible ways to detect visitor IP addresses. If Auto-Detect "
|
6822 |
"is not working, please select yours from the list."
|
6823 |
msgstr ""
|
6824 |
|
6825 |
+
#: src/lib/src/Modules/Plugin/Strings.php:155
|
6826 |
msgid ""
|
6827 |
"If the option you select becomes unavailable, we will revert to auto "
|
6828 |
"detection."
|
6829 |
msgstr ""
|
6830 |
|
6831 |
+
#: src/lib/src/Modules/Plugin/Strings.php:157
|
6832 |
#, php-format
|
6833 |
msgid "Current source is: %s (%s)"
|
6834 |
msgstr ""
|
6835 |
|
6836 |
+
#: src/lib/src/Modules/Plugin/Strings.php:166
|
6837 |
msgid "Report Email"
|
6838 |
msgstr ""
|
6839 |
|
6840 |
+
#: src/lib/src/Modules/Plugin/Strings.php:167
|
6841 |
msgid "Where to send email reports"
|
6842 |
msgstr ""
|
6843 |
|
6844 |
+
#: src/lib/src/Modules/Plugin/Strings.php:168
|
6845 |
#, php-format
|
6846 |
msgid "If this is empty, it will default to the blog admin email address: %s"
|
6847 |
msgstr ""
|
6848 |
|
6849 |
+
#: src/lib/src/Modules/Plugin/Strings.php:172
|
6850 |
msgid "In-Plugin Notices"
|
6851 |
msgstr ""
|
6852 |
|
6853 |
+
#: src/lib/src/Modules/Plugin/Strings.php:173
|
6854 |
msgid "Display Plugin Specific Notices"
|
6855 |
msgstr ""
|
6856 |
|
6857 |
+
#: src/lib/src/Modules/Plugin/Strings.php:174
|
6858 |
msgid ""
|
6859 |
"Disable this option to hide certain plugin admin notices about available "
|
6860 |
"updates and post-update notices."
|
6861 |
msgstr ""
|
6862 |
|
6863 |
+
#: src/lib/src/Modules/Plugin/Strings.php:178
|
6864 |
msgid "Show Plugin Badge"
|
6865 |
msgstr ""
|
6866 |
|
6867 |
+
#: src/lib/src/Modules/Plugin/Strings.php:179
|
6868 |
msgid "Display Plugin Badge On Your Site"
|
6869 |
msgstr ""
|
6870 |
|
6871 |
+
#: src/lib/src/Modules/Plugin/Strings.php:180
|
6872 |
msgid ""
|
6873 |
"Enabling this option helps support the plugin by spreading the word about it "
|
6874 |
"on your website."
|
6875 |
msgstr ""
|
6876 |
|
6877 |
+
#: src/lib/src/Modules/Plugin/Strings.php:181
|
6878 |
msgid ""
|
6879 |
"The plugin badge also lets visitors know your are taking your website "
|
6880 |
"security seriously."
|
6881 |
msgstr ""
|
6882 |
|
6883 |
+
#: src/lib/src/Modules/Plugin/Strings.php:182
|
6884 |
msgid "Read this carefully before enabling this option."
|
6885 |
msgstr ""
|
6886 |
|
6887 |
+
#: src/lib/src/Modules/Plugin/Strings.php:186
|
6888 |
msgid "Delete Plugin Settings"
|
6889 |
msgstr ""
|
6890 |
|
6891 |
+
#: src/lib/src/Modules/Plugin/Strings.php:187
|
6892 |
msgid "Delete All Plugin Settings Upon Plugin Deactivation"
|
6893 |
msgstr ""
|
6894 |
|
6895 |
+
#: src/lib/src/Modules/Plugin/Strings.php:188
|
6896 |
msgid "Careful: Removes all plugin options when you deactivate the plugin"
|
6897 |
msgstr ""
|
6898 |
|
6899 |
+
#: src/lib/src/Modules/Plugin/Strings.php:192
|
6900 |
msgid "XML-RPC Compatibility"
|
6901 |
msgstr ""
|
6902 |
|
6903 |
+
#: src/lib/src/Modules/Plugin/Strings.php:193
|
6904 |
msgid "Allow Login Through XML-RPC To By-Pass Accounts Management Rules"
|
6905 |
msgstr ""
|
6906 |
|
6907 |
+
#: src/lib/src/Modules/Plugin/Strings.php:194
|
6908 |
msgid ""
|
6909 |
"Enable this if you need XML-RPC functionality e.g. if you use the WordPress "
|
6910 |
"iPhone/Android App."
|
6911 |
msgstr ""
|
6912 |
|
6913 |
+
#: src/lib/src/Modules/Plugin/Strings.php:198
|
6914 |
msgid "Allow Import/Export"
|
6915 |
msgstr ""
|
6916 |
|
6917 |
+
#: src/lib/src/Modules/Plugin/Strings.php:199
|
6918 |
msgid "Allow Import And Export Of Options On This Site"
|
6919 |
msgstr ""
|
6920 |
|
6921 |
+
#: src/lib/src/Modules/Plugin/Strings.php:200
|
6922 |
msgid "Uncheck this box to completely disable import and export of options."
|
6923 |
msgstr ""
|
6924 |
|
6925 |
+
#: src/lib/src/Modules/Plugin/Strings.php:201
|
6926 |
msgid "Import/Export is a premium-only feature."
|
6927 |
msgstr ""
|
6928 |
|
6929 |
+
#: src/lib/src/Modules/Plugin/Strings.php:205
|
6930 |
msgid "Export Whitelist"
|
6931 |
msgstr ""
|
6932 |
|
6933 |
+
#: src/lib/src/Modules/Plugin/Strings.php:206
|
6934 |
msgid "Whitelisted Sites To Export Options From This Site"
|
6935 |
msgstr ""
|
6936 |
|
6937 |
+
#: src/lib/src/Modules/Plugin/Strings.php:207
|
6938 |
msgid "Whitelisted sites may export options from this site without the key."
|
6939 |
msgstr ""
|
6940 |
|
6941 |
+
#: src/lib/src/Modules/Plugin/Strings.php:208
|
6942 |
msgid "List each site URL on a new line."
|
6943 |
msgstr ""
|
6944 |
|
6945 |
+
#: src/lib/src/Modules/Plugin/Strings.php:209
|
6946 |
msgid "This is to be used in conjunction with the Master Import Site feature."
|
6947 |
msgstr ""
|
6948 |
|
6949 |
+
#: src/lib/src/Modules/Plugin/Strings.php:213
|
6950 |
msgid "Master Import Site"
|
6951 |
msgstr ""
|
6952 |
|
6953 |
+
#: src/lib/src/Modules/Plugin/Strings.php:214
|
6954 |
msgid "Automatically Import Options From This Site URL"
|
6955 |
msgstr ""
|
6956 |
|
6957 |
+
#: src/lib/src/Modules/Plugin/Strings.php:215
|
6958 |
msgid "Supplying a site URL here will make this site an 'Options Slave'."
|
6959 |
msgstr ""
|
6960 |
|
6961 |
+
#: src/lib/src/Modules/Plugin/Strings.php:216
|
6962 |
msgid "Options will be automatically exported from the Master site each day."
|
6963 |
msgstr ""
|
6964 |
|
6965 |
+
#: src/lib/src/Modules/Plugin/Strings.php:217
|
6966 |
msgid ""
|
6967 |
"Use of this feature will overwrite existing options and replace them with "
|
6968 |
"those from the Master Import Site."
|
6969 |
msgstr ""
|
6970 |
|
6971 |
+
#: src/lib/src/Modules/Plugin/Strings.php:221
|
6972 |
msgid "Notify Whitelist"
|
6973 |
msgstr ""
|
6974 |
|
6975 |
+
#: src/lib/src/Modules/Plugin/Strings.php:222
|
6976 |
msgid "Notify Sites On The Whitelist To Update Options From Master"
|
6977 |
msgstr ""
|
6978 |
|
6979 |
+
#: src/lib/src/Modules/Plugin/Strings.php:223
|
6980 |
msgid ""
|
6981 |
"When enabled, manual options saving will notify sites on the whitelist to "
|
6982 |
"export options from the Master site."
|
6983 |
msgstr ""
|
6984 |
|
6985 |
+
#: src/lib/src/Modules/Plugin/Strings.php:227
|
6986 |
#: src/processors/plugin_importexport.php:59
|
6987 |
#: src/processors/plugin_importexport.php:63
|
6988 |
msgid "Secret Key"
|
6989 |
msgstr ""
|
6990 |
|
6991 |
+
#: src/lib/src/Modules/Plugin/Strings.php:228
|
6992 |
msgid "Import/Export Secret Key"
|
6993 |
msgstr ""
|
6994 |
|
6995 |
+
#: src/lib/src/Modules/Plugin/Strings.php:229
|
6996 |
msgid ""
|
6997 |
"Keep this Secret Key private as it will allow the import and export of "
|
6998 |
"options."
|
6999 |
msgstr ""
|
7000 |
|
7001 |
+
#: src/lib/src/Modules/Plugin/Strings.php:233
|
7002 |
msgid "Installation ID"
|
7003 |
msgstr ""
|
7004 |
|
7005 |
+
#: src/lib/src/Modules/Plugin/Strings.php:234
|
7006 |
msgid "Unique Plugin Installation ID"
|
7007 |
msgstr ""
|
7008 |
|
7009 |
+
#: src/lib/src/Modules/Plugin/Strings.php:235
|
7010 |
msgid "Keep this ID private."
|
7011 |
msgstr ""
|
7012 |
|
7013 |
+
#: src/lib/src/Modules/Plugin/Strings.php:239
|
7014 |
msgid "reCAPTCHA Secret"
|
7015 |
msgstr ""
|
7016 |
|
7017 |
+
#: src/lib/src/Modules/Plugin/Strings.php:240
|
7018 |
msgid "Google reCAPTCHA Secret Key"
|
7019 |
msgstr ""
|
7020 |
|
7021 |
+
#: src/lib/src/Modules/Plugin/Strings.php:241
|
7022 |
msgid "Enter your Google reCAPTCHA secret key for use throughout the plugin."
|
7023 |
msgstr ""
|
7024 |
|
7025 |
+
#: src/lib/src/Modules/Plugin/Strings.php:246
|
7026 |
msgid "reCAPTCHA Site Key"
|
7027 |
msgstr ""
|
7028 |
|
7029 |
+
#: src/lib/src/Modules/Plugin/Strings.php:247
|
7030 |
msgid "Google reCAPTCHA Site Key"
|
7031 |
msgstr ""
|
7032 |
|
7033 |
+
#: src/lib/src/Modules/Plugin/Strings.php:248
|
7034 |
msgid "Enter your Google reCAPTCHA site key for use throughout the plugin"
|
7035 |
msgstr ""
|
7036 |
|
7037 |
+
#: src/lib/src/Modules/Plugin/Strings.php:254
|
7038 |
msgid "How Google reCAPTCHA Will Be Displayed By Default"
|
7039 |
msgstr ""
|
7040 |
|
7041 |
+
#: src/lib/src/Modules/Plugin/Strings.php:305
|
7042 |
msgid "Install"
|
7043 |
msgstr ""
|
7044 |
|
7045 |
+
#: src/lib/src/Modules/Plugin/Strings.php:306
|
7046 |
msgid "Update"
|
7047 |
msgstr ""
|
7048 |
|
7049 |
+
#: src/lib/src/Modules/Plugin/Strings.php:307
|
7050 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:146
|
7051 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:172
|
7052 |
msgid "Activate"
|
7053 |
msgstr ""
|
7054 |
|
7055 |
+
#: src/lib/src/Modules/Plugin/Strings.php:308
|
7056 |
#: src/lib/src/Tables/Render/AdminNotes.php:20
|
7057 |
#: src/lib/src/Tables/Render/Base.php:203
|
7058 |
+
#: src/lib/src/Tables/Render/ScanMal.php:35
|
7059 |
#: src/lib/src/Tables/Render/ScanUfc.php:29
|
7060 |
msgid "Delete"
|
7061 |
msgstr ""
|
7062 |
|
7063 |
+
#: src/lib/src/Modules/Plugin/Strings.php:309
|
7064 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:173
|
7065 |
msgid "Edit Theme Options"
|
7066 |
msgstr ""
|
7067 |
|
7068 |
+
#: src/lib/src/Modules/Plugin/Strings.php:310
|
7069 |
msgid "Create/Edit"
|
7070 |
msgstr ""
|
7071 |
|
7072 |
+
#: src/lib/src/Modules/Plugin/Strings.php:311
|
7073 |
msgid "Publish"
|
7074 |
msgstr ""
|
7075 |
|
7076 |
+
#: src/lib/src/Modules/Plugin/Strings.php:312
|
7077 |
msgid "Author Name"
|
7078 |
msgstr ""
|
7079 |
|
7080 |
+
#: src/lib/src/Modules/Plugin/Strings.php:313
|
7081 |
msgid "Author Email"
|
7082 |
msgstr ""
|
7083 |
|
7084 |
+
#: src/lib/src/Modules/Plugin/Strings.php:314
|
7085 |
msgid "Comment Content"
|
7086 |
msgstr ""
|
7087 |
|
7088 |
+
#: src/lib/src/Modules/Plugin/Strings.php:315
|
7089 |
msgid "Browser User Agent"
|
7090 |
msgstr ""
|
7091 |
|
7092 |
+
#: src/lib/src/Modules/Plugin/Strings.php:316
|
7093 |
msgid "Login"
|
7094 |
msgstr ""
|
7095 |
|
7096 |
+
#: src/lib/src/Modules/Plugin/Strings.php:317
|
7097 |
msgid "Register"
|
7098 |
msgstr ""
|
7099 |
|
7100 |
+
#: src/lib/src/Modules/Plugin/Strings.php:318
|
7101 |
msgid "Lost Password"
|
7102 |
msgstr ""
|
7103 |
|
7104 |
+
#: src/lib/src/Modules/Plugin/Strings.php:319
|
7105 |
msgid "Checkout (WooCommerce)"
|
7106 |
msgstr ""
|
7107 |
|
7108 |
+
#: src/lib/src/Modules/Plugin/Strings.php:320
|
7109 |
msgid "Simple Requests"
|
7110 |
msgstr ""
|
7111 |
|
7112 |
+
#: src/lib/src/Modules/Plugin/Strings.php:321
|
7113 |
msgid "Logged-In Users"
|
7114 |
msgstr ""
|
7115 |
|
7116 |
+
#: src/lib/src/Modules/Plugin/Strings.php:322
|
7117 |
msgid "Search Engines"
|
7118 |
msgstr ""
|
7119 |
|
7120 |
+
#: src/lib/src/Modules/Plugin/Strings.php:323
|
7121 |
msgid "Uptime Monitoring Services"
|
7122 |
msgstr ""
|
7123 |
|
7124 |
+
#: src/lib/src/Modules/Plugin/Strings.php:324
|
7125 |
msgid "Enabled With Email Reports"
|
7126 |
msgstr ""
|
7127 |
|
7128 |
+
#: src/lib/src/Modules/Plugin/Strings.php:326
|
7129 |
msgid "Minor Versions Only"
|
7130 |
msgstr ""
|
7131 |
|
7132 |
+
#: src/lib/src/Modules/Plugin/Strings.php:327
|
7133 |
msgid "Major and Minor Versions"
|
7134 |
msgstr ""
|
7135 |
|
7136 |
+
#: src/lib/src/Modules/Plugin/Strings.php:328
|
7137 |
msgid "Let The Plugin Decide"
|
7138 |
msgstr ""
|
7139 |
|
7140 |
+
#: src/lib/src/Modules/Plugin/Strings.php:329
|
7141 |
msgid "As Soon As Possible"
|
7142 |
msgstr ""
|
7143 |
|
7144 |
+
#: src/lib/src/Modules/Plugin/Strings.php:330
|
7145 |
msgid "Move To Pending Moderation"
|
7146 |
msgstr ""
|
7147 |
|
7148 |
+
#: src/lib/src/Modules/Plugin/Strings.php:331
|
7149 |
msgid "Move To SPAM"
|
7150 |
msgstr ""
|
7151 |
|
7152 |
+
#: src/lib/src/Modules/Plugin/Strings.php:332
|
7153 |
msgid "Move To Trash"
|
7154 |
msgstr ""
|
7155 |
|
7156 |
+
#: src/lib/src/Modules/Plugin/Strings.php:333
|
7157 |
msgid "Block And Redirect"
|
7158 |
msgstr ""
|
7159 |
|
7160 |
+
#: src/lib/src/Modules/Plugin/Strings.php:334
|
7161 |
msgid "Invisible"
|
7162 |
msgstr ""
|
7163 |
|
7164 |
+
#: src/lib/src/Modules/Plugin/Strings.php:335
|
7165 |
msgid "Default Style"
|
7166 |
msgstr ""
|
7167 |
|
7168 |
+
#: src/lib/src/Modules/Plugin/Strings.php:336
|
7169 |
msgid "Redirect To Home Page"
|
7170 |
msgstr ""
|
7171 |
|
7172 |
+
#: src/lib/src/Modules/Plugin/Strings.php:337
|
7173 |
msgid "Return 404"
|
7174 |
msgstr ""
|
7175 |
|
7176 |
+
#: src/lib/src/Modules/Plugin/Strings.php:338
|
7177 |
msgid "Die"
|
7178 |
msgstr ""
|
7179 |
|
7180 |
+
#: src/lib/src/Modules/Plugin/Strings.php:339
|
7181 |
msgid "Scan Disabled"
|
7182 |
msgstr ""
|
7183 |
|
7184 |
+
#: src/lib/src/Modules/Plugin/Strings.php:340
|
7185 |
msgid "Scan Enabled"
|
7186 |
msgstr ""
|
7187 |
|
7188 |
+
#: src/lib/src/Modules/Plugin/Strings.php:341
|
7189 |
msgid "Automatic Scan Disabled"
|
7190 |
msgstr ""
|
7191 |
|
7192 |
+
#: src/lib/src/Modules/Plugin/Strings.php:342
|
7193 |
msgid "Automatic Scan Enabled"
|
7194 |
msgstr ""
|
7195 |
|
7196 |
+
#: src/lib/src/Modules/Plugin/Strings.php:343
|
7197 |
msgid "Scan Enabled - Send Email Notification"
|
7198 |
msgstr ""
|
7199 |
|
7200 |
+
#: src/lib/src/Modules/Plugin/Strings.php:344
|
7201 |
msgid "Scan Enabled - No Email Notification"
|
7202 |
msgstr ""
|
7203 |
|
7204 |
+
#: src/lib/src/Modules/Plugin/Strings.php:345
|
7205 |
msgid "Scan Enabled - Automatically Delete Files"
|
7206 |
msgstr ""
|
7207 |
|
7208 |
+
#: src/lib/src/Modules/Plugin/Strings.php:346
|
7209 |
msgid "Scan Enabled - Delete Files and Send Email Notification"
|
7210 |
msgstr ""
|
7211 |
|
7212 |
+
#: src/lib/src/Modules/Plugin/Strings.php:347
|
7213 |
msgid "Off: iFrames Not Blocked"
|
7214 |
msgstr ""
|
7215 |
|
7216 |
+
#: src/lib/src/Modules/Plugin/Strings.php:348
|
7217 |
msgid "On: Allow iFrames On The Same Domain"
|
7218 |
msgstr ""
|
7219 |
|
7220 |
+
#: src/lib/src/Modules/Plugin/Strings.php:349
|
7221 |
msgid "On: Block All iFrames"
|
7222 |
msgstr ""
|
7223 |
|
7224 |
+
#: src/lib/src/Modules/Plugin/Strings.php:350
|
7225 |
msgid "Default: Full Referrer URL (aka 'Unsafe URL')"
|
7226 |
msgstr ""
|
7227 |
|
7228 |
+
#: src/lib/src/Modules/Plugin/Strings.php:351
|
7229 |
msgid "No Referrer"
|
7230 |
msgstr ""
|
7231 |
|
7232 |
+
#: src/lib/src/Modules/Plugin/Strings.php:352
|
7233 |
msgid "No Referrer When Downgrade"
|
7234 |
msgstr ""
|
7235 |
|
7236 |
+
#: src/lib/src/Modules/Plugin/Strings.php:353
|
7237 |
msgid "Same Origin"
|
7238 |
msgstr ""
|
7239 |
|
7240 |
+
#: src/lib/src/Modules/Plugin/Strings.php:354
|
7241 |
msgid "Origin"
|
7242 |
msgstr ""
|
7243 |
|
7244 |
+
#: src/lib/src/Modules/Plugin/Strings.php:355
|
7245 |
msgid "Strict Origin"
|
7246 |
msgstr ""
|
7247 |
|
7248 |
+
#: src/lib/src/Modules/Plugin/Strings.php:356
|
7249 |
msgid "Origin When Cross-Origin"
|
7250 |
msgstr ""
|
7251 |
|
7252 |
+
#: src/lib/src/Modules/Plugin/Strings.php:357
|
7253 |
msgid "Strict Origin When Cross-Origin"
|
7254 |
msgstr ""
|
7255 |
|
7256 |
+
#: src/lib/src/Modules/Plugin/Strings.php:358
|
7257 |
msgid "Empty Header"
|
7258 |
msgstr ""
|
7259 |
|
7260 |
+
#: src/lib/src/Modules/Plugin/Strings.php:359
|
7261 |
msgid "Disabled - Don't Send This Header"
|
7262 |
msgstr ""
|
7263 |
|
7264 |
+
#: src/lib/src/Modules/Plugin/Strings.php:360
|
7265 |
msgid "Minute"
|
7266 |
msgstr ""
|
7267 |
|
7268 |
+
#: src/lib/src/Modules/Plugin/Strings.php:361
|
7269 |
msgid "Hour"
|
7270 |
msgstr ""
|
7271 |
|
7272 |
+
#: src/lib/src/Modules/Plugin/Strings.php:362
|
7273 |
msgid "Day"
|
7274 |
msgstr ""
|
7275 |
|
7276 |
+
#: src/lib/src/Modules/Plugin/Strings.php:363
|
7277 |
msgid "Week"
|
7278 |
msgstr ""
|
7279 |
|
7280 |
+
#: src/lib/src/Modules/Plugin/Strings.php:364
|
7281 |
msgid "Month"
|
7282 |
msgstr ""
|
7283 |
|
7284 |
+
#: src/lib/src/Modules/Plugin/Strings.php:365
|
7285 |
msgid "With Shield Bot Protection"
|
7286 |
msgstr ""
|
7287 |
|
7288 |
+
#: src/lib/src/Modules/Plugin/Strings.php:366
|
7289 |
msgid "Audit Log Only"
|
7290 |
msgstr ""
|
7291 |
|
7292 |
+
#: src/lib/src/Modules/Plugin/Strings.php:367
|
7293 |
msgid "Increment Offense Counter"
|
7294 |
msgstr ""
|
7295 |
|
7296 |
+
#: src/lib/src/Modules/Plugin/Strings.php:368
|
7297 |
msgid "Double-Increment Offense Counter"
|
7298 |
msgstr ""
|
7299 |
|
7300 |
+
#: src/lib/src/Modules/Plugin/Strings.php:369
|
7301 |
msgid "Immediate Block"
|
7302 |
msgstr ""
|
7303 |
|
7304 |
+
#: src/lib/src/Modules/Plugin/Strings.php:378
|
7305 |
msgid "Security Dashboard"
|
7306 |
msgstr ""
|
7307 |
|
7308 |
+
#: src/lib/src/Modules/Plugin/Strings.php:379
|
7309 |
msgid "Automatically Detect Visitor IP"
|
7310 |
msgstr ""
|
7311 |
|
7312 |
+
#: src/lib/src/Modules/Plugin/Strings.php:381
|
7313 |
msgid "IP Address White List"
|
7314 |
msgstr ""
|
7315 |
|
7316 |
+
#: src/lib/src/Modules/Plugin/Strings.php:382
|
7317 |
msgid ""
|
7318 |
"Any IP addresses on this list will by-pass all Plugin Security Checking."
|
7319 |
msgstr ""
|
7320 |
|
7321 |
+
#: src/lib/src/Modules/Plugin/Strings.php:384
|
7322 |
msgid "Choose IP Addresses To Blacklist"
|
7323 |
msgstr ""
|
7324 |
|
7325 |
+
#: src/lib/src/Modules/Plugin/Strings.php:385
|
7326 |
#, php-format
|
7327 |
msgid "Recommendation - %s"
|
7328 |
msgstr ""
|
7329 |
|
7330 |
+
#: src/lib/src/Modules/Plugin/Strings.php:386
|
7331 |
msgid "Blacklist"
|
7332 |
msgstr ""
|
7333 |
|
7334 |
+
#: src/lib/src/Modules/Plugin/Strings.php:387
|
7335 |
msgid "Logging"
|
7336 |
msgstr ""
|
7337 |
|
7338 |
+
#: src/lib/src/Modules/Plugin/Strings.php:388
|
7339 |
#, php-format
|
7340 |
msgid ""
|
7341 |
"User \"%s\" was forcefully logged out as they were not verified by either "
|
7342 |
"cookie or IP address (or both)."
|
7343 |
msgstr ""
|
7344 |
|
7345 |
+
#: src/lib/src/Modules/Plugin/Strings.php:389
|
7346 |
#, php-format
|
7347 |
msgid ""
|
7348 |
"User \"%s\" was found to be un-verified at the given IP Address: \"%s\"."
|
7349 |
msgstr ""
|
7350 |
|
7351 |
+
#: src/lib/src/Modules/Plugin/Strings.php:390
|
7352 |
msgid "Cookie"
|
7353 |
msgstr ""
|
7354 |
|
7355 |
+
#: src/lib/src/Modules/Plugin/Strings.php:392
|
7356 |
#: src/lib/src/Tables/Build/Traffic.php:140
|
7357 |
msgid "IP"
|
7358 |
msgstr ""
|
7359 |
|
7360 |
+
#: src/lib/src/Modules/Plugin/Strings.php:393
|
7361 |
msgid ""
|
7362 |
"This will restrict all user login sessions to a single browser. Use this if "
|
7363 |
"your users have dynamic IP addresses."
|
7364 |
msgstr ""
|
7365 |
|
7366 |
+
#: src/lib/src/Modules/Plugin/Strings.php:394
|
7367 |
msgid ""
|
7368 |
"All users will be required to authenticate their login by email-based two-"
|
7369 |
"factor authentication, when logging in from a new IP address"
|
7370 |
msgstr ""
|
7371 |
|
7372 |
+
#: src/lib/src/Modules/Plugin/Strings.php:395
|
7373 |
msgid "2-Factor Auth"
|
7374 |
msgstr ""
|
7375 |
|
7376 |
+
#: src/lib/src/Modules/Plugin/Strings.php:396
|
7377 |
msgid "Include Logged-In Users"
|
7378 |
msgstr ""
|
7379 |
|
7380 |
+
#: src/lib/src/Modules/Plugin/Strings.php:397
|
7381 |
msgid "You may also enable GASP for logged in users"
|
7382 |
msgstr ""
|
7383 |
|
7384 |
+
#: src/lib/src/Modules/Plugin/Strings.php:398
|
7385 |
msgid ""
|
7386 |
"Since logged-in users would be expected to be vetted already, this is off by "
|
7387 |
"default."
|
7388 |
msgstr ""
|
7389 |
|
7390 |
+
#: src/lib/src/Modules/Plugin/Strings.php:400
|
7391 |
msgid "Protect your security plugin not just your WordPress site"
|
7392 |
msgstr ""
|
7393 |
|
7394 |
+
#: src/lib/src/Modules/Plugin/Strings.php:403
|
7395 |
msgid "Get a view on what happens on your site, when it happens"
|
7396 |
msgstr ""
|
7397 |
|
7398 |
+
#: src/lib/src/Modules/Plugin/Strings.php:404
|
7399 |
msgid "Audit Trail Viewer"
|
7400 |
msgstr ""
|
7401 |
|
7402 |
+
#: src/lib/src/Modules/Plugin/Strings.php:406
|
7403 |
msgid "Take back full control of WordPress automatic updates"
|
7404 |
msgstr ""
|
7405 |
|
7406 |
+
#: src/lib/src/Modules/Plugin/Strings.php:407
|
7407 |
msgid "Comments SPAM"
|
7408 |
msgstr ""
|
7409 |
|
7410 |
+
#: src/lib/src/Modules/Plugin/Strings.php:408
|
7411 |
msgid "Block Bad IPs/Visitors"
|
7412 |
msgstr ""
|
7413 |
|
7414 |
+
#: src/lib/src/Modules/Plugin/Strings.php:409
|
7415 |
msgid "Block comment SPAM and retain your privacy"
|
7416 |
msgstr ""
|
7417 |
|
7418 |
+
#: src/lib/src/Modules/Plugin/Strings.php:412
|
7419 |
msgid "Automatically block malicious URLs and data sent to your site"
|
7420 |
msgstr ""
|
7421 |
|
7422 |
+
#: src/lib/src/Modules/Plugin/Strings.php:415
|
7423 |
msgid "Control HTTP Security Headers"
|
7424 |
msgstr ""
|
7425 |
|
7426 |
+
#: src/lib/src/Modules/Plugin/Strings.php:417
|
7427 |
msgid "Manage Visitor IP Address"
|
7428 |
msgstr ""
|
7429 |
|
7430 |
+
#: src/lib/src/Modules/Plugin/Strings.php:419
|
7431 |
msgid "Harden the more loosely controlled settings of your site"
|
7432 |
msgstr ""
|
7433 |
|
7434 |
+
#: src/lib/src/Modules/Plugin/Strings.php:421
|
7435 |
msgid ""
|
7436 |
"Block brute force attacks and secure user identities with Two-Factor "
|
7437 |
"Authentication"
|
7438 |
msgstr ""
|
7439 |
|
7440 |
+
#: src/lib/src/Modules/Plugin/Strings.php:422
|
7441 |
msgid "Dashboard"
|
7442 |
msgstr ""
|
7443 |
|
7444 |
+
#: src/lib/src/Modules/Plugin/Strings.php:423
|
7445 |
msgid "General Plugin Settings"
|
7446 |
msgstr ""
|
7447 |
|
7448 |
+
#: src/lib/src/Modules/Plugin/Strings.php:424
|
7449 |
msgid "Statistics"
|
7450 |
msgstr ""
|
7451 |
|
7452 |
+
#: src/lib/src/Modules/Plugin/Strings.php:425
|
7453 |
msgid "Summary of the main security actions taken by this plugin"
|
7454 |
msgstr ""
|
7455 |
|
7456 |
+
#: src/lib/src/Modules/Plugin/Strings.php:426
|
7457 |
msgid "Stats Viewer"
|
7458 |
msgstr ""
|
7459 |
|
7460 |
+
#: src/lib/src/Modules/Plugin/Strings.php:427
|
7461 |
msgid "Premium Support"
|
7462 |
msgstr ""
|
7463 |
|
7464 |
+
#: src/lib/src/Modules/Plugin/Strings.php:428
|
7465 |
msgid "Premium Plugin Support Centre"
|
7466 |
msgstr ""
|
7467 |
|
7468 |
+
#: src/lib/src/Modules/Plugin/Strings.php:430
|
7469 |
msgid ""
|
7470 |
"Get true user sessions and control account sharing, session duration and "
|
7471 |
"timeouts"
|
7472 |
msgstr ""
|
7473 |
|
7474 |
+
#: src/lib/src/Modules/Plugin/Strings.php:431
|
7475 |
msgid "Two-Factor Authentication"
|
7476 |
msgstr ""
|
7477 |
|
7478 |
+
#: src/lib/src/Modules/Plugin/Strings.php:434
|
7479 |
msgid "Dark Theme"
|
7480 |
msgstr ""
|
7481 |
|
7482 |
+
#: src/lib/src/Modules/Plugin/Strings.php:435
|
7483 |
msgid "Once"
|
7484 |
msgstr ""
|
7485 |
|
7486 |
+
#: src/lib/src/Modules/Plugin/Strings.php:436
|
7487 |
msgid "Twice"
|
7488 |
msgstr ""
|
7489 |
|
7490 |
+
#: src/lib/src/Modules/Plugin/Strings.php:437
|
7491 |
msgid "Go To Security Dashboard"
|
7492 |
msgstr ""
|
7493 |
|
7494 |
+
#: src/lib/src/Modules/Plugin/Strings.php:439
|
7495 |
+
msgid "None - Turn Off Malware Intelligence Network"
|
7496 |
+
msgstr ""
|
7497 |
+
|
7498 |
+
#: src/lib/src/Modules/Plugin/Strings.php:440
|
7499 |
+
msgid "Low"
|
7500 |
+
msgstr ""
|
7501 |
+
|
7502 |
+
#: src/lib/src/Modules/Plugin/Strings.php:442
|
7503 |
+
msgid "High"
|
7504 |
+
msgstr ""
|
7505 |
+
|
7506 |
+
#: src/lib/src/Modules/Plugin/Strings.php:443
|
7507 |
+
msgid "Full"
|
7508 |
+
msgstr ""
|
7509 |
+
|
7510 |
#: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:42
|
7511 |
#: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:67
|
7512 |
#, php-format
|
7627 |
msgid "Access Restriction Zones"
|
7628 |
msgstr ""
|
7629 |
|
|
|
|
|
|
|
|
|
|
|
|
|
7630 |
#: src/lib/src/Modules/SecurityAdmin/Strings.php:66
|
7631 |
#, php-format
|
7632 |
msgid "Rename and re-brand the %s plugin for your client site installations."
|
8612 |
msgid "Please contact your website administrator."
|
8613 |
msgstr ""
|
8614 |
|
8615 |
+
#: src/lib/src/Scans/Mal/Repair.php:108
|
8616 |
#, php-format
|
8617 |
msgid "%s not installed from WordPress.org."
|
8618 |
msgstr ""
|
8619 |
|
8620 |
+
#: src/lib/src/Scans/Mal/Repair.php:109 src/processors/hack_protect.php:283
|
8621 |
#: src/processors/hackprotect_scan_apc.php:84
|
8622 |
#: src/processors/hackprotect_scan_wpv.php:241
|
8623 |
msgid "Plugin"
|
8624 |
msgstr ""
|
8625 |
|
8626 |
+
#: src/lib/src/Scans/Mal/Repair.php:116
|
8627 |
msgid "Plugin developer doesn't use SVN tags for official releases."
|
8628 |
msgstr ""
|
8629 |
|
8644 |
msgid "Abandoned"
|
8645 |
msgstr ""
|
8646 |
|
8647 |
+
#: src/lib/src/Tables/Build/ScanMal.php:39
|
8648 |
+
#: src/processors/hackprotect_scan_mal.php:119
|
8649 |
msgid "Potential Malware Detected"
|
8650 |
msgstr ""
|
8651 |
|
8652 |
+
#: src/lib/src/Tables/Build/ScanMal.php:40
|
8653 |
+
msgid "Pattern Detected"
|
8654 |
+
msgstr ""
|
8655 |
+
|
8656 |
+
#: src/lib/src/Tables/Build/ScanMal.php:41
|
8657 |
+
msgid "Affected line numbers"
|
8658 |
+
msgstr ""
|
8659 |
+
|
8660 |
+
#: src/lib/src/Tables/Build/ScanMal.php:45
|
8661 |
+
msgid "False Positive Confidence"
|
8662 |
+
msgstr ""
|
8663 |
+
|
8664 |
+
#: src/lib/src/Tables/Build/ScanMal.php:52
|
8665 |
msgid "Repair Unavailable"
|
8666 |
msgstr ""
|
8667 |
|
8719 |
msgstr ""
|
8720 |
|
8721 |
#: src/lib/src/Tables/Render/Base.php:215
|
8722 |
+
#: src/lib/src/Tables/Render/ScanMal.php:36
|
8723 |
#: src/lib/src/Tables/Render/ScanWcf.php:29
|
8724 |
msgid "Repair"
|
8725 |
msgstr ""
|
8792 |
msgid "Deactivate"
|
8793 |
msgstr ""
|
8794 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8795 |
#: src/lib/src/Tables/Render/ScanWpv.php:75
|
8796 |
msgid "Vulnerability"
|
8797 |
msgstr ""
|
8809 |
msgid "Page"
|
8810 |
msgstr ""
|
8811 |
|
8812 |
+
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:40
|
8813 |
+
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:47
|
8814 |
msgid "Whoops."
|
8815 |
msgstr ""
|
8816 |
|
8817 |
+
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:40
|
8818 |
msgid "Google reCAPTCHA was not submitted."
|
8819 |
msgstr ""
|
8820 |
|
8821 |
+
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:48
|
8822 |
msgid "Google reCAPTCHA verification failed."
|
8823 |
msgstr ""
|
8824 |
|
8825 |
+
#: src/lib/src/Utilities/ReCaptcha/TestRequest.php:50
|
8826 |
msgid "Maybe refresh the page and try again."
|
8827 |
msgstr ""
|
8828 |
|
9101 |
msgid "Abandoned Plugin(s) Discovered On Your Site."
|
9102 |
msgstr ""
|
9103 |
|
9104 |
+
#: src/processors/hackprotect_scan_base.php:373
|
9105 |
msgid "Run Scanner"
|
9106 |
msgstr ""
|
9107 |
|
9108 |
+
#: src/processors/hackprotect_scan_mal.php:147
|
9109 |
#, php-format
|
9110 |
msgid "The %s Malware Scanner found files with potential malware."
|
9111 |
msgstr ""
|
9112 |
|
9113 |
+
#: src/processors/hackprotect_scan_mal.php:149
|
9114 |
msgid ""
|
9115 |
"You must examine the file(s) carefully to determine whether suspicious code "
|
9116 |
"is really present."
|
9117 |
msgstr ""
|
9118 |
|
9119 |
+
#: src/processors/hackprotect_scan_mal.php:150
|
9120 |
#, php-format
|
9121 |
msgid ""
|
9122 |
"The %s Malware Scanner searches for common malware patterns and so false "
|
9123 |
"positives (detection errors) are to be expected sometimes."
|
9124 |
msgstr ""
|
9125 |
|
9126 |
+
#: src/processors/hackprotect_scan_mal.php:151
|
9127 |
#: src/processors/hackprotect_scan_ptg.php:592
|
9128 |
#: src/processors/hackprotect_scan_ufc.php:115
|
9129 |
#: src/processors/hackprotect_scan_wcf.php:98
|
9132 |
msgid "Site URL"
|
9133 |
msgstr ""
|
9134 |
|
9135 |
+
#: src/processors/hackprotect_scan_mal.php:159
|
9136 |
#: src/processors/hackprotect_scan_wcf.php:106
|
9137 |
#, php-format
|
9138 |
msgid "%s has already attempted to repair the files."
|
9139 |
msgstr ""
|
9140 |
|
9141 |
+
#: src/processors/hackprotect_scan_mal.php:160
|
9142 |
#: src/processors/hackprotect_scan_wcf.php:107
|
9143 |
msgid ""
|
9144 |
"But, you should always check these files to ensure everything is as you "
|
9145 |
"expect."
|
9146 |
msgstr ""
|
9147 |
|
9148 |
+
#: src/processors/hackprotect_scan_mal.php:163
|
9149 |
#: src/processors/hackprotect_scan_wcf.php:110
|
9150 |
msgid ""
|
9151 |
"You should review these files and replace them with official versions if "
|
9152 |
"required."
|
9153 |
msgstr ""
|
9154 |
|
9155 |
+
#: src/processors/hackprotect_scan_mal.php:164
|
9156 |
#: src/processors/hackprotect_scan_wcf.php:111
|
9157 |
msgid ""
|
9158 |
"Alternatively you can have the plugin attempt to repair/replace these files "
|
9159 |
"automatically."
|
9160 |
msgstr ""
|
9161 |
|
9162 |
+
#: src/processors/hackprotect_scan_mal.php:170
|
9163 |
#: src/processors/hackprotect_scan_ufc.php:131
|
9164 |
#: src/processors/hackprotect_scan_wcf.php:117
|
9165 |
msgid "We recommend you run the scanner to review your site"
|
9166 |
msgstr ""
|
9167 |
|
9168 |
+
#: src/processors/hackprotect_scan_mal.php:175
|
9169 |
#: src/processors/hackprotect_scan_ufc.php:136
|
9170 |
#: src/processors/hackprotect_scan_wcf.php:122
|
9171 |
msgid "More Info On This Scanner"
|
9172 |
msgstr ""
|
9173 |
|
9174 |
+
#: src/processors/hackprotect_scan_mal.php:187
|
9175 |
msgid "The following files contain suspected malware:"
|
9176 |
msgstr ""
|
9177 |
|
9335 |
msgid "No custom message provided."
|
9336 |
msgstr ""
|
9337 |
|
9338 |
+
#: src/processors/ips.php:250
|
9339 |
#, php-format
|
9340 |
msgid "You've been blocked by the %s plugin"
|
9341 |
msgstr ""
|
9342 |
|
9343 |
+
#: src/processors/ips.php:257
|
9344 |
#, php-format
|
9345 |
msgid "Time remaining on black list: %s"
|
9346 |
msgstr ""
|
9347 |
|
9348 |
+
#: src/processors/ips.php:258
|
9349 |
#, php-format
|
9350 |
msgid "%s minute"
|
9351 |
msgid_plural "%s minutes"
|
9352 |
msgstr[0] ""
|
9353 |
msgstr[1] ""
|
9354 |
|
9355 |
+
#: src/processors/ips.php:260
|
9356 |
#, php-format
|
9357 |
msgid ""
|
9358 |
"You tripped the security plugin defenses a total of %s times making you a "
|
9359 |
"suspect."
|
9360 |
msgstr ""
|
9361 |
|
9362 |
+
#: src/processors/ips.php:261
|
9363 |
msgid ""
|
9364 |
"If you believe this to be in error, please contact the site owner and quote "
|
9365 |
"your IP address below."
|
9366 |
msgstr ""
|
9367 |
|
9368 |
+
#: src/processors/ips.php:265
|
9369 |
msgid "Auto-Unblock Your IP"
|
9370 |
msgstr ""
|
9371 |
|
9372 |
+
#: src/processors/ips.php:266
|
9373 |
msgid ""
|
9374 |
"You can automatically unblock your IP address by clicking the button below."
|
9375 |
msgstr ""
|
9376 |
|
9377 |
+
#: src/processors/ips.php:267
|
9378 |
msgid "Unblock My IP Address"
|
9379 |
msgstr ""
|
9380 |
|
9381 |
+
#: src/processors/ips.php:279 src/processors/loginprotect_gasp.php:27
|
9382 |
msgid "You MUST enable Javascript to be able to login"
|
9383 |
msgstr ""
|
9384 |
|
9385 |
+
#: src/processors/ips.php:509
|
9386 |
msgid "No Label"
|
9387 |
msgstr ""
|
9388 |
|
9398 |
msgid "Anonymous access to the WordPress Rest API has been restricted by %s."
|
9399 |
msgstr ""
|
9400 |
|
9401 |
+
#: src/processors/loginprotect_cooldown.php:20
|
9402 |
msgid "Request Cooldown in effect."
|
9403 |
msgstr ""
|
9404 |
|
9405 |
+
#: src/processors/loginprotect_cooldown.php:22
|
9406 |
#, php-format
|
9407 |
msgid "You must wait %s seconds before attempting this action again."
|
9408 |
msgstr ""
|
9909 |
msgid "The secret key is found in: %s"
|
9910 |
msgstr ""
|
9911 |
|
|
|
|
|
|
|
|
|
9912 |
#: src/processors/plugin_importexport.php:65
|
9913 |
msgid "Turn On"
|
9914 |
msgstr ""
|
9978 |
msgid "Handshake verification failed."
|
9979 |
msgstr ""
|
9980 |
|
9981 |
+
#: src/processors/sessions.php:95
|
9982 |
msgid "You're already logged-in."
|
9983 |
msgstr ""
|
9984 |
|
9985 |
+
#: src/processors/sessions.php:99
|
9986 |
msgid "Go To Admin"
|
9987 |
msgstr ""
|
9988 |
|
10071 |
"password."
|
10072 |
msgstr ""
|
10073 |
|
10074 |
+
#: src/processors/usermanagement_passwords.php:173
|
10075 |
msgid ""
|
10076 |
"Your security administrator has imposed requirements for password quality."
|
10077 |
msgstr ""
|
10078 |
|
10079 |
+
#: src/processors/usermanagement_passwords.php:174
|
10080 |
msgid "Reason"
|
10081 |
msgstr ""
|
10082 |
|
10083 |
+
#: src/processors/usermanagement_passwords.php:239
|
10084 |
#, php-format
|
10085 |
msgid "Password length (%s) too short (min: %s characters)"
|
10086 |
msgstr ""
|
10087 |
|
10088 |
+
#: src/processors/usermanagement_passwords.php:294
|
10089 |
+
#: src/processors/usermanagement_passwords.php:356
|
10090 |
msgid "Please use a different password."
|
10091 |
msgstr ""
|
10092 |
|
10093 |
+
#: src/processors/usermanagement_passwords.php:295
|
10094 |
msgid "This password has already been pwned."
|
10095 |
msgstr ""
|
10096 |
|
10097 |
+
#: src/processors/usermanagement_passwords.php:299
|
10098 |
+
#: src/processors/usermanagement_passwords.php:361
|
10099 |
#, php-format
|
10100 |
msgid "%s times"
|
10101 |
msgstr ""
|
10102 |
|
10103 |
+
#: src/processors/usermanagement_passwords.php:357
|
10104 |
msgid "This password has been pwned."
|
10105 |
msgstr ""
|
10106 |
|
10372 |
|
10373 |
#: src/wizards/plugin.php:469 src/wizards/plugin.php:502
|
10374 |
#: src/wizards/plugin.php:535 src/wizards/plugin.php:571
|
10375 |
+
#: src/wizards/plugin.php:679
|
10376 |
msgid "No changes were made as no option was selected"
|
10377 |
msgstr ""
|
10378 |
|
10379 |
#: src/wizards/plugin.php:482 src/wizards/plugin.php:515
|
10380 |
+
#: src/wizards/plugin.php:550 src/wizards/plugin.php:695
|
10381 |
msgid "Enabled"
|
10382 |
msgstr ""
|
10383 |
|
10384 |
#: src/wizards/plugin.php:486 src/wizards/plugin.php:519
|
10385 |
+
#: src/wizards/plugin.php:554 src/wizards/plugin.php:699
|
10386 |
#, php-format
|
10387 |
msgid "%s setting could not be changed at this time."
|
10388 |
msgstr ""
|
10395 |
msgid "Search item added."
|
10396 |
msgstr ""
|
10397 |
|
10398 |
+
#: src/wizards/plugin.php:661
|
10399 |
msgid "All entries were deleted"
|
10400 |
msgstr ""
|
10401 |
|
10402 |
+
#: src/wizards/plugin.php:664
|
10403 |
msgid "Please check the box to confirm deletion."
|
10404 |
msgstr ""
|
10405 |
|
Binary file
|
Binary file
|
@@ -1,8 +1,8 @@
|
|
1 |
{
|
2 |
"properties": {
|
3 |
-
"version": "8.
|
4 |
-
"release_timestamp":
|
5 |
-
"build": "
|
6 |
"slug_parent": "icwp",
|
7 |
"slug_plugin": "wpsf",
|
8 |
"human_name": "Shield",
|
1 |
{
|
2 |
"properties": {
|
3 |
+
"version": "8.2.0",
|
4 |
+
"release_timestamp": 1569918000,
|
5 |
+
"build": "201910.0101",
|
6 |
"slug_parent": "icwp",
|
7 |
"slug_plugin": "wpsf",
|
8 |
"human_name": "Shield",
|
@@ -7,8 +7,8 @@ Tags: scan, firewall, two factor authentication, login protection, malware
|
|
7 |
Requires at least: 3.5.2
|
8 |
Requires PHP: 5.4.0
|
9 |
Recommended PHP: 7.0
|
10 |
-
Tested up to: 5.
|
11 |
-
Stable tag: 8.
|
12 |
|
13 |
Security protection from hackers through smarter automation. Powerful scanners, 2-Factor Auth, limit logins, auto IP blocks & more.
|
14 |
|
@@ -370,7 +370,27 @@ You will always be able to use Shield Security and its free features in-full.
|
|
370 |
|
371 |
[Go Pro for just $1/month](https://icwp.io/aa).
|
372 |
|
373 |
-
= 8.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
374 |
*Released: 18th September, 2019* - [Release Notes](https://icwp.io/fy)
|
375 |
|
376 |
* **(v.1)** FIXED: Error for sites pre-5.0 that don't have function `determine_locale()`
|
7 |
Requires at least: 3.5.2
|
8 |
Requires PHP: 5.4.0
|
9 |
Recommended PHP: 7.0
|
10 |
+
Tested up to: 5.3
|
11 |
+
Stable tag: 8.2.0
|
12 |
|
13 |
Security protection from hackers through smarter automation. Powerful scanners, 2-Factor Auth, limit logins, auto IP blocks & more.
|
14 |
|
370 |
|
371 |
[Go Pro for just $1/month](https://icwp.io/aa).
|
372 |
|
373 |
+
= 8.2.0 - Current Release =
|
374 |
+
*Released: 1st October, 2019* - [Release Notes](https://icwp.io/g0)
|
375 |
+
|
376 |
+
* **(v.0)** IMPROVED: [**PRO**] Malware scanner now uses network intelligence to the gather information on malware results.
|
377 |
+
* **(v.0)** NEW: Traffic Watcher feature is now free for all users (no longer Pro-only).
|
378 |
+
* **(v.0)** IMPROVED: Scanning cron is improved and more efficient.
|
379 |
+
* **(v.0)** ADDED: Bulk Delete/Repair/Ignore actions now available for Malware scan results.
|
380 |
+
* **(v.0)** IMPROVED: Malware scan results now provide details of affected line numbers and patterns discovered.
|
381 |
+
* **(v.0)** IMPROVED: Malware scanner only scans `wp-admin`, `wp-includes`, `wp-content` folders, and files in top-level directory.
|
382 |
+
* **(v.0)** IMPROVED: Malware scanner now excludes `wp-content/cache/` directory.
|
383 |
+
* **(v.0)** IMPROVED: Malware scanner performance improved with caching.
|
384 |
+
* **(v.0)** IMPROVED: Malware auto-repair now works more consistently.
|
385 |
+
* **(v.0)** IMPROVED: Updated default firewall whitelist rules.
|
386 |
+
* **(v.0)** IMPROVED: If the PWNED Passwords API request fails entirely, the password check is skipped.
|
387 |
+
* **(v.0)** ADDED: Japanese translations are at 100%.
|
388 |
+
* **(v.0)** IMPROVED: Dutch translations are greatly improved (a huge thank you to Fred!).
|
389 |
+
* **(v.0)** FIXED: Audit Trail correctly logs multiple occurrences for the same type of event on the same page request.
|
390 |
+
* **(v.0)** FIXED: Audit Trail now correctly logs Google reCAPTCHA failure events.
|
391 |
+
* **(v.0)** FIXED: PHP error when firewall was set to kill response without a user message.
|
392 |
+
|
393 |
+
= 8.1 - Series =
|
394 |
*Released: 18th September, 2019* - [Release Notes](https://icwp.io/fy)
|
395 |
|
396 |
* **(v.1)** FIXED: Error for sites pre-5.0 that don't have function `determine_locale()`
|
@@ -43,7 +43,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
43 |
4 => $this->downloadServiceIps_Cloudflare( 4 ),
|
44 |
6 => $this->downloadServiceIps_Cloudflare( 6 )
|
45 |
];
|
46 |
-
$oWp->setTransient( $sStoreKey, $aIps,
|
47 |
}
|
48 |
return $aIps;
|
49 |
}
|
@@ -82,7 +82,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
82 |
$aIps = $oWp->getTransient( $sStoreKey );
|
83 |
if ( empty( $aIps ) ) {
|
84 |
$aIps = $this->downloadServiceIps_iControlWP();
|
85 |
-
$oWp->setTransient( $sStoreKey, $aIps,
|
86 |
}
|
87 |
|
88 |
return $bFlat ? array_merge( $aIps[ 4 ], $aIps[ 6 ] ) : $aIps;
|
@@ -98,7 +98,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
98 |
$aIps = $oWp->getTransient( $sStoreKey );
|
99 |
if ( empty( $aIps ) ) {
|
100 |
$aIps = $this->downloadServiceIps_ManageWp();
|
101 |
-
$oWp->setTransient( $sStoreKey, $aIps,
|
102 |
}
|
103 |
return $aIps;
|
104 |
}
|
@@ -116,7 +116,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
116 |
4 => $this->downloadServiceIps_Pingdom( 4 ),
|
117 |
6 => $this->downloadServiceIps_Pingdom( 6 )
|
118 |
];
|
119 |
-
$oWp->setTransient( $sStoreKey, $aIps,
|
120 |
}
|
121 |
return $aIps;
|
122 |
}
|
@@ -131,7 +131,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
131 |
$aIps = $oWp->getTransient( $sStoreKey );
|
132 |
if ( empty( $aIps ) || !is_array( $aIps ) ) {
|
133 |
$aIps = $this->downloadServiceIps_StatusCake();
|
134 |
-
$oWp->setTransient( $sStoreKey, $aIps,
|
135 |
}
|
136 |
return $aIps;
|
137 |
}
|
@@ -149,7 +149,7 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
149 |
4 => $this->downloadServiceIps_UptimeRobot( 4 ),
|
150 |
6 => $this->downloadServiceIps_UptimeRobot( 6 )
|
151 |
];
|
152 |
-
$oWp->setTransient( $sStoreKey, $aIps,
|
153 |
}
|
154 |
return $aIps;
|
155 |
}
|
@@ -543,4 +543,11 @@ class ICWP_WPSF_ServiceProviders extends ICWP_WPSF_Foundation {
|
|
543 |
$aIps = empty( $sRaw ) ? [] : explode( "\n", $sRaw );
|
544 |
return array_filter( array_map( 'trim', $aIps ) );
|
545 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
546 |
}
|
43 |
4 => $this->downloadServiceIps_Cloudflare( 4 ),
|
44 |
6 => $this->downloadServiceIps_Cloudflare( 6 )
|
45 |
];
|
46 |
+
$oWp->setTransient( $sStoreKey, $aIps, $this->getLookupExpiration() );
|
47 |
}
|
48 |
return $aIps;
|
49 |
}
|
82 |
$aIps = $oWp->getTransient( $sStoreKey );
|
83 |
if ( empty( $aIps ) ) {
|
84 |
$aIps = $this->downloadServiceIps_iControlWP();
|
85 |
+
$oWp->setTransient( $sStoreKey, $aIps, $this->getLookupExpiration() );
|
86 |
}
|
87 |
|
88 |
return $bFlat ? array_merge( $aIps[ 4 ], $aIps[ 6 ] ) : $aIps;
|
98 |
$aIps = $oWp->getTransient( $sStoreKey );
|
99 |
if ( empty( $aIps ) ) {
|
100 |
$aIps = $this->downloadServiceIps_ManageWp();
|
101 |
+
$oWp->setTransient( $sStoreKey, $aIps, $this->getLookupExpiration() );
|
102 |
}
|
103 |
return $aIps;
|
104 |
}
|
116 |
4 => $this->downloadServiceIps_Pingdom( 4 ),
|
117 |
6 => $this->downloadServiceIps_Pingdom( 6 )
|
118 |
];
|
119 |
+
$oWp->setTransient( $sStoreKey, $aIps, $this->getLookupExpiration() );
|
120 |
}
|
121 |
return $aIps;
|
122 |
}
|
131 |
$aIps = $oWp->getTransient( $sStoreKey );
|
132 |
if ( empty( $aIps ) || !is_array( $aIps ) ) {
|
133 |
$aIps = $this->downloadServiceIps_StatusCake();
|
134 |
+
$oWp->setTransient( $sStoreKey, $aIps, $this->getLookupExpiration() );
|
135 |
}
|
136 |
return $aIps;
|
137 |
}
|
149 |
4 => $this->downloadServiceIps_UptimeRobot( 4 ),
|
150 |
6 => $this->downloadServiceIps_UptimeRobot( 6 )
|
151 |
];
|
152 |
+
$oWp->setTransient( $sStoreKey, $aIps, $this->getLookupExpiration() );
|
153 |
}
|
154 |
return $aIps;
|
155 |
}
|
543 |
$aIps = empty( $sRaw ) ? [] : explode( "\n", $sRaw );
|
544 |
return array_filter( array_map( 'trim', $aIps ) );
|
545 |
}
|
546 |
+
|
547 |
+
/**
|
548 |
+
* @return int
|
549 |
+
*/
|
550 |
+
private function getLookupExpiration() {
|
551 |
+
return WEEK_IN_SECONDS*2;
|
552 |
+
}
|
553 |
}
|
@@ -231,6 +231,9 @@
|
|
231 |
}
|
232 |
],
|
233 |
"definitions": {
|
|
|
|
|
|
|
234 |
"audit_trail_default_max_entries": 100,
|
235 |
"audit_trail_table_name": "audit_trail",
|
236 |
"audit_trail_table_columns": [
|
@@ -257,10 +260,12 @@
|
|
257 |
],
|
258 |
"events": {
|
259 |
"plugin_activated": {
|
260 |
-
"context":
|
|
|
261 |
},
|
262 |
"plugin_deactivated": {
|
263 |
-
"context":
|
|
|
264 |
},
|
265 |
"plugin_file_edited": {
|
266 |
"context": "plugins"
|
@@ -278,22 +283,28 @@
|
|
278 |
"context": "wordpress"
|
279 |
},
|
280 |
"post_deleted": {
|
281 |
-
"context":
|
|
|
282 |
},
|
283 |
"post_trashed": {
|
284 |
-
"context":
|
|
|
285 |
},
|
286 |
"post_recovered": {
|
287 |
-
"context":
|
|
|
288 |
},
|
289 |
"post_updated": {
|
290 |
-
"context":
|
|
|
291 |
},
|
292 |
"post_published": {
|
293 |
-
"context":
|
|
|
294 |
},
|
295 |
"post_unpublished": {
|
296 |
-
"context":
|
|
|
297 |
},
|
298 |
"user_login": {
|
299 |
"context": "users"
|
@@ -302,16 +313,19 @@
|
|
302 |
"context": "users"
|
303 |
},
|
304 |
"user_deleted": {
|
305 |
-
"context":
|
|
|
306 |
},
|
307 |
"user_deleted_reassigned": {
|
308 |
"context": "users"
|
309 |
},
|
310 |
-
"email_attempt_send":
|
311 |
-
"context":
|
|
|
312 |
},
|
313 |
-
"email_send_invalid":
|
314 |
-
"context":
|
|
|
315 |
}
|
316 |
}
|
317 |
}
|
231 |
}
|
232 |
],
|
233 |
"definitions": {
|
234 |
+
"db_classes": {
|
235 |
+
"audit": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\AuditTrail\\Handler"
|
236 |
+
},
|
237 |
"audit_trail_default_max_entries": 100,
|
238 |
"audit_trail_table_name": "audit_trail",
|
239 |
"audit_trail_table_columns": [
|
260 |
],
|
261 |
"events": {
|
262 |
"plugin_activated": {
|
263 |
+
"context": "plugins",
|
264 |
+
"audit_multiple": true
|
265 |
},
|
266 |
"plugin_deactivated": {
|
267 |
+
"context": "plugins",
|
268 |
+
"audit_multiple": true
|
269 |
},
|
270 |
"plugin_file_edited": {
|
271 |
"context": "plugins"
|
283 |
"context": "wordpress"
|
284 |
},
|
285 |
"post_deleted": {
|
286 |
+
"context": "posts",
|
287 |
+
"audit_multiple": true
|
288 |
},
|
289 |
"post_trashed": {
|
290 |
+
"context": "posts",
|
291 |
+
"audit_multiple": true
|
292 |
},
|
293 |
"post_recovered": {
|
294 |
+
"context": "posts",
|
295 |
+
"audit_multiple": true
|
296 |
},
|
297 |
"post_updated": {
|
298 |
+
"context": "posts",
|
299 |
+
"audit_multiple": true
|
300 |
},
|
301 |
"post_published": {
|
302 |
+
"context": "posts",
|
303 |
+
"audit_multiple": true
|
304 |
},
|
305 |
"post_unpublished": {
|
306 |
+
"context": "posts",
|
307 |
+
"audit_multiple": true
|
308 |
},
|
309 |
"user_login": {
|
310 |
"context": "users"
|
313 |
"context": "users"
|
314 |
},
|
315 |
"user_deleted": {
|
316 |
+
"context": "users",
|
317 |
+
"audit_multiple": true
|
318 |
},
|
319 |
"user_deleted_reassigned": {
|
320 |
"context": "users"
|
321 |
},
|
322 |
+
"email_attempt_send": {
|
323 |
+
"context": "emails",
|
324 |
+
"audit_multiple": true
|
325 |
},
|
326 |
+
"email_send_invalid": {
|
327 |
+
"context": "emails",
|
328 |
+
"audit_multiple": true
|
329 |
}
|
330 |
}
|
331 |
}
|
@@ -190,7 +190,7 @@
|
|
190 |
{
|
191 |
"key": "enable_upgrade_notification_email",
|
192 |
"section": "section_options",
|
193 |
-
"default": "",
|
194 |
"type": "checkbox",
|
195 |
"link_info": "",
|
196 |
"link_blog": "",
|
190 |
{
|
191 |
"key": "enable_upgrade_notification_email",
|
192 |
"section": "section_options",
|
193 |
+
"default": "Y",
|
194 |
"type": "checkbox",
|
195 |
"link_info": "",
|
196 |
"link_blog": "",
|
@@ -42,6 +42,9 @@
|
|
42 |
}
|
43 |
],
|
44 |
"definitions": {
|
|
|
|
|
|
|
45 |
"events_table_name": "events",
|
46 |
"events_table_columns": [
|
47 |
"id",
|
42 |
}
|
43 |
],
|
44 |
"definitions": {
|
45 |
+
"db_classes": {
|
46 |
+
"events": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\Events\\Handler"
|
47 |
+
},
|
48 |
"events_table_name": "events",
|
49 |
"events_table_columns": [
|
50 |
"id",
|
@@ -299,6 +299,7 @@
|
|
299 |
"wp_http_referer",
|
300 |
"_wp_http_referer",
|
301 |
"_wp_original_http_referer",
|
|
|
302 |
"pass1",
|
303 |
"pass1-text",
|
304 |
"pwd",
|
299 |
"wp_http_referer",
|
300 |
"_wp_http_referer",
|
301 |
"_wp_original_http_referer",
|
302 |
+
"JCS_INENREF",
|
303 |
"pass1",
|
304 |
"pass1-text",
|
305 |
"pwd",
|
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
-
"slug":
|
3 |
-
"properties":
|
4 |
"slug": "hack_protect",
|
5 |
"name": "Hack Guard",
|
6 |
"show_module_menu_item": false,
|
@@ -15,7 +15,23 @@
|
|
15 |
"run_if_verified_bot": true,
|
16 |
"run_if_wpcli": false
|
17 |
},
|
18 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
{
|
20 |
"slug": "section_scan_options",
|
21 |
"title": "Scan Options",
|
@@ -116,7 +132,7 @@
|
|
116 |
"hidden": true
|
117 |
}
|
118 |
],
|
119 |
-
"options":
|
120 |
{
|
121 |
"key": "enable_hack_protect",
|
122 |
"section": "section_enable_plugin_feature_hack_protection_tools",
|
@@ -426,6 +442,40 @@
|
|
426 |
"summary": "Enable Malware File Scanner",
|
427 |
"description": "When enabled the Malware scanner will run automatically."
|
428 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
{
|
430 |
"key": "mal_autorepair_core",
|
431 |
"section": "section_scan_mal",
|
@@ -639,9 +689,20 @@
|
|
639 |
"transferable": false,
|
640 |
"type": "boolean",
|
641 |
"default": false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
642 |
}
|
643 |
],
|
644 |
-
"definitions":
|
|
|
|
|
|
|
|
|
645 |
"all_scan_slugs": [
|
646 |
"apc",
|
647 |
"mal",
|
@@ -677,7 +738,8 @@
|
|
677 |
"url_mal_sigs_simple": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_raw.txt",
|
678 |
"url_mal_sigs_regex": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_re.txt",
|
679 |
"malware_whitelist_paths": [
|
680 |
-
"wp-content/wflogs/"
|
|
|
681 |
],
|
682 |
"cron_all_scans": "all-scans",
|
683 |
"url_checksum_api": "https://api.wordpress.org/core/checksums/1.0/",
|
1 |
{
|
2 |
+
"slug": "hack_protect",
|
3 |
+
"properties": {
|
4 |
"slug": "hack_protect",
|
5 |
"name": "Hack Guard",
|
6 |
"show_module_menu_item": false,
|
15 |
"run_if_verified_bot": true,
|
16 |
"run_if_wpcli": false
|
17 |
},
|
18 |
+
"menu_items": [
|
19 |
+
{
|
20 |
+
"title": "Scans",
|
21 |
+
"slug": "scans-redirect",
|
22 |
+
"callback": ""
|
23 |
+
}
|
24 |
+
],
|
25 |
+
"custom_redirects": [
|
26 |
+
{
|
27 |
+
"source_mod_page": "scans-redirect",
|
28 |
+
"target_mod_page": "insights",
|
29 |
+
"query_args": {
|
30 |
+
"inav": "scans"
|
31 |
+
}
|
32 |
+
}
|
33 |
+
],
|
34 |
+
"sections": [
|
35 |
{
|
36 |
"slug": "section_scan_options",
|
37 |
"title": "Scan Options",
|
132 |
"hidden": true
|
133 |
}
|
134 |
],
|
135 |
+
"options": [
|
136 |
{
|
137 |
"key": "enable_hack_protect",
|
138 |
"section": "section_enable_plugin_feature_hack_protection_tools",
|
442 |
"summary": "Enable Malware File Scanner",
|
443 |
"description": "When enabled the Malware scanner will run automatically."
|
444 |
},
|
445 |
+
{
|
446 |
+
"key": "mal_fp_confidence",
|
447 |
+
"section": "section_scan_mal",
|
448 |
+
"premium": true,
|
449 |
+
"default": "75",
|
450 |
+
"type": "select",
|
451 |
+
"value_options": [
|
452 |
+
{
|
453 |
+
"value_key": "0",
|
454 |
+
"text": "None - Turn Off Malware Intelligence Network"
|
455 |
+
},
|
456 |
+
{
|
457 |
+
"value_key": "25",
|
458 |
+
"text": "Low"
|
459 |
+
},
|
460 |
+
{
|
461 |
+
"value_key": "50",
|
462 |
+
"text": "Medium"
|
463 |
+
},
|
464 |
+
{
|
465 |
+
"value_key": "75",
|
466 |
+
"text": "High"
|
467 |
+
},
|
468 |
+
{
|
469 |
+
"value_key": "100",
|
470 |
+
"text": "Full"
|
471 |
+
}
|
472 |
+
],
|
473 |
+
"link_info": "https://icwp.io/fp",
|
474 |
+
"link_blog": "https://icwp.io/fz",
|
475 |
+
"name": "Automatic Malware Scan",
|
476 |
+
"summary": "Enable Malware File Scanner",
|
477 |
+
"description": "When enabled the Malware scanner will run automatically."
|
478 |
+
},
|
479 |
{
|
480 |
"key": "mal_autorepair_core",
|
481 |
"section": "section_scan_mal",
|
689 |
"transferable": false,
|
690 |
"type": "boolean",
|
691 |
"default": false
|
692 |
+
},
|
693 |
+
{
|
694 |
+
"key": "mal_fp_reports",
|
695 |
+
"section": "section_non_ui",
|
696 |
+
"transferable": false,
|
697 |
+
"type": "array",
|
698 |
+
"default": []
|
699 |
}
|
700 |
],
|
701 |
+
"definitions": {
|
702 |
+
"db_classes": {
|
703 |
+
"scanresults": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\Scanner\\Handler",
|
704 |
+
"scanq": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\ScanQueue\\Handler"
|
705 |
+
},
|
706 |
"all_scan_slugs": [
|
707 |
"apc",
|
708 |
"mal",
|
738 |
"url_mal_sigs_simple": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_raw.txt",
|
739 |
"url_mal_sigs_regex": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_re.txt",
|
740 |
"malware_whitelist_paths": [
|
741 |
+
"wp-content/wflogs/",
|
742 |
+
"wp-content/cache/"
|
743 |
],
|
744 |
"cron_all_scans": "all-scans",
|
745 |
"url_checksum_api": "https://api.wordpress.org/core/checksums/1.0/",
|
@@ -485,6 +485,9 @@
|
|
485 |
}
|
486 |
],
|
487 |
"definitions": {
|
|
|
|
|
|
|
488 |
"ip_lists_table_name": "ip_lists",
|
489 |
"ip_list_table_columns": [
|
490 |
"id",
|
485 |
}
|
486 |
],
|
487 |
"definitions": {
|
488 |
+
"db_classes": {
|
489 |
+
"ips": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\IPs\\Handler"
|
490 |
+
},
|
491 |
"ip_lists_table_name": "ip_lists",
|
492 |
"ip_list_table_columns": [
|
493 |
"id",
|
@@ -434,6 +434,10 @@
|
|
434 |
"tracking_post_url": "https://tracking.icontrolwp.com/track/plugin/shield",
|
435 |
"importexport_cron_name": "autoimport",
|
436 |
"href_privacy_policy": "https://icwp.io/wpshieldprivacypolicy",
|
|
|
|
|
|
|
|
|
437 |
"db_autoexpire_notes": 0,
|
438 |
"db_autoexpire_geoip": 30,
|
439 |
"db_notes_name": "notes",
|
@@ -507,12 +511,6 @@
|
|
507 |
"storage_key": "events",
|
508 |
"load_priority": 11
|
509 |
},
|
510 |
-
{
|
511 |
-
"slug": "statistics",
|
512 |
-
"storage_key": "statistics",
|
513 |
-
"load_priority": 11,
|
514 |
-
"hidden": false
|
515 |
-
},
|
516 |
{
|
517 |
"slug": "sessions",
|
518 |
"storage_key": "sessions",
|
@@ -572,7 +570,7 @@
|
|
572 |
"audit": false
|
573 |
},
|
574 |
"recaptcha_fail": {
|
575 |
-
"audit":
|
576 |
}
|
577 |
},
|
578 |
"wizards": {
|
434 |
"tracking_post_url": "https://tracking.icontrolwp.com/track/plugin/shield",
|
435 |
"importexport_cron_name": "autoimport",
|
436 |
"href_privacy_policy": "https://icwp.io/wpshieldprivacypolicy",
|
437 |
+
"db_classes": {
|
438 |
+
"geoip": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\GeoIp\\Handler",
|
439 |
+
"notes": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\AdminNotes\\Handler"
|
440 |
+
},
|
441 |
"db_autoexpire_notes": 0,
|
442 |
"db_autoexpire_geoip": 30,
|
443 |
"db_notes_name": "notes",
|
511 |
"storage_key": "events",
|
512 |
"load_priority": 11
|
513 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
514 |
{
|
515 |
"slug": "sessions",
|
516 |
"storage_key": "sessions",
|
570 |
"audit": false
|
571 |
},
|
572 |
"recaptcha_fail": {
|
573 |
+
"audit": true
|
574 |
}
|
575 |
},
|
576 |
"wizards": {
|
@@ -51,6 +51,9 @@
|
|
51 |
}
|
52 |
],
|
53 |
"definitions": {
|
|
|
|
|
|
|
54 |
"sessions_table_name": "sessions",
|
55 |
"sessions_table_columns": [
|
56 |
"id",
|
51 |
}
|
52 |
],
|
53 |
"definitions": {
|
54 |
+
"db_classes": {
|
55 |
+
"session": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\Session\\Handler"
|
56 |
+
},
|
57 |
"sessions_table_name": "sessions",
|
58 |
"sessions_table_columns": [
|
59 |
"id",
|
@@ -1,86 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"properties": {
|
3 |
-
"slug": "statistics",
|
4 |
-
"name": "Statistics",
|
5 |
-
"show_module_menu_item": false,
|
6 |
-
"storage_key": "statistics",
|
7 |
-
"tagline": "Summary of the main security actions taken by this plugin",
|
8 |
-
"show_central": false,
|
9 |
-
"premium": false,
|
10 |
-
"access_restricted": true,
|
11 |
-
"run_if_whitelisted": true,
|
12 |
-
"run_if_verified_bot": false,
|
13 |
-
"run_if_wpcli": false
|
14 |
-
},
|
15 |
-
"sections": [
|
16 |
-
{
|
17 |
-
"slug": "section_enable_plugin_feature_statistics",
|
18 |
-
"primary": true,
|
19 |
-
"title": "Enable Module: Statistics",
|
20 |
-
"title_short": "Disable Module",
|
21 |
-
"summary": [
|
22 |
-
"Purpose - Helps you see at a glance how effective the plugin has been.",
|
23 |
-
"Recommendation - Keep the Statistics feature turned on."
|
24 |
-
]
|
25 |
-
},
|
26 |
-
{
|
27 |
-
"slug": "section_enable_plugin_feature_reporting",
|
28 |
-
"primary": true,
|
29 |
-
"title": "Enable Module: Reporting",
|
30 |
-
"title_short": "Disable Module",
|
31 |
-
"summary": [
|
32 |
-
"Purpose - To track stats and issue reports.",
|
33 |
-
"Recommendation - Keep the Reporting feature turned on."
|
34 |
-
]
|
35 |
-
},
|
36 |
-
{
|
37 |
-
"slug": "section_stats_sharing",
|
38 |
-
"title": "Statistics Sharing",
|
39 |
-
"title_short": "Sharing",
|
40 |
-
"summary": [
|
41 |
-
"Purpose - Help us to provide globally accessible statistics on the effectiveness of the plugin.",
|
42 |
-
"Recommendation - Enabling this option helps us improve our plugin over time.All statistics data collection is 100% anonymous.Neither we nor anyone else will be able to trace the data back to the originating site."
|
43 |
-
]
|
44 |
-
},
|
45 |
-
{
|
46 |
-
"slug": "section_non_ui",
|
47 |
-
"hidden": true
|
48 |
-
}
|
49 |
-
],
|
50 |
-
"options": [
|
51 |
-
{
|
52 |
-
"key": "enable_statistics",
|
53 |
-
"section": "section_enable_plugin_feature_statistics",
|
54 |
-
"default": "Y",
|
55 |
-
"type": "checkbox",
|
56 |
-
"link_info": "",
|
57 |
-
"link_blog": "",
|
58 |
-
"name": "Enable Statistics",
|
59 |
-
"summary": "Enable (or Disable) The Statistics module",
|
60 |
-
"description": "Un-Checking this option will completely disable the Statistics module"
|
61 |
-
},
|
62 |
-
{
|
63 |
-
"key": "enable_reporting",
|
64 |
-
"section": "section_enable_plugin_feature_reporting",
|
65 |
-
"default": "Y",
|
66 |
-
"type": "checkbox",
|
67 |
-
"link_info": "",
|
68 |
-
"link_blog": "",
|
69 |
-
"name": "Enable Reporting",
|
70 |
-
"summary": "Enable (or Disable) The Reporting module",
|
71 |
-
"description": "Un-Checking this option will completely disable the Reporting module"
|
72 |
-
}
|
73 |
-
],
|
74 |
-
"definitions": {
|
75 |
-
"statistics_table_name": "statistics",
|
76 |
-
"statistics_table_columns": [
|
77 |
-
"id",
|
78 |
-
"stat_key",
|
79 |
-
"parent_stat_key",
|
80 |
-
"tally",
|
81 |
-
"created_at",
|
82 |
-
"modified_at",
|
83 |
-
"deleted_at"
|
84 |
-
]
|
85 |
-
}
|
86 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -9,7 +9,7 @@
|
|
9 |
"tagline": "Watch All Requests To Your Site",
|
10 |
"show_central": true,
|
11 |
"access_restricted": true,
|
12 |
-
"premium":
|
13 |
"run_if_whitelisted": false,
|
14 |
"run_if_verified_bot": true,
|
15 |
"run_if_wpcli": false,
|
@@ -191,6 +191,9 @@
|
|
191 |
}
|
192 |
],
|
193 |
"definitions": {
|
|
|
|
|
|
|
194 |
"traffic_table_name": "traffic",
|
195 |
"traffic_table_columns": [
|
196 |
"id",
|
9 |
"tagline": "Watch All Requests To Your Site",
|
10 |
"show_central": true,
|
11 |
"access_restricted": true,
|
12 |
+
"premium": false,
|
13 |
"run_if_whitelisted": false,
|
14 |
"run_if_verified_bot": true,
|
15 |
"run_if_wpcli": false,
|
191 |
}
|
192 |
],
|
193 |
"definitions": {
|
194 |
+
"db_classes": {
|
195 |
+
"traffic": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\Traffic\\Handler"
|
196 |
+
},
|
197 |
"traffic_table_name": "traffic",
|
198 |
"traffic_table_columns": [
|
199 |
"id",
|
@@ -22,6 +22,7 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
|
|
22 |
|
23 |
/**
|
24 |
* @return bool
|
|
|
25 |
*/
|
26 |
protected function isReadyToExecute() {
|
27 |
return $this->isEnabledSecurityAdmin() && parent::isReadyToExecute();
|
22 |
|
23 |
/**
|
24 |
* @return bool
|
25 |
+
* @throws \Exception
|
26 |
*/
|
27 |
protected function isReadyToExecute() {
|
28 |
return $this->isEnabledSecurityAdmin() && parent::isReadyToExecute();
|
@@ -6,6 +6,23 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
6 |
|
7 |
class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
/**
|
10 |
* @return int
|
11 |
* @deprecated 8.1 - TODO: Need to handle isPremium() within Options class
|
@@ -53,10 +70,10 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
|
|
53 |
];
|
54 |
|
55 |
try {
|
56 |
-
$oFinder
|
57 |
-
|
58 |
-
->
|
59 |
-
|
60 |
|
61 |
$oWp = Services::WpGeneral();
|
62 |
/** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
|
@@ -89,7 +106,7 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
|
|
89 |
public function onWpPrivacyErase( $aData, $sEmail, $nPage = 1 ) {
|
90 |
try {
|
91 |
$oThisUsername = Services::WpUsers()->getUserByEmail( $sEmail )->user_login;
|
92 |
-
$this->
|
93 |
->getQueryDeleter()
|
94 |
->addWhereSearch( 'wp_username', $oThisUsername )
|
95 |
->all();
|
@@ -172,13 +189,6 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
|
|
172 |
return $aAllData;
|
173 |
}
|
174 |
|
175 |
-
/**
|
176 |
-
* @return Shield\Databases\AuditTrail\Handler
|
177 |
-
*/
|
178 |
-
protected function loadDbHandler() {
|
179 |
-
return new Shield\Databases\AuditTrail\Handler();
|
180 |
-
}
|
181 |
-
|
182 |
/**
|
183 |
* @return string
|
184 |
*/
|
@@ -281,4 +291,12 @@ class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseW
|
|
281 |
public function getDefaultMaxEntries() {
|
282 |
return $this->getDef( 'audit_trail_default_max_entries' );
|
283 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
}
|
6 |
|
7 |
class ICWP_WPSF_FeatureHandler_AuditTrail extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
8 |
|
9 |
+
/**
|
10 |
+
* @return false|Shield\Databases\AuditTrail\Handler
|
11 |
+
*/
|
12 |
+
public function getDbHandler_AuditTrail() {
|
13 |
+
return $this->getDbH( 'audit' );
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @return bool
|
18 |
+
* @throws \Exception
|
19 |
+
*/
|
20 |
+
protected function isReadyToExecute() {
|
21 |
+
return ( $this->getDbHandler_AuditTrail() instanceof Shield\Databases\AuditTrail\Handler )
|
22 |
+
&& $this->getDbHandler_AuditTrail()->isReady()
|
23 |
+
&& parent::isReadyToExecute();
|
24 |
+
}
|
25 |
+
|
26 |
/**
|
27 |
* @return int
|
28 |
* @deprecated 8.1 - TODO: Need to handle isPremium() within Options class
|
70 |
];
|
71 |
|
72 |
try {
|
73 |
+
/** @var Shield\Databases\AuditTrail\Select $oFinder */
|
74 |
+
$oFinder = $this->getDbHandler_AuditTrail()
|
75 |
+
->getQuerySelector();
|
76 |
+
$oFinder->filterByUsername( $oUser->user_login );
|
77 |
|
78 |
$oWp = Services::WpGeneral();
|
79 |
/** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
|
106 |
public function onWpPrivacyErase( $aData, $sEmail, $nPage = 1 ) {
|
107 |
try {
|
108 |
$oThisUsername = Services::WpUsers()->getUserByEmail( $sEmail )->user_login;
|
109 |
+
$this->getDbHandler_AuditTrail()
|
110 |
->getQueryDeleter()
|
111 |
->addWhereSearch( 'wp_username', $oThisUsername )
|
112 |
->all();
|
189 |
return $aAllData;
|
190 |
}
|
191 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
/**
|
193 |
* @return string
|
194 |
*/
|
291 |
public function getDefaultMaxEntries() {
|
292 |
return $this->getDef( 'audit_trail_default_max_entries' );
|
293 |
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* @return Shield\Databases\AuditTrail\Handler
|
297 |
+
* @deprecated 8.1.2
|
298 |
+
*/
|
299 |
+
protected function loadDbHandler() {
|
300 |
+
return new Shield\Databases\AuditTrail\Handler();
|
301 |
+
}
|
302 |
}
|
@@ -52,6 +52,11 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
52 |
*/
|
53 |
private $oOpts;
|
54 |
|
|
|
|
|
|
|
|
|
|
|
55 |
/**
|
56 |
* @param Shield\Controller\Controller $oPluginController
|
57 |
* @param array $aMod
|
@@ -75,6 +80,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
75 |
}
|
76 |
|
77 |
if ( $this->verifyModuleMeetRequirements() ) {
|
|
|
78 |
$this->setupHooks( $aMod );
|
79 |
$this->doPostConstruction();
|
80 |
}
|
@@ -152,14 +158,67 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
152 |
}
|
153 |
|
154 |
protected function cleanupDatabases() {
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
|
|
|
|
|
|
159 |
}
|
160 |
}
|
161 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
162 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
}
|
164 |
|
165 |
/**
|
@@ -177,12 +236,13 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
177 |
$aEvts = $this->getSupportedEvents();
|
178 |
|
179 |
$aDefaults = [
|
180 |
-
'context'
|
181 |
-
'cat'
|
182 |
-
'stat'
|
183 |
-
'audit'
|
184 |
-
'recent'
|
185 |
-
'offense'
|
|
|
186 |
];
|
187 |
foreach ( $aEvts as $sKey => $aEvt ) {
|
188 |
$aEvts[ $sKey ] = array_merge( $aDefaults, $aEvt );
|
@@ -316,8 +376,12 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
316 |
if ( $this->getOptions()->getFeatureProperty( 'auto_load_processor' ) ) {
|
317 |
$this->loadProcessor();
|
318 |
}
|
319 |
-
|
320 |
-
$this->
|
|
|
|
|
|
|
|
|
321 |
}
|
322 |
}
|
323 |
|
@@ -333,20 +397,11 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
333 |
}
|
334 |
|
335 |
/**
|
336 |
-
* Used to effect certain processing that is to do with options etc. but isn't related to processing
|
337 |
-
* functionality of the plugin.
|
338 |
* @return bool
|
|
|
339 |
*/
|
340 |
protected function isReadyToExecute() {
|
341 |
-
|
342 |
-
$oDbH = $this->getDbHandler();
|
343 |
-
$bReady = ( $this->getProcessor() instanceof Shield\Modules\Base\BaseProcessor )
|
344 |
-
&& ( !$oDbH instanceof Shield\Databases\Base\Handler || $oDbH->isReady() );
|
345 |
-
}
|
346 |
-
catch ( \Exception $oE ) {
|
347 |
-
$bReady = false;
|
348 |
-
}
|
349 |
-
return $bReady;
|
350 |
}
|
351 |
|
352 |
protected function doExecuteProcessor() {
|
@@ -621,16 +676,12 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
621 |
if ( !empty( $aAdditionalItems ) && is_array( $aAdditionalItems ) ) {
|
622 |
|
623 |
foreach ( $aAdditionalItems as $aMenuItem ) {
|
624 |
-
|
625 |
-
if ( empty( $aMenuItem[ 'callback' ] ) || !method_exists( $this, $aMenuItem[ 'callback' ] ) ) {
|
626 |
-
continue;
|
627 |
-
}
|
628 |
-
|
629 |
$sMenuPageTitle = $sHumanName.' - '.$aMenuItem[ 'title' ];
|
630 |
$aItems[ $sMenuPageTitle ] = [
|
631 |
-
$aMenuItem[ 'title' ],
|
632 |
$this->prefix( $aMenuItem[ 'slug' ] ),
|
633 |
-
[ $this, $aMenuItem[ 'callback' ] ]
|
|
|
634 |
];
|
635 |
}
|
636 |
}
|
@@ -638,6 +689,27 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
638 |
return $aItems;
|
639 |
}
|
640 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
641 |
/**
|
642 |
* @return array
|
643 |
*/
|
@@ -1146,11 +1218,12 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
1146 |
}
|
1147 |
|
1148 |
public function onPluginDelete() {
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
|
|
1152 |
}
|
1153 |
-
$this->getOptions()->
|
1154 |
}
|
1155 |
|
1156 |
/**
|
@@ -1197,6 +1270,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
1197 |
/**
|
1198 |
* @param string $sMsg
|
1199 |
* @param bool $bError
|
|
|
1200 |
* @return $this
|
1201 |
*/
|
1202 |
public function setFlashAdminNotice( $sMsg, $bError = false, $bShowOnLogin = false ) {
|
@@ -1353,13 +1427,6 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
1353 |
return ( $this->getCon()->getShieldAction() == 'wizard' && $this->isThisModulePage() );
|
1354 |
}
|
1355 |
|
1356 |
-
/**
|
1357 |
-
* @return boolean
|
1358 |
-
*/
|
1359 |
-
public function hasEncryptOption() {
|
1360 |
-
return function_exists( 'md5' );
|
1361 |
-
}
|
1362 |
-
|
1363 |
/**
|
1364 |
* Will prefix and return any string with the unique plugin prefix.
|
1365 |
* @param string $sSuffix
|
@@ -1891,21 +1958,26 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
1891 |
}
|
1892 |
|
1893 |
/**
|
|
|
1894 |
* @return null|Shield\Databases\Base\Handler|mixed
|
|
|
1895 |
*/
|
1896 |
public function getDbHandler() {
|
1897 |
-
|
1898 |
-
|
1899 |
-
|
1900 |
-
try {
|
1901 |
-
$this->oDbh->setMod( $this )
|
1902 |
-
->tableInit();
|
1903 |
-
}
|
1904 |
-
catch ( \Exception$oE ) {
|
1905 |
-
}
|
1906 |
-
}
|
1907 |
}
|
1908 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1909 |
}
|
1910 |
|
1911 |
/**
|
@@ -1918,13 +1990,6 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
1918 |
return $this->oStrings;
|
1919 |
}
|
1920 |
|
1921 |
-
/**
|
1922 |
-
* @return Shield\Databases\Base\Handler|mixed|false
|
1923 |
-
*/
|
1924 |
-
protected function loadDbHandler() {
|
1925 |
-
return false;
|
1926 |
-
}
|
1927 |
-
|
1928 |
/**
|
1929 |
* @return $this
|
1930 |
*/
|
@@ -1979,7 +2044,6 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
1979 |
}
|
1980 |
|
1981 |
/**
|
1982 |
-
* This will eventually be not needed
|
1983 |
* @return string
|
1984 |
*/
|
1985 |
protected function getNamespaceBase() {
|
@@ -2000,4 +2064,12 @@ abstract class ICWP_WPSF_FeatureHandler_Base extends Shield\Deprecated\Foundatio
|
|
2000 |
private function getAjax() {
|
2001 |
$this->loadAjaxHandler();
|
2002 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2003 |
}
|
52 |
*/
|
53 |
private $oOpts;
|
54 |
|
55 |
+
/**
|
56 |
+
* @var Shield\Databases\Base\Handler[]
|
57 |
+
*/
|
58 |
+
private $aDbHandlers;
|
59 |
+
|
60 |
/**
|
61 |
* @param Shield\Controller\Controller $oPluginController
|
62 |
* @param array $aMod
|
80 |
}
|
81 |
|
82 |
if ( $this->verifyModuleMeetRequirements() ) {
|
83 |
+
$this->handleAutoPageRedirects();
|
84 |
$this->setupHooks( $aMod );
|
85 |
$this->doPostConstruction();
|
86 |
}
|
158 |
}
|
159 |
|
160 |
protected function cleanupDatabases() {
|
161 |
+
foreach ( $this->getDbHandlers( true ) as $oDbh ) {
|
162 |
+
try {
|
163 |
+
if ( $oDbh instanceof Shield\Databases\Base\Handler && $oDbh->isReady() ) {
|
164 |
+
$oDbh->autoCleanDb();
|
165 |
+
}
|
166 |
+
}
|
167 |
+
catch ( \Exception $oE ) {
|
168 |
}
|
169 |
}
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* @param bool $bInitAll
|
174 |
+
* @return Shield\Databases\Base\Handler[]
|
175 |
+
*/
|
176 |
+
protected function getDbHandlers( $bInitAll = false ) {
|
177 |
+
if ( $bInitAll ) {
|
178 |
+
foreach ( $this->getAllDbClasses() as $sDbSlug => $sDbClass ) {
|
179 |
+
$this->getDbH( $sDbSlug );
|
180 |
+
}
|
181 |
}
|
182 |
+
return is_array( $this->aDbHandlers ) ? $this->aDbHandlers : [];
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* @param string $sDbhKey
|
187 |
+
* @return Shield\Databases\Base\Handler|mixed|false
|
188 |
+
*/
|
189 |
+
protected function getDbH( $sDbhKey ) {
|
190 |
+
$oDbH = false;
|
191 |
+
|
192 |
+
if ( !is_array( $this->aDbHandlers ) ) {
|
193 |
+
$this->aDbHandlers = [];
|
194 |
+
}
|
195 |
+
|
196 |
+
if ( !empty( $this->aDbHandlers[ $sDbhKey ] ) ) {
|
197 |
+
$oDbH = $this->aDbHandlers[ $sDbhKey ];
|
198 |
+
}
|
199 |
+
else {
|
200 |
+
$aDbClasses = $this->getAllDbClasses();
|
201 |
+
if ( isset( $aDbClasses[ $sDbhKey ] ) ) {
|
202 |
+
/** @var Shield\Databases\Base\Handler $oDbH */
|
203 |
+
$oDbH = new $aDbClasses[ $sDbhKey ]();
|
204 |
+
try {
|
205 |
+
$oDbH->setMod( $this )->tableInit();
|
206 |
+
}
|
207 |
+
catch ( \Exception $oE ) {
|
208 |
+
}
|
209 |
+
}
|
210 |
+
$this->aDbHandlers[ $sDbhKey ] = $oDbH;
|
211 |
+
}
|
212 |
+
|
213 |
+
return $oDbH;
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* @return string[]
|
218 |
+
*/
|
219 |
+
private function getAllDbClasses() {
|
220 |
+
$aCls = $this->getOptions()->getDef( 'db_classes' );
|
221 |
+
return is_array( $aCls ) ? $aCls : [];
|
222 |
}
|
223 |
|
224 |
/**
|
236 |
$aEvts = $this->getSupportedEvents();
|
237 |
|
238 |
$aDefaults = [
|
239 |
+
'context' => $this->getSlug(),
|
240 |
+
'cat' => 1,
|
241 |
+
'stat' => true,
|
242 |
+
'audit' => true,
|
243 |
+
'recent' => false, // whether to show in the recent events logs
|
244 |
+
'offense' => false, // whether to mark offense against IP
|
245 |
+
'audit_multiple' => false, // allow multiple audit entries in the same request
|
246 |
];
|
247 |
foreach ( $aEvts as $sKey => $aEvt ) {
|
248 |
$aEvts[ $sKey ] = array_merge( $aDefaults, $aEvt );
|
376 |
if ( $this->getOptions()->getFeatureProperty( 'auto_load_processor' ) ) {
|
377 |
$this->loadProcessor();
|
378 |
}
|
379 |
+
try {
|
380 |
+
if ( !$this->isUpgrading() && $this->isModuleEnabled() && $this->isReadyToExecute() ) {
|
381 |
+
$this->doExecuteProcessor();
|
382 |
+
}
|
383 |
+
}
|
384 |
+
catch ( \Exception $oE ) {
|
385 |
}
|
386 |
}
|
387 |
|
397 |
}
|
398 |
|
399 |
/**
|
|
|
|
|
400 |
* @return bool
|
401 |
+
* @throws \Exception
|
402 |
*/
|
403 |
protected function isReadyToExecute() {
|
404 |
+
return ( $this->getProcessor() instanceof Shield\Modules\Base\BaseProcessor );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
}
|
406 |
|
407 |
protected function doExecuteProcessor() {
|
676 |
if ( !empty( $aAdditionalItems ) && is_array( $aAdditionalItems ) ) {
|
677 |
|
678 |
foreach ( $aAdditionalItems as $aMenuItem ) {
|
|
|
|
|
|
|
|
|
|
|
679 |
$sMenuPageTitle = $sHumanName.' - '.$aMenuItem[ 'title' ];
|
680 |
$aItems[ $sMenuPageTitle ] = [
|
681 |
+
__( $aMenuItem[ 'title' ], 'wp-simple-firewall' ),
|
682 |
$this->prefix( $aMenuItem[ 'slug' ] ),
|
683 |
+
[ $this, $aMenuItem[ 'callback' ] ],
|
684 |
+
true
|
685 |
];
|
686 |
}
|
687 |
}
|
689 |
return $aItems;
|
690 |
}
|
691 |
|
692 |
+
/**
|
693 |
+
* Handles the case where we want to redirect certain menu requests to other pages
|
694 |
+
* of the plugin automatically. It lets us create custom menu items.
|
695 |
+
* This can of course be extended for any other types of redirect.
|
696 |
+
*/
|
697 |
+
public function handleAutoPageRedirects() {
|
698 |
+
$aConf = $this->getOptions()->getRawData_FullFeatureConfig();
|
699 |
+
if ( !empty( $aConf[ 'custom_redirects' ] ) && $this->getCon()->isValidAdminArea() ) {
|
700 |
+
foreach ( $aConf[ 'custom_redirects' ] as $aRedirect ) {
|
701 |
+
if ( Services::Request()->query( 'page' ) == $this->prefix( $aRedirect[ 'source_mod_page' ] ) ) {
|
702 |
+
Services::Response()->redirect(
|
703 |
+
$this->getCon()->getModule( $aRedirect[ 'target_mod_page' ] )->getUrl_AdminPage(),
|
704 |
+
$aRedirect[ 'query_args' ],
|
705 |
+
true,
|
706 |
+
false
|
707 |
+
);
|
708 |
+
}
|
709 |
+
}
|
710 |
+
}
|
711 |
+
}
|
712 |
+
|
713 |
/**
|
714 |
* @return array
|
715 |
*/
|
1218 |
}
|
1219 |
|
1220 |
public function onPluginDelete() {
|
1221 |
+
foreach ( $this->getDbHandlers( true ) as $oDbh ) {
|
1222 |
+
if ( !empty( $oDbh ) ) {
|
1223 |
+
$oDbh->deleteTable();
|
1224 |
+
}
|
1225 |
}
|
1226 |
+
$this->getOptions()->deleteStorage();
|
1227 |
}
|
1228 |
|
1229 |
/**
|
1270 |
/**
|
1271 |
* @param string $sMsg
|
1272 |
* @param bool $bError
|
1273 |
+
* @param bool $bShowOnLogin
|
1274 |
* @return $this
|
1275 |
*/
|
1276 |
public function setFlashAdminNotice( $sMsg, $bError = false, $bShowOnLogin = false ) {
|
1427 |
return ( $this->getCon()->getShieldAction() == 'wizard' && $this->isThisModulePage() );
|
1428 |
}
|
1429 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1430 |
/**
|
1431 |
* Will prefix and return any string with the unique plugin prefix.
|
1432 |
* @param string $sSuffix
|
1958 |
}
|
1959 |
|
1960 |
/**
|
1961 |
+
* The primary DB for the
|
1962 |
* @return null|Shield\Databases\Base\Handler|mixed
|
1963 |
+
* @deprecated 8.1.2
|
1964 |
*/
|
1965 |
public function getDbHandler() {
|
1966 |
+
// TODO: remove this IF, as it's a stop-gap for the newer implementation (below)
|
1967 |
+
if ( $this->oDbh instanceof Shield\Databases\Base\Handler ) {
|
1968 |
+
return $this->oDbh;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1969 |
}
|
1970 |
+
|
1971 |
+
return $this->getPrimaryDbHandler();
|
1972 |
+
}
|
1973 |
+
|
1974 |
+
/**
|
1975 |
+
* The primary DB for the
|
1976 |
+
* @return null|Shield\Databases\Base\Handler|mixed
|
1977 |
+
*/
|
1978 |
+
public function getPrimaryDbHandler() {
|
1979 |
+
$aDBs = $this->getAllDbClasses();
|
1980 |
+
return empty( $aDBs ) ? null : $this->getDbH( key( $aDBs ) );
|
1981 |
}
|
1982 |
|
1983 |
/**
|
1990 |
return $this->oStrings;
|
1991 |
}
|
1992 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1993 |
/**
|
1994 |
* @return $this
|
1995 |
*/
|
2044 |
}
|
2045 |
|
2046 |
/**
|
|
|
2047 |
* @return string
|
2048 |
*/
|
2049 |
protected function getNamespaceBase() {
|
2064 |
private function getAjax() {
|
2065 |
$this->loadAjaxHandler();
|
2066 |
}
|
2067 |
+
|
2068 |
+
/**
|
2069 |
+
* @return Shield\Databases\Base\Handler|mixed|false
|
2070 |
+
* @deprecated 8.1.2
|
2071 |
+
*/
|
2072 |
+
protected function loadDbHandler() {
|
2073 |
+
return false;
|
2074 |
+
}
|
2075 |
}
|
@@ -34,11 +34,9 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
34 |
* @return \ICWP_WPSF_Processor_Sessions
|
35 |
*/
|
36 |
public function getSessionsProcessor() {
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
->getProcessor();
|
41 |
-
return $oP;
|
42 |
}
|
43 |
|
44 |
/**
|
@@ -47,7 +45,7 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
47 |
public function getDbHandler_Sessions() {
|
48 |
return $this->getCon()
|
49 |
->getModule_Sessions()
|
50 |
-
->
|
51 |
}
|
52 |
|
53 |
/**
|
@@ -81,41 +79,6 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
81 |
add_action( $oCon->prefix( 'event' ), [ $this, 'eventStat' ], 10, 2 );
|
82 |
}
|
83 |
|
84 |
-
/**
|
85 |
-
*/
|
86 |
-
protected function updateHandler() {
|
87 |
-
$this->updateHandler_ConvertInsights();
|
88 |
-
}
|
89 |
-
|
90 |
-
private function updateHandler_ConvertInsights() {
|
91 |
-
$aMap = [
|
92 |
-
'insights_last_comment_block_at' => 'spam_block_bot',
|
93 |
-
'insights_last_firewall_block_at' => 'firewall_block',
|
94 |
-
'insights_last_scan_ufc_at' => 'ufc_scan_run',
|
95 |
-
'insights_last_scan_apc_at' => 'apc_scan_run',
|
96 |
-
'insights_last_scan_wcf_at' => 'wcf_scan_run',
|
97 |
-
'insights_last_scan_ptg_at' => 'ptg_scan_run',
|
98 |
-
'insights_last_scan_wpv_at' => 'wpv_scan_run',
|
99 |
-
'insights_last_transgression_at' => 'ip_offense',
|
100 |
-
'insights_last_ip_block_at' => 'conn_kill',
|
101 |
-
'insights_xml_block_at' => 'block_xml',
|
102 |
-
'insights_restapi_block_at' => 'block_anonymous_restapi',
|
103 |
-
'insights_last_2fa_login_at' => '2fa_success',
|
104 |
-
'insights_last_login_block_at' => 'login_block',
|
105 |
-
'insights_test_cron_last_run_at' => 'test_cron_run',
|
106 |
-
'insights_last_password_block_at' => 'password_policy_block',
|
107 |
-
];
|
108 |
-
foreach ( $this->getOptions()->getOptionsKeys() as $sOpt ) {
|
109 |
-
if ( strpos( $sOpt, 'insights_' ) === 0 && isset( $aMap[ $sOpt ] ) && $this->getOpt( $sOpt ) > 0 ) {
|
110 |
-
$this->addStatEvent( $aMap[ $sOpt ], [ 'ts' => $this->getOpt( $sOpt ) ] );
|
111 |
-
$this->setOpt( $sOpt, 0 );
|
112 |
-
}
|
113 |
-
}
|
114 |
-
/** @var Shield\Databases\Events\Handler $oDbh */
|
115 |
-
$oDbh = $this->getCon()->getModule_Events()->getDbHandler();
|
116 |
-
$oDbh->commitEvents( $this->getRegisteredEvents( true ) );
|
117 |
-
}
|
118 |
-
|
119 |
/**
|
120 |
* @param string $sEvent
|
121 |
* @param array $aMeta
|
@@ -133,7 +96,14 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
133 |
if ( !is_array( self::$aAuditLogs ) ) {
|
134 |
self::$aAuditLogs = [];
|
135 |
}
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
}
|
138 |
}
|
139 |
return $this;
|
@@ -302,6 +272,13 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
302 |
return apply_filters( $this->prefix( 'report_email_address' ), Services::WpGeneral()->getSiteAdminEmail() );
|
303 |
}
|
304 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
305 |
/**
|
306 |
* @return array
|
307 |
*/
|
@@ -341,6 +318,7 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
|
|
341 |
|
342 |
/**
|
343 |
* @return bool
|
|
|
344 |
*/
|
345 |
protected function isReadyToExecute() {
|
346 |
$oOpts = $this->getOptions();
|
34 |
* @return \ICWP_WPSF_Processor_Sessions
|
35 |
*/
|
36 |
public function getSessionsProcessor() {
|
37 |
+
return $this->getCon()
|
38 |
+
->getModule_Sessions()
|
39 |
+
->getProcessor();
|
|
|
|
|
40 |
}
|
41 |
|
42 |
/**
|
45 |
public function getDbHandler_Sessions() {
|
46 |
return $this->getCon()
|
47 |
->getModule_Sessions()
|
48 |
+
->getDbHandler_Sessions();
|
49 |
}
|
50 |
|
51 |
/**
|
79 |
add_action( $oCon->prefix( 'event' ), [ $this, 'eventStat' ], 10, 2 );
|
80 |
}
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
/**
|
83 |
* @param string $sEvent
|
84 |
* @param array $aMeta
|
96 |
if ( !is_array( self::$aAuditLogs ) ) {
|
97 |
self::$aAuditLogs = [];
|
98 |
}
|
99 |
+
|
100 |
+
// cater for where certain events may happen more than once in the same request
|
101 |
+
if ( !empty( $aDef[ 'audit_multiple' ] ) ) {
|
102 |
+
self::$aAuditLogs[] = $oEntry;
|
103 |
+
}
|
104 |
+
else {
|
105 |
+
self::$aAuditLogs[ $sEvent ] = $oEntry;
|
106 |
+
}
|
107 |
}
|
108 |
}
|
109 |
return $this;
|
272 |
return apply_filters( $this->prefix( 'report_email_address' ), Services::WpGeneral()->getSiteAdminEmail() );
|
273 |
}
|
274 |
|
275 |
+
/**
|
276 |
+
* @return Shield\Modules\BaseShield\ShieldProcessor|mixed
|
277 |
+
*/
|
278 |
+
public function getProcessor() {
|
279 |
+
return parent::getProcessor();
|
280 |
+
}
|
281 |
+
|
282 |
/**
|
283 |
* @return array
|
284 |
*/
|
318 |
|
319 |
/**
|
320 |
* @return bool
|
321 |
+
* @throws \Exception
|
322 |
*/
|
323 |
protected function isReadyToExecute() {
|
324 |
$oOpts = $this->getOptions();
|
@@ -1,15 +1,24 @@
|
|
1 |
<?php
|
2 |
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
4 |
-
use FernleafSystems\Wordpress\Services\Services;
|
5 |
|
6 |
class ICWP_WPSF_FeatureHandler_Events extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
7 |
|
8 |
/**
|
9 |
-
* @return Shield\Databases\Events\Handler
|
10 |
*/
|
11 |
-
|
12 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
14 |
|
15 |
/**
|
@@ -18,4 +27,12 @@ class ICWP_WPSF_FeatureHandler_Events extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
18 |
protected function getNamespaceBase() {
|
19 |
return 'Events';
|
20 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
}
|
1 |
<?php
|
2 |
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
|
|
4 |
|
5 |
class ICWP_WPSF_FeatureHandler_Events extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
6 |
|
7 |
/**
|
8 |
+
* @return false|Shield\Databases\Events\Handler
|
9 |
*/
|
10 |
+
public function getDbHandler_Events() {
|
11 |
+
return $this->getDbH( 'events' );
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @return bool
|
16 |
+
* @throws \Exception
|
17 |
+
*/
|
18 |
+
protected function isReadyToExecute() {
|
19 |
+
return ( $this->getDbHandler_Events() instanceof Shield\Databases\Events\Handler )
|
20 |
+
&& $this->getDbHandler_Events()->isReady()
|
21 |
+
&& parent::isReadyToExecute();
|
22 |
}
|
23 |
|
24 |
/**
|
27 |
protected function getNamespaceBase() {
|
28 |
return 'Events';
|
29 |
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @return Shield\Databases\Events\Handler
|
33 |
+
* @deprecated 8.1.2
|
34 |
+
*/
|
35 |
+
protected function loadDbHandler() {
|
36 |
+
return new Shield\Databases\Events\Handler();
|
37 |
+
}
|
38 |
}
|
@@ -6,11 +6,6 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
6 |
|
7 |
class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
8 |
|
9 |
-
/**
|
10 |
-
* @var Shield\Databases\ScanQueue\Handler
|
11 |
-
*/
|
12 |
-
private $oDbh_ScanQueue;
|
13 |
-
|
14 |
/**
|
15 |
* @var HackGuard\Scan\Queue\Controller
|
16 |
*/
|
@@ -83,7 +78,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
83 |
$oOpts = $this->getOptions();
|
84 |
if ( $oOpts->isOptChanged( 'ptg_enable' ) || $oOpts->isOptChanged( 'ptg_depth' ) || $oOpts->isOptChanged( 'ptg_extensions' ) ) {
|
85 |
$this->setPtgLastBuildAt( 0 );
|
86 |
-
/** @var ICWP_WPSF_Processor_HackProtect $oPro */
|
87 |
$oPro = $this->getProcessor();
|
88 |
$oPro->getSubProScanner()
|
89 |
->getSubProcessorPtg()
|
@@ -103,7 +98,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
103 |
/** @var Shield\Databases\Events\Select $oSel */
|
104 |
$oSel = $this->getCon()
|
105 |
->getModule_Events()
|
106 |
-
->
|
107 |
->getQuerySelector();
|
108 |
$aEvents = $oSel->getLatestForAllEvents();
|
109 |
|
@@ -123,7 +118,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
123 |
/** @var Shield\Databases\Events\Select $oSel */
|
124 |
$oSel = $this->getCon()
|
125 |
->getModule_Events()
|
126 |
-
->
|
127 |
->getQuerySelector();
|
128 |
$oEntry = $oSel->getLatestForEvent( $sScan.'_scan_run' );
|
129 |
return ( $oEntry instanceof Shield\Databases\Events\EntryVO ) ? $oEntry->created_at : 0;
|
@@ -135,7 +130,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
135 |
*/
|
136 |
public function getScanHasProblem( $sScan ) {
|
137 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
138 |
-
$oSel = $this->
|
139 |
return $oSel->filterByNotIgnored()
|
140 |
->filterByScan( $sScan )
|
141 |
->count() > 0;
|
@@ -220,25 +215,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
220 |
return $aExclusions;
|
221 |
}
|
222 |
|
223 |
-
/**
|
224 |
-
* @param string $sOption
|
225 |
-
* @return $this
|
226 |
-
*/
|
227 |
-
public function setUfcOption( $sOption ) {
|
228 |
-
return $this->setOpt( 'enable_unrecognised_file_cleaner_scan', $sOption );
|
229 |
-
}
|
230 |
-
|
231 |
-
/**
|
232 |
-
* @param array $aExclusions
|
233 |
-
* @return $this
|
234 |
-
*/
|
235 |
-
public function setUfcFileExclusions( $aExclusions ) {
|
236 |
-
if ( !is_array( $aExclusions ) ) {
|
237 |
-
$aExclusions = [];
|
238 |
-
}
|
239 |
-
return $this->setOpt( 'ufc_exclusions', array_filter( array_map( 'trim', $aExclusions ) ) );
|
240 |
-
}
|
241 |
-
|
242 |
/**
|
243 |
* @return $this
|
244 |
*/
|
@@ -280,13 +256,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
280 |
return ( $this->getUnrecognisedFileScannerOption() != 'disabled' );
|
281 |
}
|
282 |
|
283 |
-
/**
|
284 |
-
* @return bool
|
285 |
-
*/
|
286 |
-
public function isUfsScanUploads() {
|
287 |
-
return $this->isOpt( 'ufc_scan_uploads', 'Y' );
|
288 |
-
}
|
289 |
-
|
290 |
/**
|
291 |
* @return string
|
292 |
*/
|
@@ -311,22 +280,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
311 |
return $this->isOpt( 'enable_core_file_integrity_scan', 'Y' );
|
312 |
}
|
313 |
|
314 |
-
/**
|
315 |
-
* @param bool $bEnabled
|
316 |
-
* @return $this
|
317 |
-
*/
|
318 |
-
public function setWcfScanEnabled( $bEnabled ) {
|
319 |
-
return $this->setOpt( 'enable_core_file_integrity_scan', $bEnabled ? 'Y' : 'N' );
|
320 |
-
}
|
321 |
-
|
322 |
-
/**
|
323 |
-
* @param bool $bEnabled
|
324 |
-
* @return $this
|
325 |
-
*/
|
326 |
-
public function setWcfScanAutoRepair( $bEnabled ) {
|
327 |
-
return $this->setOpt( 'attempt_auto_file_repair', $bEnabled ? 'Y' : 'N' );
|
328 |
-
}
|
329 |
-
|
330 |
/**
|
331 |
* @return bool
|
332 |
*/
|
@@ -416,13 +369,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
416 |
return $this->getOpt( 'ptg_depth' );
|
417 |
}
|
418 |
|
419 |
-
/**
|
420 |
-
* @return string
|
421 |
-
*/
|
422 |
-
public function getPtgEnabledOption() {
|
423 |
-
return $this->getOpt( 'ptg_enable' );
|
424 |
-
}
|
425 |
-
|
426 |
/**
|
427 |
* @return int
|
428 |
*/
|
@@ -505,14 +451,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
505 |
return $this->setOpt( 'ptg_last_build_at', is_null( $nTime ) ? Services::Request()->ts() : $nTime );
|
506 |
}
|
507 |
|
508 |
-
/**
|
509 |
-
* @param string $sValue
|
510 |
-
* @return $this
|
511 |
-
*/
|
512 |
-
public function setPtgEnabledOption( $sValue ) {
|
513 |
-
return $this->setOpt( 'ptg_enable', $sValue );
|
514 |
-
}
|
515 |
-
|
516 |
/**
|
517 |
* @return bool
|
518 |
*/
|
@@ -527,41 +465,6 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
527 |
return $this->isOpt( 'enabled_scan_apc', 'enabled_email' );
|
528 |
}
|
529 |
|
530 |
-
/**
|
531 |
-
* @return bool
|
532 |
-
*/
|
533 |
-
public function isMalScanEnabled() {
|
534 |
-
return !$this->isOpt( 'mal_scan_enable', 'disabled' );
|
535 |
-
}
|
536 |
-
|
537 |
-
/**
|
538 |
-
* @return bool
|
539 |
-
*/
|
540 |
-
public function isMalScanAutoRepair() {
|
541 |
-
return $this->isMalAutoRepairCore() || $this->isMalAutoRepairPlugins() || $this->isMalAutoRepairSurgical();
|
542 |
-
}
|
543 |
-
|
544 |
-
/**
|
545 |
-
* @return bool
|
546 |
-
*/
|
547 |
-
public function isMalAutoRepairCore() {
|
548 |
-
return $this->isOpt( 'mal_autorepair_core', 'Y' );
|
549 |
-
}
|
550 |
-
|
551 |
-
/**
|
552 |
-
* @return bool
|
553 |
-
*/
|
554 |
-
public function isMalAutoRepairPlugins() {
|
555 |
-
return $this->isOpt( 'mal_autorepair_plugins', 'Y' );
|
556 |
-
}
|
557 |
-
|
558 |
-
/**
|
559 |
-
* @return bool
|
560 |
-
*/
|
561 |
-
public function isMalAutoRepairSurgical() {
|
562 |
-
return $this->isOpt( 'mal_autorepair_surgical', 'Y' );
|
563 |
-
}
|
564 |
-
|
565 |
public function insertCustomJsVars_Admin() {
|
566 |
parent::insertCustomJsVars_Admin();
|
567 |
|
@@ -818,11 +721,21 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
818 |
return $this->setOpt( 'rt_can_write_files', $aFiles );
|
819 |
}
|
820 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
821 |
/**
|
822 |
* @param array $aAllNotices
|
823 |
* @return array
|
824 |
*/
|
825 |
public function addInsightsNoticeData( $aAllNotices ) {
|
|
|
|
|
826 |
/** @var HackGuard\Strings $oStrings */
|
827 |
$oStrings = $this->getStrings();
|
828 |
$aScanNames = $oStrings->getScanNames();
|
@@ -938,7 +851,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
938 |
}
|
939 |
|
940 |
{// Malware
|
941 |
-
if ( !$
|
942 |
$aNotices[ 'messages' ][ 'mal' ] = [
|
943 |
'title' => $aScanNames[ 'mal' ],
|
944 |
'message' => sprintf( __( '%s Scanner is not enabled.' ), $aScanNames[ 'mal' ] ),
|
@@ -1077,7 +990,7 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
1077 |
'href' => $this->getUrl_DirectLinkToSection( 'section_scan_ptg' ),
|
1078 |
];
|
1079 |
|
1080 |
-
$bMal = $
|
1081 |
$aThis[ 'key_opts' ][ 'mal' ] = [
|
1082 |
'title' => $aScanNames[ 'mal' ],
|
1083 |
'name' => $aScanNames[ 'mal' ],
|
@@ -1117,26 +1030,71 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
1117 |
}
|
1118 |
|
1119 |
/**
|
1120 |
-
* @return Shield\Databases\ScanQueue\Handler
|
1121 |
*/
|
1122 |
public function getDbHandler_ScanQueue() {
|
1123 |
-
|
1124 |
-
try {
|
1125 |
-
$this->oDbh_ScanQueue = ( new Shield\Databases\ScanQueue\Handler() )
|
1126 |
-
->setMod( $this )
|
1127 |
-
->tableInit();
|
1128 |
-
}
|
1129 |
-
catch ( \Exception $oE ) {
|
1130 |
-
}
|
1131 |
-
}
|
1132 |
-
return $this->oDbh_ScanQueue;
|
1133 |
}
|
1134 |
|
1135 |
/**
|
1136 |
-
* @return Shield\Databases\Scanner\Handler
|
1137 |
*/
|
1138 |
-
|
1139 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1140 |
}
|
1141 |
|
1142 |
/**
|
@@ -1146,6 +1104,14 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
|
|
1146 |
return 'HackGuard';
|
1147 |
}
|
1148 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1149 |
/**
|
1150 |
* @return int
|
1151 |
* @deprecated 8.1
|
6 |
|
7 |
class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
8 |
|
|
|
|
|
|
|
|
|
|
|
9 |
/**
|
10 |
* @var HackGuard\Scan\Queue\Controller
|
11 |
*/
|
78 |
$oOpts = $this->getOptions();
|
79 |
if ( $oOpts->isOptChanged( 'ptg_enable' ) || $oOpts->isOptChanged( 'ptg_depth' ) || $oOpts->isOptChanged( 'ptg_extensions' ) ) {
|
80 |
$this->setPtgLastBuildAt( 0 );
|
81 |
+
/** @var \ICWP_WPSF_Processor_HackProtect $oPro */
|
82 |
$oPro = $this->getProcessor();
|
83 |
$oPro->getSubProScanner()
|
84 |
->getSubProcessorPtg()
|
98 |
/** @var Shield\Databases\Events\Select $oSel */
|
99 |
$oSel = $this->getCon()
|
100 |
->getModule_Events()
|
101 |
+
->getDbHandler_Events()
|
102 |
->getQuerySelector();
|
103 |
$aEvents = $oSel->getLatestForAllEvents();
|
104 |
|
118 |
/** @var Shield\Databases\Events\Select $oSel */
|
119 |
$oSel = $this->getCon()
|
120 |
->getModule_Events()
|
121 |
+
->getDbHandler_Events()
|
122 |
->getQuerySelector();
|
123 |
$oEntry = $oSel->getLatestForEvent( $sScan.'_scan_run' );
|
124 |
return ( $oEntry instanceof Shield\Databases\Events\EntryVO ) ? $oEntry->created_at : 0;
|
130 |
*/
|
131 |
public function getScanHasProblem( $sScan ) {
|
132 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
133 |
+
$oSel = $this->getDbHandler_ScanResults()->getQuerySelector();
|
134 |
return $oSel->filterByNotIgnored()
|
135 |
->filterByScan( $sScan )
|
136 |
->count() > 0;
|
215 |
return $aExclusions;
|
216 |
}
|
217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
/**
|
219 |
* @return $this
|
220 |
*/
|
256 |
return ( $this->getUnrecognisedFileScannerOption() != 'disabled' );
|
257 |
}
|
258 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
/**
|
260 |
* @return string
|
261 |
*/
|
280 |
return $this->isOpt( 'enable_core_file_integrity_scan', 'Y' );
|
281 |
}
|
282 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
/**
|
284 |
* @return bool
|
285 |
*/
|
369 |
return $this->getOpt( 'ptg_depth' );
|
370 |
}
|
371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
372 |
/**
|
373 |
* @return int
|
374 |
*/
|
451 |
return $this->setOpt( 'ptg_last_build_at', is_null( $nTime ) ? Services::Request()->ts() : $nTime );
|
452 |
}
|
453 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
454 |
/**
|
455 |
* @return bool
|
456 |
*/
|
465 |
return $this->isOpt( 'enabled_scan_apc', 'enabled_email' );
|
466 |
}
|
467 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
468 |
public function insertCustomJsVars_Admin() {
|
469 |
parent::insertCustomJsVars_Admin();
|
470 |
|
721 |
return $this->setOpt( 'rt_can_write_files', $aFiles );
|
722 |
}
|
723 |
|
724 |
+
/**
|
725 |
+
* @return string
|
726 |
+
*/
|
727 |
+
public function getTempDir() {
|
728 |
+
$sDir = $this->getCon()->getPluginCachePath( 'scans' );
|
729 |
+
return Services::WpFs()->mkdir( $sDir ) ? $sDir : false;
|
730 |
+
}
|
731 |
+
|
732 |
/**
|
733 |
* @param array $aAllNotices
|
734 |
* @return array
|
735 |
*/
|
736 |
public function addInsightsNoticeData( $aAllNotices ) {
|
737 |
+
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
738 |
+
$oOpts = $this->getOptions();
|
739 |
/** @var HackGuard\Strings $oStrings */
|
740 |
$oStrings = $this->getStrings();
|
741 |
$aScanNames = $oStrings->getScanNames();
|
851 |
}
|
852 |
|
853 |
{// Malware
|
854 |
+
if ( !$oOpts->isMalScanEnabled() ) {
|
855 |
$aNotices[ 'messages' ][ 'mal' ] = [
|
856 |
'title' => $aScanNames[ 'mal' ],
|
857 |
'message' => sprintf( __( '%s Scanner is not enabled.' ), $aScanNames[ 'mal' ] ),
|
990 |
'href' => $this->getUrl_DirectLinkToSection( 'section_scan_ptg' ),
|
991 |
];
|
992 |
|
993 |
+
$bMal = $oOpts->isMalScanEnabled();
|
994 |
$aThis[ 'key_opts' ][ 'mal' ] = [
|
995 |
'title' => $aScanNames[ 'mal' ],
|
996 |
'name' => $aScanNames[ 'mal' ],
|
1030 |
}
|
1031 |
|
1032 |
/**
|
1033 |
+
* @return false|Shield\Databases\ScanQueue\Handler
|
1034 |
*/
|
1035 |
public function getDbHandler_ScanQueue() {
|
1036 |
+
return $this->getDbH( 'scanq' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1037 |
}
|
1038 |
|
1039 |
/**
|
1040 |
+
* @return false|Shield\Databases\Scanner\Handler
|
1041 |
*/
|
1042 |
+
public function getDbHandler_ScanResults() {
|
1043 |
+
return $this->getDbH( 'scanresults' );
|
1044 |
+
}
|
1045 |
+
|
1046 |
+
/**
|
1047 |
+
* @return bool
|
1048 |
+
* @throws \Exception
|
1049 |
+
*/
|
1050 |
+
protected function isReadyToExecute() {
|
1051 |
+
return ( $this->getDbHandler_ScanQueue() instanceof Shield\Databases\ScanQueue\Handler )
|
1052 |
+
&& $this->getDbHandler_ScanQueue()->isReady()
|
1053 |
+
&& ( $this->getDbHandler_ScanResults() instanceof Shield\Databases\Scanner\Handler )
|
1054 |
+
&& $this->getDbHandler_ScanQueue()->isReady()
|
1055 |
+
&& parent::isReadyToExecute();
|
1056 |
+
}
|
1057 |
+
|
1058 |
+
/**
|
1059 |
+
* @return bool
|
1060 |
+
* @deprecated 8.2
|
1061 |
+
*/
|
1062 |
+
public function isMalScanEnabled() {
|
1063 |
+
return !$this->isOpt( 'mal_scan_enable', 'disabled' );
|
1064 |
+
}
|
1065 |
+
|
1066 |
+
/**
|
1067 |
+
* @return bool
|
1068 |
+
* @deprecated 8.2
|
1069 |
+
*/
|
1070 |
+
public function isMalAutoRepairPlugins() {
|
1071 |
+
return $this->isOpt( 'mal_autorepair_plugins', 'Y' );
|
1072 |
+
}
|
1073 |
+
|
1074 |
+
/**
|
1075 |
+
* @return bool
|
1076 |
+
* @deprecated 8.2
|
1077 |
+
*/
|
1078 |
+
public function isMalScanAutoRepair() {
|
1079 |
+
/** @var HackGuard\Options $oOpts */
|
1080 |
+
$oOpts = $this->getOptions();
|
1081 |
+
return $oOpts->isMalAutoRepair();
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
/**
|
1085 |
+
* @return bool
|
1086 |
+
* @deprecated 8.2
|
1087 |
+
*/
|
1088 |
+
public function isMalAutoRepairCore() {
|
1089 |
+
return $this->isOpt( 'mal_autorepair_core', 'Y' );
|
1090 |
+
}
|
1091 |
+
|
1092 |
+
/**
|
1093 |
+
* @return bool
|
1094 |
+
* @deprecated 8.2
|
1095 |
+
*/
|
1096 |
+
public function isMalAutoRepairSurgical() {
|
1097 |
+
return $this->isOpt( 'mal_autorepair_surgical', 'Y' );
|
1098 |
}
|
1099 |
|
1100 |
/**
|
1104 |
return 'HackGuard';
|
1105 |
}
|
1106 |
|
1107 |
+
/**
|
1108 |
+
* @return Shield\Databases\Scanner\Handler
|
1109 |
+
* @deprecated 8.1.2
|
1110 |
+
*/
|
1111 |
+
protected function loadDbHandler() {
|
1112 |
+
return new Shield\Databases\Scanner\Handler();
|
1113 |
+
}
|
1114 |
+
|
1115 |
/**
|
1116 |
* @return int
|
1117 |
* @deprecated 8.1
|
@@ -35,13 +35,12 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
35 |
/** @var ICWP_WPSF_FeatureHandler_Traffic $oTrafficMod */
|
36 |
$oTrafficMod = $oCon->getModule( 'traffic' );
|
37 |
/** @var Shield\Databases\Traffic\Select $oTrafficSelector */
|
38 |
-
$oTrafficSelector = $oTrafficMod->
|
39 |
-
->getQuerySelector();
|
40 |
|
41 |
/** @var ICWP_WPSF_FeatureHandler_AuditTrail $oAuditMod */
|
42 |
$oAuditMod = $oCon->getModule( 'audit_trail' );
|
43 |
/** @var Shield\Databases\AuditTrail\Select $oAuditSelect */
|
44 |
-
$oAuditSelect = $oAuditMod->
|
45 |
|
46 |
/** @var Shield\Modules\Events\Strings $oEventStrings */
|
47 |
$oEventStrings = $oCon->getModule_Events()->getStrings();
|
@@ -49,6 +48,8 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
49 |
asort( $aEventsSelect );
|
50 |
|
51 |
$oIpMod = $oCon->getModule_IPs();
|
|
|
|
|
52 |
|
53 |
/** @var Shield\Databases\Session\Select $oSessionSelect */
|
54 |
$oSessionSelect = $this->getDbHandler_Sessions()->getQuerySelector();
|
@@ -113,7 +114,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
113 |
__( 'Black listed IPs auto-expire after: %s', 'wp-simple-firewall' ),
|
114 |
sprintf( '<a href="%s" target="_blank">%s</a>',
|
115 |
$oIpMod->getUrl_DirectLinkToOption( 'auto_expire' ),
|
116 |
-
$oCarbon->setTimestamp( $oReq->ts() + $
|
117 |
->diffForHumans( null, true )
|
118 |
)
|
119 |
),
|
@@ -158,7 +159,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
158 |
'render_table_traffic' => $oTrafficMod->getAjaxActionData( 'render_table_traffic', true )
|
159 |
],
|
160 |
'flags' => [
|
161 |
-
'can_traffic' =>
|
162 |
'is_enabled' => $oTrafficMod->isModOptEnabled(),
|
163 |
],
|
164 |
'hrefs' => [
|
@@ -763,15 +764,15 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
763 |
* @return array[]
|
764 |
*/
|
765 |
protected function getStats() {
|
|
|
766 |
/** @var Shield\Databases\Events\Handler $oDbhEvents */
|
767 |
-
$oDbhEvents = $
|
768 |
/** @var Shield\Databases\Events\Select $oSelEvents */
|
769 |
$oSelEvents = $oDbhEvents->getQuerySelector();
|
770 |
|
771 |
/** @var Shield\Databases\IPs\Select $oSelectIp */
|
772 |
-
$oSelectIp = $
|
773 |
-
->
|
774 |
-
->getDbHandler()
|
775 |
->getQuerySelector();
|
776 |
|
777 |
return [
|
@@ -827,9 +828,10 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
827 |
* @return array
|
828 |
*/
|
829 |
protected function getRecentEvents() {
|
|
|
830 |
|
831 |
$aEmptyStats = [];
|
832 |
-
foreach ( $
|
833 |
/** @var ICWP_WPSF_FeatureHandler_BaseWpsf $oModule */
|
834 |
$aStat = $oModule->getStatEvents_Recent();
|
835 |
$aEmptyStats = array_merge( $aEmptyStats, $aStat );
|
@@ -839,12 +841,10 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
839 |
$oStrs = $this->getStrings();
|
840 |
$aNames = $oStrs->getInsightStatNames();
|
841 |
|
842 |
-
/** @var Shield\Databases\Events\Handler $oEventsDbh */
|
843 |
-
$oEventsDbh = $this->getCon()
|
844 |
-
->getModule_Events()
|
845 |
-
->getDbHandler();
|
846 |
/** @var Shield\Databases\Events\Select $oSel */
|
847 |
-
$oSel = $
|
|
|
|
|
848 |
|
849 |
$aLatestStats = array_intersect_key(
|
850 |
array_map(
|
35 |
/** @var ICWP_WPSF_FeatureHandler_Traffic $oTrafficMod */
|
36 |
$oTrafficMod = $oCon->getModule( 'traffic' );
|
37 |
/** @var Shield\Databases\Traffic\Select $oTrafficSelector */
|
38 |
+
$oTrafficSelector = $oTrafficMod->getDbHandler_Traffic()->getQuerySelector();
|
|
|
39 |
|
40 |
/** @var ICWP_WPSF_FeatureHandler_AuditTrail $oAuditMod */
|
41 |
$oAuditMod = $oCon->getModule( 'audit_trail' );
|
42 |
/** @var Shield\Databases\AuditTrail\Select $oAuditSelect */
|
43 |
+
$oAuditSelect = $oAuditMod->getDbHandler_AuditTrail()->getQuerySelector();
|
44 |
|
45 |
/** @var Shield\Modules\Events\Strings $oEventStrings */
|
46 |
$oEventStrings = $oCon->getModule_Events()->getStrings();
|
48 |
asort( $aEventsSelect );
|
49 |
|
50 |
$oIpMod = $oCon->getModule_IPs();
|
51 |
+
/** @var Shield\Modules\IPs\Options $oIpOpts */
|
52 |
+
$oIpOpts = $oIpMod->getOptions();
|
53 |
|
54 |
/** @var Shield\Databases\Session\Select $oSessionSelect */
|
55 |
$oSessionSelect = $this->getDbHandler_Sessions()->getQuerySelector();
|
114 |
__( 'Black listed IPs auto-expire after: %s', 'wp-simple-firewall' ),
|
115 |
sprintf( '<a href="%s" target="_blank">%s</a>',
|
116 |
$oIpMod->getUrl_DirectLinkToOption( 'auto_expire' ),
|
117 |
+
$oCarbon->setTimestamp( $oReq->ts() + $oIpOpts->getAutoExpireTime() + 10 )
|
118 |
->diffForHumans( null, true )
|
119 |
)
|
120 |
),
|
159 |
'render_table_traffic' => $oTrafficMod->getAjaxActionData( 'render_table_traffic', true )
|
160 |
],
|
161 |
'flags' => [
|
162 |
+
'can_traffic' => true, // since 8.2 it's always available
|
163 |
'is_enabled' => $oTrafficMod->isModOptEnabled(),
|
164 |
],
|
165 |
'hrefs' => [
|
764 |
* @return array[]
|
765 |
*/
|
766 |
protected function getStats() {
|
767 |
+
$oCon = $this->getCon();
|
768 |
/** @var Shield\Databases\Events\Handler $oDbhEvents */
|
769 |
+
$oDbhEvents = $oCon->getModule_Events()->getDbHandler_Events();
|
770 |
/** @var Shield\Databases\Events\Select $oSelEvents */
|
771 |
$oSelEvents = $oDbhEvents->getQuerySelector();
|
772 |
|
773 |
/** @var Shield\Databases\IPs\Select $oSelectIp */
|
774 |
+
$oSelectIp = $oCon->getModule_IPs()
|
775 |
+
->getDbHandler_IPs()
|
|
|
776 |
->getQuerySelector();
|
777 |
|
778 |
return [
|
828 |
* @return array
|
829 |
*/
|
830 |
protected function getRecentEvents() {
|
831 |
+
$oCon = $this->getCon();
|
832 |
|
833 |
$aEmptyStats = [];
|
834 |
+
foreach ( $oCon->getModules() as $oModule ) {
|
835 |
/** @var ICWP_WPSF_FeatureHandler_BaseWpsf $oModule */
|
836 |
$aStat = $oModule->getStatEvents_Recent();
|
837 |
$aEmptyStats = array_merge( $aEmptyStats, $aStat );
|
841 |
$oStrs = $this->getStrings();
|
842 |
$aNames = $oStrs->getInsightStatNames();
|
843 |
|
|
|
|
|
|
|
|
|
844 |
/** @var Shield\Databases\Events\Select $oSel */
|
845 |
+
$oSel = $oCon->getModule_Events()
|
846 |
+
->getDbHandler_Events()
|
847 |
+
->getQuerySelector();
|
848 |
|
849 |
$aLatestStats = array_intersect_key(
|
850 |
array_map(
|
@@ -9,12 +9,23 @@ class ICWP_WPSF_FeatureHandler_Ips extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
|
9 |
const LIST_MANUAL_BLACK = 'MB';
|
10 |
const LIST_AUTO_BLACK = 'AB';
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
/**
|
13 |
* @return bool
|
|
|
14 |
*/
|
15 |
protected function isReadyToExecute() {
|
16 |
$oIp = Services::IP();
|
17 |
-
return $oIp->isValidIp_PublicRange( $oIp->getRequestIp() )
|
|
|
|
|
|
|
18 |
}
|
19 |
|
20 |
protected function doExtraSubmitProcessing() {
|
@@ -174,27 +185,6 @@ class ICWP_WPSF_FeatureHandler_Ips extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
|
174 |
}
|
175 |
}
|
176 |
|
177 |
-
protected function ensureFeatureEnabled() {
|
178 |
-
// we prevent disabling of this feature if the white list isn't empty
|
179 |
-
if ( !$this->isModuleEnabled() ) {
|
180 |
-
/** @var ICWP_WPSF_Processor_Ips $oProcessor */
|
181 |
-
$oProcessor = $this->getProcessor();
|
182 |
-
if ( count( $oProcessor->getWhitelistIpsData() ) > 0 ) {
|
183 |
-
$this->setIsMainFeatureEnabled( true );
|
184 |
-
$this->setFlashAdminNotice(
|
185 |
-
sprintf( __( 'Sorry, the %s feature may not be disabled while there are IP addresses in the White List', 'wp-simple-firewall' ), $this->getMainFeatureName() )
|
186 |
-
);
|
187 |
-
}
|
188 |
-
}
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* @return Shield\Databases\IPs\Handler
|
193 |
-
*/
|
194 |
-
protected function loadDbHandler() {
|
195 |
-
return new Shield\Databases\IPs\Handler();
|
196 |
-
}
|
197 |
-
|
198 |
/**
|
199 |
* @return string
|
200 |
*/
|
@@ -311,4 +301,12 @@ class ICWP_WPSF_FeatureHandler_Ips extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
|
311 |
$sConstant = strtoupper( $this->getOpt( 'auto_expire' ).'_IN_SECONDS' );
|
312 |
return defined( $sConstant ) ? constant( $sConstant ) : ( DAY_IN_SECONDS*30 );
|
313 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
314 |
}
|
9 |
const LIST_MANUAL_BLACK = 'MB';
|
10 |
const LIST_AUTO_BLACK = 'AB';
|
11 |
|
12 |
+
/**
|
13 |
+
* @return false|Shield\Databases\IPs\Handler
|
14 |
+
*/
|
15 |
+
public function getDbHandler_IPs() {
|
16 |
+
return $this->getDbH( 'ips' );
|
17 |
+
}
|
18 |
+
|
19 |
/**
|
20 |
* @return bool
|
21 |
+
* @throws \Exception
|
22 |
*/
|
23 |
protected function isReadyToExecute() {
|
24 |
$oIp = Services::IP();
|
25 |
+
return $oIp->isValidIp_PublicRange( $oIp->getRequestIp() )
|
26 |
+
&& ( $this->getDbHandler_IPs() instanceof Shield\Databases\IPs\Handler )
|
27 |
+
&& $this->getDbHandler_IPs()->isReady()
|
28 |
+
&& parent::isReadyToExecute();
|
29 |
}
|
30 |
|
31 |
protected function doExtraSubmitProcessing() {
|
185 |
}
|
186 |
}
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
/**
|
189 |
* @return string
|
190 |
*/
|
301 |
$sConstant = strtoupper( $this->getOpt( 'auto_expire' ).'_IN_SECONDS' );
|
302 |
return defined( $sConstant ) ? constant( $sConstant ) : ( DAY_IN_SECONDS*30 );
|
303 |
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* @return Shield\Databases\IPs\Handler
|
307 |
+
* @deprecated 8.1.2
|
308 |
+
*/
|
309 |
+
protected function loadDbHandler() {
|
310 |
+
return new Shield\Databases\IPs\Handler();
|
311 |
+
}
|
312 |
}
|
@@ -146,26 +146,6 @@ class ICWP_WPSF_FeatureHandler_Lockdown extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
146 |
return $aAllData;
|
147 |
}
|
148 |
|
149 |
-
protected function getCanDoAuthSalts() {
|
150 |
-
$oWpFs = Services::WpFs();
|
151 |
-
|
152 |
-
if ( !$oWpFs->getCanWpRemoteGet() ) {
|
153 |
-
return false;
|
154 |
-
}
|
155 |
-
|
156 |
-
if ( !$oWpFs->getCanDiskWrite() ) {
|
157 |
-
return false;
|
158 |
-
}
|
159 |
-
|
160 |
-
$sWpConfigPath = $oWpFs->exists( ABSPATH.'wp-config.php' ) ? ABSPATH.'wp-config.php' : ABSPATH.'../wp-config.php';
|
161 |
-
|
162 |
-
if ( !$oWpFs->exists( $sWpConfigPath ) ) {
|
163 |
-
return false;
|
164 |
-
}
|
165 |
-
$mResult = $oWpFs->getCanReadWriteFile( $sWpConfigPath );
|
166 |
-
return !empty( $mResult );
|
167 |
-
}
|
168 |
-
|
169 |
/**
|
170 |
* @return string
|
171 |
*/
|
146 |
return $aAllData;
|
147 |
}
|
148 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
/**
|
150 |
* @return string
|
151 |
*/
|
@@ -184,6 +184,7 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
184 |
|
185 |
/**
|
186 |
* @return int
|
|
|
187 |
*/
|
188 |
public function getCooldownInterval() {
|
189 |
return (int)$this->getOpt( 'login_limit_interval' );
|
@@ -393,13 +394,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
393 |
return is_array( $aLocs ) ? $aLocs : (array)$this->getOptions()->getOptDefault( 'bot_protection_locations' );
|
394 |
}
|
395 |
|
396 |
-
/**
|
397 |
-
* @return bool
|
398 |
-
*/
|
399 |
-
public function isCooldownEnabled() {
|
400 |
-
return $this->getCooldownInterval() > 0;
|
401 |
-
}
|
402 |
-
|
403 |
/**
|
404 |
* @return bool
|
405 |
*/
|
@@ -650,6 +644,14 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
|
|
650 |
return $aAllData;
|
651 |
}
|
652 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
653 |
/**
|
654 |
* @return string
|
655 |
*/
|
184 |
|
185 |
/**
|
186 |
* @return int
|
187 |
+
* @deprecated 8.1.2
|
188 |
*/
|
189 |
public function getCooldownInterval() {
|
190 |
return (int)$this->getOpt( 'login_limit_interval' );
|
394 |
return is_array( $aLocs ) ? $aLocs : (array)$this->getOptions()->getOptDefault( 'bot_protection_locations' );
|
395 |
}
|
396 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
397 |
/**
|
398 |
* @return bool
|
399 |
*/
|
644 |
return $aAllData;
|
645 |
}
|
646 |
|
647 |
+
/**
|
648 |
+
* @return bool
|
649 |
+
* @deprecated 8.1.2
|
650 |
+
*/
|
651 |
+
public function isCooldownEnabled() {
|
652 |
+
return $this->getCooldownInterval() > 0;
|
653 |
+
}
|
654 |
+
|
655 |
/**
|
656 |
* @return string
|
657 |
*/
|
@@ -5,16 +5,6 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
5 |
|
6 |
class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
7 |
|
8 |
-
/**
|
9 |
-
* @var Shield\Databases\AdminNotes\Handler
|
10 |
-
*/
|
11 |
-
private $oDbh_Notes;
|
12 |
-
|
13 |
-
/**
|
14 |
-
* @var Shield\Databases\GeoIp\Handler
|
15 |
-
*/
|
16 |
-
private $oDbh_GeoIp;
|
17 |
-
|
18 |
protected function doPostConstruction() {
|
19 |
parent::doPostConstruction();
|
20 |
$this->setVisitorIp();
|
@@ -201,6 +191,7 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
201 |
/**
|
202 |
* @param bool $bOnOrOff
|
203 |
* @return $this
|
|
|
204 |
*/
|
205 |
public function setPluginTrackingPermission( $bOnOrOff = true ) {
|
206 |
return $this->setOpt( 'enable_tracking', $bOnOrOff ? 'Y' : 'N' )
|
@@ -673,37 +664,6 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
673 |
return ( !empty( $sId ) && is_string( $sId ) && strlen( $sId ) == 40 );
|
674 |
}
|
675 |
|
676 |
-
/**
|
677 |
-
* @return string
|
678 |
-
* @throws \Exception
|
679 |
-
*/
|
680 |
-
public function renderPluginBadge() {
|
681 |
-
$oCon = $this->getCon();
|
682 |
-
|
683 |
-
$aData = [
|
684 |
-
'ajax' => [
|
685 |
-
'plugin_badge_close' => $this->getAjaxActionData( 'plugin_badge_close', true ),
|
686 |
-
],
|
687 |
-
'flags' => [
|
688 |
-
'nofollow' => apply_filters( 'icwp_shield_badge_relnofollow', false ),
|
689 |
-
],
|
690 |
-
'hrefs' => [
|
691 |
-
'logo' => $oCon->getPluginUrl_Image( 'shield/shield-security-logo-colour-32px.png' ),
|
692 |
-
],
|
693 |
-
'strings' => [
|
694 |
-
'link' => apply_filters( 'icwp_shield_plugin_badge_text', sprintf(
|
695 |
-
__( 'This Site Is Protected By %s', 'wp-simple-firewall' ),
|
696 |
-
sprintf(
|
697 |
-
'<br /><span style="font-weight: bold;">The %s →</span>',
|
698 |
-
$oCon->getHumanName()
|
699 |
-
)
|
700 |
-
) ),
|
701 |
-
'name' => $oCon->getHumanName()
|
702 |
-
]
|
703 |
-
];
|
704 |
-
return $this->renderTemplate( 'snippets/plugin_badge', $aData );
|
705 |
-
}
|
706 |
-
|
707 |
/**
|
708 |
* @return bool
|
709 |
*/
|
@@ -711,13 +671,6 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
711 |
return $this->isOpt( 'enable_xmlrpc_compatibility', 'Y' );
|
712 |
}
|
713 |
|
714 |
-
/**
|
715 |
-
* @return int
|
716 |
-
*/
|
717 |
-
public function getTestCronLastRunAt() {
|
718 |
-
return (int)$this->getOpt( 'insights_test_cron_last_run_at', 0 );
|
719 |
-
}
|
720 |
-
|
721 |
/**
|
722 |
* @return bool
|
723 |
*/
|
@@ -805,47 +758,18 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
805 |
return $aAllData;
|
806 |
}
|
807 |
|
808 |
-
public function onPluginDelete() {
|
809 |
-
$this->getDbHandler_GeoIp()->deleteTable();
|
810 |
-
$this->getDbHandler_Notes()->deleteTable();
|
811 |
-
parent::onPluginDelete();
|
812 |
-
}
|
813 |
-
|
814 |
-
protected function cleanupDatabases() {
|
815 |
-
$this->getDbHandler_GeoIp()->autoCleanDb();
|
816 |
-
$this->getDbHandler_Notes()->autoCleanDb();
|
817 |
-
}
|
818 |
-
|
819 |
/**
|
820 |
* @return Shield\Databases\GeoIp\Handler
|
821 |
*/
|
822 |
public function getDbHandler_GeoIp() {
|
823 |
-
|
824 |
-
try {
|
825 |
-
$this->oDbh_GeoIp = ( new Shield\Databases\GeoIp\Handler() )
|
826 |
-
->setMod( $this )
|
827 |
-
->tableInit();
|
828 |
-
}
|
829 |
-
catch ( \Exception $oE ) {
|
830 |
-
}
|
831 |
-
}
|
832 |
-
return $this->oDbh_GeoIp;
|
833 |
}
|
834 |
|
835 |
/**
|
836 |
* @return Shield\Databases\AdminNotes\Handler
|
837 |
*/
|
838 |
public function getDbHandler_Notes() {
|
839 |
-
|
840 |
-
try {
|
841 |
-
$this->oDbh_Notes = ( new Shield\Databases\AdminNotes\Handler() )
|
842 |
-
->setMod( $this )
|
843 |
-
->tableInit();
|
844 |
-
}
|
845 |
-
catch ( \Exception $oE ) {
|
846 |
-
}
|
847 |
-
}
|
848 |
-
return $this->oDbh_Notes;
|
849 |
}
|
850 |
|
851 |
/**
|
5 |
|
6 |
class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
protected function doPostConstruction() {
|
9 |
parent::doPostConstruction();
|
10 |
$this->setVisitorIp();
|
191 |
/**
|
192 |
* @param bool $bOnOrOff
|
193 |
* @return $this
|
194 |
+
* @deprecated 8.2
|
195 |
*/
|
196 |
public function setPluginTrackingPermission( $bOnOrOff = true ) {
|
197 |
return $this->setOpt( 'enable_tracking', $bOnOrOff ? 'Y' : 'N' )
|
664 |
return ( !empty( $sId ) && is_string( $sId ) && strlen( $sId ) == 40 );
|
665 |
}
|
666 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
667 |
/**
|
668 |
* @return bool
|
669 |
*/
|
671 |
return $this->isOpt( 'enable_xmlrpc_compatibility', 'Y' );
|
672 |
}
|
673 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
674 |
/**
|
675 |
* @return bool
|
676 |
*/
|
758 |
return $aAllData;
|
759 |
}
|
760 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
761 |
/**
|
762 |
* @return Shield\Databases\GeoIp\Handler
|
763 |
*/
|
764 |
public function getDbHandler_GeoIp() {
|
765 |
+
return $this->getDbH( 'geoip' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
766 |
}
|
767 |
|
768 |
/**
|
769 |
* @return Shield\Databases\AdminNotes\Handler
|
770 |
*/
|
771 |
public function getDbHandler_Notes() {
|
772 |
+
return $this->getDbH( 'notes' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
773 |
}
|
774 |
|
775 |
/**
|
@@ -19,10 +19,20 @@ class ICWP_WPSF_FeatureHandler_Sessions extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
19 |
}
|
20 |
|
21 |
/**
|
22 |
-
* @return Shield\Databases\Session\Handler
|
23 |
*/
|
24 |
-
|
25 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
}
|
27 |
|
28 |
/**
|
@@ -31,4 +41,12 @@ class ICWP_WPSF_FeatureHandler_Sessions extends ICWP_WPSF_FeatureHandler_BaseWps
|
|
31 |
protected function getNamespaceBase() {
|
32 |
return 'Sessions';
|
33 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
}
|
19 |
}
|
20 |
|
21 |
/**
|
22 |
+
* @return false|Shield\Databases\Session\Handler
|
23 |
*/
|
24 |
+
public function getDbHandler_Sessions() {
|
25 |
+
return $this->getDbH( 'session' );
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @return bool
|
30 |
+
* @throws \Exception
|
31 |
+
*/
|
32 |
+
protected function isReadyToExecute() {
|
33 |
+
return ( $this->getDbHandler_Sessions() instanceof Shield\Databases\Session\Handler )
|
34 |
+
&& $this->getDbHandler_Sessions()->isReady()
|
35 |
+
&& parent::isReadyToExecute();
|
36 |
}
|
37 |
|
38 |
/**
|
41 |
protected function getNamespaceBase() {
|
42 |
return 'Sessions';
|
43 |
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @return Shield\Databases\Session\Handler
|
47 |
+
* @deprecated 8.1.2
|
48 |
+
*/
|
49 |
+
protected function loadDbHandler() {
|
50 |
+
return new Shield\Databases\Session\Handler();
|
51 |
+
}
|
52 |
}
|
@@ -3,6 +3,10 @@
|
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
4 |
use FernleafSystems\Wordpress\Services\Services;
|
5 |
|
|
|
|
|
|
|
|
|
6 |
class ICWP_WPSF_FeatureHandler_Statistics extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
7 |
|
8 |
/**
|
@@ -12,103 +16,6 @@ class ICWP_WPSF_FeatureHandler_Statistics extends ICWP_WPSF_FeatureHandler_BaseW
|
|
12 |
return false;
|
13 |
}
|
14 |
|
15 |
-
/**
|
16 |
-
*/
|
17 |
-
protected function updateHandler() {
|
18 |
-
$this->updateHandler_ConvertStats();
|
19 |
-
}
|
20 |
-
|
21 |
-
private function updateHandler_ConvertStats() {
|
22 |
-
$aMap = [
|
23 |
-
'firewall.blocked.dirtraversal' => 'blockparam_dirtraversal',
|
24 |
-
'firewall.blocked.sqlqueries' => 'blockparam_sqlqueries',
|
25 |
-
'firewall.blocked.wpterms' => 'blockparam_wpterms',
|
26 |
-
'firewall.blocked.fieldtruncation' => 'blockparam_fieldtruncation',
|
27 |
-
'firewall.blocked.phpcode' => 'blockparam_phpcode',
|
28 |
-
'firewall.blocked.schema' => 'blockparam_schema',
|
29 |
-
'firewall.blocked.aggressive' => 'blockparam_aggressive',
|
30 |
-
'firewall.blocked.exefile' => 'block_exefile',
|
31 |
-
'ip.connection.killed' => 'conn_kill',
|
32 |
-
'ip.transgression.incremented' => 'ip_offense',
|
33 |
-
'login.rename.fail' => 'hide_login_url',
|
34 |
-
'user.session.start' => 'session_start',
|
35 |
-
'user.session.terminate' => 'session_terminate',
|
36 |
-
'login.recaptcha.verified' => 'recaptcha_success',
|
37 |
-
'login.recaptcha.fail' => 'recaptcha_fail',
|
38 |
-
'login.cooldown.fail' => 'block_exefile',
|
39 |
-
'login.twofactor.verified' => '2fa_success',
|
40 |
-
];
|
41 |
-
// TODO: Count all firewall.blocked.*
|
42 |
-
|
43 |
-
/** @var Shield\Databases\Tally\Handler $oDbH */
|
44 |
-
$oDbH = $this->getDbHandler();
|
45 |
-
/** @var Shield\Databases\Tally\Select $oSelectTally */
|
46 |
-
$oSelectTally = $oDbH->getQuerySelector();
|
47 |
-
|
48 |
-
/** @var Shield\Databases\Tally\EntryVO[] $aAll */
|
49 |
-
$aAll = $oSelectTally->all();
|
50 |
-
|
51 |
-
$aNewEvents = [
|
52 |
-
'firewall_block' => 0,
|
53 |
-
'botbox_fail' => 0,
|
54 |
-
'honeypot_fail' => 0,
|
55 |
-
'spam_block_bot' => 0,
|
56 |
-
'spam_block_recaptcha' => 0,
|
57 |
-
'spam_block_human' => 0,
|
58 |
-
'login_block' => 0,
|
59 |
-
];
|
60 |
-
foreach ( $aAll as $oTally ) {
|
61 |
-
if ( isset( $aMap[ $oTally->stat_key ] ) ) {
|
62 |
-
$aNewEvents[ $aMap[ $oTally->stat_key ] ] = $oTally->tally;
|
63 |
-
}
|
64 |
-
if ( strpos( $oTally->stat_key, 'firewall.blocked.' ) === 0 ) {
|
65 |
-
$aNewEvents[ 'firewall_block' ] += $oTally->tally;
|
66 |
-
}
|
67 |
-
if ( strpos( $oTally->stat_key, 'gasp.checkbox.fail' ) === 0 ) {
|
68 |
-
$aNewEvents[ 'botbox_fail' ] += $oTally->tally;
|
69 |
-
}
|
70 |
-
if ( strpos( $oTally->stat_key, 'gasp.honeypot.fail' ) === 0 ) {
|
71 |
-
$aNewEvents[ 'honeypot_fail' ] += $oTally->tally;
|
72 |
-
}
|
73 |
-
if ( strpos( $oTally->stat_key, 'spam.gasp.' ) === 0 ) {
|
74 |
-
$aNewEvents[ 'spam_block_bot' ] += $oTally->tally;
|
75 |
-
}
|
76 |
-
if ( strpos( $oTally->stat_key, 'spam.recaptcha.' ) === 0 ) {
|
77 |
-
$aNewEvents[ 'spam_block_recaptcha' ] += $oTally->tally;
|
78 |
-
}
|
79 |
-
if ( strpos( $oTally->stat_key, 'spam.human.' ) === 0 ) {
|
80 |
-
$aNewEvents[ 'spam_block_human' ] += $oTally->tally;
|
81 |
-
}
|
82 |
-
if ( preg_match( '#login.*fail#', $oTally->stat_key ) ) {
|
83 |
-
$aNewEvents[ 'login_block' ] += $oTally->tally;
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
87 |
-
/** @var Shield\Databases\Events\Handler $oDbhEvents */
|
88 |
-
$oDbhEvents = $this->getCon()->getModule_Events()->getDbHandler();
|
89 |
-
$nTs = Services::Request()
|
90 |
-
->carbon()
|
91 |
-
->subYear( 1 )->timestamp;
|
92 |
-
foreach ( array_filter( $aNewEvents ) as $sEvent => $nTally ) {
|
93 |
-
$oDbhEvents->commitEvent( $sEvent, $nTally, $nTs );
|
94 |
-
}
|
95 |
-
|
96 |
-
/** @var Shield\Databases\Tally\Handler $oDbhTallys */
|
97 |
-
$oDbhTallys = $this->getDbHandler();
|
98 |
-
/** @var Shield\Databases\Tally\Delete $oDelTallys */
|
99 |
-
$oDelTallys = $oDbhTallys->getQueryDeleter();
|
100 |
-
foreach ( $aAll as $oTally ) {
|
101 |
-
$oDelTallys->deleteEntry( $oTally );
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* @return Shield\Databases\Tally\Handler
|
107 |
-
*/
|
108 |
-
protected function loadDbHandler() {
|
109 |
-
return new Shield\Databases\Tally\Handler();
|
110 |
-
}
|
111 |
-
|
112 |
/**
|
113 |
* @return string
|
114 |
*/
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
4 |
use FernleafSystems\Wordpress\Services\Services;
|
5 |
|
6 |
+
/**
|
7 |
+
* Class ICWP_WPSF_FeatureHandler_Statistics
|
8 |
+
* @deprecated 8.1.2
|
9 |
+
*/
|
10 |
class ICWP_WPSF_FeatureHandler_Statistics extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
11 |
|
12 |
/**
|
16 |
return false;
|
17 |
}
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
/**
|
20 |
* @return string
|
21 |
*/
|
@@ -5,6 +5,13 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
5 |
|
6 |
class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
/**
|
9 |
* Hooked to the plugin's main plugin_shutdown action
|
10 |
*/
|
@@ -32,10 +39,14 @@ class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
32 |
|
33 |
/**
|
34 |
* @return bool
|
|
|
35 |
*/
|
36 |
protected function isReadyToExecute() {
|
37 |
$oIp = Services::IP();
|
38 |
-
return $oIp->isValidIp_PublicRange( $oIp->getRequestIp() )
|
|
|
|
|
|
|
39 |
}
|
40 |
|
41 |
/**
|
@@ -45,26 +56,22 @@ class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
45 |
protected function getSectionWarnings( $sSection ) {
|
46 |
$aWarnings = [];
|
47 |
|
48 |
-
|
49 |
-
|
|
|
50 |
}
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
|
|
|
|
56 |
}
|
57 |
|
58 |
return $aWarnings;
|
59 |
}
|
60 |
|
61 |
-
/**
|
62 |
-
* @return int
|
63 |
-
*/
|
64 |
-
public function getAutoCleanDays() {
|
65 |
-
return (int)$this->getOpt( 'auto_clean' );
|
66 |
-
}
|
67 |
-
|
68 |
/**
|
69 |
* @return array
|
70 |
*/
|
@@ -152,17 +159,18 @@ class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf
|
|
152 |
}
|
153 |
|
154 |
/**
|
155 |
-
* @return
|
156 |
*/
|
157 |
-
protected function
|
158 |
-
return
|
159 |
}
|
160 |
|
161 |
/**
|
162 |
-
* @return
|
|
|
163 |
*/
|
164 |
-
protected function
|
165 |
-
return
|
166 |
}
|
167 |
|
168 |
/**
|
5 |
|
6 |
class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf {
|
7 |
|
8 |
+
/**
|
9 |
+
* @return false|Shield\Databases\Traffic\Handler
|
10 |
+
*/
|
11 |
+
public function getDbHandler_Traffic() {
|
12 |
+
return $this->getDbH( 'traffic' );
|
13 |
+
}
|
14 |
+
|
15 |
/**
|
16 |
* Hooked to the plugin's main plugin_shutdown action
|
17 |
*/
|
39 |
|
40 |
/**
|
41 |
* @return bool
|
42 |
+
* @throws \Exception
|
43 |
*/
|
44 |
protected function isReadyToExecute() {
|
45 |
$oIp = Services::IP();
|
46 |
+
return $oIp->isValidIp_PublicRange( $oIp->getRequestIp() )
|
47 |
+
&& ( $this->getDbHandler_Traffic() instanceof Shield\Databases\Traffic\Handler )
|
48 |
+
&& $this->getDbHandler_Traffic()->isReady()
|
49 |
+
&& parent::isReadyToExecute();
|
50 |
}
|
51 |
|
52 |
/**
|
56 |
protected function getSectionWarnings( $sSection ) {
|
57 |
$aWarnings = [];
|
58 |
|
59 |
+
$oIp = Services::IP();
|
60 |
+
if ( !$oIp->isValidIp_PublicRange( $oIp->getRequestIp() ) ) {
|
61 |
+
$aWarnings[] = __( 'Traffic Watcher will not run because visitor IP address detection is not correctly configured.', 'wp-simple-firewall' );
|
62 |
}
|
63 |
+
|
64 |
+
switch ( $sSection ) {
|
65 |
+
case 'section_traffic_limiter':
|
66 |
+
if ( !$this->isPremium() ) {
|
67 |
+
$aWarnings[] = sprintf( __( '%s is a Pro-only feature.', 'wp-simple-firewall' ), __( 'Traffic Limiting', 'wp-simple-firewall' ) );
|
68 |
+
}
|
69 |
+
break;
|
70 |
}
|
71 |
|
72 |
return $aWarnings;
|
73 |
}
|
74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
/**
|
76 |
* @return array
|
77 |
*/
|
159 |
}
|
160 |
|
161 |
/**
|
162 |
+
* @return string
|
163 |
*/
|
164 |
+
protected function getNamespaceBase() {
|
165 |
+
return 'Traffic';
|
166 |
}
|
167 |
|
168 |
/**
|
169 |
+
* @return Shield\Databases\Traffic\Handler
|
170 |
+
* @deprecated 8.1.2
|
171 |
*/
|
172 |
+
protected function loadDbHandler() {
|
173 |
+
return new Shield\Databases\Traffic\Handler();
|
174 |
}
|
175 |
|
176 |
/**
|
@@ -14,7 +14,7 @@ class ICWP_WPSF_FeatureHandler_UserManagement extends \ICWP_WPSF_FeatureHandler_
|
|
14 |
|
15 |
$sEmails = $this->getOpt( 'enable_admin_login_email_notification', '' );
|
16 |
if ( !empty( $sEmails ) ) {
|
17 |
-
$aEmails = array_values( array_filter(
|
18 |
array_map(
|
19 |
function ( $sEmail ) {
|
20 |
return trim( strtolower( $sEmail ) );
|
@@ -24,7 +24,7 @@ class ICWP_WPSF_FeatureHandler_UserManagement extends \ICWP_WPSF_FeatureHandler_
|
|
24 |
function ( $sEmail ) {
|
25 |
return Services::Data()->validEmail( $sEmail );
|
26 |
}
|
27 |
-
) );
|
28 |
if ( !$this->isPremium() && !empty( $aEmails ) ) {
|
29 |
$aEmails = array_slice( $aEmails, 0, 1 );
|
30 |
}
|
14 |
|
15 |
$sEmails = $this->getOpt( 'enable_admin_login_email_notification', '' );
|
16 |
if ( !empty( $sEmails ) ) {
|
17 |
+
$aEmails = array_values( array_unique( array_filter(
|
18 |
array_map(
|
19 |
function ( $sEmail ) {
|
20 |
return trim( strtolower( $sEmail ) );
|
24 |
function ( $sEmail ) {
|
25 |
return Services::Data()->validEmail( $sEmail );
|
26 |
}
|
27 |
+
) ) );
|
28 |
if ( !$this->isPremium() && !empty( $aEmails ) ) {
|
29 |
$aEmails = array_slice( $aEmails, 0, 1 );
|
30 |
}
|
@@ -1707,8 +1707,7 @@ class Controller extends Shield\Deprecated\Foundation {
|
|
1707 |
$this->getSessionId(),
|
1708 |
Services::Request()->ts() + DAY_IN_SECONDS*30,
|
1709 |
Services::WpGeneral()->getCookiePath(),
|
1710 |
-
Services::WpGeneral()->getCookieDomain()
|
1711 |
-
false
|
1712 |
);
|
1713 |
}
|
1714 |
|
@@ -1832,6 +1831,13 @@ class Controller extends Shield\Deprecated\Foundation {
|
|
1832 |
return $this->getModule( 'sessions' );
|
1833 |
}
|
1834 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1835 |
/**
|
1836 |
* @return \ICWP_WPSF_FeatureHandler_Base[]
|
1837 |
*/
|
1707 |
$this->getSessionId(),
|
1708 |
Services::Request()->ts() + DAY_IN_SECONDS*30,
|
1709 |
Services::WpGeneral()->getCookiePath(),
|
1710 |
+
Services::WpGeneral()->getCookieDomain()
|
|
|
1711 |
);
|
1712 |
}
|
1713 |
|
1831 |
return $this->getModule( 'sessions' );
|
1832 |
}
|
1833 |
|
1834 |
+
/**
|
1835 |
+
* @return \ICWP_WPSF_FeatureHandler_Traffic
|
1836 |
+
*/
|
1837 |
+
public function getModule_Traffic() {
|
1838 |
+
return $this->getModule( 'traffic' );
|
1839 |
+
}
|
1840 |
+
|
1841 |
/**
|
1842 |
* @return \ICWP_WPSF_FeatureHandler_Base[]
|
1843 |
*/
|
@@ -12,7 +12,7 @@ class Handler extends Base\Handler {
|
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
-
$oOpts = $this->
|
16 |
return $oOpts->getDbColumns_Notes();
|
17 |
}
|
18 |
|
@@ -21,7 +21,7 @@ class Handler extends Base\Handler {
|
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
-
$oOpts = $this->
|
25 |
return $oOpts->getDbTable_Notes();
|
26 |
}
|
27 |
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
+
$oOpts = $this->getOptions();
|
16 |
return $oOpts->getDbColumns_Notes();
|
17 |
}
|
18 |
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
+
$oOpts = $this->getOptions();
|
25 |
return $oOpts->getDbTable_Notes();
|
26 |
}
|
27 |
|
@@ -14,7 +14,7 @@ class Handler extends Base\Handler {
|
|
14 |
/** @var Options $oOpts */
|
15 |
$oOpts = $oMod->getOptions();
|
16 |
$this->cleanDb( $oOpts->getAutoCleanDays() );
|
17 |
-
$this->trimDb( $
|
18 |
}
|
19 |
|
20 |
/**
|
@@ -62,7 +62,7 @@ class Handler extends Base\Handler {
|
|
62 |
*/
|
63 |
protected function getDefaultColumnsDefinition() {
|
64 |
/** @var Options $oOpts */
|
65 |
-
$oOpts = $this->
|
66 |
return $oOpts->getDbColumns_AuditTrail();
|
67 |
}
|
68 |
|
@@ -71,7 +71,7 @@ class Handler extends Base\Handler {
|
|
71 |
*/
|
72 |
protected function getDefaultTableName() {
|
73 |
/** @var Options $oOpts */
|
74 |
-
$oOpts = $this->
|
75 |
return $oOpts->getDbTable_AuditTrail();
|
76 |
}
|
77 |
|
14 |
/** @var Options $oOpts */
|
15 |
$oOpts = $oMod->getOptions();
|
16 |
$this->cleanDb( $oOpts->getAutoCleanDays() );
|
17 |
+
$this->trimDb( $oOpts->getMaxEntries() );
|
18 |
}
|
19 |
|
20 |
/**
|
62 |
*/
|
63 |
protected function getDefaultColumnsDefinition() {
|
64 |
/** @var Options $oOpts */
|
65 |
+
$oOpts = $this->getOptions();
|
66 |
return $oOpts->getDbColumns_AuditTrail();
|
67 |
}
|
68 |
|
71 |
*/
|
72 |
protected function getDefaultTableName() {
|
73 |
/** @var Options $oOpts */
|
74 |
+
$oOpts = $this->getOptions();
|
75 |
return $oOpts->getDbTable_AuditTrail();
|
76 |
}
|
77 |
|
@@ -132,7 +132,7 @@ class Handler {
|
|
132 |
* @return Insert
|
133 |
*/
|
134 |
public function getQueryInserter() {
|
135 |
-
$sClass = $this->getNamespace().'
|
136 |
/** @var Insert $o */
|
137 |
$o = new $sClass();
|
138 |
return $o->setDbH( $this );
|
@@ -142,7 +142,7 @@ class Handler {
|
|
142 |
* @return Delete
|
143 |
*/
|
144 |
public function getQueryDeleter() {
|
145 |
-
$sClass = $this->getNamespace().'
|
146 |
/** @var Delete $o */
|
147 |
$o = new $sClass();
|
148 |
return $o->setDbH( $this );
|
@@ -152,7 +152,7 @@ class Handler {
|
|
152 |
* @return Select
|
153 |
*/
|
154 |
public function getQuerySelector() {
|
155 |
-
$sClass = $this->getNamespace().'
|
156 |
/** @var Select $o */
|
157 |
$o = new $sClass();
|
158 |
return $o->setDbH( $this )
|
@@ -163,7 +163,7 @@ class Handler {
|
|
163 |
* @return Update
|
164 |
*/
|
165 |
public function getQueryUpdater() {
|
166 |
-
$sClass = $this->getNamespace().'
|
167 |
/** @var Update $o */
|
168 |
$o = new $sClass();
|
169 |
return $o->setDbH( $this );
|
@@ -173,7 +173,7 @@ class Handler {
|
|
173 |
* @return EntryVO
|
174 |
*/
|
175 |
public function getVo() {
|
176 |
-
$sClass = $this->getNamespace().'
|
177 |
return new $sClass();
|
178 |
}
|
179 |
|
@@ -323,11 +323,11 @@ class Handler {
|
|
323 |
*/
|
324 |
private function getNamespace() {
|
325 |
try {
|
326 |
-
$
|
327 |
}
|
328 |
catch ( \Exception $oE ) {
|
329 |
-
$
|
330 |
}
|
331 |
-
return $
|
332 |
}
|
333 |
}
|
132 |
* @return Insert
|
133 |
*/
|
134 |
public function getQueryInserter() {
|
135 |
+
$sClass = $this->getNamespace().'Insert';
|
136 |
/** @var Insert $o */
|
137 |
$o = new $sClass();
|
138 |
return $o->setDbH( $this );
|
142 |
* @return Delete
|
143 |
*/
|
144 |
public function getQueryDeleter() {
|
145 |
+
$sClass = $this->getNamespace().'Delete';
|
146 |
/** @var Delete $o */
|
147 |
$o = new $sClass();
|
148 |
return $o->setDbH( $this );
|
152 |
* @return Select
|
153 |
*/
|
154 |
public function getQuerySelector() {
|
155 |
+
$sClass = $this->getNamespace().'Select';
|
156 |
/** @var Select $o */
|
157 |
$o = new $sClass();
|
158 |
return $o->setDbH( $this )
|
163 |
* @return Update
|
164 |
*/
|
165 |
public function getQueryUpdater() {
|
166 |
+
$sClass = $this->getNamespace().'Update';
|
167 |
/** @var Update $o */
|
168 |
$o = new $sClass();
|
169 |
return $o->setDbH( $this );
|
173 |
* @return EntryVO
|
174 |
*/
|
175 |
public function getVo() {
|
176 |
+
$sClass = $this->getNamespace().'EntryVO';
|
177 |
return new $sClass();
|
178 |
}
|
179 |
|
323 |
*/
|
324 |
private function getNamespace() {
|
325 |
try {
|
326 |
+
$sNS = ( new \ReflectionClass( $this ) )->getNamespaceName();
|
327 |
}
|
328 |
catch ( \Exception $oE ) {
|
329 |
+
$sNS = __NAMESPACE__;
|
330 |
}
|
331 |
+
return rtrim( $sNS, '\\' ).'\\';
|
332 |
}
|
333 |
}
|
@@ -12,7 +12,7 @@ class Handler extends Base\Handler {
|
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
-
$oOpts = $this->
|
16 |
return $oOpts->getDbColumns_ChangeTracking();
|
17 |
}
|
18 |
|
@@ -21,7 +21,7 @@ class Handler extends Base\Handler {
|
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
-
$oOpts = $this->
|
25 |
return $oOpts->getDbTable_ChangeTracking();
|
26 |
}
|
27 |
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
+
$oOpts = $this->getOptions();
|
16 |
return $oOpts->getDbColumns_ChangeTracking();
|
17 |
}
|
18 |
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
+
$oOpts = $this->getOptions();
|
25 |
return $oOpts->getDbTable_ChangeTracking();
|
26 |
}
|
27 |
|
@@ -9,7 +9,7 @@ class Handler extends Base\Handler {
|
|
9 |
|
10 |
public function autoCleanDb() {
|
11 |
/** @var Options $oOpts */
|
12 |
-
$oOpts = $this->
|
13 |
$this->cleanDb( $oOpts->getTokenExpireInterval()/DAY_IN_SECONDS );
|
14 |
}
|
15 |
|
@@ -18,7 +18,7 @@ class Handler extends Base\Handler {
|
|
18 |
*/
|
19 |
protected function getDefaultTableName() {
|
20 |
/** @var Options $oOpts */
|
21 |
-
$oOpts = $this->
|
22 |
return $oOpts->getDbTable_Spam();
|
23 |
}
|
24 |
|
@@ -27,7 +27,7 @@ class Handler extends Base\Handler {
|
|
27 |
*/
|
28 |
protected function getDefaultColumnsDefinition() {
|
29 |
/** @var Options $oOpts */
|
30 |
-
$oOpts = $this->
|
31 |
return $oOpts->getDbColumns_Spam();
|
32 |
}
|
33 |
|
9 |
|
10 |
public function autoCleanDb() {
|
11 |
/** @var Options $oOpts */
|
12 |
+
$oOpts = $this->getOptions();
|
13 |
$this->cleanDb( $oOpts->getTokenExpireInterval()/DAY_IN_SECONDS );
|
14 |
}
|
15 |
|
18 |
*/
|
19 |
protected function getDefaultTableName() {
|
20 |
/** @var Options $oOpts */
|
21 |
+
$oOpts = $this->getOptions();
|
22 |
return $oOpts->getDbTable_Spam();
|
23 |
}
|
24 |
|
27 |
*/
|
28 |
protected function getDefaultColumnsDefinition() {
|
29 |
/** @var Options $oOpts */
|
30 |
+
$oOpts = $this->getOptions();
|
31 |
return $oOpts->getDbColumns_Spam();
|
32 |
}
|
33 |
|
@@ -43,7 +43,7 @@ class Handler extends Base\Handler {
|
|
43 |
*/
|
44 |
protected function getDefaultColumnsDefinition() {
|
45 |
/** @var Options $oOpts */
|
46 |
-
$oOpts = $this->
|
47 |
return $oOpts->getDbColumns_Events();
|
48 |
}
|
49 |
|
@@ -52,7 +52,7 @@ class Handler extends Base\Handler {
|
|
52 |
*/
|
53 |
protected function getDefaultTableName() {
|
54 |
/** @var Options $oOpts */
|
55 |
-
$oOpts = $this->
|
56 |
return $oOpts->getDbTable_Events();
|
57 |
}
|
58 |
|
43 |
*/
|
44 |
protected function getDefaultColumnsDefinition() {
|
45 |
/** @var Options $oOpts */
|
46 |
+
$oOpts = $this->getOptions();
|
47 |
return $oOpts->getDbColumns_Events();
|
48 |
}
|
49 |
|
52 |
*/
|
53 |
protected function getDefaultTableName() {
|
54 |
/** @var Options $oOpts */
|
55 |
+
$oOpts = $this->getOptions();
|
56 |
return $oOpts->getDbTable_Events();
|
57 |
}
|
58 |
|
@@ -9,7 +9,7 @@ class Handler extends Base\Handler {
|
|
9 |
|
10 |
public function autoCleanDb() {
|
11 |
/** @var Options $oOpts */
|
12 |
-
$oOpts = $this->
|
13 |
$this->cleanDb( $oOpts->getDef( 'db_autoexpire_geoip' ) );
|
14 |
}
|
15 |
|
@@ -18,7 +18,7 @@ class Handler extends Base\Handler {
|
|
18 |
*/
|
19 |
protected function getDefaultColumnsDefinition() {
|
20 |
/** @var Options $oOpts */
|
21 |
-
$oOpts = $this->
|
22 |
return $oOpts->getDbColumns_GeoIp();
|
23 |
}
|
24 |
|
@@ -27,7 +27,7 @@ class Handler extends Base\Handler {
|
|
27 |
*/
|
28 |
protected function getDefaultTableName() {
|
29 |
/** @var Options $oOpts */
|
30 |
-
$oOpts = $this->
|
31 |
return $oOpts->getDbTable_GeoIp();
|
32 |
}
|
33 |
|
9 |
|
10 |
public function autoCleanDb() {
|
11 |
/** @var Options $oOpts */
|
12 |
+
$oOpts = $this->getOptions();
|
13 |
$this->cleanDb( $oOpts->getDef( 'db_autoexpire_geoip' ) );
|
14 |
}
|
15 |
|
18 |
*/
|
19 |
protected function getDefaultColumnsDefinition() {
|
20 |
/** @var Options $oOpts */
|
21 |
+
$oOpts = $this->getOptions();
|
22 |
return $oOpts->getDbColumns_GeoIp();
|
23 |
}
|
24 |
|
27 |
*/
|
28 |
protected function getDefaultTableName() {
|
29 |
/** @var Options $oOpts */
|
30 |
+
$oOpts = $this->getOptions();
|
31 |
return $oOpts->getDbTable_GeoIp();
|
32 |
}
|
33 |
|
@@ -36,7 +36,7 @@ class Handler extends Base\Handler {
|
|
36 |
*/
|
37 |
protected function getDefaultColumnsDefinition() {
|
38 |
/** @var Options $oOpts */
|
39 |
-
$oOpts = $this->
|
40 |
return $oOpts->getDbColumns_IPs();
|
41 |
}
|
42 |
|
@@ -45,7 +45,7 @@ class Handler extends Base\Handler {
|
|
45 |
*/
|
46 |
protected function getDefaultTableName() {
|
47 |
/** @var Options $oOpts */
|
48 |
-
$oOpts = $this->
|
49 |
return $oOpts->getDbTable_IPs();
|
50 |
}
|
51 |
|
36 |
*/
|
37 |
protected function getDefaultColumnsDefinition() {
|
38 |
/** @var Options $oOpts */
|
39 |
+
$oOpts = $this->getOptions();
|
40 |
return $oOpts->getDbColumns_IPs();
|
41 |
}
|
42 |
|
45 |
*/
|
46 |
protected function getDefaultTableName() {
|
47 |
/** @var Options $oOpts */
|
48 |
+
$oOpts = $this->getOptions();
|
49 |
return $oOpts->getDbTable_IPs();
|
50 |
}
|
51 |
|
@@ -12,7 +12,7 @@ class Handler extends Base\Handler {
|
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
-
$oOpts = $this->
|
16 |
return $oOpts->getDbColumns_ScanQueue();
|
17 |
}
|
18 |
|
@@ -21,7 +21,7 @@ class Handler extends Base\Handler {
|
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
-
$oOpts = $this->
|
25 |
return $oOpts->getDbTable_ScanQueue();
|
26 |
}
|
27 |
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
+
$oOpts = $this->getOptions();
|
16 |
return $oOpts->getDbColumns_ScanQueue();
|
17 |
}
|
18 |
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
+
$oOpts = $this->getOptions();
|
25 |
return $oOpts->getDbTable_ScanQueue();
|
26 |
}
|
27 |
|
@@ -12,7 +12,7 @@ class Handler extends Base\Handler {
|
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
-
$oOpts = $this->
|
16 |
return $oOpts->getDbColumns_Scanner();
|
17 |
}
|
18 |
|
@@ -21,7 +21,7 @@ class Handler extends Base\Handler {
|
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
-
$oOpts = $this->
|
25 |
return $oOpts->getDbTable_Scanner();
|
26 |
}
|
27 |
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
+
$oOpts = $this->getOptions();
|
16 |
return $oOpts->getDbColumns_Scanner();
|
17 |
}
|
18 |
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
+
$oOpts = $this->getOptions();
|
25 |
return $oOpts->getDbTable_Scanner();
|
26 |
}
|
27 |
|
@@ -16,7 +16,7 @@ class Handler extends Base\Handler {
|
|
16 |
*/
|
17 |
protected function getDefaultColumnsDefinition() {
|
18 |
/** @var Options $oOpts */
|
19 |
-
$oOpts = $this->
|
20 |
return $oOpts->getDbColumns_Sessions();
|
21 |
}
|
22 |
|
@@ -25,7 +25,7 @@ class Handler extends Base\Handler {
|
|
25 |
*/
|
26 |
protected function getDefaultTableName() {
|
27 |
/** @var Options $oOpts */
|
28 |
-
$oOpts = $this->
|
29 |
return $oOpts->getDbTable_Sessions();
|
30 |
}
|
31 |
|
16 |
*/
|
17 |
protected function getDefaultColumnsDefinition() {
|
18 |
/** @var Options $oOpts */
|
19 |
+
$oOpts = $this->getOptions();
|
20 |
return $oOpts->getDbColumns_Sessions();
|
21 |
}
|
22 |
|
25 |
*/
|
26 |
protected function getDefaultTableName() {
|
27 |
/** @var Options $oOpts */
|
28 |
+
$oOpts = $this->getOptions();
|
29 |
return $oOpts->getDbTable_Sessions();
|
30 |
}
|
31 |
|
@@ -12,7 +12,7 @@ class Handler extends Base\Handler {
|
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
-
$oOpts = $this->
|
16 |
return $oOpts->getDbColumns_Tallys();
|
17 |
}
|
18 |
|
@@ -21,7 +21,7 @@ class Handler extends Base\Handler {
|
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
-
$oOpts = $this->
|
25 |
return $oOpts->getDbTable_Tallys();
|
26 |
}
|
27 |
|
12 |
*/
|
13 |
protected function getDefaultColumnsDefinition() {
|
14 |
/** @var Options $oOpts */
|
15 |
+
$oOpts = $this->getOptions();
|
16 |
return $oOpts->getDbColumns_Tallys();
|
17 |
}
|
18 |
|
21 |
*/
|
22 |
protected function getDefaultTableName() {
|
23 |
/** @var Options $oOpts */
|
24 |
+
$oOpts = $this->getOptions();
|
25 |
return $oOpts->getDbTable_Tallys();
|
26 |
}
|
27 |
|
@@ -9,7 +9,7 @@ class Handler extends Base\Handler {
|
|
9 |
|
10 |
public function autoCleanDb() {
|
11 |
/** @var Options $oOpts */
|
12 |
-
$oOpts = $this->
|
13 |
$this->cleanDb( $oOpts->getAutoCleanDays() );
|
14 |
$this->trimDb( $oOpts->getMaxEntries() );
|
15 |
}
|
@@ -19,7 +19,7 @@ class Handler extends Base\Handler {
|
|
19 |
*/
|
20 |
protected function getDefaultColumnsDefinition() {
|
21 |
/** @var Options $oOpts */
|
22 |
-
$oOpts = $this->
|
23 |
return $oOpts->getDbColumns_TrafficLog();
|
24 |
}
|
25 |
|
@@ -28,7 +28,7 @@ class Handler extends Base\Handler {
|
|
28 |
*/
|
29 |
protected function getDefaultTableName() {
|
30 |
/** @var Options $oOpts */
|
31 |
-
$oOpts = $this->
|
32 |
return $oOpts->getDbTable_TrafficLog();
|
33 |
}
|
34 |
|
9 |
|
10 |
public function autoCleanDb() {
|
11 |
/** @var Options $oOpts */
|
12 |
+
$oOpts = $this->getOptions();
|
13 |
$this->cleanDb( $oOpts->getAutoCleanDays() );
|
14 |
$this->trimDb( $oOpts->getMaxEntries() );
|
15 |
}
|
19 |
*/
|
20 |
protected function getDefaultColumnsDefinition() {
|
21 |
/** @var Options $oOpts */
|
22 |
+
$oOpts = $this->getOptions();
|
23 |
return $oOpts->getDbColumns_TrafficLog();
|
24 |
}
|
25 |
|
28 |
*/
|
29 |
protected function getDefaultTableName() {
|
30 |
/** @var Options $oOpts */
|
31 |
+
$oOpts = $this->getOptions();
|
32 |
return $oOpts->getDbTable_TrafficLog();
|
33 |
}
|
34 |
|
@@ -43,7 +43,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
43 |
}
|
44 |
else {
|
45 |
/** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
|
46 |
-
$oEntry = $oMod->
|
47 |
->getQuerySelector()
|
48 |
->byId( $nId );
|
49 |
|
@@ -81,7 +81,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
81 |
$oMod = $this->getMod();
|
82 |
$oTableBuilder = ( new Shield\Tables\Build\AuditTrail() )
|
83 |
->setMod( $oMod )
|
84 |
-
->setDbHandler( $oMod->
|
85 |
|
86 |
return [
|
87 |
'success' => true,
|
43 |
}
|
44 |
else {
|
45 |
/** @var Shield\Databases\AuditTrail\EntryVO $oEntry */
|
46 |
+
$oEntry = $oMod->getDbHandler_AuditTrail()
|
47 |
->getQuerySelector()
|
48 |
->byId( $nId );
|
49 |
|
81 |
$oMod = $this->getMod();
|
82 |
$oTableBuilder = ( new Shield\Tables\Build\AuditTrail() )
|
83 |
->setMod( $oMod )
|
84 |
+
->setDbHandler( $oMod->getDbHandler_AuditTrail() );
|
85 |
|
86 |
return [
|
87 |
'success' => true,
|
@@ -111,7 +111,7 @@ class AdminNotices {
|
|
111 |
);
|
112 |
return ( new Shield\Utilities\AdminNotices\NoticeVO() )->applyFromArray( $aNotDef );
|
113 |
},
|
114 |
-
$this->
|
115 |
);
|
116 |
}
|
117 |
|
@@ -126,7 +126,7 @@ class AdminNotices {
|
|
126 |
if ( $oNtc->plugin_page_only && !$oCon->isModulePage() ) {
|
127 |
$oNtc->non_display_reason = 'plugin_page_only';
|
128 |
}
|
129 |
-
else if ( $oNtc->type == 'promo' && !$this->
|
130 |
$oNtc->non_display_reason = 'promo_hidden';
|
131 |
}
|
132 |
else if ( $oNtc->valid_admin && !$oCon->isValidAdminArea() ) {
|
111 |
);
|
112 |
return ( new Shield\Utilities\AdminNotices\NoticeVO() )->applyFromArray( $aNotDef );
|
113 |
},
|
114 |
+
$this->getOptions()->getAdminNotices()
|
115 |
);
|
116 |
}
|
117 |
|
126 |
if ( $oNtc->plugin_page_only && !$oCon->isModulePage() ) {
|
127 |
$oNtc->non_display_reason = 'plugin_page_only';
|
128 |
}
|
129 |
+
else if ( $oNtc->type == 'promo' && !$this->getOptions()->isShowPromoAdminNotices() ) {
|
130 |
$oNtc->non_display_reason = 'promo_hidden';
|
131 |
}
|
132 |
else if ( $oNtc->valid_admin && !$oCon->isValidAdminArea() ) {
|
@@ -56,6 +56,11 @@ class BaseModCon extends Deprecated\Foundation {
|
|
56 |
*/
|
57 |
private $oOpts;
|
58 |
|
|
|
|
|
|
|
|
|
|
|
59 |
/**
|
60 |
* @param Shield\Controller\Controller $oPluginController
|
61 |
* @param array $aMod
|
@@ -156,14 +161,67 @@ class BaseModCon extends Deprecated\Foundation {
|
|
156 |
}
|
157 |
|
158 |
protected function cleanupDatabases() {
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
|
|
|
|
|
|
163 |
}
|
164 |
}
|
165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
}
|
168 |
|
169 |
/**
|
@@ -181,12 +239,13 @@ class BaseModCon extends Deprecated\Foundation {
|
|
181 |
$aEvts = $this->getSupportedEvents();
|
182 |
|
183 |
$aDefaults = [
|
184 |
-
'context'
|
185 |
-
'cat'
|
186 |
-
'stat'
|
187 |
-
'audit'
|
188 |
-
'recent'
|
189 |
-
'offense'
|
|
|
190 |
];
|
191 |
foreach ( $aEvts as $sKey => $aEvt ) {
|
192 |
$aEvts[ $sKey ] = array_merge( $aDefaults, $aEvt );
|
@@ -337,20 +396,10 @@ class BaseModCon extends Deprecated\Foundation {
|
|
337 |
}
|
338 |
|
339 |
/**
|
340 |
-
* Used to effect certain processing that is to do with options etc. but isn't related to processing
|
341 |
-
* functionality of the plugin.
|
342 |
* @return bool
|
343 |
*/
|
344 |
protected function isReadyToExecute() {
|
345 |
-
|
346 |
-
$oDbH = $this->getDbHandler();
|
347 |
-
$bReady = ( $this->getProcessor() instanceof Shield\Modules\Base\BaseProcessor )
|
348 |
-
&& ( !$oDbH instanceof Shield\Databases\Base\Handler || $oDbH->isReady() );
|
349 |
-
}
|
350 |
-
catch ( \Exception $oE ) {
|
351 |
-
$bReady = false;
|
352 |
-
}
|
353 |
-
return $bReady;
|
354 |
}
|
355 |
|
356 |
protected function doExecuteProcessor() {
|
@@ -768,7 +817,7 @@ class BaseModCon extends Deprecated\Foundation {
|
|
768 |
* @return mixed|null
|
769 |
*/
|
770 |
public function getDef( $sKey ) {
|
771 |
-
return $this->getOptions()->
|
772 |
}
|
773 |
|
774 |
/**
|
@@ -1154,7 +1203,7 @@ class BaseModCon extends Deprecated\Foundation {
|
|
1154 |
if ( !empty( $oDbh ) ) {
|
1155 |
$oDbh->deleteTable();
|
1156 |
}
|
1157 |
-
$this->getOptions()->
|
1158 |
}
|
1159 |
|
1160 |
/**
|
@@ -1201,6 +1250,7 @@ class BaseModCon extends Deprecated\Foundation {
|
|
1201 |
/**
|
1202 |
* @param string $sMsg
|
1203 |
* @param bool $bError
|
|
|
1204 |
* @return $this
|
1205 |
*/
|
1206 |
public function setFlashAdminNotice( $sMsg, $bError = false, $bShowOnLogin = false ) {
|
@@ -1357,13 +1407,6 @@ class BaseModCon extends Deprecated\Foundation {
|
|
1357 |
return ( $this->getCon()->getShieldAction() == 'wizard' && $this->isThisModulePage() );
|
1358 |
}
|
1359 |
|
1360 |
-
/**
|
1361 |
-
* @return boolean
|
1362 |
-
*/
|
1363 |
-
public function hasEncryptOption() {
|
1364 |
-
return function_exists( 'md5' );
|
1365 |
-
}
|
1366 |
-
|
1367 |
/**
|
1368 |
* Will prefix and return any string with the unique plugin prefix.
|
1369 |
* @param string $sSuffix
|
56 |
*/
|
57 |
private $oOpts;
|
58 |
|
59 |
+
/**
|
60 |
+
* @var Shield\Databases\Base\Handler[]
|
61 |
+
*/
|
62 |
+
private $aDbHandlers;
|
63 |
+
|
64 |
/**
|
65 |
* @param Shield\Controller\Controller $oPluginController
|
66 |
* @param array $aMod
|
161 |
}
|
162 |
|
163 |
protected function cleanupDatabases() {
|
164 |
+
foreach ( $this->getDbHandlers( true ) as $oDbh ) {
|
165 |
+
try {
|
166 |
+
if ( $oDbh instanceof Shield\Databases\Base\Handler && $oDbh->isReady() ) {
|
167 |
+
$oDbh->autoCleanDb();
|
168 |
+
}
|
169 |
+
}
|
170 |
+
catch ( \Exception $oE ) {
|
171 |
}
|
172 |
}
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* @param bool $bInitAll
|
177 |
+
* @return Shield\Databases\Base\Handler[]
|
178 |
+
*/
|
179 |
+
protected function getDbHandlers( $bInitAll = false ) {
|
180 |
+
if ( $bInitAll ) {
|
181 |
+
foreach ( $this->getAllDbClasses() as $sDbSlug => $sDbClass ) {
|
182 |
+
$this->getDbH( $sDbSlug );
|
183 |
+
}
|
184 |
}
|
185 |
+
return is_array( $this->aDbHandlers ) ? $this->aDbHandlers : [];
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* @param string $sDbhKey
|
190 |
+
* @return Shield\Databases\Base\Handler|mixed|false
|
191 |
+
*/
|
192 |
+
protected function getDbH( $sDbhKey ) {
|
193 |
+
$oDbH = false;
|
194 |
+
|
195 |
+
if ( !is_array( $this->aDbHandlers ) ) {
|
196 |
+
$this->aDbHandlers = [];
|
197 |
+
}
|
198 |
+
|
199 |
+
if ( !empty( $this->aDbHandlers[ $sDbhKey ] ) ) {
|
200 |
+
$oDbH = $this->aDbHandlers[ $sDbhKey ];
|
201 |
+
}
|
202 |
+
else {
|
203 |
+
$aDbClasses = $this->getAllDbClasses();
|
204 |
+
if ( isset( $aDbClasses[ $sDbhKey ] ) ) {
|
205 |
+
/** @var Shield\Databases\Base\Handler $oDbH */
|
206 |
+
$oDbH = new $aDbClasses[ $sDbhKey ]();
|
207 |
+
try {
|
208 |
+
$oDbH->setMod( $this )->tableInit();
|
209 |
+
}
|
210 |
+
catch ( \Exception $oE ) {
|
211 |
+
}
|
212 |
+
}
|
213 |
+
$this->aDbHandlers[ $sDbhKey ] = $oDbH;
|
214 |
+
}
|
215 |
+
|
216 |
+
return $oDbH;
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* @return string[]
|
221 |
+
*/
|
222 |
+
private function getAllDbClasses() {
|
223 |
+
$aCls = $this->getOptions()->getDef( 'db_classes' );
|
224 |
+
return is_array( $aCls ) ? $aCls : [];
|
225 |
}
|
226 |
|
227 |
/**
|
239 |
$aEvts = $this->getSupportedEvents();
|
240 |
|
241 |
$aDefaults = [
|
242 |
+
'context' => $this->getSlug(),
|
243 |
+
'cat' => 1,
|
244 |
+
'stat' => true,
|
245 |
+
'audit' => true,
|
246 |
+
'recent' => false, // whether to show in the recent events logs
|
247 |
+
'offense' => false, // whether to mark offense against IP
|
248 |
+
'audit_multiple' => false, // allow multiple audit entries in the same request
|
249 |
];
|
250 |
foreach ( $aEvts as $sKey => $aEvt ) {
|
251 |
$aEvts[ $sKey ] = array_merge( $aDefaults, $aEvt );
|
396 |
}
|
397 |
|
398 |
/**
|
|
|
|
|
399 |
* @return bool
|
400 |
*/
|
401 |
protected function isReadyToExecute() {
|
402 |
+
return ( $this->getProcessor() instanceof Shield\Modules\Base\BaseProcessor );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
403 |
}
|
404 |
|
405 |
protected function doExecuteProcessor() {
|
817 |
* @return mixed|null
|
818 |
*/
|
819 |
public function getDef( $sKey ) {
|
820 |
+
return $this->getOptions()->getDef( $sKey );
|
821 |
}
|
822 |
|
823 |
/**
|
1203 |
if ( !empty( $oDbh ) ) {
|
1204 |
$oDbh->deleteTable();
|
1205 |
}
|
1206 |
+
$this->getOptions()->deleteStorage();
|
1207 |
}
|
1208 |
|
1209 |
/**
|
1250 |
/**
|
1251 |
* @param string $sMsg
|
1252 |
* @param bool $bError
|
1253 |
+
* @param bool $bShowOnLogin
|
1254 |
* @return $this
|
1255 |
*/
|
1256 |
public function setFlashAdminNotice( $sMsg, $bError = false, $bShowOnLogin = false ) {
|
1407 |
return ( $this->getCon()->getShieldAction() == 'wizard' && $this->isThisModulePage() );
|
1408 |
}
|
1409 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1410 |
/**
|
1411 |
* Will prefix and return any string with the unique plugin prefix.
|
1412 |
* @param string $sSuffix
|
@@ -60,13 +60,6 @@ class Options {
|
|
60 |
public function __construct() {
|
61 |
}
|
62 |
|
63 |
-
/**
|
64 |
-
* @return bool
|
65 |
-
*/
|
66 |
-
public function cleanTransientStorage() {
|
67 |
-
return Services::WpGeneral()->deleteTransient( $this->getSpecTransientStorageKey() );
|
68 |
-
}
|
69 |
-
|
70 |
/**
|
71 |
* @param bool $bDeleteFirst Used primarily with plugin reset
|
72 |
* @param bool $bIsPremiumLicensed
|
@@ -90,7 +83,7 @@ class Options {
|
|
90 |
/**
|
91 |
* @return bool
|
92 |
*/
|
93 |
-
public function
|
94 |
$oWp = Services::WpGeneral();
|
95 |
$oWp->deleteTransient( $this->getSpecTransientStorageKey() );
|
96 |
return $oWp->deleteOption( $this->getOptionsStorageKey() );
|
@@ -850,9 +843,11 @@ class Options {
|
|
850 |
if ( !is_null( $nMin ) ) {
|
851 |
$bValid = $mPotentialValue >= $nMin;
|
852 |
}
|
853 |
-
|
854 |
-
|
855 |
-
|
|
|
|
|
856 |
}
|
857 |
break;
|
858 |
|
60 |
public function __construct() {
|
61 |
}
|
62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
/**
|
64 |
* @param bool $bDeleteFirst Used primarily with plugin reset
|
65 |
* @param bool $bIsPremiumLicensed
|
83 |
/**
|
84 |
* @return bool
|
85 |
*/
|
86 |
+
public function deleteStorage() {
|
87 |
$oWp = Services::WpGeneral();
|
88 |
$oWp->deleteTransient( $this->getSpecTransientStorageKey() );
|
89 |
return $oWp->deleteOption( $this->getOptionsStorageKey() );
|
843 |
if ( !is_null( $nMin ) ) {
|
844 |
$bValid = $mPotentialValue >= $nMin;
|
845 |
}
|
846 |
+
if ( $bValid ) {
|
847 |
+
$nMax = $this->getOptProperty( $sOptKey, 'max' );
|
848 |
+
if ( !is_null( $nMax ) ) {
|
849 |
+
$bValid = $mPotentialValue <= $nMax;
|
850 |
+
}
|
851 |
}
|
852 |
break;
|
853 |
|
@@ -14,6 +14,21 @@ class Strings {
|
|
14 |
*/
|
15 |
public function getDisplayStrings() {
|
16 |
$oCon = $this->getCon();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
return Services::DataManipulation()->mergeArraysRecursive(
|
18 |
[
|
19 |
'see_help_video' => __( 'Watch Help Video' ),
|
@@ -69,11 +84,16 @@ class Strings {
|
|
69 |
'offense' => __( 'offense', 'wp-simple-firewall' ),
|
70 |
'debug' => __( 'Debug', 'wp-simple-firewall' ),
|
71 |
|
72 |
-
'privacy_policy_agree'
|
73 |
'privacy_policy_confirm' => __( "I confirm that I've read and I agree to the Privacy Policy", 'wp-simple-firewall' ),
|
74 |
-
'privacy_policy_gdpr'
|
75 |
'privacy_policy' => __( 'Privacy Policy', 'wp-simple-firewall' ),
|
76 |
-
'privacy_never_spam'
|
|
|
|
|
|
|
|
|
|
|
77 |
],
|
78 |
$this->getAdditionalDisplayStrings()
|
79 |
);
|
14 |
*/
|
15 |
public function getDisplayStrings() {
|
16 |
$oCon = $this->getCon();
|
17 |
+
|
18 |
+
$aProFeatures = [
|
19 |
+
__( 'Customer Support', 'wp-simple-firewall' ),
|
20 |
+
__( 'More Scans', 'wp-simple-firewall' ),
|
21 |
+
__( 'Malware Scanner', 'wp-simple-firewall' ),
|
22 |
+
__( 'Scan Every Hour', 'wp-simple-firewall' ),
|
23 |
+
__( 'White Label', 'wp-simple-firewall' ),
|
24 |
+
__( 'Import/Export', 'wp-simple-firewall' ),
|
25 |
+
__( 'Better Bot Detection', 'wp-simple-firewall' ),
|
26 |
+
__( 'Password Policies', 'wp-simple-firewall' ),
|
27 |
+
__( 'WooCommerce Support', 'wp-simple-firewall' ),
|
28 |
+
];
|
29 |
+
$aProFeaturesDisplay = array_intersect_key( $aProFeatures, array_flip( array_rand( $aProFeatures, 6 ) ) );
|
30 |
+
$aProFeaturesDisplay[] = __( 'and much more!' );
|
31 |
+
|
32 |
return Services::DataManipulation()->mergeArraysRecursive(
|
33 |
[
|
34 |
'see_help_video' => __( 'Watch Help Video' ),
|
84 |
'offense' => __( 'offense', 'wp-simple-firewall' ),
|
85 |
'debug' => __( 'Debug', 'wp-simple-firewall' ),
|
86 |
|
87 |
+
'privacy_policy_agree' => __( 'Agree To Privacy Policy', 'wp-simple-firewall' ),
|
88 |
'privacy_policy_confirm' => __( "I confirm that I've read and I agree to the Privacy Policy", 'wp-simple-firewall' ),
|
89 |
+
'privacy_policy_gdpr' => __( 'We treat your information under our strict, and GDPR-compliant, privacy policy.', 'wp-simple-firewall' ),
|
90 |
'privacy_policy' => __( 'Privacy Policy', 'wp-simple-firewall' ),
|
91 |
+
'privacy_never_spam' => __( 'We never SPAM and you can remove yourself at any time.', 'wp-simple-firewall' ),
|
92 |
+
|
93 |
+
'pro_features' => __( 'Pro features include', 'wp-simple-firewall' ),
|
94 |
+
'join_thousands_H' => __( "Join The 1,000s Who've Already Upgraded Their WordPress Security To Better Protect Their Sites.", 'wp-simple-firewall' ),
|
95 |
+
'join_thousands_P' => implode( ', ', $aProFeaturesDisplay ),
|
96 |
+
'get_pro_protection' => __( 'Upgrade To Pro Protection', 'wp-simple-firewall' ),
|
97 |
],
|
98 |
$this->getAdditionalDisplayStrings()
|
99 |
);
|
@@ -65,7 +65,7 @@ class ShieldProcessor extends Base\BaseProcessor {
|
|
65 |
* @param bool $bLog
|
66 |
* @return $this
|
67 |
*/
|
68 |
-
|
69 |
$this->bLogRequest = $bLog;
|
70 |
return $this;
|
71 |
}
|
65 |
* @param bool $bLog
|
66 |
* @return $this
|
67 |
*/
|
68 |
+
public function setIfLogRequest( $bLog ) {
|
69 |
$this->bLogRequest = $bLog;
|
70 |
return $this;
|
71 |
}
|
@@ -31,14 +31,12 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
31 |
public function ajaxExec_RenderChart() {
|
32 |
/** @var \ICWP_WPSF_FeatureHandler_Events $oMod */
|
33 |
$oMod = $this->getMod();
|
34 |
-
/** @var Strings $oStrs */
|
35 |
-
$oStrs = $oMod->getStrings();
|
36 |
|
37 |
$aParams = $this->getAjaxFormParams();
|
38 |
$sEvent = $aParams[ 'event' ];
|
39 |
|
40 |
/** @var Shield\Databases\Events\Handler $oDbhEvts */
|
41 |
-
$oDbhEvts = $oMod->
|
42 |
$nDays = 0;
|
43 |
$aSeries = [];
|
44 |
$aLabels = [];
|
31 |
public function ajaxExec_RenderChart() {
|
32 |
/** @var \ICWP_WPSF_FeatureHandler_Events $oMod */
|
33 |
$oMod = $this->getMod();
|
|
|
|
|
34 |
|
35 |
$aParams = $this->getAjaxFormParams();
|
36 |
$sEvent = $aParams[ 'event' ];
|
37 |
|
38 |
/** @var Shield\Databases\Events\Handler $oDbhEvts */
|
39 |
+
$oDbhEvts = $oMod->getDbHandler_Events();
|
40 |
$nDays = 0;
|
41 |
$aSeries = [];
|
42 |
$aLabels = [];
|
@@ -56,6 +56,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
56 |
* @return array
|
57 |
*/
|
58 |
private function ajaxExec_BuildTableScan() {
|
|
|
59 |
$oMod = $this->getMod();
|
60 |
|
61 |
$sScanSlug = Services::Request()->post( 'fScan' );
|
@@ -95,7 +96,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
95 |
else {
|
96 |
$sHtml = $oTableBuilder
|
97 |
->setMod( $oMod )
|
98 |
-
->setDbHandler( $oMod->
|
99 |
->setScanActionVO( ( new Scan\ScanActionFromSlug() )->getAction( $sScanSlug ) )
|
100 |
->buildTable();
|
101 |
}
|
56 |
* @return array
|
57 |
*/
|
58 |
private function ajaxExec_BuildTableScan() {
|
59 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
60 |
$oMod = $this->getMod();
|
61 |
|
62 |
$sScanSlug = Services::Request()->post( 'fScan' );
|
96 |
else {
|
97 |
$sHtml = $oTableBuilder
|
98 |
->setMod( $oMod )
|
99 |
+
->setDbHandler( $oMod->getDbHandler_ScanResults() )
|
100 |
->setScanActionVO( ( new Scan\ScanActionFromSlug() )->getAction( $sScanSlug ) )
|
101 |
->buildTable();
|
102 |
}
|
@@ -35,6 +35,13 @@ class Options extends Base\ShieldOptions {
|
|
35 |
return $this->getCon()->prefixOption( $this->getDef( 'table_name_scanqueue' ) );
|
36 |
}
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
/**
|
39 |
* We do some WP Content dir replacement as there may be custom wp-content dir defines
|
40 |
* @return string[]
|
@@ -101,6 +108,48 @@ class Options extends Base\ShieldOptions {
|
|
101 |
return $aSigs;
|
102 |
}
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
/**
|
105 |
* @return string[]
|
106 |
*/
|
35 |
return $this->getCon()->prefixOption( $this->getDef( 'table_name_scanqueue' ) );
|
36 |
}
|
37 |
|
38 |
+
/**
|
39 |
+
* @return int
|
40 |
+
*/
|
41 |
+
public function getMalConfidenceBoundary() {
|
42 |
+
return (int)$this->getOpt( 'mal_fp_confidence' );
|
43 |
+
}
|
44 |
+
|
45 |
/**
|
46 |
* We do some WP Content dir replacement as there may be custom wp-content dir defines
|
47 |
* @return string[]
|
108 |
return $aSigs;
|
109 |
}
|
110 |
|
111 |
+
/**
|
112 |
+
* @return bool
|
113 |
+
*/
|
114 |
+
public function isMalAutoRepairPlugins() {
|
115 |
+
return $this->isOpt( 'mal_autorepair_plugins', 'Y' );
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* @return bool
|
120 |
+
*/
|
121 |
+
public function isMalAutoRepair() {
|
122 |
+
return $this->isMalAutoRepairCore() || $this->isMalAutoRepairPlugins() || $this->isMalAutoRepairSurgical();
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* @return bool
|
127 |
+
*/
|
128 |
+
public function isMalAutoRepairCore() {
|
129 |
+
return $this->isOpt( 'mal_autorepair_core', 'Y' );
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* @return bool
|
134 |
+
*/
|
135 |
+
public function isMalAutoRepairSurgical() {
|
136 |
+
return $this->isOpt( 'mal_autorepair_surgical', 'Y' );
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* @return bool
|
141 |
+
*/
|
142 |
+
public function isMalScanEnabled() {
|
143 |
+
return !$this->isOpt( 'mal_scan_enable', 'disabled' );
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* @return bool
|
148 |
+
*/
|
149 |
+
public function isMalUseNetworkIntelligence() {
|
150 |
+
return $this->getMalConfidenceBoundary() > 0;
|
151 |
+
}
|
152 |
+
|
153 |
/**
|
154 |
* @return string[]
|
155 |
*/
|
@@ -18,7 +18,7 @@ class QueueBuilder extends Utilities\BackgroundProcessing\BackgroundProcess {
|
|
18 |
*/
|
19 |
protected function get_batch() {
|
20 |
/** @var HackGuard\Options $oOpts */
|
21 |
-
$oOpts = $this->
|
22 |
$aScans = $oOpts->getScansToBuild();
|
23 |
$sScan = key( $aScans );
|
24 |
|
@@ -38,7 +38,7 @@ class QueueBuilder extends Utilities\BackgroundProcessing\BackgroundProcess {
|
|
38 |
// ensure any scheduled scans have been saved before remote post
|
39 |
$this->save();
|
40 |
// Perform remote post.
|
41 |
-
|
42 |
}
|
43 |
|
44 |
/**
|
@@ -88,7 +88,7 @@ class QueueBuilder extends Utilities\BackgroundProcessing\BackgroundProcess {
|
|
88 |
*/
|
89 |
public function delete( $sScanSlug ) {
|
90 |
/** @var HackGuard\Options $oOpts */
|
91 |
-
$oOpts = $this->
|
92 |
$oOpts->addRemoveScanToBuild( $sScanSlug, false );
|
93 |
$this->save();
|
94 |
return $this;
|
@@ -101,7 +101,7 @@ class QueueBuilder extends Utilities\BackgroundProcessing\BackgroundProcess {
|
|
101 |
*/
|
102 |
protected function is_queue_empty() {
|
103 |
/** @var HackGuard\Options $oOpts */
|
104 |
-
$oOpts = $this->
|
105 |
return count( $oOpts->getScansToBuild() ) === 0;
|
106 |
}
|
107 |
|
18 |
*/
|
19 |
protected function get_batch() {
|
20 |
/** @var HackGuard\Options $oOpts */
|
21 |
+
$oOpts = $this->getOptions();
|
22 |
$aScans = $oOpts->getScansToBuild();
|
23 |
$sScan = key( $aScans );
|
24 |
|
38 |
// ensure any scheduled scans have been saved before remote post
|
39 |
$this->save();
|
40 |
// Perform remote post.
|
41 |
+
parent::dispatch();
|
42 |
}
|
43 |
|
44 |
/**
|
88 |
*/
|
89 |
public function delete( $sScanSlug ) {
|
90 |
/** @var HackGuard\Options $oOpts */
|
91 |
+
$oOpts = $this->getOptions();
|
92 |
$oOpts->addRemoveScanToBuild( $sScanSlug, false );
|
93 |
$this->save();
|
94 |
return $this;
|
101 |
*/
|
102 |
protected function is_queue_empty() {
|
103 |
/** @var HackGuard\Options $oOpts */
|
104 |
+
$oOpts = $this->getOptions();
|
105 |
return count( $oOpts->getScansToBuild() ) === 0;
|
106 |
}
|
107 |
|
@@ -26,8 +26,7 @@ class CompleteQueue {
|
|
26 |
$oDbH = $this->getDbHandler();
|
27 |
$oSel = $oDbH->getQuerySelector();
|
28 |
|
29 |
-
|
30 |
-
$oDbHResults = $oMod->getDbHandler();
|
31 |
$aScansToNotify = [];
|
32 |
foreach ( $oSel->getDistinctForColumn( 'scan' ) as $sScanSlug ) {
|
33 |
|
26 |
$oDbH = $this->getDbHandler();
|
27 |
$oSel = $oDbH->getQuerySelector();
|
28 |
|
29 |
+
$oDbHResults = $oMod->getDbHandler_ScanResults();
|
|
|
30 |
$aScansToNotify = [];
|
31 |
foreach ( $oSel->getDistinctForColumn( 'scan' ) as $sScanSlug ) {
|
32 |
|
@@ -87,7 +87,7 @@ class Controller {
|
|
87 |
*/
|
88 |
public function hasRunningScans() {
|
89 |
/** @var HackGuard\Options $oOpts */
|
90 |
-
$oOpts = $this->
|
91 |
return count( $this->getRunningScans() ) > 0 || count( $oOpts->getScansToBuild() ) > 0;
|
92 |
}
|
93 |
|
@@ -100,7 +100,7 @@ class Controller {
|
|
100 |
}
|
101 |
if ( !empty( $aScanSlugs ) ) {
|
102 |
/** @var HackGuard\Options $oOpts */
|
103 |
-
$oOpts = $this->
|
104 |
foreach ( $aScanSlugs as $sSlug ) {
|
105 |
$oOpts->addRemoveScanToBuild( $sSlug );
|
106 |
}
|
87 |
*/
|
88 |
public function hasRunningScans() {
|
89 |
/** @var HackGuard\Options $oOpts */
|
90 |
+
$oOpts = $this->getOptions();
|
91 |
return count( $this->getRunningScans() ) > 0 || count( $oOpts->getScansToBuild() ) > 0;
|
92 |
}
|
93 |
|
100 |
}
|
101 |
if ( !empty( $aScanSlugs ) ) {
|
102 |
/** @var HackGuard\Options $oOpts */
|
103 |
+
$oOpts = $this->getOptions();
|
104 |
foreach ( $aScanSlugs as $sSlug ) {
|
105 |
$oOpts->addRemoveScanToBuild( $sSlug );
|
106 |
}
|
@@ -111,16 +111,17 @@ class QueueProcessor extends Utilities\BackgroundProcessing\BackgroundProcess {
|
|
111 |
*/
|
112 |
public function save() {
|
113 |
|
114 |
-
if (
|
115 |
/** @var ScanQueue\Insert $oInsert */
|
116 |
$oInsert = $this->getDbHandler()->getQueryInserter();
|
117 |
-
foreach ( $this->data as $oEntry ) {
|
118 |
if ( $oEntry instanceof ScanQueue\EntryVO ) {
|
119 |
$oInsert->insert( $oEntry );
|
120 |
}
|
121 |
}
|
122 |
}
|
123 |
|
|
|
124 |
return $this;
|
125 |
}
|
126 |
|
111 |
*/
|
112 |
public function save() {
|
113 |
|
114 |
+
if ( is_array( $this->data ) ) {
|
115 |
/** @var ScanQueue\Insert $oInsert */
|
116 |
$oInsert = $this->getDbHandler()->getQueryInserter();
|
117 |
+
foreach ( $this->data as $nKey => $oEntry ) {
|
118 |
if ( $oEntry instanceof ScanQueue\EntryVO ) {
|
119 |
$oInsert->insert( $oEntry );
|
120 |
}
|
121 |
}
|
122 |
}
|
123 |
|
124 |
+
$this->data = []; // critical to preventing duplicate entries
|
125 |
return $this;
|
126 |
}
|
127 |
|
@@ -32,10 +32,9 @@ class ScanInitiate {
|
|
32 |
->setMod( $oMod )
|
33 |
->build( $sSlug );
|
34 |
|
35 |
-
$oQ = $this->getQueueProcessor();
|
36 |
( new ScanEnqueue() )
|
37 |
->setDbHandler( $oDbH )
|
38 |
-
->setQueueProcessor( $
|
39 |
->setScanActionVO( $oAction )
|
40 |
->enqueue();
|
41 |
}
|
32 |
->setMod( $oMod )
|
33 |
->build( $sSlug );
|
34 |
|
|
|
35 |
( new ScanEnqueue() )
|
36 |
->setDbHandler( $oDbH )
|
37 |
+
->setQueueProcessor( $this->getQueueProcessor() )
|
38 |
->setScanActionVO( $oAction )
|
39 |
->enqueue();
|
40 |
}
|
@@ -326,7 +326,7 @@ class Strings extends Base\Strings {
|
|
326 |
case 'mal_scan_enable' :
|
327 |
$sName = __( 'Automatic Malware Scan', 'wp-simple-firewall' );
|
328 |
$sSummary = __( 'Turn On Automatic Malware Scanning', 'wp-simple-firewall' );
|
329 |
-
$sDescription = __(
|
330 |
break;
|
331 |
|
332 |
case 'mal_autorepair_core' :
|
@@ -343,6 +343,23 @@ class Strings extends Base\Strings {
|
|
343 |
.'<br />'.sprintf( '%s: %s', __( 'Important', 'wp-simple-firewall' ), __( "Also deletes suspected files if they weren't originally distributed with the plugin.", 'wp-simple-firewall' ) );
|
344 |
break;
|
345 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
case 'mal_autorepair_surgical' :
|
347 |
$sName = __( 'Surgical Auto-Repair', 'wp-simple-firewall' );
|
348 |
$sSummary = __( 'Automatically Attempt To Surgically Remove Malware Code', 'wp-simple-firewall' );
|
326 |
case 'mal_scan_enable' :
|
327 |
$sName = __( 'Automatic Malware Scan', 'wp-simple-firewall' );
|
328 |
$sSummary = __( 'Turn On Automatic Malware Scanning', 'wp-simple-firewall' );
|
329 |
+
$sDescription = __( 'Automatically run scanner to detect files infected with malware signatures.', 'wp-simple-firewall' );
|
330 |
break;
|
331 |
|
332 |
case 'mal_autorepair_core' :
|
343 |
.'<br />'.sprintf( '%s: %s', __( 'Important', 'wp-simple-firewall' ), __( "Also deletes suspected files if they weren't originally distributed with the plugin.", 'wp-simple-firewall' ) );
|
344 |
break;
|
345 |
|
346 |
+
case 'mal_fp_confidence' :
|
347 |
+
$sName = __( 'Ignore False Positives Threshold', 'wp-simple-firewall' );
|
348 |
+
$sSummary = __( 'Ignore False Positives In Scan Results Automatically', 'wp-simple-firewall' );
|
349 |
+
$sDescription = __( "You can choose to ignore files with potential malware, depending on whether the confidence that it's a 'false positive' meets your minimum threshold.", 'wp-simple-firewall' )
|
350 |
+
.'<br />'.__( "A false positive happens when a file appears to contain malware and shows up in scan results, but it's actually clean.", 'wp-simple-firewall' )
|
351 |
+
.' ('.__( "A false positive is similar to when an anti-virus alerts to a file that doesnt have a virus.", 'wp-simple-firewall' ).')'
|
352 |
+
.'<br />'.__( "The higher the confidence level, the more likely a result is a false positive.", 'wp-simple-firewall' )
|
353 |
+
.' '.__( "A low level means it's less likely to be a false positive.", 'wp-simple-firewall' )
|
354 |
+
.'<br />'.__( "The scan will automatically ignore results whose 'false positive' confidence level is greater than your chosen threshold.", 'wp-simple-firewall' )
|
355 |
+
.'<br />'.__( "The higher the confidence threshold you select, the more likely that 'false positives' will appears in your scan results.", 'wp-simple-firewall' )
|
356 |
+
.'<br />'.__( "Disabling network intelligence turns off 'false positive confidence' levels.", 'wp-simple-firewall' )
|
357 |
+
.' '.__( 'You will no longer benefit from the intelligence gathered from the entire network.', 'wp-simple-firewall' )
|
358 |
+
.' '.__( 'All data shared is completely anonymous.', 'wp-simple-firewall' )
|
359 |
+
.' '.' [<a href="https://icwp.io/moreinfochecksum">'.__( 'More Info', 'wp-simple-firewall' ).'</a>]'
|
360 |
+
.'<br />'.__( 'The more sites that share this information, the stronger and smarter the network becomes.', 'wp-simple-firewall' );
|
361 |
+
break;
|
362 |
+
|
363 |
case 'mal_autorepair_surgical' :
|
364 |
$sName = __( 'Surgical Auto-Repair', 'wp-simple-firewall' );
|
365 |
$sSummary = __( 'Automatically Attempt To Surgically Remove Malware Code', 'wp-simple-firewall' );
|
@@ -39,6 +39,8 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
39 |
private function ajaxExec_AddIp() {
|
40 |
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
41 |
$oMod = $this->getMod();
|
|
|
|
|
42 |
/** @var \ICWP_WPSF_Processor_Ips $oProcessor */
|
43 |
$oProcessor = $oMod->getProcessor();
|
44 |
$oIpServ = Services::IP();
|
@@ -48,7 +50,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
48 |
$bSuccess = false;
|
49 |
$sMessage = __( "IP address wasn't added to the list", 'wp-simple-firewall' );
|
50 |
|
51 |
-
$sIp = preg_replace( '#[
|
52 |
$sList = isset( $aFormParams[ 'list' ] ) ? $aFormParams[ 'list' ] : '';
|
53 |
|
54 |
$bAcceptableIp = $oIpServ->isValidIp( $sIp ) || $oIpServ->isValidIp4Range( $sIp );
|
@@ -89,8 +91,8 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
89 |
$oIp = $oProcessor->addIpToBlackList( $sIp, $sLabel );
|
90 |
if ( !empty( $oIp ) ) {
|
91 |
/** @var Shield\Databases\IPs\Update $oUpd */
|
92 |
-
$oUpd = $oMod->
|
93 |
-
$oUpd->updateTransgressions( $oIp, $
|
94 |
}
|
95 |
break;
|
96 |
|
@@ -115,13 +117,15 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
115 |
* @return array
|
116 |
*/
|
117 |
private function ajaxExec_IpDelete() {
|
|
|
|
|
118 |
$bSuccess = false;
|
119 |
$nId = Services::Request()->post( 'rid', -1 );
|
120 |
|
121 |
if ( !is_numeric( $nId ) || $nId < 0 ) {
|
122 |
$sMessage = __( 'Invalid entry selected', 'wp-simple-firewall' );
|
123 |
}
|
124 |
-
else if ( $
|
125 |
$sMessage = __( 'IP address deleted', 'wp-simple-firewall' );
|
126 |
$bSuccess = true;
|
127 |
}
|
@@ -142,8 +146,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
142 |
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
143 |
$oMod = $this->getMod();
|
144 |
|
145 |
-
|
146 |
-
$oDbH = $oMod->getDbHandler();
|
147 |
$oDbH->autoCleanDb();
|
148 |
|
149 |
$oTableBuilder = ( new Shield\Tables\Build\Ip() )
|
39 |
private function ajaxExec_AddIp() {
|
40 |
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
41 |
$oMod = $this->getMod();
|
42 |
+
/** @var Options $oOpts */
|
43 |
+
$oOpts = $this->getOptions();
|
44 |
/** @var \ICWP_WPSF_Processor_Ips $oProcessor */
|
45 |
$oProcessor = $oMod->getProcessor();
|
46 |
$oIpServ = Services::IP();
|
50 |
$bSuccess = false;
|
51 |
$sMessage = __( "IP address wasn't added to the list", 'wp-simple-firewall' );
|
52 |
|
53 |
+
$sIp = preg_replace( '#[^/:.a-f\d]#i', '', ( isset( $aFormParams[ 'ip' ] ) ? $aFormParams[ 'ip' ] : '' ) );
|
54 |
$sList = isset( $aFormParams[ 'list' ] ) ? $aFormParams[ 'list' ] : '';
|
55 |
|
56 |
$bAcceptableIp = $oIpServ->isValidIp( $sIp ) || $oIpServ->isValidIp4Range( $sIp );
|
91 |
$oIp = $oProcessor->addIpToBlackList( $sIp, $sLabel );
|
92 |
if ( !empty( $oIp ) ) {
|
93 |
/** @var Shield\Databases\IPs\Update $oUpd */
|
94 |
+
$oUpd = $oMod->getDbHandler_IPs()->getQueryUpdater();
|
95 |
+
$oUpd->updateTransgressions( $oIp, $oOpts->getOffenseLimit() );
|
96 |
}
|
97 |
break;
|
98 |
|
117 |
* @return array
|
118 |
*/
|
119 |
private function ajaxExec_IpDelete() {
|
120 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
121 |
+
$oMod = $this->getMod();
|
122 |
$bSuccess = false;
|
123 |
$nId = Services::Request()->post( 'rid', -1 );
|
124 |
|
125 |
if ( !is_numeric( $nId ) || $nId < 0 ) {
|
126 |
$sMessage = __( 'Invalid entry selected', 'wp-simple-firewall' );
|
127 |
}
|
128 |
+
else if ( $oMod->getDbHandler_IPs()->getQueryDeleter()->deleteById( $nId ) ) {
|
129 |
$sMessage = __( 'IP address deleted', 'wp-simple-firewall' );
|
130 |
$bSuccess = true;
|
131 |
}
|
146 |
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
147 |
$oMod = $this->getMod();
|
148 |
|
149 |
+
$oDbH = $oMod->getDbHandler_IPs();
|
|
|
150 |
$oDbH->autoCleanDb();
|
151 |
|
152 |
$oTableBuilder = ( new Shield\Tables\Build\Ip() )
|
@@ -3,6 +3,7 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\BotTrack;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
|
|
6 |
use FernleafSystems\Wordpress\Services\Services;
|
7 |
|
8 |
abstract class Base {
|
@@ -15,14 +16,14 @@ abstract class Base {
|
|
15 |
}
|
16 |
|
17 |
protected function doTransgression() {
|
18 |
-
/** @var \
|
19 |
-
$
|
20 |
|
21 |
-
if ( $
|
22 |
$bCount = PHP_INT_MAX;
|
23 |
}
|
24 |
-
else if ( $
|
25 |
-
$bCount = $
|
26 |
}
|
27 |
else {
|
28 |
$bCount = 0;
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\BotTrack;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
|
7 |
use FernleafSystems\Wordpress\Services\Services;
|
8 |
|
9 |
abstract class Base {
|
16 |
}
|
17 |
|
18 |
protected function doTransgression() {
|
19 |
+
/** @var IPs\Options $oOpts */
|
20 |
+
$oOpts = $this->getOptions();
|
21 |
|
22 |
+
if ( $oOpts->isTrackOptImmediateBlock( static::OPT_KEY ) ) {
|
23 |
$bCount = PHP_INT_MAX;
|
24 |
}
|
25 |
+
else if ( $oOpts->isTrackOptTransgression( static::OPT_KEY ) ) {
|
26 |
+
$bCount = $oOpts->isTrackOptDoubleTransgression( static::OPT_KEY ) ? 2 : 1;
|
27 |
}
|
28 |
else {
|
29 |
$bCount = 0;
|
@@ -22,7 +22,7 @@ class UnblockIpByFlag {
|
|
22 |
|
23 |
$aLines = array_map( 'trim', explode( "\n", $sContent ) );
|
24 |
/** @var Shield\Databases\IPs\Handler $oDbH */
|
25 |
-
$oDbH = $oMod->
|
26 |
$oIP = Services::IP();
|
27 |
|
28 |
/** @var Shield\Databases\IPs\Delete $oDel */
|
22 |
|
23 |
$aLines = array_map( 'trim', explode( "\n", $sContent ) );
|
24 |
/** @var Shield\Databases\IPs\Handler $oDbH */
|
25 |
+
$oDbH = $oMod->getDbHandler_IPs();
|
26 |
$oIP = Services::IP();
|
27 |
|
28 |
/** @var Shield\Databases\IPs\Delete $oDel */
|
@@ -111,7 +111,6 @@ class Options extends Base\ShieldOptions {
|
|
111 |
/**
|
112 |
* @param string $sOptionKey
|
113 |
* @return bool
|
114 |
-
* @deprecated 8.1
|
115 |
*/
|
116 |
public function isTrackOptTransgression( $sOptionKey ) {
|
117 |
return strpos( $this->getOpt( $sOptionKey ), 'transgression' ) !== false;
|
111 |
/**
|
112 |
* @param string $sOptionKey
|
113 |
* @return bool
|
|
|
114 |
*/
|
115 |
public function isTrackOptTransgression( $sOptionKey ) {
|
116 |
return strpos( $this->getOpt( $sOptionKey ), 'transgression' ) !== false;
|
@@ -67,7 +67,10 @@ class Strings extends Base\Strings {
|
|
67 |
'not_available' => __( 'Sorry, this feature is included with Pro subscriptions.', 'wp-simple-firewall' ),
|
68 |
'not_enabled' => __( "This feature isn't currently enabled.", 'wp-simple-firewall' ),
|
69 |
'please_upgrade' => __( 'You can get this feature (along with loads more) by going Pro.', 'wp-simple-firewall' ),
|
70 |
-
'please_enable' => __( 'Please turn on this feature in the options.', 'wp-simple-firewall' )
|
|
|
|
|
|
|
71 |
];
|
72 |
}
|
73 |
}
|
67 |
'not_available' => __( 'Sorry, this feature is included with Pro subscriptions.', 'wp-simple-firewall' ),
|
68 |
'not_enabled' => __( "This feature isn't currently enabled.", 'wp-simple-firewall' ),
|
69 |
'please_upgrade' => __( 'You can get this feature (along with loads more) by going Pro.', 'wp-simple-firewall' ),
|
70 |
+
'please_enable' => __( 'Please turn on this feature in the options.', 'wp-simple-firewall' ),
|
71 |
+
'no_security_notices' => __( 'There are no important security notices at this time.', 'wp-simple-firewall' ),
|
72 |
+
'this_is_wonderful' => __( 'This is wonderful!', 'wp-simple-firewall' ),
|
73 |
+
'yyyymmdd' => __( 'YYYY-MM-DD', 'wp-simple-firewall' ),
|
74 |
];
|
75 |
}
|
76 |
}
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Class CooldownFlagFile
|
10 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib
|
11 |
+
*/
|
12 |
+
class CooldownFlagFile {
|
13 |
+
|
14 |
+
use Modules\ModConsumer;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @return bool
|
18 |
+
*/
|
19 |
+
public function isWithinCooldownPeriod() {
|
20 |
+
return $this->getCooldownRemaining() > 0;
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @return int
|
25 |
+
*/
|
26 |
+
public function getCooldownRemaining() {
|
27 |
+
/** @var Modules\LoginGuard\Options $oOpts */
|
28 |
+
$oOpts = $this->getOptions();
|
29 |
+
return max( 0, $oOpts->getCooldownInterval() - $this->getSecondsSinceLastLogin() );
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @return string
|
34 |
+
*/
|
35 |
+
public function getFlagFilePath() {
|
36 |
+
return path_join( $this->getCon()->getRootDir(), 'mode.login_throttled' );
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @return int
|
41 |
+
*/
|
42 |
+
public function getSecondsSinceLastLogin() {
|
43 |
+
$oFS = Services::WpFs();
|
44 |
+
$sFile = $this->getFlagFilePath();
|
45 |
+
$nLastLogin = $oFS->exists( $sFile ) ? $oFS->getModifiedTime( $sFile ) : 0;
|
46 |
+
return ( Services::Request()->ts() - $nLastLogin );
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @return $this
|
51 |
+
*/
|
52 |
+
public function updateCooldownFlag() {
|
53 |
+
$oFS = Services::WpFs();
|
54 |
+
$sFile = $this->getFlagFilePath();
|
55 |
+
$oFS->deleteFile( $sFile );
|
56 |
+
$oFS->touch( $sFile, Services::Request()->ts() );
|
57 |
+
return $this;
|
58 |
+
}
|
59 |
+
}
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
7 |
+
use FernleafSystems\Wordpress\Services\Services;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class CooldownRedirect
|
11 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard
|
12 |
+
*/
|
13 |
+
class CooldownRedirect {
|
14 |
+
|
15 |
+
use Modules\ModConsumer;
|
16 |
+
|
17 |
+
public function run() {
|
18 |
+
add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] );
|
19 |
+
}
|
20 |
+
|
21 |
+
public function onWpLoaded() {
|
22 |
+
$oReq = Services::Request();
|
23 |
+
$oCooldownFile = ( new LoginGuard\Lib\CooldownFlagFile() )->setMod( $this->getMod() );
|
24 |
+
if ( !$oReq->isPost() && Services::WpGeneral()->isLoginUrl()
|
25 |
+
&& $oCooldownFile->isWithinCooldownPeriod()
|
26 |
+
&& !Services::WpUsers()->isUserLoggedIn()
|
27 |
+
&& $oReq->query( 'cooldown_bypass' ) != 1 ) {
|
28 |
+
$this->renderCooldownPage();
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
private function renderCooldownPage() {
|
33 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
34 |
+
$oMod = $this->getMod();
|
35 |
+
$nTimeRemaining = ( new LoginGuard\Lib\CooldownFlagFile() )
|
36 |
+
->setMod( $oMod )
|
37 |
+
->getCooldownRemaining();
|
38 |
+
$aData = [
|
39 |
+
'strings' => [
|
40 |
+
'title' => __( "The login page is protected against too many login attempts.", 'wp-simple-firewall' ),
|
41 |
+
'lines' => [
|
42 |
+
__( 'If you attempt to login again too quickly you may be blocked from accessing this site entirely.', 'wp-simple-firewall' ),
|
43 |
+
__( 'If you share this website with others, you may also block their access to the site.', 'wp-simple-firewall' ),
|
44 |
+
__( 'To ignore this message and return to the login page, please check the box and click continue.', 'wp-simple-firewall' ),
|
45 |
+
],
|
46 |
+
'understand' => __( 'I understand I may block my access to the site.', 'wp-simple-firewall' ),
|
47 |
+
'time_remaining' => __( 'Seconds remaining', 'wp-simple-firewall' ),
|
48 |
+
'button' => __( 'Proceed To Login Page', 'wp-simple-firewall' ),
|
49 |
+
],
|
50 |
+
'vars' => [
|
51 |
+
'remaining' => $nTimeRemaining,
|
52 |
+
'login_url' => Services::WpGeneral()->getLoginUrl(),
|
53 |
+
],
|
54 |
+
'flags' => [
|
55 |
+
],
|
56 |
+
];
|
57 |
+
Services::WpGeneral()
|
58 |
+
->wpDie(
|
59 |
+
$oMod->renderTemplate( '/snippets/cooldown_login_block.twig', $aData, true )
|
60 |
+
);
|
61 |
+
}
|
62 |
+
}
|
@@ -4,5 +4,23 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
|
|
|
|
|
|
|
|
|
7 |
class Options extends Base\ShieldOptions {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
}
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
|
6 |
|
7 |
+
/**
|
8 |
+
* Class Options
|
9 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard
|
10 |
+
*/
|
11 |
class Options extends Base\ShieldOptions {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @return bool
|
15 |
+
*/
|
16 |
+
public function isCooldownEnabled() {
|
17 |
+
return $this->getCooldownInterval() > 0;
|
18 |
+
}
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @return int
|
22 |
+
*/
|
23 |
+
public function getCooldownInterval() {
|
24 |
+
return (int)$this->getOpt( 'login_limit_interval' );
|
25 |
+
}
|
26 |
}
|
@@ -70,9 +70,9 @@ class AdminNotices extends Shield\Modules\Base\AdminNotices {
|
|
70 |
* @return array
|
71 |
*/
|
72 |
private function ajaxExec_SetPluginTrackingPerm() {
|
73 |
-
/** @var
|
74 |
-
$
|
75 |
-
$
|
76 |
return $this->ajaxExec_DismissAdminNotice();
|
77 |
}
|
78 |
|
@@ -103,7 +103,7 @@ class AdminNotices extends Shield\Modules\Base\AdminNotices {
|
|
103 |
* @param Shield\Utilities\AdminNotices\NoticeVO $oNotice
|
104 |
*/
|
105 |
private function buildNotice_PluginMailingListSignup( $oNotice ) {
|
106 |
-
$oOpts = $this->
|
107 |
|
108 |
$sName = $this->getCon()->getHumanName();
|
109 |
$oUser = Services::WpUsers()->getCurrentWpUser();
|
70 |
* @return array
|
71 |
*/
|
72 |
private function ajaxExec_SetPluginTrackingPerm() {
|
73 |
+
/** @var Options $oOpts */
|
74 |
+
$oOpts = $this->getOptions();
|
75 |
+
$oOpts->setPluginTrackingPermission( (bool)Services::Request()->query( 'agree', false ) );
|
76 |
return $this->ajaxExec_DismissAdminNotice();
|
77 |
}
|
78 |
|
103 |
* @param Shield\Utilities\AdminNotices\NoticeVO $oNotice
|
104 |
*/
|
105 |
private function buildNotice_PluginMailingListSignup( $oNotice ) {
|
106 |
+
$oOpts = $this->getOptions();
|
107 |
|
108 |
$sName = $this->getCon()->getHumanName();
|
109 |
$oUser = Services::WpUsers()->getCurrentWpUser();
|
@@ -104,7 +104,9 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
104 |
* @return array
|
105 |
*/
|
106 |
private function ajaxExec_SetPluginTrackingPerm() {
|
107 |
-
|
|
|
|
|
108 |
return [ 'success' => true ];
|
109 |
}
|
110 |
|
104 |
* @return array
|
105 |
*/
|
106 |
private function ajaxExec_SetPluginTrackingPerm() {
|
107 |
+
/** @var Options $oOpts */
|
108 |
+
$oOpts = $this->getOptions();
|
109 |
+
$oOpts->setPluginTrackingPermission( (bool)Services::Request()->query( 'agree', false ) );
|
110 |
return [ 'success' => true ];
|
111 |
}
|
112 |
|
@@ -57,4 +57,13 @@ class Options extends Base\ShieldOptions {
|
|
57 |
public function isOnFloatingPluginBadge() {
|
58 |
return $this->isOpt( 'display_plugin_badge', 'Y' );
|
59 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
}
|
57 |
public function isOnFloatingPluginBadge() {
|
58 |
return $this->isOpt( 'display_plugin_badge', 'Y' );
|
59 |
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @param bool $bOnOrOff
|
63 |
+
* @return $this
|
64 |
+
*/
|
65 |
+
public function setPluginTrackingPermission( $bOnOrOff = true ) {
|
66 |
+
return $this->setOpt( 'enable_tracking', $bOnOrOff ? 'Y' : 'N' )
|
67 |
+
->setOpt( 'tracking_permission_set_at', Services::Request()->ts() );
|
68 |
+
}
|
69 |
}
|
@@ -44,6 +44,9 @@ class Strings extends Base\Strings {
|
|
44 |
'master_url_set' => [
|
45 |
__( 'Master Site URL set: %s', 'wp-simple-firewall' ),
|
46 |
],
|
|
|
|
|
|
|
47 |
];
|
48 |
}
|
49 |
|
@@ -432,5 +435,11 @@ class Strings extends Base\Strings {
|
|
432 |
__( 'Once', 'wp-simple-firewall' );
|
433 |
__( 'Twice', 'wp-simple-firewall' );
|
434 |
__( 'Go To Security Dashboard', 'wp-simple-firewall' );
|
|
|
|
|
|
|
|
|
|
|
|
|
435 |
}
|
436 |
}
|
44 |
'master_url_set' => [
|
45 |
__( 'Master Site URL set: %s', 'wp-simple-firewall' ),
|
46 |
],
|
47 |
+
'recaptcha_fail' => [
|
48 |
+
__( 'Google reCAPTCHA Test Fail', 'wp-simple-firewall' )
|
49 |
+
],
|
50 |
];
|
51 |
}
|
52 |
|
435 |
__( 'Once', 'wp-simple-firewall' );
|
436 |
__( 'Twice', 'wp-simple-firewall' );
|
437 |
__( 'Go To Security Dashboard', 'wp-simple-firewall' );
|
438 |
+
|
439 |
+
__( 'None - Turn Off Malware Intelligence Network', 'wp-simple-firewall' );
|
440 |
+
__( 'Low', 'wp-simple-firewall' );
|
441 |
+
__( 'Medium', 'wp-simple-firewall' );
|
442 |
+
__( 'High', 'wp-simple-firewall' );
|
443 |
+
__( 'Full', 'wp-simple-firewall' );
|
444 |
}
|
445 |
}
|
@@ -35,7 +35,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
|
|
35 |
'success' => true,
|
36 |
'html' => ( new Shield\Tables\Build\Traffic() )
|
37 |
->setMod( $oMod )
|
38 |
-
->setDbHandler( $oMod->
|
39 |
->buildTable()
|
40 |
];
|
41 |
}
|
35 |
'success' => true,
|
36 |
'html' => ( new Shield\Tables\Build\Traffic() )
|
37 |
->setMod( $oMod )
|
38 |
+
->setDbHandler( $oMod->getDbHandler_Traffic() )
|
39 |
->buildTable()
|
40 |
];
|
41 |
}
|
@@ -25,7 +25,7 @@ class TestIp {
|
|
25 |
/** @var Shield\Modules\Traffic\Options $oOpts */
|
26 |
$oOpts = $oMod->getOptions();
|
27 |
/** @var Traffic\Select $oSel */
|
28 |
-
$oSel = $oMod->
|
29 |
|
30 |
$oNow = Services::Request()->carbon();
|
31 |
|
25 |
/** @var Shield\Modules\Traffic\Options $oOpts */
|
26 |
$oOpts = $oMod->getOptions();
|
27 |
/** @var Traffic\Select $oSel */
|
28 |
+
$oSel = $oMod->getDbHandler_Traffic()->getQuerySelector();
|
29 |
|
30 |
$oNow = Services::Request()->carbon();
|
31 |
|
@@ -13,5 +13,4 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
|
|
13 |
*/
|
14 |
class ResultItem extends Base\BaseResultItem {
|
15 |
|
16 |
-
const SCAN_RESULT_TYPE = 'apc';
|
17 |
}
|
13 |
*/
|
14 |
class ResultItem extends Base\BaseResultItem {
|
15 |
|
|
|
16 |
}
|
@@ -8,6 +8,27 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
|
|
8 |
*/
|
9 |
abstract class BaseRepair {
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
/**
|
12 |
* @param BaseResultsSet $oResults
|
13 |
*/
|
8 |
*/
|
9 |
abstract class BaseRepair {
|
10 |
|
11 |
+
/**
|
12 |
+
* @var bool
|
13 |
+
*/
|
14 |
+
private $bIsManualAction = false;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @return bool
|
18 |
+
*/
|
19 |
+
public function isManualAction() {
|
20 |
+
return (bool)$this->bIsManualAction;
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @param bool $bManual
|
25 |
+
* @return $this
|
26 |
+
*/
|
27 |
+
public function setIsManualAction( $bManual ) {
|
28 |
+
$this->bIsManualAction = $bManual;
|
29 |
+
return $this;
|
30 |
+
}
|
31 |
+
|
32 |
/**
|
33 |
* @param BaseResultsSet $oResults
|
34 |
*/
|
@@ -10,7 +10,8 @@ use FernleafSystems\Wordpress\Plugin\Shield;
|
|
10 |
*/
|
11 |
abstract class BaseFileScanner {
|
12 |
|
13 |
-
use Shield\Scans\Common\ScanActionConsumer
|
|
|
14 |
|
15 |
/**
|
16 |
* @param string $sFullPath
|
10 |
*/
|
11 |
abstract class BaseFileScanner {
|
12 |
|
13 |
+
use Shield\Scans\Common\ScanActionConsumer,
|
14 |
+
Shield\Modules\ModConsumer;
|
15 |
|
16 |
/**
|
17 |
* @param string $sFullPath
|
@@ -2,15 +2,17 @@
|
|
2 |
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Base\Files;
|
4 |
|
|
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Scans;
|
6 |
|
7 |
/**
|
8 |
* Class BaseScanFromFileMap
|
9 |
-
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\
|
10 |
*/
|
11 |
abstract class BaseScanFromFileMap {
|
12 |
|
13 |
-
use Scans\Common\ScanActionConsumer
|
|
|
14 |
|
15 |
/**
|
16 |
* @return Scans\Base\BaseResultsSet
|
2 |
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Base\Files;
|
4 |
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
6 |
use FernleafSystems\Wordpress\Plugin\Shield\Scans;
|
7 |
|
8 |
/**
|
9 |
* Class BaseScanFromFileMap
|
10 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Base\Files
|
11 |
*/
|
12 |
abstract class BaseScanFromFileMap {
|
13 |
|
14 |
+
use Scans\Common\ScanActionConsumer,
|
15 |
+
ModConsumer;
|
16 |
|
17 |
/**
|
18 |
* @return Scans\Base\BaseResultsSet
|
@@ -23,21 +23,23 @@ class BuildFileMap {
|
|
23 |
/** @var ScanActionVO $oAction */
|
24 |
$oAction = $this->getScanActionVO();
|
25 |
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
33 |
}
|
34 |
-
$aFiles[] = $sFullPath;
|
35 |
}
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
}
|
42 |
return $aFiles;
|
43 |
}
|
@@ -46,8 +48,13 @@ class BuildFileMap {
|
|
46 |
/** @var ScanActionVO $oAction */
|
47 |
$oAction = $this->getScanActionVO();
|
48 |
|
49 |
-
if ( empty( $oAction->
|
50 |
-
$oAction->
|
|
|
|
|
|
|
|
|
|
|
51 |
}
|
52 |
if ( empty( $oAction->file_exts ) ) {
|
53 |
$oAction->file_exts = [ 'php', 'php5' ];
|
23 |
/** @var ScanActionVO $oAction */
|
24 |
$oAction = $this->getScanActionVO();
|
25 |
|
26 |
+
foreach ( $oAction->scan_root_dirs as $sScanDir => $nDepth ) {
|
27 |
+
try {
|
28 |
+
$oDirIt = StandardDirectoryIterator::create( $sScanDir, (int)$nDepth, $oAction->file_exts, false );
|
29 |
+
foreach ( $oDirIt as $oFsItem ) {
|
30 |
+
$sFullPath = wp_normalize_path( $oFsItem->getPathname() );
|
31 |
+
/** @var \SplFileInfo $oFsItem */
|
32 |
+
if ( $this->isWhitelistedPath( $sFullPath ) || $oFsItem->getSize() == 0 ) {
|
33 |
+
continue;
|
34 |
+
}
|
35 |
+
$aFiles[] = $sFullPath;
|
36 |
}
|
|
|
37 |
}
|
38 |
+
catch ( \Exception $oE ) {
|
39 |
+
error_log(
|
40 |
+
sprintf( 'Shield file scanner attempted to read directory but there was error: "%s".', $oE->getMessage() )
|
41 |
+
);
|
42 |
+
}
|
43 |
}
|
44 |
return $aFiles;
|
45 |
}
|
48 |
/** @var ScanActionVO $oAction */
|
49 |
$oAction = $this->getScanActionVO();
|
50 |
|
51 |
+
if ( empty( $oAction->scan_root_dirs ) || !is_array( $oAction->scan_root_dirs ) ) {
|
52 |
+
$oAction->scan_root_dirs = [
|
53 |
+
ABSPATH => 1,
|
54 |
+
path_join( ABSPATH, WPINC ) => 0,
|
55 |
+
path_join( ABSPATH, 'wp-admin' ) => 0,
|
56 |
+
WP_CONTENT_DIR => 0,
|
57 |
+
];
|
58 |
}
|
59 |
if ( empty( $oAction->file_exts ) ) {
|
60 |
$oAction->file_exts = [ 'php', 'php5' ];
|
@@ -20,12 +20,9 @@ class BuildScanAction extends Shield\Scans\Base\BaseBuildScanAction {
|
|
20 |
/** @var ScanActionVO $oAction */
|
21 |
$oAction = $this->getScanActionVO();
|
22 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
23 |
-
$oOpts = $this->
|
24 |
|
25 |
$oAction->paths_whitelisted = $oOpts->getMalWhitelistPaths();
|
26 |
-
$oAction->patterns_regex = $oOpts->getMalSignaturesRegex();
|
27 |
-
$oAction->patterns_simple = $oOpts->getMalSignaturesSimple();
|
28 |
$oAction->file_exts = [ 'php', 'php5', 'php7' ];
|
29 |
-
$oAction->scan_root_dir = ABSPATH;
|
30 |
}
|
31 |
}
|
20 |
/** @var ScanActionVO $oAction */
|
21 |
$oAction = $this->getScanActionVO();
|
22 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
23 |
+
$oOpts = $this->getOptions();
|
24 |
|
25 |
$oAction->paths_whitelisted = $oOpts->getMalWhitelistPaths();
|
|
|
|
|
26 |
$oAction->file_exts = [ 'php', 'php5', 'php7' ];
|
|
|
27 |
}
|
28 |
}
|
@@ -6,7 +6,6 @@ use FernleafSystems\Wordpress\Plugin\Shield;
|
|
6 |
use FernleafSystems\Wordpress\Services\Core\VOs\WpPluginVo;
|
7 |
use FernleafSystems\Wordpress\Services\Services;
|
8 |
use FernleafSystems\Wordpress\Services\Utilities;
|
9 |
-
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
10 |
|
11 |
/**
|
12 |
* Class FileScanner
|
@@ -14,17 +13,12 @@ use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
|
14 |
*/
|
15 |
class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
16 |
|
17 |
-
/**
|
18 |
-
* @var array[]
|
19 |
-
*/
|
20 |
-
private $aWhitelistHashes;
|
21 |
-
|
22 |
/**
|
23 |
* @param string $sFullPath
|
24 |
* @return ResultItem|null
|
25 |
*/
|
26 |
public function scan( $sFullPath ) {
|
27 |
-
$
|
28 |
|
29 |
/** @var ScanActionVO $oAction */
|
30 |
$oAction = $this->getScanActionVO();
|
@@ -35,11 +29,9 @@ class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
|
35 |
{ // Simple Patterns first
|
36 |
$oLocator->setIsRegEx( false );
|
37 |
foreach ( $oAction->patterns_simple as $sSig ) {
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
if ( !empty( $aLines ) && !$this->canExcludeFile( $sFullPath ) ) {
|
42 |
-
return $this->getResultItemFromLines( $aLines, $sFullPath, $sSig );
|
43 |
}
|
44 |
}
|
45 |
}
|
@@ -47,11 +39,9 @@ class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
|
47 |
{ // RegEx Patterns
|
48 |
$oLocator->setIsRegEx( true );
|
49 |
foreach ( $oAction->patterns_regex as $sSig ) {
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
if ( !empty( $aLines ) && !$this->canExcludeFile( $sFullPath ) ) {
|
54 |
-
return $this->getResultItemFromLines( $aLines, $sFullPath, $sSig );
|
55 |
}
|
56 |
}
|
57 |
}
|
@@ -59,20 +49,34 @@ class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
|
59 |
catch ( \Exception $oE ) {
|
60 |
}
|
61 |
|
62 |
-
return $
|
63 |
}
|
64 |
|
65 |
/**
|
66 |
-
* @
|
|
|
|
|
67 |
*/
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
}
|
75 |
-
return $
|
76 |
}
|
77 |
|
78 |
/**
|
@@ -87,7 +91,13 @@ class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
|
87 |
$oResultItem->path_fragment = str_replace( wp_normalize_path( ABSPATH ), '', $oResultItem->path_full );
|
88 |
$oResultItem->is_mal = true;
|
89 |
$oResultItem->mal_sig = base64_encode( $sSig );
|
90 |
-
$oResultItem->
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
return $oResultItem;
|
92 |
}
|
93 |
|
@@ -96,23 +106,35 @@ class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
|
96 |
* @return bool
|
97 |
*/
|
98 |
private function canExcludeFile( $sFullPath ) {
|
99 |
-
|
100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
}
|
102 |
|
103 |
/**
|
104 |
-
* @param string $
|
105 |
-
* @return
|
106 |
*/
|
107 |
-
private function
|
108 |
-
$
|
109 |
-
$
|
110 |
-
|
|
|
|
|
|
|
111 |
try {
|
112 |
$oHasher = new Utilities\File\Compare\CompareHash();
|
113 |
-
foreach ( $
|
114 |
-
if ( $oHasher->isEqualFileSha1( $
|
115 |
-
$
|
116 |
break;
|
117 |
}
|
118 |
}
|
@@ -120,7 +142,7 @@ class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
|
120 |
catch ( \InvalidArgumentException $oE ) {
|
121 |
}
|
122 |
}
|
123 |
-
return $
|
124 |
}
|
125 |
|
126 |
/**
|
6 |
use FernleafSystems\Wordpress\Services\Core\VOs\WpPluginVo;
|
7 |
use FernleafSystems\Wordpress\Services\Services;
|
8 |
use FernleafSystems\Wordpress\Services\Utilities;
|
|
|
9 |
|
10 |
/**
|
11 |
* Class FileScanner
|
13 |
*/
|
14 |
class FileScanner extends Shield\Scans\Base\Files\BaseFileScanner {
|
15 |
|
|
|
|
|
|
|
|
|
|
|
16 |
/**
|
17 |
* @param string $sFullPath
|
18 |
* @return ResultItem|null
|
19 |
*/
|
20 |
public function scan( $sFullPath ) {
|
21 |
+
$oItem = null;
|
22 |
|
23 |
/** @var ScanActionVO $oAction */
|
24 |
$oAction = $this->getScanActionVO();
|
29 |
{ // Simple Patterns first
|
30 |
$oLocator->setIsRegEx( false );
|
31 |
foreach ( $oAction->patterns_simple as $sSig ) {
|
32 |
+
$oItem = $this->scanForSig( $oLocator, $sSig );
|
33 |
+
if ( $oItem instanceof ResultItem ) {
|
34 |
+
return $oItem;
|
|
|
|
|
35 |
}
|
36 |
}
|
37 |
}
|
39 |
{ // RegEx Patterns
|
40 |
$oLocator->setIsRegEx( true );
|
41 |
foreach ( $oAction->patterns_regex as $sSig ) {
|
42 |
+
$oItem = $this->scanForSig( $oLocator, $sSig );
|
43 |
+
if ( $oItem instanceof ResultItem ) {
|
44 |
+
return $oItem;
|
|
|
|
|
45 |
}
|
46 |
}
|
47 |
}
|
49 |
catch ( \Exception $oE ) {
|
50 |
}
|
51 |
|
52 |
+
return $oItem;
|
53 |
}
|
54 |
|
55 |
/**
|
56 |
+
* @param Utilities\File\LocateStrInFile $oLocator
|
57 |
+
* @param string $sSig
|
58 |
+
* @return ResultItem|null
|
59 |
*/
|
60 |
+
private function scanForSig( $oLocator, $sSig ) {
|
61 |
+
$oResultItem = null;
|
62 |
+
|
63 |
+
$aLines = $oLocator->setNeedle( $sSig )
|
64 |
+
->run();
|
65 |
+
$sFullPath = $oLocator->getPath();
|
66 |
+
if ( !empty( $aLines ) && !$this->canExcludeFile( $sFullPath ) ) {
|
67 |
+
|
68 |
+
$oMaybeItem = $this->getResultItemFromLines( $aLines, $sFullPath, $sSig );
|
69 |
+
$oAction = $this->getScanActionVO();
|
70 |
+
// Zero indicates not using intelligence network
|
71 |
+
if ( $oAction->confidence_threshold > 0 ) {
|
72 |
+
$oMaybeItem->fp_confidence = $this->getFalsePositiveConfidence( $sFullPath );
|
73 |
+
}
|
74 |
+
|
75 |
+
if ( $oAction->confidence_threshold == 0 || $oMaybeItem->fp_confidence < $oAction->confidence_threshold ) {
|
76 |
+
$oResultItem = $oMaybeItem;
|
77 |
+
}
|
78 |
}
|
79 |
+
return $oResultItem;
|
80 |
}
|
81 |
|
82 |
/**
|
91 |
$oResultItem->path_fragment = str_replace( wp_normalize_path( ABSPATH ), '', $oResultItem->path_full );
|
92 |
$oResultItem->is_mal = true;
|
93 |
$oResultItem->mal_sig = base64_encode( $sSig );
|
94 |
+
$oResultItem->fp_confidence = 0;
|
95 |
+
$oResultItem->file_lines = array_map(
|
96 |
+
function ( $nLineNumber ) {
|
97 |
+
return $nLineNumber + 1;
|
98 |
+
},
|
99 |
+
$aLines // because lines start at ZERO
|
100 |
+
);
|
101 |
return $oResultItem;
|
102 |
}
|
103 |
|
106 |
* @return bool
|
107 |
*/
|
108 |
private function canExcludeFile( $sFullPath ) {
|
109 |
+
$bExclude = $this->isValidCoreFile( $sFullPath );
|
110 |
+
|
111 |
+
if ( !$bExclude ) {
|
112 |
+
if ( $this->isPluginFileValid( $sFullPath ) ) {
|
113 |
+
$bExclude = true;
|
114 |
+
( new Shield\Scans\Mal\Utilities\FalsePositiveReporter() )
|
115 |
+
->setMod( $this->getMod() )
|
116 |
+
->report( $sFullPath, 'sha1', true );
|
117 |
+
}
|
118 |
+
}
|
119 |
+
return $bExclude;
|
120 |
}
|
121 |
|
122 |
/**
|
123 |
+
* @param string $sFilePath
|
124 |
+
* @return int
|
125 |
*/
|
126 |
+
private function getFalsePositiveConfidence( $sFilePath ) {
|
127 |
+
/** @var ScanActionVO $oScanVO */
|
128 |
+
$oScanVO = $this->getScanActionVO();
|
129 |
+
|
130 |
+
$nConfidence = 0;
|
131 |
+
$sFilePart = basename( $sFilePath );
|
132 |
+
if ( isset( $oScanVO->whitelist[ $sFilePart ] ) ) {
|
133 |
try {
|
134 |
$oHasher = new Utilities\File\Compare\CompareHash();
|
135 |
+
foreach ( $oScanVO->whitelist[ $sFilePart ] as $sWlHash => $nHashConfidence ) {
|
136 |
+
if ( $oHasher->isEqualFileSha1( $sFilePath, $sWlHash ) ) {
|
137 |
+
$nConfidence = $nHashConfidence;
|
138 |
break;
|
139 |
}
|
140 |
}
|
142 |
catch ( \InvalidArgumentException $oE ) {
|
143 |
}
|
144 |
}
|
145 |
+
return (int)$nConfidence;
|
146 |
}
|
147 |
|
148 |
/**
|
@@ -14,15 +14,42 @@ class Repair extends Shield\Scans\Base\BaseRepair {
|
|
14 |
|
15 |
use Shield\Modules\ModConsumer;
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
/**
|
18 |
* @param ResultItem $oItem
|
19 |
* @return bool
|
20 |
*/
|
21 |
public function repairItem( $oItem ) {
|
22 |
-
/** @var \
|
23 |
-
$
|
24 |
$bSuccess = false;
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
try {
|
27 |
$bCanAutoRepair = $this->canAutoRepairFromSource( $oItem );
|
28 |
}
|
@@ -31,22 +58,26 @@ class Repair extends Shield\Scans\Base\BaseRepair {
|
|
31 |
}
|
32 |
|
33 |
if ( $bCanAutoRepair ) {
|
34 |
-
|
35 |
-
if ( $
|
36 |
-
&& Services\Services::CoreFileHashes()->isCoreFile( $oItem->path_fragment ) ) {
|
37 |
$bSuccess = $this->repairCoreItem( $oItem );
|
38 |
}
|
39 |
else {
|
40 |
$oPlugin = ( new WpOrg\Plugin\Files() )->findPluginFromFile( $oItem->path_full );
|
41 |
-
if ( $
|
42 |
-
|
43 |
-
|
|
|
|
|
44 |
}
|
45 |
-
else if ( $
|
46 |
$bSuccess = $this->repairSurgicalItem( $oItem );
|
47 |
}
|
48 |
}
|
49 |
}
|
|
|
|
|
|
|
50 |
|
51 |
return $bSuccess;
|
52 |
}
|
@@ -55,7 +86,7 @@ class Repair extends Shield\Scans\Base\BaseRepair {
|
|
55 |
* @param ResultItem $oItem
|
56 |
* @return bool
|
57 |
*/
|
58 |
-
|
59 |
return Services\Services::WpFs()->deleteFile( $oItem->path_full );
|
60 |
}
|
61 |
|
14 |
|
15 |
use Shield\Modules\ModConsumer;
|
16 |
|
17 |
+
/**
|
18 |
+
* @var bool
|
19 |
+
*/
|
20 |
+
private $bAllowDelete = false;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @return bool
|
24 |
+
*/
|
25 |
+
public function isAllowDelete() {
|
26 |
+
return (bool)$this->bAllowDelete;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @param bool $bAllowDelete
|
31 |
+
* @return $this
|
32 |
+
*/
|
33 |
+
public function setAllowDelete( $bAllowDelete ) {
|
34 |
+
$this->bAllowDelete = $bAllowDelete;
|
35 |
+
return $this;
|
36 |
+
}
|
37 |
+
|
38 |
/**
|
39 |
* @param ResultItem $oItem
|
40 |
* @return bool
|
41 |
*/
|
42 |
public function repairItem( $oItem ) {
|
43 |
+
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
44 |
+
$oOpts = $this->getOptions();
|
45 |
$bSuccess = false;
|
46 |
|
47 |
+
// 1) Report the file as being malware.
|
48 |
+
( new Shield\Scans\Mal\Utilities\FalsePositiveReporter() )
|
49 |
+
->setMod( $this->getMod() )
|
50 |
+
->report( $oItem->path_full, 'sha1', false );
|
51 |
+
|
52 |
+
// 2). Repair
|
53 |
try {
|
54 |
$bCanAutoRepair = $this->canAutoRepairFromSource( $oItem );
|
55 |
}
|
58 |
}
|
59 |
|
60 |
if ( $bCanAutoRepair ) {
|
61 |
+
|
62 |
+
if ( Services\Services::CoreFileHashes()->isCoreFile( $oItem->path_fragment ) ) {
|
|
|
63 |
$bSuccess = $this->repairCoreItem( $oItem );
|
64 |
}
|
65 |
else {
|
66 |
$oPlugin = ( new WpOrg\Plugin\Files() )->findPluginFromFile( $oItem->path_full );
|
67 |
+
if ( $oPlugin instanceof Services\Core\VOs\WpPluginVo && $oPlugin->isWpOrg() ) {
|
68 |
+
|
69 |
+
if ( $this->isManualAction() || $oOpts->isMalAutoRepairPlugins() ) {
|
70 |
+
$bSuccess = $this->repairItemInPlugin( $oItem );
|
71 |
+
}
|
72 |
}
|
73 |
+
else if ( $oOpts->isMalAutoRepairSurgical() ) {
|
74 |
$bSuccess = $this->repairSurgicalItem( $oItem );
|
75 |
}
|
76 |
}
|
77 |
}
|
78 |
+
else if ( $this->isAllowDelete() ) {
|
79 |
+
$bSuccess = $this->repairItemByDelete( $oItem );
|
80 |
+
}
|
81 |
|
82 |
return $bSuccess;
|
83 |
}
|
86 |
* @param ResultItem $oItem
|
87 |
* @return bool
|
88 |
*/
|
89 |
+
private function repairItemByDelete( $oItem ) {
|
90 |
return Services\Services::WpFs()->deleteFile( $oItem->path_full );
|
91 |
}
|
92 |
|
@@ -11,12 +11,11 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
|
|
11 |
* @property bool $is_mal
|
12 |
* @property string $mal_sig
|
13 |
* @property int[] $file_lines
|
|
|
14 |
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal
|
15 |
*/
|
16 |
class ResultItem extends Base\BaseResultItem {
|
17 |
|
18 |
-
const SCAN_RESULT_TYPE = 'mal';
|
19 |
-
|
20 |
/**
|
21 |
* @return string
|
22 |
*/
|
11 |
* @property bool $is_mal
|
12 |
* @property string $mal_sig
|
13 |
* @property int[] $file_lines
|
14 |
+
* @property int $fp_confidence - false positive confidence level
|
15 |
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal
|
16 |
*/
|
17 |
class ResultItem extends Base\BaseResultItem {
|
18 |
|
|
|
|
|
19 |
/**
|
20 |
* @return string
|
21 |
*/
|
@@ -3,13 +3,50 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
|
|
6 |
|
|
|
|
|
|
|
|
|
7 |
class Scan extends Shield\Scans\Base\Files\BaseFileMapScan {
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
/**
|
10 |
* @return ScanFromFileMap
|
11 |
*/
|
12 |
protected function getScanFromFileMap() {
|
13 |
-
return ( new ScanFromFileMap() )
|
|
|
|
|
14 |
}
|
15 |
}
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard;
|
7 |
|
8 |
+
/**
|
9 |
+
* Class Scan
|
10 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal
|
11 |
+
*/
|
12 |
class Scan extends Shield\Scans\Base\Files\BaseFileMapScan {
|
13 |
|
14 |
+
/**
|
15 |
+
* @throws \Exception
|
16 |
+
*/
|
17 |
+
protected function preScan() {
|
18 |
+
parent::preScan();
|
19 |
+
|
20 |
+
/** @var HackGuard\Options $oOpts */
|
21 |
+
$oOpts = $this->getOptions();
|
22 |
+
|
23 |
+
/** @var ScanActionVO $oScanVO */
|
24 |
+
$oScanVO = $this->getScanActionVO();
|
25 |
+
|
26 |
+
if ( $oOpts->isMalUseNetworkIntelligence() ) {
|
27 |
+
$oScanVO->whitelist = ( new Utilities\Whitelist() )
|
28 |
+
->setMod( $this->getMod() )
|
29 |
+
->retrieve();
|
30 |
+
}
|
31 |
+
else {
|
32 |
+
$oScanVO->whitelist = [];
|
33 |
+
}
|
34 |
+
|
35 |
+
$oScanVO->confidence_threshold = $oOpts->getMalConfidenceBoundary();
|
36 |
+
|
37 |
+
$aPatterns = ( new Utilities\Patterns() )
|
38 |
+
->setMod( $this->getMod() )
|
39 |
+
->retrieve();
|
40 |
+
$oScanVO->patterns_simple = $aPatterns[ 'simple' ];
|
41 |
+
$oScanVO->patterns_regex = $aPatterns[ 'regex' ];
|
42 |
+
}
|
43 |
+
|
44 |
/**
|
45 |
* @return ScanFromFileMap
|
46 |
*/
|
47 |
protected function getScanFromFileMap() {
|
48 |
+
return ( new ScanFromFileMap() )
|
49 |
+
->setMod( $this->getMod() )
|
50 |
+
->setScanActionVO( $this->getScanActionVO() );
|
51 |
}
|
52 |
}
|
@@ -7,11 +7,13 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base\BaseScanActionVO;
|
|
7 |
/**
|
8 |
* Class ScanActionVO
|
9 |
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal
|
10 |
-
* @property string[]
|
11 |
-
* @property string[]
|
12 |
-
* @property string[]
|
13 |
-
* @property string[]
|
14 |
-
* @property string[]
|
|
|
|
|
15 |
*/
|
16 |
class ScanActionVO extends BaseScanActionVO {
|
17 |
|
7 |
/**
|
8 |
* Class ScanActionVO
|
9 |
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal
|
10 |
+
* @property string[] $file_exts
|
11 |
+
* @property string[] $scan_root_dirs
|
12 |
+
* @property string[] $paths_whitelisted
|
13 |
+
* @property string[] $patterns_regex
|
14 |
+
* @property string[] $patterns_simple
|
15 |
+
* @property string[][] $whitelist
|
16 |
+
* @property int $confidence_threshold
|
17 |
*/
|
18 |
class ScanActionVO extends BaseScanActionVO {
|
19 |
|
@@ -14,6 +14,8 @@ class ScanFromFileMap extends BaseScanFromFileMap {
|
|
14 |
* @return FileScanner
|
15 |
*/
|
16 |
protected function getFileScanner() {
|
17 |
-
return ( new FileScanner() )
|
|
|
|
|
18 |
}
|
19 |
}
|
14 |
* @return FileScanner
|
15 |
*/
|
16 |
protected function getFileScanner() {
|
17 |
+
return ( new FileScanner() )
|
18 |
+
->setMod( $this->getMod() )
|
19 |
+
->setScanActionVO( $this->getScanActionVO() );
|
20 |
}
|
21 |
}
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal\Utilities;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules;
|
6 |
+
use FernleafSystems\Wordpress\Services\Services;
|
7 |
+
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class FalsePositiveReporter
|
11 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal\Utilities
|
12 |
+
*/
|
13 |
+
class FalsePositiveReporter {
|
14 |
+
|
15 |
+
use Modules\ModConsumer;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* To prevent duplicate reports, we cache what we report and only send the report
|
19 |
+
* if we've never sent this before.
|
20 |
+
* @param string $sFullPath
|
21 |
+
* @param string $sAlgo
|
22 |
+
* @param bool $bIsFalsePositive
|
23 |
+
* @return mixed
|
24 |
+
*/
|
25 |
+
public function report( $sFullPath, $sAlgo = 'sha1', $bIsFalsePositive = true ) {
|
26 |
+
$bReported = false;
|
27 |
+
|
28 |
+
/** @var Modules\HackGuard\Options $oOpts */
|
29 |
+
$oOpts = $this->getOptions();
|
30 |
+
if ( !$oOpts->isMalUseNetworkIntelligence() ) {
|
31 |
+
return $bReported;
|
32 |
+
}
|
33 |
+
|
34 |
+
$aReported = $oOpts->getOpt( 'mal_fp_reports', [] );
|
35 |
+
$sSig = md5( serialize(
|
36 |
+
[
|
37 |
+
basename( $sFullPath ),
|
38 |
+
sha1( Services::DataManipulation()->convertLineEndingsDosToLinux( $sFullPath ) ),
|
39 |
+
$bIsFalsePositive
|
40 |
+
]
|
41 |
+
) );
|
42 |
+
|
43 |
+
if ( !is_array( $aReported ) ) {
|
44 |
+
$aReported = [];
|
45 |
+
}
|
46 |
+
if ( !isset( $aReported[ $sSig ] ) ) {
|
47 |
+
// Haven't reported yet, so we proceed.
|
48 |
+
$bReported = ( new Malware\Whitelist\ReportFalsePositive() )
|
49 |
+
->report( $sFullPath, $sAlgo, $bIsFalsePositive );
|
50 |
+
}
|
51 |
+
|
52 |
+
$aReported[ $sSig ] = Services::Request()->ts();
|
53 |
+
$oOpts->setOpt( 'mal_fp_reports', array_filter(
|
54 |
+
$aReported,
|
55 |
+
function ( $nTS ) {
|
56 |
+
return $nTS > Services::Request()->carbon()->subMonth()->timestamp;
|
57 |
+
}
|
58 |
+
) );
|
59 |
+
|
60 |
+
$this->getMod()->saveModOptions(); // important to save immediately due to async nature
|
61 |
+
|
62 |
+
return $bReported;
|
63 |
+
}
|
64 |
+
}
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal\Utilities;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules;
|
6 |
+
use FernleafSystems\Wordpress\Services\Utilities\File\Cache;
|
7 |
+
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class Patterns
|
11 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal\Utilities
|
12 |
+
*/
|
13 |
+
class Patterns {
|
14 |
+
|
15 |
+
use Modules\ModConsumer;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @return string[][]
|
19 |
+
*/
|
20 |
+
public function retrieve() {
|
21 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
22 |
+
$oMod = $this->getMod();
|
23 |
+
$oCacheDef = new Cache\CacheDefVO();
|
24 |
+
$oCacheDef->dir = $oMod->getTempDir();
|
25 |
+
if ( empty( $oCacheDef->dir ) ) { // Fallback to original method
|
26 |
+
/** @var Modules\HackGuard\Options $oOpts */
|
27 |
+
$oOpts = $this->getOptions();
|
28 |
+
$oCacheDef->data = [
|
29 |
+
'simple' => $oOpts->getMalSignaturesSimple(),
|
30 |
+
'regex' => $oOpts->getMalSignaturesRegex(),
|
31 |
+
];
|
32 |
+
}
|
33 |
+
else {
|
34 |
+
$oCacheDef->file_fragment = 'cache_patterns.txt';
|
35 |
+
$oCacheDef->expiration = HOUR_IN_SECONDS;
|
36 |
+
( new Cache\LoadFromCache() )
|
37 |
+
->setCacheDef( $oCacheDef )
|
38 |
+
->load();
|
39 |
+
if ( empty( $oCacheDef->data ) ) {
|
40 |
+
$aNewPatt = ( new Malware\Patterns\Retrieve() )->getPatterns();
|
41 |
+
if ( is_array( $aNewPatt ) && !empty( $aNewPatt[ 'simple' ] ) && !empty( $aNewPatt[ 'regex' ] ) ) {
|
42 |
+
$oCacheDef->data = $aNewPatt;
|
43 |
+
( new Cache\StoreToCache() )
|
44 |
+
->setCacheDef( $oCacheDef )
|
45 |
+
->store();
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
return $oCacheDef->data;
|
51 |
+
}
|
52 |
+
}
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal\Utilities;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
|
6 |
+
use FernleafSystems\Wordpress\Services\Utilities\File\Cache;
|
7 |
+
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class Whitelist
|
11 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Mal\Utilities
|
12 |
+
*/
|
13 |
+
class Whitelist {
|
14 |
+
|
15 |
+
use ModConsumer;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @return string[][]
|
19 |
+
*/
|
20 |
+
public function retrieve() {
|
21 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
22 |
+
$oMod = $this->getMod();
|
23 |
+
$oCacheDef = new Cache\CacheDefVO();
|
24 |
+
$oCacheDef->dir = $oMod->getTempDir();
|
25 |
+
if ( empty( $oCacheDef->dir ) ) {
|
26 |
+
$oCacheDef->data = [];
|
27 |
+
}
|
28 |
+
else {
|
29 |
+
$oCacheDef->file_fragment = 'cache_whitelist_confidence.txt';
|
30 |
+
$oCacheDef->expiration = HOUR_IN_SECONDS; // Prevent lots of unnecessary HTTP requests out.
|
31 |
+
( new Cache\LoadFromCache() )
|
32 |
+
->setCacheDef( $oCacheDef )
|
33 |
+
->load();
|
34 |
+
if ( empty( $oCacheDef->data ) ) {
|
35 |
+
$oCacheDef->data = ( new Malware\Whitelist\Retrieve() )->getWhitelist();
|
36 |
+
( new Cache\StoreToCache() )
|
37 |
+
->setCacheDef( $oCacheDef )
|
38 |
+
->store();
|
39 |
+
}
|
40 |
+
}
|
41 |
+
|
42 |
+
return $oCacheDef->data;
|
43 |
+
}
|
44 |
+
}
|
@@ -38,7 +38,7 @@ class BuildScanAction extends Shield\Scans\Base\BaseBuildScanAction {
|
|
38 |
/** @var ScanActionVO $oAction */
|
39 |
$oAction = $this->getScanActionVO();
|
40 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
41 |
-
$oOpts = $this->
|
42 |
$oAction->scan_depth = $oOpts->getPtgScanDepth();
|
43 |
$oAction->file_exts = $oOpts->getPtgFileExtensions();
|
44 |
$oAction->hashes_base_path = $oOpts->getPtgSnapsBaseDir();
|
38 |
/** @var ScanActionVO $oAction */
|
39 |
$oAction = $this->getScanActionVO();
|
40 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
41 |
+
$oOpts = $this->getOptions();
|
42 |
$oAction->scan_depth = $oOpts->getPtgScanDepth();
|
43 |
$oAction->file_exts = $oOpts->getPtgFileExtensions();
|
44 |
$oAction->hashes_base_path = $oOpts->getPtgSnapsBaseDir();
|
@@ -17,8 +17,6 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
|
|
17 |
*/
|
18 |
class ResultItem extends Base\BaseResultItem {
|
19 |
|
20 |
-
const SCAN_RESULT_TYPE = 'ptg';
|
21 |
-
|
22 |
/**
|
23 |
* @return string
|
24 |
*/
|
17 |
*/
|
18 |
class ResultItem extends Base\BaseResultItem {
|
19 |
|
|
|
|
|
20 |
/**
|
21 |
* @return string
|
22 |
*/
|
@@ -22,7 +22,7 @@ class BuildScanAction extends Shield\Scans\Base\BaseBuildScanAction {
|
|
22 |
/** @var ScanActionVO $oAction */
|
23 |
$oAction = $this->getScanActionVO();
|
24 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
25 |
-
$oOpts = $this->
|
26 |
|
27 |
$oAction->exclusions = $oOpts->getUfcFileExclusions();
|
28 |
$oAction->scan_dirs = $oOpts->getUfcScanDirectories();
|
22 |
/** @var ScanActionVO $oAction */
|
23 |
$oAction = $this->getScanActionVO();
|
24 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
25 |
+
$oOpts = $this->getOptions();
|
26 |
|
27 |
$oAction->exclusions = $oOpts->getUfcFileExclusions();
|
28 |
$oAction->scan_dirs = $oOpts->getUfcScanDirectories();
|
@@ -12,8 +12,6 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
|
|
12 |
*/
|
13 |
class ResultItem extends Base\BaseResultItem {
|
14 |
|
15 |
-
const SCAN_RESULT_TYPE = 'ufc';
|
16 |
-
|
17 |
/**
|
18 |
* @return string
|
19 |
*/
|
12 |
*/
|
13 |
class ResultItem extends Base\BaseResultItem {
|
14 |
|
|
|
|
|
15 |
/**
|
16 |
* @return string
|
17 |
*/
|
@@ -10,6 +10,8 @@ class Scan extends Shield\Scans\Base\Files\BaseFileMapScan {
|
|
10 |
* @return ScanFromFileMap
|
11 |
*/
|
12 |
protected function getScanFromFileMap() {
|
13 |
-
return ( new ScanFromFileMap() )
|
|
|
|
|
14 |
}
|
15 |
}
|
10 |
* @return ScanFromFileMap
|
11 |
*/
|
12 |
protected function getScanFromFileMap() {
|
13 |
+
return ( new ScanFromFileMap() )
|
14 |
+
->setMod( $this->getMod() )
|
15 |
+
->setScanActionVO( $this->getScanActionVO() );
|
16 |
}
|
17 |
}
|
@@ -6,7 +6,7 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base\Files\BaseScanFromFileMap
|
|
6 |
|
7 |
/**
|
8 |
* Class ScanFromFileMap
|
9 |
-
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\
|
10 |
*/
|
11 |
class ScanFromFileMap extends BaseScanFromFileMap {
|
12 |
|
@@ -14,6 +14,8 @@ class ScanFromFileMap extends BaseScanFromFileMap {
|
|
14 |
* @return FileScanner
|
15 |
*/
|
16 |
protected function getFileScanner() {
|
17 |
-
return ( new FileScanner() )
|
|
|
|
|
18 |
}
|
19 |
}
|
6 |
|
7 |
/**
|
8 |
* Class ScanFromFileMap
|
9 |
+
* @package FernleafSystems\Wordpress\Plugin\Shield\Scans\Ufc
|
10 |
*/
|
11 |
class ScanFromFileMap extends BaseScanFromFileMap {
|
12 |
|
14 |
* @return FileScanner
|
15 |
*/
|
16 |
protected function getFileScanner() {
|
17 |
+
return ( new FileScanner() )
|
18 |
+
->setMod( $this->getMod() )
|
19 |
+
->setScanActionVO( $this->getScanActionVO() );
|
20 |
}
|
21 |
}
|
@@ -18,7 +18,7 @@ class BuildScanAction extends Shield\Scans\Base\BaseBuildScanAction {
|
|
18 |
/** @var ScanActionVO $oAction */
|
19 |
$oAction = $this->getScanActionVO();
|
20 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
21 |
-
$oOpts = $this->
|
22 |
|
23 |
$oAction->exclusions_missing_regex = $oOpts->getWcfMissingExclusions();
|
24 |
$oAction->exclusions_files_regex = $oOpts->getWcfFileExclusions();
|
18 |
/** @var ScanActionVO $oAction */
|
19 |
$oAction = $this->getScanActionVO();
|
20 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
21 |
+
$oOpts = $this->getOptions();
|
22 |
|
23 |
$oAction->exclusions_missing_regex = $oOpts->getWcfMissingExclusions();
|
24 |
$oAction->exclusions_files_regex = $oOpts->getWcfFileExclusions();
|
@@ -15,8 +15,6 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Base;
|
|
15 |
*/
|
16 |
class ResultItem extends Base\BaseResultItem {
|
17 |
|
18 |
-
const SCAN_RESULT_TYPE = 'wcf';
|
19 |
-
|
20 |
/**
|
21 |
* @return string
|
22 |
*/
|
15 |
*/
|
16 |
class ResultItem extends Base\BaseResultItem {
|
17 |
|
|
|
|
|
18 |
/**
|
19 |
* @return string
|
20 |
*/
|
@@ -10,6 +10,8 @@ class Scan extends Shield\Scans\Base\Files\BaseFileMapScan {
|
|
10 |
* @return ScanFromFileMap
|
11 |
*/
|
12 |
protected function getScanFromFileMap() {
|
13 |
-
return ( new ScanFromFileMap() )
|
|
|
|
|
14 |
}
|
15 |
}
|
10 |
* @return ScanFromFileMap
|
11 |
*/
|
12 |
protected function getScanFromFileMap() {
|
13 |
+
return ( new ScanFromFileMap() )
|
14 |
+
->setMod( $this->getMod() )
|
15 |
+
->setScanActionVO( $this->getScanActionVO() );
|
16 |
}
|
17 |
}
|
@@ -14,6 +14,8 @@ class ScanFromFileMap extends BaseScanFromFileMap {
|
|
14 |
* @return FileScanner
|
15 |
*/
|
16 |
protected function getFileScanner() {
|
17 |
-
return ( new FileScanner() )
|
|
|
|
|
18 |
}
|
19 |
}
|
14 |
* @return FileScanner
|
15 |
*/
|
16 |
protected function getFileScanner() {
|
17 |
+
return ( new FileScanner() )
|
18 |
+
->setMod( $this->getMod() )
|
19 |
+
->setScanActionVO( $this->getScanActionVO() );
|
20 |
}
|
21 |
}
|
@@ -15,8 +15,6 @@ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Wpv\WpVulnDb\WpVulnVO;
|
|
15 |
*/
|
16 |
class ResultItem extends Base\BaseResultItem {
|
17 |
|
18 |
-
const SCAN_RESULT_TYPE = 'wpv';
|
19 |
-
|
20 |
/**
|
21 |
* @return string
|
22 |
*/
|
15 |
*/
|
16 |
class ResultItem extends Base\BaseResultItem {
|
17 |
|
|
|
|
|
18 |
/**
|
19 |
* @return string
|
20 |
*/
|
@@ -3,7 +3,7 @@
|
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Tables\Build;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
-
use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard
|
7 |
|
8 |
/**
|
9 |
* Class ScanMal
|
@@ -19,8 +19,11 @@ class ScanMal extends ScanBase {
|
|
19 |
|
20 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
21 |
$oMod = $this->getMod();
|
|
|
|
|
|
|
22 |
$oRepairer = ( new Shield\Scans\Mal\Repair() )->setMod( $oMod );
|
23 |
-
$oConverter = ( new Scan\Results\ConvertBetweenTypes() )
|
24 |
->setScanActionVO( $this->getScanActionVO() );
|
25 |
|
26 |
foreach ( $this->getEntriesRaw() as $nKey => $oEntry ) {
|
@@ -28,19 +31,29 @@ class ScanMal extends ScanBase {
|
|
28 |
/** @var Shield\Scans\Mal\ResultItem $oIt */
|
29 |
$oIt = $oConverter->convertVoToResultItem( $oEntry );
|
30 |
$aE = $oEntry->getRawDataAsArray();
|
|
|
31 |
$aE[ 'path' ] = $oIt->path_fragment;
|
32 |
-
$aE[ 'status' ] = __( 'Potential Malware Detected', 'wp-simple-firewall' );
|
33 |
$aE[ 'ignored' ] = $this->formatIsIgnored( $oEntry );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
try {
|
35 |
$bCanRepair = $oRepairer->canAutoRepairFromSource( $oIt );
|
36 |
}
|
37 |
catch ( \Exception $oE ) {
|
38 |
-
$
|
39 |
-
__( 'Repair Unavailable', 'wp-simple-firewall' ),
|
40 |
-
$oE->getMessage()
|
41 |
-
);
|
42 |
$bCanRepair = false;
|
43 |
}
|
|
|
|
|
44 |
$aE[ 'can_repair' ] = $bCanRepair;
|
45 |
$aE[ 'created_at' ] = $this->formatTimestampField( $oEntry->created_at );
|
46 |
$aE[ 'href_download' ] = $oMod->createFileDownloadLink( $oEntry );
|
@@ -50,6 +63,29 @@ class ScanMal extends ScanBase {
|
|
50 |
return $aEntries;
|
51 |
}
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
/**
|
54 |
* @return Shield\Tables\Render\ScanMal
|
55 |
*/
|
3 |
namespace FernleafSystems\Wordpress\Plugin\Shield\Tables\Build;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
6 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard;
|
7 |
|
8 |
/**
|
9 |
* Class ScanMal
|
19 |
|
20 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
21 |
$oMod = $this->getMod();
|
22 |
+
/** @var HackGuard\Options $oOpts */
|
23 |
+
$oOpts = $this->getOptions();
|
24 |
+
|
25 |
$oRepairer = ( new Shield\Scans\Mal\Repair() )->setMod( $oMod );
|
26 |
+
$oConverter = ( new HackGuard\Scan\Results\ConvertBetweenTypes() )
|
27 |
->setScanActionVO( $this->getScanActionVO() );
|
28 |
|
29 |
foreach ( $this->getEntriesRaw() as $nKey => $oEntry ) {
|
31 |
/** @var Shield\Scans\Mal\ResultItem $oIt */
|
32 |
$oIt = $oConverter->convertVoToResultItem( $oEntry );
|
33 |
$aE = $oEntry->getRawDataAsArray();
|
34 |
+
|
35 |
$aE[ 'path' ] = $oIt->path_fragment;
|
|
|
36 |
$aE[ 'ignored' ] = $this->formatIsIgnored( $oEntry );
|
37 |
+
|
38 |
+
$aStatus = [
|
39 |
+
__( 'Potential Malware Detected', 'wp-simple-firewall' ),
|
40 |
+
sprintf( '%s: %s', __( 'Pattern Detected' ), $this->getPatternForDisplay( base64_decode( $oIt->mal_sig ) ) ),
|
41 |
+
sprintf( '%s: %s', __( 'Affected line numbers' ), implode( ', ', $oIt->file_lines ) ),
|
42 |
+
];
|
43 |
+
|
44 |
+
if ( $oOpts->isMalUseNetworkIntelligence() ) {
|
45 |
+
$aStatus[] = sprintf( '%s: %s/100', __( 'False Positive Confidence' ), sprintf( '<strong>%s</strong>', (int)$oIt->fp_confidence ) );
|
46 |
+
}
|
47 |
+
|
48 |
try {
|
49 |
$bCanRepair = $oRepairer->canAutoRepairFromSource( $oIt );
|
50 |
}
|
51 |
catch ( \Exception $oE ) {
|
52 |
+
$aStatus[] = sprintf( '%s: %s', __( 'Repair Unavailable', 'wp-simple-firewall' ), $oE->getMessage() );
|
|
|
|
|
|
|
53 |
$bCanRepair = false;
|
54 |
}
|
55 |
+
|
56 |
+
$aE[ 'status' ] = implode( '<br/>', $aStatus );
|
57 |
$aE[ 'can_repair' ] = $bCanRepair;
|
58 |
$aE[ 'created_at' ] = $this->formatTimestampField( $oEntry->created_at );
|
59 |
$aE[ 'href_download' ] = $oMod->createFileDownloadLink( $oEntry );
|
63 |
return $aEntries;
|
64 |
}
|
65 |
|
66 |
+
/**
|
67 |
+
* @param string $sText
|
68 |
+
* @return string
|
69 |
+
*/
|
70 |
+
private function getPatternForDisplay( $sText ) {
|
71 |
+
if ( false && function_exists( 'imagecreate' ) ) {
|
72 |
+
$oImg = imagecreate( 400, 20 );
|
73 |
+
imagecolorallocate( $oImg, 255, 255, 255 );
|
74 |
+
$oTxtColour = imagecolorallocate( $oImg, 25, 25, 25 );
|
75 |
+
imagestring( $oImg, 5, 1, 1, $sText, $oTxtColour );
|
76 |
+
ob_start();
|
77 |
+
imagepng( $oImg );
|
78 |
+
$sImg = ob_get_clean();
|
79 |
+
imagedestroy( $oImg );
|
80 |
+
$sPattern = sprintf( '<img src="data:image/png;base64,%s" alt="Pattern" />', base64_encode( $sImg ) );
|
81 |
+
}
|
82 |
+
else {
|
83 |
+
$sPattern = sprintf( '<code>%s</code>', esc_html( $sText ) );
|
84 |
+
}
|
85 |
+
|
86 |
+
return $sPattern;
|
87 |
+
}
|
88 |
+
|
89 |
/**
|
90 |
* @return Shield\Tables\Render\ScanMal
|
91 |
*/
|
@@ -32,6 +32,8 @@ class ScanMal extends ScanBase {
|
|
32 |
protected function get_bulk_actions() {
|
33 |
return [
|
34 |
'ignore' => __( 'Ignore', 'wp-simple-firewall' ),
|
|
|
|
|
35 |
];
|
36 |
}
|
37 |
|
32 |
protected function get_bulk_actions() {
|
33 |
return [
|
34 |
'ignore' => __( 'Ignore', 'wp-simple-firewall' ),
|
35 |
+
'delete' => __( 'Delete', 'wp-simple-firewall' ),
|
36 |
+
'repair' => __( 'Repair', 'wp-simple-firewall' ),
|
37 |
];
|
38 |
}
|
39 |
|
@@ -31,14 +31,12 @@ class TestRequest {
|
|
31 |
* @throws \Exception
|
32 |
*/
|
33 |
private function runTest() {
|
34 |
-
|
35 |
/** @var \ICWP_WPSF_FeatureHandler_BaseWpsf $oMod */
|
36 |
$oMod = $this->getMod();
|
37 |
|
38 |
$sCaptchaResponse = Services::Request()->post( 'g-recaptcha-response' );
|
39 |
|
40 |
if ( empty( $sCaptchaResponse ) ) {
|
41 |
-
$this->getCon()->fireEvent( 'recaptcha_fail' );
|
42 |
throw new \Exception( __( 'Whoops.', 'wp-simple-firewall' ).' '.__( 'Google reCAPTCHA was not submitted.', 'wp-simple-firewall' ), 1 );
|
43 |
}
|
44 |
else {
|
@@ -51,11 +49,9 @@ class TestRequest {
|
|
51 |
Services::WpGeneral()->isAjax() ?
|
52 |
__( 'Maybe refresh the page and try again.', 'wp-simple-firewall' ) : ''
|
53 |
];
|
54 |
-
$this->getCon()->fireEvent( 'recaptcha_fail' );
|
55 |
throw new \Exception( implode( ' ', $aMsg ), 2 );
|
56 |
}
|
57 |
}
|
58 |
-
$this->getCon()->fireEvent( 'recaptcha_success' );
|
59 |
return true;
|
60 |
}
|
61 |
}
|
31 |
* @throws \Exception
|
32 |
*/
|
33 |
private function runTest() {
|
|
|
34 |
/** @var \ICWP_WPSF_FeatureHandler_BaseWpsf $oMod */
|
35 |
$oMod = $this->getMod();
|
36 |
|
37 |
$sCaptchaResponse = Services::Request()->post( 'g-recaptcha-response' );
|
38 |
|
39 |
if ( empty( $sCaptchaResponse ) ) {
|
|
|
40 |
throw new \Exception( __( 'Whoops.', 'wp-simple-firewall' ).' '.__( 'Google reCAPTCHA was not submitted.', 'wp-simple-firewall' ), 1 );
|
41 |
}
|
42 |
else {
|
49 |
Services::WpGeneral()->isAjax() ?
|
50 |
__( 'Maybe refresh the page and try again.', 'wp-simple-firewall' ) : ''
|
51 |
];
|
|
|
52 |
throw new \Exception( implode( ' ', $aMsg ), 2 );
|
53 |
}
|
54 |
}
|
|
|
55 |
return true;
|
56 |
}
|
57 |
}
|
@@ -220,6 +220,8 @@ return array(
|
|
220 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Lockdown\\Strings' => $baseDir . '/src/Modules/Lockdown/Strings.php',
|
221 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AdminNotices' => $baseDir . '/src/Modules/LoginGuard/AdminNotices.php',
|
222 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AjaxHandler' => $baseDir . '/src/Modules/LoginGuard/AjaxHandler.php',
|
|
|
|
|
223 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Options' => $baseDir . '/src/Modules/LoginGuard/Options.php',
|
224 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Strings' => $baseDir . '/src/Modules/LoginGuard/Strings.php',
|
225 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => $baseDir . '/src/Modules/ModConsumer.php',
|
@@ -289,6 +291,9 @@ return array(
|
|
289 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Scan' => $baseDir . '/src/Scans/Mal/Scan.php',
|
290 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanActionVO' => $baseDir . '/src/Scans/Mal/ScanActionVO.php',
|
291 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanFromFileMap' => $baseDir . '/src/Scans/Mal/ScanFromFileMap.php',
|
|
|
|
|
|
|
292 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\BuildScanAction' => $baseDir . '/src/Scans/Ptg/BuildScanAction.php',
|
293 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\DiffHashes' => $baseDir . '/src/Scans/Ptg/DiffHashes.php',
|
294 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\ItemScanner' => $baseDir . '/src/Scans/Ptg/ItemScanner.php',
|
@@ -408,6 +413,10 @@ return array(
|
|
408 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Email' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Email.php',
|
409 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncrypt' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncrypt.php',
|
410 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncryptVo' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncryptVo.php',
|
|
|
|
|
|
|
|
|
411 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Compare\\CompareHash' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/Compare/CompareHash.php',
|
412 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\ExtractLineFromFile' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/ExtractLineFromFile.php',
|
413 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\LocateStrInFile' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/LocateStrInFile.php',
|
@@ -427,9 +436,13 @@ return array(
|
|
427 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\Plugin' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/Plugin.php',
|
428 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\RequestVO' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/RequestVO.php',
|
429 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\WordPress' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/WordPress.php',
|
430 |
-
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Base' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Base.php',
|
431 |
-
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\
|
432 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\WhitelistRetrieve' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/WhitelistRetrieve.php',
|
|
|
|
|
|
|
|
|
433 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Base' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Base.php',
|
434 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\BasePluginTheme' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/BasePluginTheme.php',
|
435 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Plugin' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Plugin.php',
|
220 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Lockdown\\Strings' => $baseDir . '/src/Modules/Lockdown/Strings.php',
|
221 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AdminNotices' => $baseDir . '/src/Modules/LoginGuard/AdminNotices.php',
|
222 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AjaxHandler' => $baseDir . '/src/Modules/LoginGuard/AjaxHandler.php',
|
223 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Lib\\CooldownFlagFile' => $baseDir . '/src/Modules/LoginGuard/Lib/CooldownFlagFile.php',
|
224 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Lib\\CooldownRedirect' => $baseDir . '/src/Modules/LoginGuard/Lib/CooldownRedirect.php',
|
225 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Options' => $baseDir . '/src/Modules/LoginGuard/Options.php',
|
226 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Strings' => $baseDir . '/src/Modules/LoginGuard/Strings.php',
|
227 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => $baseDir . '/src/Modules/ModConsumer.php',
|
291 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Scan' => $baseDir . '/src/Scans/Mal/Scan.php',
|
292 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanActionVO' => $baseDir . '/src/Scans/Mal/ScanActionVO.php',
|
293 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanFromFileMap' => $baseDir . '/src/Scans/Mal/ScanFromFileMap.php',
|
294 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Utilities\\FalsePositiveReporter' => $baseDir . '/src/Scans/Mal/Utilities/FalsePositiveReporter.php',
|
295 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Utilities\\Patterns' => $baseDir . '/src/Scans/Mal/Utilities/Patterns.php',
|
296 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Utilities\\Whitelist' => $baseDir . '/src/Scans/Mal/Utilities/Whitelist.php',
|
297 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\BuildScanAction' => $baseDir . '/src/Scans/Ptg/BuildScanAction.php',
|
298 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\DiffHashes' => $baseDir . '/src/Scans/Ptg/DiffHashes.php',
|
299 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\ItemScanner' => $baseDir . '/src/Scans/Ptg/ItemScanner.php',
|
413 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Email' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Email.php',
|
414 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncrypt' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncrypt.php',
|
415 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncryptVo' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncryptVo.php',
|
416 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\Base' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/Base.php',
|
417 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\CacheDefVO' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/CacheDefVO.php',
|
418 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\LoadFromCache' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/LoadFromCache.php',
|
419 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\StoreToCache' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/StoreToCache.php',
|
420 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Compare\\CompareHash' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/Compare/CompareHash.php',
|
421 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\ExtractLineFromFile' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/ExtractLineFromFile.php',
|
422 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\LocateStrInFile' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/File/LocateStrInFile.php',
|
436 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\Plugin' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/Plugin.php',
|
437 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\RequestVO' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/RequestVO.php',
|
438 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\WordPress' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/WordPress.php',
|
439 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Patterns\\Base' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Patterns/Base.php',
|
440 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Patterns\\Retrieve' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Patterns/Retrieve.php',
|
441 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\WhitelistRetrieve' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/WhitelistRetrieve.php',
|
442 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\Base' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/Base.php',
|
443 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\ReportFalsePositive' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/ReportFalsePositive.php',
|
444 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\RequestVO' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/RequestVO.php',
|
445 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\Retrieve' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/Retrieve.php',
|
446 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Base' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Base.php',
|
447 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\BasePluginTheme' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/BasePluginTheme.php',
|
448 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Plugin' => $vendorDir . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Plugin.php',
|
@@ -369,6 +369,8 @@ class ComposerStaticInitfcf2fe1888f1f5fc092770cdc8ef3cf4
|
|
369 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Lockdown\\Strings' => __DIR__ . '/../..' . '/src/Modules/Lockdown/Strings.php',
|
370 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AdminNotices' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/AdminNotices.php',
|
371 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AjaxHandler' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/AjaxHandler.php',
|
|
|
|
|
372 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Options' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/Options.php',
|
373 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Strings' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/Strings.php',
|
374 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => __DIR__ . '/../..' . '/src/Modules/ModConsumer.php',
|
@@ -438,6 +440,9 @@ class ComposerStaticInitfcf2fe1888f1f5fc092770cdc8ef3cf4
|
|
438 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Scan' => __DIR__ . '/../..' . '/src/Scans/Mal/Scan.php',
|
439 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanActionVO' => __DIR__ . '/../..' . '/src/Scans/Mal/ScanActionVO.php',
|
440 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanFromFileMap' => __DIR__ . '/../..' . '/src/Scans/Mal/ScanFromFileMap.php',
|
|
|
|
|
|
|
441 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\BuildScanAction' => __DIR__ . '/../..' . '/src/Scans/Ptg/BuildScanAction.php',
|
442 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\DiffHashes' => __DIR__ . '/../..' . '/src/Scans/Ptg/DiffHashes.php',
|
443 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\ItemScanner' => __DIR__ . '/../..' . '/src/Scans/Ptg/ItemScanner.php',
|
@@ -557,6 +562,10 @@ class ComposerStaticInitfcf2fe1888f1f5fc092770cdc8ef3cf4
|
|
557 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Email' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Email.php',
|
558 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncrypt' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncrypt.php',
|
559 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncryptVo' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncryptVo.php',
|
|
|
|
|
|
|
|
|
560 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Compare\\CompareHash' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/Compare/CompareHash.php',
|
561 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\ExtractLineFromFile' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/ExtractLineFromFile.php',
|
562 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\LocateStrInFile' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/LocateStrInFile.php',
|
@@ -576,9 +585,13 @@ class ComposerStaticInitfcf2fe1888f1f5fc092770cdc8ef3cf4
|
|
576 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\Plugin' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/Plugin.php',
|
577 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\RequestVO' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/RequestVO.php',
|
578 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\WordPress' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/WordPress.php',
|
579 |
-
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Base' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Base.php',
|
580 |
-
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\
|
581 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\WhitelistRetrieve' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/WhitelistRetrieve.php',
|
|
|
|
|
|
|
|
|
582 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Base' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Base.php',
|
583 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\BasePluginTheme' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/BasePluginTheme.php',
|
584 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Plugin' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Plugin.php',
|
369 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Lockdown\\Strings' => __DIR__ . '/../..' . '/src/Modules/Lockdown/Strings.php',
|
370 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AdminNotices' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/AdminNotices.php',
|
371 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\AjaxHandler' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/AjaxHandler.php',
|
372 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Lib\\CooldownFlagFile' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/Lib/CooldownFlagFile.php',
|
373 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Lib\\CooldownRedirect' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/Lib/CooldownRedirect.php',
|
374 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Options' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/Options.php',
|
375 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\LoginGuard\\Strings' => __DIR__ . '/../..' . '/src/Modules/LoginGuard/Strings.php',
|
376 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\ModConsumer' => __DIR__ . '/../..' . '/src/Modules/ModConsumer.php',
|
440 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Scan' => __DIR__ . '/../..' . '/src/Scans/Mal/Scan.php',
|
441 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanActionVO' => __DIR__ . '/../..' . '/src/Scans/Mal/ScanActionVO.php',
|
442 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\ScanFromFileMap' => __DIR__ . '/../..' . '/src/Scans/Mal/ScanFromFileMap.php',
|
443 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Utilities\\FalsePositiveReporter' => __DIR__ . '/../..' . '/src/Scans/Mal/Utilities/FalsePositiveReporter.php',
|
444 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Utilities\\Patterns' => __DIR__ . '/../..' . '/src/Scans/Mal/Utilities/Patterns.php',
|
445 |
+
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Mal\\Utilities\\Whitelist' => __DIR__ . '/../..' . '/src/Scans/Mal/Utilities/Whitelist.php',
|
446 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\BuildScanAction' => __DIR__ . '/../..' . '/src/Scans/Ptg/BuildScanAction.php',
|
447 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\DiffHashes' => __DIR__ . '/../..' . '/src/Scans/Ptg/DiffHashes.php',
|
448 |
'FernleafSystems\\Wordpress\\Plugin\\Shield\\Scans\\Ptg\\ItemScanner' => __DIR__ . '/../..' . '/src/Scans/Ptg/ItemScanner.php',
|
562 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Email' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Email.php',
|
563 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncrypt' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncrypt.php',
|
564 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Encrypt\\OpenSslEncryptVo' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Encrypt/OpenSslEncryptVo.php',
|
565 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\Base' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/Base.php',
|
566 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\CacheDefVO' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/CacheDefVO.php',
|
567 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\LoadFromCache' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/LoadFromCache.php',
|
568 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Cache\\StoreToCache' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/Cache/StoreToCache.php',
|
569 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\Compare\\CompareHash' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/Compare/CompareHash.php',
|
570 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\ExtractLineFromFile' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/ExtractLineFromFile.php',
|
571 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\File\\LocateStrInFile' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/File/LocateStrInFile.php',
|
585 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\Plugin' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/Plugin.php',
|
586 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\RequestVO' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/RequestVO.php',
|
587 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Hashes\\WordPress' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Hashes/WordPress.php',
|
588 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Patterns\\Base' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Patterns/Base.php',
|
589 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Patterns\\Retrieve' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Patterns/Retrieve.php',
|
590 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\WhitelistRetrieve' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/WhitelistRetrieve.php',
|
591 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\Base' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/Base.php',
|
592 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\ReportFalsePositive' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/ReportFalsePositive.php',
|
593 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\RequestVO' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/RequestVO.php',
|
594 |
+
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Malware\\Whitelist\\Retrieve' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Malware/Whitelist/Retrieve.php',
|
595 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Base' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Base.php',
|
596 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\BasePluginTheme' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/BasePluginTheme.php',
|
597 |
'FernleafSystems\\Wordpress\\Services\\Utilities\\Integrations\\WpHashes\\Vulnerabilities\\Plugin' => __DIR__ . '/..' . '/fernleafsystems/wordpress-services/src/Utilities/Integrations/WpHashes/Vulnerabilities/Plugin.php',
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\File\Cache;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Services\Services;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class Base
|
9 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\File\Cache
|
10 |
+
*/
|
11 |
+
class Base {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var CacheDefVO
|
15 |
+
*/
|
16 |
+
private $oDef;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @return CacheDefVO
|
20 |
+
*/
|
21 |
+
public function getCacheDef() {
|
22 |
+
return $this->oDef;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* This can be overwritten as-needed
|
27 |
+
* @return string
|
28 |
+
*/
|
29 |
+
public function getCacheFile() {
|
30 |
+
$oDef = $this->getCacheDef();
|
31 |
+
return path_join( $oDef->dir, $oDef->file_fragment );
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @param CacheDefVO $oDef
|
36 |
+
* @return $this
|
37 |
+
*/
|
38 |
+
public function setCacheDef( CacheDefVO $oDef ) {
|
39 |
+
$this->oDef = $oDef;
|
40 |
+
return $this;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @return bool
|
45 |
+
*/
|
46 |
+
protected function prepCacheDir() {
|
47 |
+
return Services::WpFs()->mkdir( dirname( $this->getCacheFile() ) );
|
48 |
+
}
|
49 |
+
}
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\File\Cache;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class CacheDefVO
|
7 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\File\Cache
|
8 |
+
* @property string $dir
|
9 |
+
* @property string $file_fragment
|
10 |
+
* @property string $expiration
|
11 |
+
* @property bool $touch_on_load
|
12 |
+
* @property array $data
|
13 |
+
*/
|
14 |
+
class CacheDefVO {
|
15 |
+
|
16 |
+
use \FernleafSystems\Utilities\Data\Adapter\StdClassAdapter;
|
17 |
+
}
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\File\Cache;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Services\Services;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class LoadFromCache
|
9 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\File\Cache
|
10 |
+
*/
|
11 |
+
class LoadFromCache extends Base {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @return bool
|
15 |
+
*/
|
16 |
+
public function load() {
|
17 |
+
$bSuccess = false;
|
18 |
+
$oFS = Services::WpFs();
|
19 |
+
|
20 |
+
$oDef = $this->getCacheDef();
|
21 |
+
$sFile = $this->getCacheFile();
|
22 |
+
$nExpireBoundary = Services::Request()->carbon()->subSeconds( $oDef->expiration );
|
23 |
+
if ( $oFS->exists( $sFile ) && $oFS->getModifiedTime( $sFile ) > $nExpireBoundary ) {
|
24 |
+
$sJson = $oFS->getFileContent( $sFile, true );
|
25 |
+
if ( !empty( $sJson ) ) {
|
26 |
+
if ( $oDef->touch_on_load ) {
|
27 |
+
$oFS->touch( $sFile );
|
28 |
+
}
|
29 |
+
$oDef->data = json_decode( $sJson, true );
|
30 |
+
$bSuccess = is_array( $oDef->data );
|
31 |
+
}
|
32 |
+
}
|
33 |
+
return $bSuccess;
|
34 |
+
}
|
35 |
+
}
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\File\Cache;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Services\Services;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class StoreToCache
|
9 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\File\Cache
|
10 |
+
*/
|
11 |
+
class StoreToCache extends Base {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @return bool
|
15 |
+
*/
|
16 |
+
public function store() {
|
17 |
+
$bSuccess = false;
|
18 |
+
$oDef = $this->getCacheDef();
|
19 |
+
if ( is_array( $oDef->data ) && $this->prepCacheDir() ) {
|
20 |
+
$bSuccess = Services::WpFs()->putFileContent(
|
21 |
+
$this->getCacheFile(),
|
22 |
+
json_encode( $oDef->data ),
|
23 |
+
true
|
24 |
+
);
|
25 |
+
}
|
26 |
+
return $bSuccess;
|
27 |
+
}
|
28 |
+
}
|
@@ -13,6 +13,7 @@ abstract class ApiBase {
|
|
13 |
|
14 |
const API_URL = 'https://wphashes.com/api/apto-wphashes/v1/';
|
15 |
const API_ENDPOINT = '';
|
|
|
16 |
const RESPONSE_DATA_KEY = '';
|
17 |
|
18 |
/**
|
@@ -55,9 +56,52 @@ abstract class ApiBase {
|
|
55 |
* @return array|mixed|null
|
56 |
*/
|
57 |
public function query() {
|
58 |
-
$
|
59 |
-
$sResponse =
|
60 |
$aData = empty( $sResponse ) ? null : json_decode( $sResponse, true );
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
}
|
63 |
}
|
13 |
|
14 |
const API_URL = 'https://wphashes.com/api/apto-wphashes/v1/';
|
15 |
const API_ENDPOINT = '';
|
16 |
+
const REQUEST_TYPE = 'GET';
|
17 |
const RESPONSE_DATA_KEY = '';
|
18 |
|
19 |
/**
|
56 |
* @return array|mixed|null
|
57 |
*/
|
58 |
public function query() {
|
59 |
+
$this->preQuery();
|
60 |
+
$sResponse = $this->fireRequest();
|
61 |
$aData = empty( $sResponse ) ? null : json_decode( $sResponse, true );
|
62 |
+
if ( is_array( $aData ) && strlen( static::RESPONSE_DATA_KEY ) > 0 ) {
|
63 |
+
$aData = $aData[ static::RESPONSE_DATA_KEY ];
|
64 |
+
}
|
65 |
+
return $aData;
|
66 |
+
}
|
67 |
+
|
68 |
+
protected function preQuery() {
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
protected function fireRequest() {
|
75 |
+
switch ( static::REQUEST_TYPE ) {
|
76 |
+
case 'POST':
|
77 |
+
$sResponse = $this->fireRequest_POST();
|
78 |
+
break;
|
79 |
+
case 'GET':
|
80 |
+
default:
|
81 |
+
$sResponse = $this->fireRequest_GET();
|
82 |
+
break;
|
83 |
+
}
|
84 |
+
return $sResponse;
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @return string
|
89 |
+
*/
|
90 |
+
protected function fireRequest_GET() {
|
91 |
+
$sUrl = add_query_arg( array_map( 'strtolower', $this->getQueryData() ), $this->getApiUrl() );
|
92 |
+
return ( new HttpRequest() )->getContent( $sUrl );
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* @return string|null
|
97 |
+
*/
|
98 |
+
protected function fireRequest_POST() {
|
99 |
+
$oHttp = new HttpRequest();
|
100 |
+
$oHttp
|
101 |
+
->post(
|
102 |
+
add_query_arg( array_map( 'strtolower', $this->getQueryData() ), $this->getApiUrl() ),
|
103 |
+
[ 'body' => $this->getRequestVO()->getRawDataAsArray() ]
|
104 |
+
);
|
105 |
+
return $oHttp->isSuccess() ? $oHttp->lastResponse->body : null;
|
106 |
}
|
107 |
}
|
@@ -6,13 +6,26 @@ use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes;
|
|
6 |
|
7 |
abstract class Base extends WpHashes\ApiBase {
|
8 |
|
|
|
9 |
const DEFAULT_HASH_ALGO = 'md5';
|
|
|
|
|
10 |
|
11 |
/**
|
12 |
-
* @return
|
13 |
*/
|
14 |
-
protected function
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
}
|
17 |
|
18 |
/**
|
@@ -23,14 +36,15 @@ abstract class Base extends WpHashes\ApiBase {
|
|
23 |
}
|
24 |
|
25 |
/**
|
26 |
-
* @return string[]|null
|
27 |
*/
|
28 |
-
|
29 |
$oReq = $this->getRequestVO();
|
30 |
if ( empty( $oReq->hash ) ) {
|
31 |
-
$
|
|
|
|
|
|
|
32 |
}
|
33 |
-
return parent::query();
|
34 |
}
|
35 |
|
36 |
/**
|
@@ -41,4 +55,13 @@ abstract class Base extends WpHashes\ApiBase {
|
|
41 |
$this->getRequestVO()->hash = $sHashAlgo;
|
42 |
return $this;
|
43 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
6 |
|
7 |
abstract class Base extends WpHashes\ApiBase {
|
8 |
|
9 |
+
const API_ENDPOINT = 'hashes/';
|
10 |
const DEFAULT_HASH_ALGO = 'md5';
|
11 |
+
const RESPONSE_DATA_KEY = 'hashes';
|
12 |
+
const TYPE = '';
|
13 |
|
14 |
/**
|
15 |
+
* @return string
|
16 |
*/
|
17 |
+
protected function getApiUrl() {
|
18 |
+
$aData = array_filter( array_merge(
|
19 |
+
[
|
20 |
+
'type' => false,
|
21 |
+
'slug' => false,
|
22 |
+
'version' => false,
|
23 |
+
'locale' => false,
|
24 |
+
'hash' => false,
|
25 |
+
],
|
26 |
+
$this->getRequestVO()->getRawDataAsArray()
|
27 |
+
) );
|
28 |
+
return sprintf( '%s%s', parent::getApiUrl(), implode( '/', $aData ) );
|
29 |
}
|
30 |
|
31 |
/**
|
36 |
}
|
37 |
|
38 |
/**
|
|
|
39 |
*/
|
40 |
+
protected function preQuery() {
|
41 |
$oReq = $this->getRequestVO();
|
42 |
if ( empty( $oReq->hash ) ) {
|
43 |
+
$this->setHashAlgo( static::DEFAULT_HASH_ALGO );
|
44 |
+
}
|
45 |
+
if ( empty( $oReq->type ) ) {
|
46 |
+
$this->setType( static::TYPE );
|
47 |
}
|
|
|
48 |
}
|
49 |
|
50 |
/**
|
55 |
$this->getRequestVO()->hash = $sHashAlgo;
|
56 |
return $this;
|
57 |
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @param string $sType
|
61 |
+
* @return $this
|
62 |
+
*/
|
63 |
+
public function setType( $sType ) {
|
64 |
+
$this->getRequestVO()->type = $sType;
|
65 |
+
return $this;
|
66 |
+
}
|
67 |
}
|
@@ -10,7 +10,7 @@ use FernleafSystems\Wordpress\Services;
|
|
10 |
*/
|
11 |
class ClassicPress extends Base {
|
12 |
|
13 |
-
const
|
14 |
|
15 |
/**
|
16 |
* @param string $sVersion
|
10 |
*/
|
11 |
class ClassicPress extends Base {
|
12 |
|
13 |
+
const TYPE = 'classicpress';
|
14 |
|
15 |
/**
|
16 |
* @param string $sVersion
|
@@ -10,7 +10,7 @@ use FernleafSystems\Wordpress\Services;
|
|
10 |
*/
|
11 |
class Plugin extends Base {
|
12 |
|
13 |
-
const
|
14 |
|
15 |
/**
|
16 |
* @param string $sSlug
|
10 |
*/
|
11 |
class Plugin extends Base {
|
12 |
|
13 |
+
const TYPE = 'plugin';
|
14 |
|
15 |
/**
|
16 |
* @param string $sSlug
|
@@ -7,6 +7,7 @@ use FernleafSystems\Wordpress\Services\Utilities\Integrations;
|
|
7 |
/**
|
8 |
* Class RequestVO
|
9 |
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Hashes
|
|
|
10 |
* @property string $version
|
11 |
* @property string $hash
|
12 |
* @property string $slug
|
7 |
/**
|
8 |
* Class RequestVO
|
9 |
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Hashes
|
10 |
+
* @property string $type
|
11 |
* @property string $version
|
12 |
* @property string $hash
|
13 |
* @property string $slug
|
@@ -10,7 +10,7 @@ use FernleafSystems\Wordpress\Services\Services;
|
|
10 |
*/
|
11 |
class WordPress extends Base {
|
12 |
|
13 |
-
const
|
14 |
|
15 |
/**
|
16 |
* @param string $sVersion
|
10 |
*/
|
11 |
class WordPress extends Base {
|
12 |
|
13 |
+
const TYPE = 'wordpress';
|
14 |
|
15 |
/**
|
16 |
* @param string $sVersion
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Patterns;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes;
|
6 |
+
|
7 |
+
abstract class Base extends WpHashes\ApiBase {
|
8 |
+
|
9 |
+
const API_ENDPOINT = 'malware/patterns';
|
10 |
+
}
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Patterns;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class Retrieve
|
7 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Patterns
|
8 |
+
*/
|
9 |
+
class Retrieve extends Base {
|
10 |
+
|
11 |
+
const RESPONSE_DATA_KEY = 'patterns';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @return string[][]|null
|
15 |
+
*/
|
16 |
+
public function getPatterns() {
|
17 |
+
return $this->query();
|
18 |
+
}
|
19 |
+
}
|
@@ -1,20 +1,12 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes;
|
6 |
|
7 |
abstract class Base extends WpHashes\ApiBase {
|
8 |
|
9 |
-
const API_ENDPOINT = 'malware/';
|
10 |
-
const RESPONSE_DATA_KEY = 'hashes';
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @return array[]|null
|
14 |
-
*/
|
15 |
-
public function query() {
|
16 |
-
return parent::query();
|
17 |
-
}
|
18 |
|
19 |
/**
|
20 |
* @return RequestVO
|
1 |
<?php
|
2 |
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes;
|
6 |
|
7 |
abstract class Base extends WpHashes\ApiBase {
|
8 |
|
9 |
+
const API_ENDPOINT = 'malware/whitelist';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
/**
|
12 |
* @return RequestVO
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist;
|
4 |
+
|
5 |
+
use FernleafSystems\Wordpress\Services\Services;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class SubmitFalsePositive
|
9 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist
|
10 |
+
*/
|
11 |
+
class ReportFalsePositive extends Base {
|
12 |
+
|
13 |
+
const REQUEST_TYPE = 'POST';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @param string $sFile
|
17 |
+
* @param string $aAlgo
|
18 |
+
* @param bool $bIsFalsePositive
|
19 |
+
* @return bool
|
20 |
+
*/
|
21 |
+
public function report( $sFile, $aAlgo = 'sha1', $bIsFalsePositive = true ) {
|
22 |
+
/** @var RequestVO $oReq */
|
23 |
+
$oReq = $this->getRequestVO();
|
24 |
+
$oReq->file = basename( $sFile );
|
25 |
+
$oReq->hashes = [
|
26 |
+
sha1( Services::DataManipulation()->convertLineEndingsDosToLinux( $sFile ) )
|
27 |
+
];
|
28 |
+
$oReq->algo = 'sha1';
|
29 |
+
$oReq->is_fp = $bIsFalsePositive;
|
30 |
+
|
31 |
+
$aResult = $this->query();
|
32 |
+
return !empty( $aResult ) && $aResult[ 'error' ] !== false;
|
33 |
+
}
|
34 |
+
}
|
@@ -1,12 +1,16 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Services\Utilities\Integrations;
|
6 |
|
7 |
/**
|
8 |
* Class RequestVO
|
9 |
-
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware
|
|
|
|
|
|
|
|
|
10 |
*/
|
11 |
class RequestVO extends Integrations\RequestVO {
|
12 |
|
1 |
<?php
|
2 |
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist;
|
4 |
|
5 |
use FernleafSystems\Wordpress\Services\Utilities\Integrations;
|
6 |
|
7 |
/**
|
8 |
* Class RequestVO
|
9 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist
|
10 |
+
* @property string $file
|
11 |
+
* @property string[] $hashes
|
12 |
+
* @property string $algo
|
13 |
+
* @property bool $is_fp
|
14 |
*/
|
15 |
class RequestVO extends Integrations\RequestVO {
|
16 |
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class Retrieve
|
7 |
+
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware\Whitelist
|
8 |
+
*/
|
9 |
+
class Retrieve extends Base {
|
10 |
+
|
11 |
+
const RESPONSE_DATA_KEY = 'hashes';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @return array[][]
|
15 |
+
*/
|
16 |
+
public function getWhitelist() {
|
17 |
+
return $this->query();
|
18 |
+
}
|
19 |
+
}
|
@@ -5,20 +5,15 @@ namespace FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Mal
|
|
5 |
/**
|
6 |
* Class WhitelistRetrieve
|
7 |
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware
|
|
|
8 |
*/
|
9 |
-
class WhitelistRetrieve extends
|
10 |
|
11 |
/**
|
12 |
* @return array[]|null
|
|
|
13 |
*/
|
14 |
public function getFiles() {
|
15 |
return $this->query();
|
16 |
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @return string
|
20 |
-
*/
|
21 |
-
protected function getApiUrl() {
|
22 |
-
return sprintf( '%s%s', parent::getApiUrl(), 'whitelist/files' );
|
23 |
-
}
|
24 |
}
|
5 |
/**
|
6 |
* Class WhitelistRetrieve
|
7 |
* @package FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Malware
|
8 |
+
* @deprecated 0.1.13
|
9 |
*/
|
10 |
+
class WhitelistRetrieve extends Whitelist\Retrieve {
|
11 |
|
12 |
/**
|
13 |
* @return array[]|null
|
14 |
+
* @deprecated
|
15 |
*/
|
16 |
public function getFiles() {
|
17 |
return $this->query();
|
18 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
}
|
@@ -13,7 +13,7 @@ class ICWP_WPSF_Processor_AdminAccessRestriction extends Modules\BaseShield\Shie
|
|
13 |
|
14 |
public function run() {
|
15 |
/** @var SecurityAdmin\Options $oOpts */
|
16 |
-
$oOpts = $this->
|
17 |
|
18 |
add_filter( $this->getCon()->prefix( 'is_plugin_admin' ), [ $this, 'adjustUserAdminPermissions' ] );
|
19 |
|
@@ -336,7 +336,7 @@ class ICWP_WPSF_Processor_AdminAccessRestriction extends Modules\BaseShield\Shie
|
|
336 |
*/
|
337 |
public function disablePluginManipulation( $aAllCaps, $cap, $aArgs ) {
|
338 |
/** @var SecurityAdmin\Options $oOpts */
|
339 |
-
$oOpts = $this->
|
340 |
$oReq = Services::Request();
|
341 |
|
342 |
/** @var string $sRequestedCapability */
|
@@ -376,7 +376,7 @@ class ICWP_WPSF_Processor_AdminAccessRestriction extends Modules\BaseShield\Shie
|
|
376 |
}
|
377 |
|
378 |
/** @var SecurityAdmin\Options $oOpts */
|
379 |
-
$oOpts = $this->
|
380 |
|
381 |
/** @var string $sRequestedCapability */
|
382 |
$sRequestedCapability = $aArgs[ 0 ];
|
@@ -410,7 +410,7 @@ class ICWP_WPSF_Processor_AdminAccessRestriction extends Modules\BaseShield\Shie
|
|
410 |
}
|
411 |
|
412 |
/** @var SecurityAdmin\Options $oOpts */
|
413 |
-
$oOpts = $this->
|
414 |
|
415 |
/** @var string $sRequestedCapability */
|
416 |
$sRequestedCapability = $aArgs[ 0 ];
|
13 |
|
14 |
public function run() {
|
15 |
/** @var SecurityAdmin\Options $oOpts */
|
16 |
+
$oOpts = $this->getOptions();
|
17 |
|
18 |
add_filter( $this->getCon()->prefix( 'is_plugin_admin' ), [ $this, 'adjustUserAdminPermissions' ] );
|
19 |
|
336 |
*/
|
337 |
public function disablePluginManipulation( $aAllCaps, $cap, $aArgs ) {
|
338 |
/** @var SecurityAdmin\Options $oOpts */
|
339 |
+
$oOpts = $this->getOptions();
|
340 |
$oReq = Services::Request();
|
341 |
|
342 |
/** @var string $sRequestedCapability */
|
376 |
}
|
377 |
|
378 |
/** @var SecurityAdmin\Options $oOpts */
|
379 |
+
$oOpts = $this->getOptions();
|
380 |
|
381 |
/** @var string $sRequestedCapability */
|
382 |
$sRequestedCapability = $aArgs[ 0 ];
|
410 |
}
|
411 |
|
412 |
/** @var SecurityAdmin\Options $oOpts */
|
413 |
+
$oOpts = $this->getOptions();
|
414 |
|
415 |
/** @var string $sRequestedCapability */
|
416 |
$sRequestedCapability = $aArgs[ 0 ];
|
@@ -20,7 +20,7 @@ class ICWP_WPSF_Processor_AdminAccess_Whitelabel extends Modules\BaseShield\Shie
|
|
20 |
parent::onWpInit();
|
21 |
|
22 |
/** @var Modules\SecurityAdmin\Options $oOpts */
|
23 |
-
$oOpts = $this->
|
24 |
if ( $oOpts->isWlHideUpdates() && $this->isNeedToHideUpdates() && !$this->getCon()->isPluginAdmin() ) {
|
25 |
$this->hideUpdates();
|
26 |
}
|
20 |
parent::onWpInit();
|
21 |
|
22 |
/** @var Modules\SecurityAdmin\Options $oOpts */
|
23 |
+
$oOpts = $this->getOptions();
|
24 |
if ( $oOpts->isWlHideUpdates() && $this->isNeedToHideUpdates() && !$this->getCon()->isPluginAdmin() ) {
|
25 |
$this->hideUpdates();
|
26 |
}
|
@@ -8,7 +8,7 @@ class ICWP_WPSF_Processor_AuditTrail extends Modules\BaseShield\ShieldProcessor
|
|
8 |
|
9 |
public function run() {
|
10 |
/** @var AuditTrail\Options $oOpts */
|
11 |
-
$oOpts = $this->
|
12 |
if ( $oOpts->isEnabledAuditing() ) {
|
13 |
$this->getSubProAuditor()->execute();
|
14 |
}
|
8 |
|
9 |
public function run() {
|
10 |
/** @var AuditTrail\Options $oOpts */
|
11 |
+
$oOpts = $this->getOptions();
|
12 |
if ( $oOpts->isEnabledAuditing() ) {
|
13 |
$this->getSubProAuditor()->execute();
|
14 |
}
|
@@ -60,10 +60,9 @@ class ICWP_WPSF_Processor_AuditTrail_Auditor extends ShieldProcessor {
|
|
60 |
public function onModuleShutdown() {
|
61 |
parent::onModuleShutdown();
|
62 |
if ( $this->bAudit && !$this->getCon()->isPluginDeleting() ) {
|
63 |
-
/** @var \
|
64 |
$oMod = $this->getMod();
|
65 |
-
|
66 |
-
$oDbh = $oMod->getDbHandler();
|
67 |
$oDbh->commitAudits( $oMod->getRegisteredAuditLogs( true ) );
|
68 |
}
|
69 |
}
|
@@ -78,15 +77,13 @@ class ICWP_WPSF_Processor_AuditTrail_Auditor extends ShieldProcessor {
|
|
78 |
* @return AuditTrail\EntryVO[]
|
79 |
*/
|
80 |
public function getAuditEntriesForContext( $sContext = 'all', $sOrderBy = 'created_at', $sOrder = 'DESC', $nPage = 1, $nLimit = 50 ) {
|
81 |
-
/** @var \ICWP_WPSF_FeatureHandler_AuditTrail $
|
82 |
-
$
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
->setLimit( $nLimit )
|
89 |
-
->setPage( $nPage );
|
90 |
return $oSelect->query();
|
91 |
}
|
92 |
}
|
60 |
public function onModuleShutdown() {
|
61 |
parent::onModuleShutdown();
|
62 |
if ( $this->bAudit && !$this->getCon()->isPluginDeleting() ) {
|
63 |
+
/** @var \ICWP_WPSF_FeatureHandler_AuditTrail $oMod */
|
64 |
$oMod = $this->getMod();
|
65 |
+
$oDbh = $oMod->getDbHandler_AuditTrail();
|
|
|
66 |
$oDbh->commitAudits( $oMod->getRegisteredAuditLogs( true ) );
|
67 |
}
|
68 |
}
|
77 |
* @return AuditTrail\EntryVO[]
|
78 |
*/
|
79 |
public function getAuditEntriesForContext( $sContext = 'all', $sOrderBy = 'created_at', $sOrder = 'DESC', $nPage = 1, $nLimit = 50 ) {
|
80 |
+
/** @var \ICWP_WPSF_FeatureHandler_AuditTrail $oMod */
|
81 |
+
$oMod = $this->getMod();
|
82 |
+
$oSelect = $oMod->getDbHandler_AuditTrail()
|
83 |
+
->getQuerySelector()
|
84 |
+
->setOrderBy( $sOrderBy, $sOrder )
|
85 |
+
->setLimit( $nLimit )
|
86 |
+
->setPage( $nPage );
|
|
|
|
|
87 |
return $oSelect->query();
|
88 |
}
|
89 |
}
|
@@ -18,7 +18,7 @@ class ICWP_WPSF_Processor_AuditTrail_ChangeTracking extends ShieldProcessor {
|
|
18 |
|
19 |
public function runHourlyCron() {
|
20 |
/** @var Options $oOpts */
|
21 |
-
$oOpts = $this->
|
22 |
if ( $oOpts->isCTSnapshotDue() && $this->isReadyToRun() ) {
|
23 |
$oOpts->updateCTLastSnapshotAt();
|
24 |
$this->runSnapshot();
|
18 |
|
19 |
public function runHourlyCron() {
|
20 |
/** @var Options $oOpts */
|
21 |
+
$oOpts = $this->getOptions();
|
22 |
if ( $oOpts->isCTSnapshotDue() && $this->isReadyToRun() ) {
|
23 |
$oOpts->updateCTLastSnapshotAt();
|
24 |
$this->runSnapshot();
|
@@ -47,7 +47,7 @@ class ICWP_WPSF_Processor_CommentsFilter extends Modules\BaseShield\ShieldProces
|
|
47 |
public function runHourlyCron() {
|
48 |
/** @var ICWP_WPSF_FeatureHandler_CommentsFilter $oMod */
|
49 |
$oMod = $this->getMod();
|
50 |
-
if ( $oMod->isEnabledGaspCheck() ) {
|
51 |
delete_expired_transients(); // cleanup unused comment tokens
|
52 |
}
|
53 |
}
|
47 |
public function runHourlyCron() {
|
48 |
/** @var ICWP_WPSF_FeatureHandler_CommentsFilter $oMod */
|
49 |
$oMod = $this->getMod();
|
50 |
+
if ( $oMod->isEnabledGaspCheck() && function_exists( 'delete_expired_transients' ) ) {
|
51 |
delete_expired_transients(); // cleanup unused comment tokens
|
52 |
}
|
53 |
}
|
@@ -1,7 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
4 |
-
use FernleafSystems\Wordpress\Services\Services;
|
5 |
use FernleafSystems\Wordpress\Plugin\Shield\Databases\Events;
|
6 |
|
7 |
class ICWP_WPSF_Processor_Events extends Shield\Modules\BaseShield\ShieldProcessor {
|
@@ -23,10 +22,11 @@ class ICWP_WPSF_Processor_Events extends Shield\Modules\BaseShield\ShieldProcess
|
|
23 |
* @return string[]
|
24 |
*/
|
25 |
public function statsWidget( $aContent ) {
|
26 |
-
/** @var Events\Handler $oDbhEvents */
|
27 |
-
$oDbhEvents = $this->getCon()->getModule_Events()->getDbHandler();
|
28 |
/** @var Events\Select $oSelEvents */
|
29 |
-
$oSelEvents = $
|
|
|
|
|
|
|
30 |
|
31 |
$aKeyStats = [
|
32 |
'comments' => [
|
@@ -85,13 +85,13 @@ class ICWP_WPSF_Processor_Events extends Shield\Modules\BaseShield\ShieldProcess
|
|
85 |
* @return array
|
86 |
*/
|
87 |
public function tracking_DataCollect( $aData ) {
|
88 |
-
/** @var
|
89 |
-
$
|
90 |
-
/** @var Events\Select $oSelEvents */
|
91 |
-
$oSelEvents = $oDbhEvents->getQuerySelector();
|
92 |
|
93 |
$aData = parent::tracking_DataCollect( $aData );
|
94 |
-
$aData[ $
|
|
|
|
|
95 |
return $aData;
|
96 |
}
|
97 |
|
@@ -107,8 +107,7 @@ class ICWP_WPSF_Processor_Events extends Shield\Modules\BaseShield\ShieldProcess
|
|
107 |
private function commitEvents() {
|
108 |
/** @var \ICWP_WPSF_FeatureHandler_Events $oMod */
|
109 |
$oMod = $this->getMod();
|
110 |
-
|
111 |
-
|
112 |
-
$oDbh->commitEvents( $oMod->getRegisteredEvents( true ) );
|
113 |
}
|
114 |
}
|
1 |
<?php
|
2 |
|
3 |
use FernleafSystems\Wordpress\Plugin\Shield;
|
|
|
4 |
use FernleafSystems\Wordpress\Plugin\Shield\Databases\Events;
|
5 |
|
6 |
class ICWP_WPSF_Processor_Events extends Shield\Modules\BaseShield\ShieldProcessor {
|
22 |
* @return string[]
|
23 |
*/
|
24 |
public function statsWidget( $aContent ) {
|
|
|
|
|
25 |
/** @var Events\Select $oSelEvents */
|
26 |
+
$oSelEvents = $this->getCon()
|
27 |
+
->getModule_Events()
|
28 |
+
->getDbHandler_Events()
|
29 |
+
->getQuerySelector();
|
30 |
|
31 |
$aKeyStats = [
|
32 |
'comments' => [
|
85 |
* @return array
|
86 |
*/
|
87 |
public function tracking_DataCollect( $aData ) {
|
88 |
+
/** @var \ICWP_WPSF_FeatureHandler_Events $oMod */
|
89 |
+
$oMod = $this->getMod();
|
|
|
|
|
90 |
|
91 |
$aData = parent::tracking_DataCollect( $aData );
|
92 |
+
$aData[ $oMod->getSlug() ][ 'stats' ] = $oMod->getDbHandler_Events()
|
93 |
+
->getQuerySelector()
|
94 |
+
->sumAllEvents();
|
95 |
return $aData;
|
96 |
}
|
97 |
|
107 |
private function commitEvents() {
|
108 |
/** @var \ICWP_WPSF_FeatureHandler_Events $oMod */
|
109 |
$oMod = $this->getMod();
|
110 |
+
$oMod->getDbHandler_Events()
|
111 |
+
->commitEvents( $oMod->getRegisteredEvents( true ) );
|
|
|
112 |
}
|
113 |
}
|
@@ -268,7 +268,7 @@ class ICWP_WPSF_Processor_Firewall extends Modules\BaseShield\ShieldProcessor {
|
|
268 |
|
269 |
switch ( $oMod->getBlockResponse() ) {
|
270 |
case 'redirect_die':
|
271 |
-
Services::WpGeneral()->wpDie();
|
272 |
break;
|
273 |
case 'redirect_die_message':
|
274 |
Services::WpGeneral()->wpDie( $this->getFirewallDieMessageForDisplay() );
|
268 |
|
269 |
switch ( $oMod->getBlockResponse() ) {
|
270 |
case 'redirect_die':
|
271 |
+
Services::WpGeneral()->wpDie( 'Firewall Triggered' );
|
272 |
break;
|
273 |
case 'redirect_die_message':
|
274 |
Services::WpGeneral()->wpDie( $this->getFirewallDieMessageForDisplay() );
|
@@ -192,7 +192,7 @@ class ICWP_WPSF_Processor_HackProtect extends Modules\BaseShield\ShieldProcessor
|
|
192 |
];
|
193 |
|
194 |
/** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\Select $oSelector */
|
195 |
-
$oSelector = $oMod->
|
196 |
/** @var HackGuard\Strings $oStrings */
|
197 |
$oStrings = $oMod->getStrings();
|
198 |
$aScanNames = $oStrings->getScanNames();
|
@@ -225,7 +225,7 @@ class ICWP_WPSF_Processor_HackProtect extends Modules\BaseShield\ShieldProcessor
|
|
225 |
$oPro = $oMod->getProcessor();
|
226 |
$oProPtg = $oPro->getSubProScanner()->getSubProcessorPtg();
|
227 |
/** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\Select $oSelector */
|
228 |
-
$oSelector = $oMod->
|
229 |
|
230 |
/** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\EntryVO[] $aPtgResults */
|
231 |
$aPtgResults = $oSelector->filterByNotIgnored()
|
192 |
];
|
193 |
|
194 |
/** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\Select $oSelector */
|
195 |
+
$oSelector = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
196 |
/** @var HackGuard\Strings $oStrings */
|
197 |
$oStrings = $oMod->getStrings();
|
198 |
$aScanNames = $oStrings->getScanNames();
|
225 |
$oPro = $oMod->getProcessor();
|
226 |
$oProPtg = $oPro->getSubProScanner()->getSubProcessorPtg();
|
227 |
/** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\Select $oSelector */
|
228 |
+
$oSelector = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
229 |
|
230 |
/** @var \FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\EntryVO[] $aPtgResults */
|
231 |
$aPtgResults = $oSelector->filterByNotIgnored()
|
@@ -144,7 +144,7 @@ class ICWP_WPSF_Processor_HackProtect_Integrity extends ShieldProcessor {
|
|
144 |
*/
|
145 |
protected function getCronFrequency() {
|
146 |
/** @var HackGuard\Options $oOpts */
|
147 |
-
$oOpts = $this->
|
148 |
return $oOpts->getScanFrequency();
|
149 |
}
|
150 |
}
|
144 |
*/
|
145 |
protected function getCronFrequency() {
|
146 |
/** @var HackGuard\Options $oOpts */
|
147 |
+
$oOpts = $this->getOptions();
|
148 |
return $oOpts->getScanFrequency();
|
149 |
}
|
150 |
}
|
@@ -124,10 +124,10 @@ class ICWP_WPSF_Processor_HackProtect_Apc extends ICWP_WPSF_Processor_ScanBase {
|
|
124 |
* @return Shield\Scans\Apc\ResultsSet
|
125 |
*/
|
126 |
protected function getAllAbandoned() {
|
|
|
|
|
127 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
128 |
-
$oSel = $
|
129 |
-
->getDbHandler()
|
130 |
-
->getQuerySelector();
|
131 |
$aVos = $oSel->filterByScan( static::SCAN_SLUG )
|
132 |
->filterByNotIgnored()
|
133 |
->query();
|
124 |
* @return Shield\Scans\Apc\ResultsSet
|
125 |
*/
|
126 |
protected function getAllAbandoned() {
|
127 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
128 |
+
$oMod = $this->getMod();
|
129 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
130 |
+
$oSel = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
|
|
|
|
131 |
$aVos = $oSel->filterByScan( static::SCAN_SLUG )
|
132 |
->filterByNotIgnored()
|
133 |
->query();
|
@@ -88,8 +88,10 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
88 |
* @param Shield\Scans\Base\BaseResultsSet $oToDelete
|
89 |
*/
|
90 |
protected function deleteResultsSet( $oToDelete ) {
|
|
|
|
|
91 |
( new Scan\Results\Clean() )
|
92 |
-
->setDbHandler( $
|
93 |
->deleteResults( $oToDelete );
|
94 |
}
|
95 |
|
@@ -97,8 +99,10 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
97 |
* @return Shield\Scans\Base\BaseResultsSet
|
98 |
*/
|
99 |
protected function readScanResultsFromDb() {
|
|
|
|
|
100 |
/** @var Shield\Databases\Scanner\Select $oSelector */
|
101 |
-
$oSelector = $
|
102 |
return $this->convertVosToResults( $oSelector->forScan( static::SCAN_SLUG ) );
|
103 |
}
|
104 |
|
@@ -117,23 +121,22 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
117 |
* @return Shield\Databases\Scanner\EntryVO|null
|
118 |
*/
|
119 |
protected function getVoFromResultItem( $oItem ) {
|
|
|
|
|
120 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
121 |
-
$oSel = $
|
122 |
-
|
123 |
-
->getQuerySelector();
|
124 |
-
/** @var Shield\Databases\Scanner\EntryVO $oVo */
|
125 |
-
$oVo = $oSel->filterByHash( $oItem->hash )
|
126 |
->filterByScan( $this->getScanActionVO()->scan )
|
127 |
->first();
|
128 |
-
return $oVo;
|
129 |
}
|
130 |
|
131 |
/**
|
132 |
* @return $this
|
133 |
*/
|
134 |
public function resetIgnoreStatus() {
|
135 |
-
/** @var
|
136 |
-
$
|
|
|
137 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
138 |
$oSel = $oDbh->getQuerySelector();
|
139 |
|
@@ -149,8 +152,9 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
149 |
* @return $this
|
150 |
*/
|
151 |
public function resetNotifiedStatus() {
|
152 |
-
/** @var
|
153 |
-
$
|
|
|
154 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
155 |
$oSel = $oDbh->getQuerySelector();
|
156 |
|
@@ -169,11 +173,13 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
169 |
* @throws \Exception
|
170 |
*/
|
171 |
public function executeItemAction( $sItemId, $sAction ) {
|
|
|
|
|
|
|
172 |
$bSuccess = false;
|
173 |
if ( is_numeric( $sItemId ) ) {
|
174 |
/** @var Shield\Databases\Scanner\EntryVO $oEntry */
|
175 |
-
$oEntry = $
|
176 |
-
->getDbHandler()
|
177 |
->getQuerySelector()
|
178 |
->byId( $sItemId );
|
179 |
if ( empty( $oEntry ) ) {
|
@@ -274,16 +280,17 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
274 |
* @throws \Exception
|
275 |
*/
|
276 |
protected function itemIgnore( $oItem ) {
|
|
|
277 |
/** @var Shield\Databases\Scanner\EntryVO $oEntry */
|
278 |
$oEntry = $this->getVoFromResultItem( $oItem );
|
279 |
if ( empty( $oEntry ) ) {
|
280 |
throw new \Exception( 'Item could not be found to ignore.' );
|
281 |
}
|
282 |
|
|
|
|
|
283 |
/** @var Shield\Databases\Scanner\Update $oUp */
|
284 |
-
$oUp = $
|
285 |
-
->getDbHandler()
|
286 |
-
->getQueryUpdater();
|
287 |
|
288 |
if ( !$oUp->setIgnored( $oEntry ) ) {
|
289 |
throw new \Exception( 'Item could not be ignored at this time.' );
|
@@ -309,9 +316,7 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
309 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
310 |
$oMod = $this->getMod();
|
311 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
312 |
-
$oSel = $
|
313 |
-
->getDbHandler()
|
314 |
-
->getQuerySelector();
|
315 |
/** @var Shield\Databases\Scanner\EntryVO[] $aRes */
|
316 |
$aRes = $oSel->filterByScan( static::SCAN_SLUG )
|
317 |
->filterForCron( $oMod->getScanNotificationInterval() )
|
@@ -346,8 +351,10 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
346 |
* @param Shield\Databases\Scanner\EntryVO[] $aRes
|
347 |
*/
|
348 |
private function updateLastNotifiedAt( $aRes ) {
|
|
|
|
|
349 |
/** @var Shield\Databases\Scanner\Update $oUpd */
|
350 |
-
$oUpd = $
|
351 |
foreach ( $aRes as $oVo ) {
|
352 |
$oUpd->reset()
|
353 |
->setNotified( $oVo );
|
@@ -377,8 +384,10 @@ abstract class ICWP_WPSF_Processor_ScanBase extends Shield\Modules\BaseShield\Sh
|
|
377 |
* @return $this
|
378 |
*/
|
379 |
public function resetScan() {
|
|
|
|
|
380 |
( new Scan\Results\Clean() )
|
381 |
-
->setDbHandler( $
|
382 |
->setScanActionVO( $this->getScanActionVO() )
|
383 |
->deleteAllForScan();
|
384 |
return $this;
|
88 |
* @param Shield\Scans\Base\BaseResultsSet $oToDelete
|
89 |
*/
|
90 |
protected function deleteResultsSet( $oToDelete ) {
|
91 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
92 |
+
$oMod = $this->getMod();
|
93 |
( new Scan\Results\Clean() )
|
94 |
+
->setDbHandler( $oMod->getDbHandler_ScanResults() )
|
95 |
->deleteResults( $oToDelete );
|
96 |
}
|
97 |
|
99 |
* @return Shield\Scans\Base\BaseResultsSet
|
100 |
*/
|
101 |
protected function readScanResultsFromDb() {
|
102 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
103 |
+
$oMod = $this->getMod();
|
104 |
/** @var Shield\Databases\Scanner\Select $oSelector */
|
105 |
+
$oSelector = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
106 |
return $this->convertVosToResults( $oSelector->forScan( static::SCAN_SLUG ) );
|
107 |
}
|
108 |
|
121 |
* @return Shield\Databases\Scanner\EntryVO|null
|
122 |
*/
|
123 |
protected function getVoFromResultItem( $oItem ) {
|
124 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
125 |
+
$oMod = $this->getMod();
|
126 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
127 |
+
$oSel = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
128 |
+
return $oSel->filterByHash( $oItem->hash )
|
|
|
|
|
|
|
129 |
->filterByScan( $this->getScanActionVO()->scan )
|
130 |
->first();
|
|
|
131 |
}
|
132 |
|
133 |
/**
|
134 |
* @return $this
|
135 |
*/
|
136 |
public function resetIgnoreStatus() {
|
137 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
138 |
+
$oMod = $this->getMod();
|
139 |
+
$oDbh = $oMod->getDbHandler_ScanResults();
|
140 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
141 |
$oSel = $oDbh->getQuerySelector();
|
142 |
|
152 |
* @return $this
|
153 |
*/
|
154 |
public function resetNotifiedStatus() {
|
155 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
156 |
+
$oMod = $this->getMod();
|
157 |
+
$oDbh = $oMod->getDbHandler_ScanResults();
|
158 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
159 |
$oSel = $oDbh->getQuerySelector();
|
160 |
|
173 |
* @throws \Exception
|
174 |
*/
|
175 |
public function executeItemAction( $sItemId, $sAction ) {
|
176 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
177 |
+
$oMod = $this->getMod();
|
178 |
+
|
179 |
$bSuccess = false;
|
180 |
if ( is_numeric( $sItemId ) ) {
|
181 |
/** @var Shield\Databases\Scanner\EntryVO $oEntry */
|
182 |
+
$oEntry = $oMod->getDbHandler_ScanResults()
|
|
|
183 |
->getQuerySelector()
|
184 |
->byId( $sItemId );
|
185 |
if ( empty( $oEntry ) ) {
|
280 |
* @throws \Exception
|
281 |
*/
|
282 |
protected function itemIgnore( $oItem ) {
|
283 |
+
|
284 |
/** @var Shield\Databases\Scanner\EntryVO $oEntry */
|
285 |
$oEntry = $this->getVoFromResultItem( $oItem );
|
286 |
if ( empty( $oEntry ) ) {
|
287 |
throw new \Exception( 'Item could not be found to ignore.' );
|
288 |
}
|
289 |
|
290 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
291 |
+
$oMod = $this->getMod();
|
292 |
/** @var Shield\Databases\Scanner\Update $oUp */
|
293 |
+
$oUp = $oMod->getDbHandler_ScanResults()->getQueryUpdater();
|
|
|
|
|
294 |
|
295 |
if ( !$oUp->setIgnored( $oEntry ) ) {
|
296 |
throw new \Exception( 'Item could not be ignored at this time.' );
|
316 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
317 |
$oMod = $this->getMod();
|
318 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
319 |
+
$oSel = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
|
|
|
|
320 |
/** @var Shield\Databases\Scanner\EntryVO[] $aRes */
|
321 |
$aRes = $oSel->filterByScan( static::SCAN_SLUG )
|
322 |
->filterForCron( $oMod->getScanNotificationInterval() )
|
351 |
* @param Shield\Databases\Scanner\EntryVO[] $aRes
|
352 |
*/
|
353 |
private function updateLastNotifiedAt( $aRes ) {
|
354 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
355 |
+
$oMod = $this->getMod();
|
356 |
/** @var Shield\Databases\Scanner\Update $oUpd */
|
357 |
+
$oUpd = $oMod->getDbHandler_ScanResults()->getQueryUpdater();
|
358 |
foreach ( $aRes as $oVo ) {
|
359 |
$oUpd->reset()
|
360 |
->setNotified( $oVo );
|
384 |
* @return $this
|
385 |
*/
|
386 |
public function resetScan() {
|
387 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
388 |
+
$oMod = $this->getMod();
|
389 |
( new Scan\Results\Clean() )
|
390 |
+
->setDbHandler( $oMod->getDbHandler_ScanResults() )
|
391 |
->setScanActionVO( $this->getScanActionVO() )
|
392 |
->deleteAllForScan();
|
393 |
return $this;
|
@@ -25,9 +25,9 @@ class ICWP_WPSF_Processor_HackProtect_Mal extends ICWP_WPSF_Processor_ScanBase {
|
|
25 |
* @return bool
|
26 |
*/
|
27 |
public function isEnabled() {
|
28 |
-
/** @var \
|
29 |
-
$
|
30 |
-
return $
|
31 |
}
|
32 |
|
33 |
/**
|
@@ -43,7 +43,11 @@ class ICWP_WPSF_Processor_HackProtect_Mal extends ICWP_WPSF_Processor_ScanBase {
|
|
43 |
* @throws \Exception
|
44 |
*/
|
45 |
protected function itemRepair( $oItem ) {
|
46 |
-
|
|
|
|
|
|
|
|
|
47 |
$this->getCon()->fireEvent(
|
48 |
static::SCAN_SLUG.'_item_repair_'.( $bSuccess ? 'success' : 'fail' ),
|
49 |
[ 'audit' => [ 'fragment' => $oItem->path_fragment ] ]
|
@@ -56,17 +60,38 @@ class ICWP_WPSF_Processor_HackProtect_Mal extends ICWP_WPSF_Processor_ScanBase {
|
|
56 |
* @return bool
|
57 |
*/
|
58 |
protected function itemDelete( $oItem ) {
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
|
62 |
/**
|
63 |
* @param Shield\Scans\Mal\ResultsSet $oRes
|
64 |
*/
|
65 |
protected function runCronAutoRepair( $oRes ) {
|
66 |
-
/** @var
|
67 |
-
$
|
68 |
-
if ( $
|
69 |
$this->getRepairer()
|
|
|
|
|
70 |
->repairResultsSet( $oRes );
|
71 |
}
|
72 |
}
|
@@ -113,6 +138,8 @@ class ICWP_WPSF_Processor_HackProtect_Mal extends ICWP_WPSF_Processor_ScanBase {
|
|
113 |
private function buildEmailBodyFromFiles( $oResults ) {
|
114 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oFO */
|
115 |
$oFO = $this->getMod();
|
|
|
|
|
116 |
$sName = $this->getCon()->getHumanName();
|
117 |
$sHomeUrl = Services::WpGeneral()->getHomeUrl();
|
118 |
|
@@ -124,18 +151,18 @@ class ICWP_WPSF_Processor_HackProtect_Mal extends ICWP_WPSF_Processor_ScanBase {
|
|
124 |
sprintf( '%s: %s', __( 'Site URL', 'wp-simple-firewall' ), sprintf( '<a href="%s" target="_blank">%s</a>', $sHomeUrl, $sHomeUrl ) ),
|
125 |
];
|
126 |
|
127 |
-
if ( $
|
128 |
$aContent = array_merge( $aContent, $this->buildListOfFilesForEmail( $oResults ) );
|
129 |
$aContent[] = '';
|
130 |
|
131 |
-
if ( $
|
132 |
$aContent[] = '<strong>'.sprintf( __( "%s has already attempted to repair the files.", 'wp-simple-firewall' ), $sName ).'</strong>'
|
133 |
.' '.__( 'But, you should always check these files to ensure everything is as you expect.', 'wp-simple-firewall' );
|
134 |
}
|
135 |
else {
|
136 |
$aContent[] = __( 'You should review these files and replace them with official versions if required.', 'wp-simple-firewall' );
|
137 |
$aContent[] = __( 'Alternatively you can have the plugin attempt to repair/replace these files automatically.', 'wp-simple-firewall' )
|
138 |
-
.' [<a href="https://icwp.io/moreinfochecksum">'.__( 'More Info', 'wp-simple-firewall' ).'
|
139 |
}
|
140 |
}
|
141 |
|
@@ -145,7 +172,7 @@ class ICWP_WPSF_Processor_HackProtect_Mal extends ICWP_WPSF_Processor_ScanBase {
|
|
145 |
|
146 |
if ( !$this->getCon()->isRelabelled() ) {
|
147 |
$aContent[] = '';
|
148 |
-
$aContent[] = '[ <a href="https://icwp.io/moreinfochecksum">'.__( 'More Info On This Scanner', 'wp-simple-firewall' ).'
|
149 |
}
|
150 |
|
151 |
return $aContent;
|
25 |
* @return bool
|
26 |
*/
|
27 |
public function isEnabled() {
|
28 |
+
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
29 |
+
$oOpts = $this->getOptions();
|
30 |
+
return $oOpts->isMalScanEnabled();
|
31 |
}
|
32 |
|
33 |
/**
|
43 |
* @throws \Exception
|
44 |
*/
|
45 |
protected function itemRepair( $oItem ) {
|
46 |
+
/** @var Shield\Scans\Mal\Repair $oRepair */
|
47 |
+
$oRepair = $this->getRepairer()
|
48 |
+
->setIsManualAction( true );
|
49 |
+
$bSuccess = $oRepair->setAllowDelete( false )
|
50 |
+
->repairItem( $oItem );
|
51 |
$this->getCon()->fireEvent(
|
52 |
static::SCAN_SLUG.'_item_repair_'.( $bSuccess ? 'success' : 'fail' ),
|
53 |
[ 'audit' => [ 'fragment' => $oItem->path_fragment ] ]
|
60 |
* @return bool
|
61 |
*/
|
62 |
protected function itemDelete( $oItem ) {
|
63 |
+
/** @var Shield\Scans\Mal\Repair $oRepair */
|
64 |
+
$oRepair = $this->getRepairer()
|
65 |
+
->setIsManualAction( true );
|
66 |
+
return $oRepair->setAllowDelete( true )
|
67 |
+
->repairItem( $oItem );
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @param Shield\Scans\Mal\ResultItem $oItem
|
72 |
+
* @return bool
|
73 |
+
* @throws \Exception
|
74 |
+
*/
|
75 |
+
protected function itemIgnore( $oItem ) {
|
76 |
+
parent::itemIgnore( $oItem );
|
77 |
+
|
78 |
+
( new Shield\Scans\Mal\Utilities\FalsePositiveReporter() )
|
79 |
+
->setMod( $this->getMod() )
|
80 |
+
->report( $oItem->path_full, 'sha1', true );
|
81 |
+
|
82 |
+
return true;
|
83 |
}
|
84 |
|
85 |
/**
|
86 |
* @param Shield\Scans\Mal\ResultsSet $oRes
|
87 |
*/
|
88 |
protected function runCronAutoRepair( $oRes ) {
|
89 |
+
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
90 |
+
$oOpts = $this->getOptions();
|
91 |
+
if ( $oOpts->isMalAutoRepair() ) {
|
92 |
$this->getRepairer()
|
93 |
+
->setIsManualAction( false )
|
94 |
+
->setAllowDelete( false )
|
95 |
->repairResultsSet( $oRes );
|
96 |
}
|
97 |
}
|
138 |
private function buildEmailBodyFromFiles( $oResults ) {
|
139 |
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oFO */
|
140 |
$oFO = $this->getMod();
|
141 |
+
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
142 |
+
$oOpts = $this->getOptions();
|
143 |
$sName = $this->getCon()->getHumanName();
|
144 |
$sHomeUrl = Services::WpGeneral()->getHomeUrl();
|
145 |
|
151 |
sprintf( '%s: %s', __( 'Site URL', 'wp-simple-firewall' ), sprintf( '<a href="%s" target="_blank">%s</a>', $sHomeUrl, $sHomeUrl ) ),
|
152 |
];
|
153 |
|
154 |
+
if ( $oOpts->isMalAutoRepair() || $oFO->isIncludeFileLists() ) {
|
155 |
$aContent = array_merge( $aContent, $this->buildListOfFilesForEmail( $oResults ) );
|
156 |
$aContent[] = '';
|
157 |
|
158 |
+
if ( $oOpts->isMalAutoRepair() ) {
|
159 |
$aContent[] = '<strong>'.sprintf( __( "%s has already attempted to repair the files.", 'wp-simple-firewall' ), $sName ).'</strong>'
|
160 |
.' '.__( 'But, you should always check these files to ensure everything is as you expect.', 'wp-simple-firewall' );
|
161 |
}
|
162 |
else {
|
163 |
$aContent[] = __( 'You should review these files and replace them with official versions if required.', 'wp-simple-firewall' );
|
164 |
$aContent[] = __( 'Alternatively you can have the plugin attempt to repair/replace these files automatically.', 'wp-simple-firewall' )
|
165 |
+
.' [<a href="https://icwp.io/moreinfochecksum">'.__( 'More Info', 'wp-simple-firewall' ).'</a>]';
|
166 |
}
|
167 |
}
|
168 |
|
172 |
|
173 |
if ( !$this->getCon()->isRelabelled() ) {
|
174 |
$aContent[] = '';
|
175 |
+
$aContent[] = '[ <a href="https://icwp.io/moreinfochecksum">'.__( 'More Info On This Scanner', 'wp-simple-firewall' ).'</a> ]';
|
176 |
}
|
177 |
|
178 |
return $aContent;
|
@@ -362,15 +362,15 @@ class ICWP_WPSF_Processor_HackProtect_Ptg extends ICWP_WPSF_Processor_HackProtec
|
|
362 |
* When initiating snapshots, we must clean old results before creating a clean snapshot
|
363 |
*/
|
364 |
private function initSnapshots() {
|
365 |
-
/** @var ICWP_WPSF_FeatureHandler_HackProtect $
|
366 |
-
$
|
367 |
|
368 |
-
$bPluginsRebuildReqd = $
|
369 |
-
$bThemesRebuildReqd = $
|
370 |
|
371 |
if ( $bPluginsRebuildReqd || $bThemesRebuildReqd ) {
|
372 |
// grab all the existing results
|
373 |
-
$oDbH = $
|
374 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
375 |
$oSel = $oDbH->getQuerySelector();
|
376 |
/** @var Shield\Databases\Scanner\EntryVO[] $aRes */
|
@@ -391,17 +391,17 @@ class ICWP_WPSF_Processor_HackProtect_Ptg extends ICWP_WPSF_Processor_HackProtec
|
|
391 |
}
|
392 |
}
|
393 |
|
394 |
-
if ( $
|
395 |
// rebuilt self when the plugin itself upgrades
|
396 |
$this->updatePluginSnapshot( $this->getCon()->getPluginBaseFile() );
|
397 |
-
$
|
398 |
}
|
399 |
|
400 |
-
if ( $
|
401 |
( new Shield\Scans\Ptg\Snapshots\StoreFormatUpgrade() )
|
402 |
->setStore( $this->getStore_Plugins() )->run()
|
403 |
->setStore( $this->getStore_Themes() )->run();
|
404 |
-
$
|
405 |
}
|
406 |
}
|
407 |
|
362 |
* When initiating snapshots, we must clean old results before creating a clean snapshot
|
363 |
*/
|
364 |
private function initSnapshots() {
|
365 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
366 |
+
$oMod = $this->getMod();
|
367 |
|
368 |
+
$bPluginsRebuildReqd = $oMod->isPtgBuildRequired() || !$this->getStore_Plugins()->getSnapStoreExists();
|
369 |
+
$bThemesRebuildReqd = $oMod->isPtgBuildRequired() || !$this->getStore_Themes()->getSnapStoreExists();
|
370 |
|
371 |
if ( $bPluginsRebuildReqd || $bThemesRebuildReqd ) {
|
372 |
// grab all the existing results
|
373 |
+
$oDbH = $oMod->getDbHandler_ScanResults();
|
374 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
375 |
$oSel = $oDbH->getQuerySelector();
|
376 |
/** @var Shield\Databases\Scanner\EntryVO[] $aRes */
|
391 |
}
|
392 |
}
|
393 |
|
394 |
+
if ( $oMod->isPtgRebuildSelfRequired() ) {
|
395 |
// rebuilt self when the plugin itself upgrades
|
396 |
$this->updatePluginSnapshot( $this->getCon()->getPluginBaseFile() );
|
397 |
+
$oMod->setPtgRebuildSelfRequired( false );
|
398 |
}
|
399 |
|
400 |
+
if ( $oMod->isPtgUpdateStoreFormat() ) {
|
401 |
( new Shield\Scans\Ptg\Snapshots\StoreFormatUpgrade() )
|
402 |
->setStore( $this->getStore_Plugins() )->run()
|
403 |
->setStore( $this->getStore_Themes() )->run();
|
404 |
+
$oMod->setPtgUpdateStoreFormat( false );
|
405 |
}
|
406 |
}
|
407 |
|
@@ -109,7 +109,7 @@ class ICWP_WPSF_Processor_HackProtect_Wcf extends ICWP_WPSF_Processor_ScanBase {
|
|
109 |
else {
|
110 |
$aContent[] = __( 'You should review these files and replace them with official versions if required.', 'wp-simple-firewall' );
|
111 |
$aContent[] = __( 'Alternatively you can have the plugin attempt to repair/replace these files automatically.', 'wp-simple-firewall' )
|
112 |
-
.' [<a href="https://icwp.io/moreinfochecksum">'.__( 'More Info', 'wp-simple-firewall' ).'
|
113 |
}
|
114 |
}
|
115 |
|
@@ -119,7 +119,7 @@ class ICWP_WPSF_Processor_HackProtect_Wcf extends ICWP_WPSF_Processor_ScanBase {
|
|
119 |
|
120 |
if ( !$this->getCon()->isRelabelled() ) {
|
121 |
$aContent[] = '';
|
122 |
-
$aContent[] = '[ <a href="https://icwp.io/moreinfochecksum">'.__( 'More Info On This Scanner', 'wp-simple-firewall' ).'
|
123 |
}
|
124 |
|
125 |
return $aContent;
|
109 |
else {
|
110 |
$aContent[] = __( 'You should review these files and replace them with official versions if required.', 'wp-simple-firewall' );
|
111 |
$aContent[] = __( 'Alternatively you can have the plugin attempt to repair/replace these files automatically.', 'wp-simple-firewall' )
|
112 |
+
.' [<a href="https://icwp.io/moreinfochecksum">'.__( 'More Info', 'wp-simple-firewall' ).'</a>]';
|
113 |
}
|
114 |
}
|
115 |
|
119 |
|
120 |
if ( !$this->getCon()->isRelabelled() ) {
|
121 |
$aContent[] = '';
|
122 |
+
$aContent[] = '[ <a href="https://icwp.io/moreinfochecksum">'.__( 'More Info On This Scanner', 'wp-simple-firewall' ).'</a> ]';
|
123 |
}
|
124 |
|
125 |
return $aContent;
|
@@ -285,10 +285,10 @@ class ICWP_WPSF_Processor_HackProtect_Wpv extends ICWP_WPSF_Processor_HackProtec
|
|
285 |
* @return Shield\Scans\Wpv\ResultsSet
|
286 |
*/
|
287 |
protected function getAllVulnerabilities() {
|
|
|
|
|
288 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
289 |
-
$oSel = $
|
290 |
-
->getDbHandler()
|
291 |
-
->getQuerySelector();
|
292 |
$aVos = $oSel->filterByScan( static::SCAN_SLUG )
|
293 |
->filterByNotIgnored()
|
294 |
->query();
|
285 |
* @return Shield\Scans\Wpv\ResultsSet
|
286 |
*/
|
287 |
protected function getAllVulnerabilities() {
|
288 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
289 |
+
$oMod = $this->getMod();
|
290 |
/** @var Shield\Databases\Scanner\Select $oSel */
|
291 |
+
$oSel = $oMod->getDbHandler_ScanResults()->getQuerySelector();
|
|
|
|
|
292 |
$aVos = $oSel->filterByScan( static::SCAN_SLUG )
|
293 |
->filterByNotIgnored()
|
294 |
->query();
|
@@ -133,9 +133,10 @@ class ICWP_WPSF_Processor_HackProtect_Scanner extends ShieldProcessor {
|
|
133 |
* @param string $sItemId
|
134 |
*/
|
135 |
public function downloadItemFile( $sItemId ) {
|
|
|
|
|
136 |
/** @var Scanner\EntryVO $oEntry */
|
137 |
-
$oEntry = $
|
138 |
-
->getDbHandler()
|
139 |
->getQuerySelector()
|
140 |
->byId( (int)$sItemId );
|
141 |
if ( !empty( $oEntry ) ) {
|
@@ -183,7 +184,7 @@ class ICWP_WPSF_Processor_HackProtect_Scanner extends ShieldProcessor {
|
|
183 |
*/
|
184 |
protected function getCronFrequency() {
|
185 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
186 |
-
$oOpts = $this->
|
187 |
return $oOpts->getScanFrequency();
|
188 |
}
|
189 |
|
133 |
* @param string $sItemId
|
134 |
*/
|
135 |
public function downloadItemFile( $sItemId ) {
|
136 |
+
/** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
|
137 |
+
$oMod = $this->getMod();
|
138 |
/** @var Scanner\EntryVO $oEntry */
|
139 |
+
$oEntry = $oMod->getDbHandler_ScanResults()
|
|
|
140 |
->getQuerySelector()
|
141 |
->byId( (int)$sItemId );
|
142 |
if ( !empty( $oEntry ) ) {
|
184 |
*/
|
185 |
protected function getCronFrequency() {
|
186 |
/** @var Shield\Modules\HackGuard\Options $oOpts */
|
187 |
+
$oOpts = $this->getOptions();
|
188 |
return $oOpts->getScanFrequency();
|
189 |
}
|
190 |
|
@@ -19,7 +19,7 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
19 |
|
20 |
$oCon = $this->getCon();
|
21 |
/** @var IPs\Options $oOpts */
|
22 |
-
$oOpts = $this->
|
23 |
if ( $oOpts->isEnabledAutoBlackList() ) {
|
24 |
add_filter( $oCon->prefix( 'firewall_die_message' ), [ $this, 'fAugmentFirewallDieMessage' ] );
|
25 |
add_action( $oCon->prefix( 'pre_plugin_shutdown' ), [ $this, 'doBlackMarkCurrentVisitor' ] );
|
@@ -127,7 +127,7 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
127 |
*/
|
128 |
public function getRemainingTransgressions( $sIp = '' ) {
|
129 |
/** @var IPs\Options $oOpts */
|
130 |
-
$oOpts = $this->
|
131 |
if ( empty( $sIp ) ) {
|
132 |
$sIp = Services::IP()->getRequestIp();
|
133 |
}
|
@@ -174,9 +174,7 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
174 |
$this->setIfLogRequest( false ); // don't log traffic from killed requests
|
175 |
|
176 |
/** @var Databases\IPs\Update $oUp */
|
177 |
-
$oUp = $
|
178 |
-
->getDbHandler()
|
179 |
-
->getQueryUpdater();
|
180 |
$oUp->updateLastAccessAt( $this->getAutoBlackListIp( $sIp ) );
|
181 |
|
182 |
try {
|
@@ -227,7 +225,7 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
227 |
$oMod->updateIpRequestAutoUnblockTs( $sIp );
|
228 |
|
229 |
/** @var Databases\IPs\Delete $oDel */
|
230 |
-
$oDel = $oMod->
|
231 |
$oDel->deleteIpFromBlacklists( $sIp );
|
232 |
Services::Response()->redirectToHome();
|
233 |
}
|
@@ -344,7 +342,7 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
344 |
$nNewOffenses = min( $nLimit, $oBlackIp->transgressions + $nToIncrement );
|
345 |
|
346 |
/** @var Databases\IPs\Update $oUp */
|
347 |
-
$oUp = $oMod->
|
348 |
$oUp->updateTransgressions( $oBlackIp, $nNewOffenses );
|
349 |
|
350 |
$oCon->fireEvent( $bBlock ? 'ip_blocked' : 'ip_offense',
|
@@ -372,8 +370,10 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
372 |
* @return Databases\IPs\EntryVO[]
|
373 |
*/
|
374 |
public function getWhitelistIpsData() {
|
|
|
|
|
375 |
/** @var Databases\IPs\Select $oSelect */
|
376 |
-
$oSelect = $
|
377 |
return $oSelect->allFromList( \ICWP_WPSF_FeatureHandler_Ips::LIST_MANUAL_WHITE );
|
378 |
}
|
379 |
|
@@ -402,7 +402,7 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
402 |
*/
|
403 |
public function isIpToBeBlocked( $sIp ) {
|
404 |
/** @var IPs\Options $oOpts */
|
405 |
-
$oOpts = $this->
|
406 |
$oIp = $this->getBlackListIp( $sIp );
|
407 |
return ( $oIp instanceof Databases\IPs\EntryVO && $oIp->getTransgressions() >= $oOpts->getOffenseLimit() );
|
408 |
}
|
@@ -415,8 +415,10 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
415 |
private function isIpOnList( $sIp, $sList ) {
|
416 |
$bOnList = false;
|
417 |
|
|
|
|
|
418 |
/** @var Databases\IPs\Select $oSelect */
|
419 |
-
$oSelect = $
|
420 |
foreach ( $oSelect->allFromList( $sList ) as $oIp ) {
|
421 |
try {
|
422 |
if ( Services::IP()->checkIp( $sIp, $oIp->ip ) ) {
|
@@ -456,7 +458,9 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
456 |
* @return Databases\IPs\EntryVO|null
|
457 |
*/
|
458 |
private function addIpToManualList( $sIp, $sList, $sLabel = '' ) {
|
459 |
-
|
|
|
|
|
460 |
|
461 |
/** @var Databases\IPs\Select $oSelect */
|
462 |
$oSelect = $oDbh->getQuerySelector();
|
@@ -486,12 +490,12 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
486 |
private function addIpToList( $sIp, $sList, $sLabel = '' ) {
|
487 |
$oIp = null;
|
488 |
|
489 |
-
/** @var ICWP_WPSF_FeatureHandler_Ips $oMod */
|
490 |
$oMod = $this->getMod();
|
491 |
|
492 |
// Never add a reserved IP to any black list
|
493 |
if ( $sList == $oMod::LIST_MANUAL_WHITE || !in_array( $sIp, $oMod->getReservedIps() ) ) {
|
494 |
-
$oDbh = $oMod->
|
495 |
|
496 |
// delete any previous old entries as we go.
|
497 |
/** @var Databases\IPs\Delete $oDel */
|
@@ -521,12 +525,12 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
521 |
* @return Databases\IPs\EntryVO|null
|
522 |
*/
|
523 |
protected function getBlackListIp( $sIp ) {
|
524 |
-
/** @var ICWP_WPSF_FeatureHandler_Ips $oMod */
|
525 |
$oMod = $this->getMod();
|
526 |
/** @var IPs\Options $oOpts */
|
527 |
$oOpts = $oMod->getOptions();
|
528 |
/** @var Databases\IPs\Select $oSelect */
|
529 |
-
$oSelect = $oMod->
|
530 |
/** @var Databases\IPs\EntryVO $oIp */
|
531 |
$oIp = $oSelect->filterByIp( $sIp )
|
532 |
->filterByLists( [
|
@@ -544,17 +548,15 @@ class ICWP_WPSF_Processor_Ips extends ShieldProcessor {
|
|
544 |
* @return Databases\IPs\EntryVO|null
|
545 |
*/
|
546 |
protected function getAutoBlackListIp( $sIp ) {
|
547 |
-
/** @var ICWP_WPSF_FeatureHandler_Ips $oMod */
|
548 |
$oMod = $this->getMod();
|
549 |
/** @var IPs\Options $oOpts */
|
550 |
$oOpts = $oMod->getOptions();
|
551 |
/** @var Databases\IPs\Select $oSelect */
|
552 |
-
$oSelect = $oMod->
|
553 |
-
|
554 |
-
$oIp = $oSelect->filterByIp( $sIp )
|
555 |
->filterByList( $oMod::LIST_AUTO_BLACK )
|
556 |
->filterByLastAccessAfter( Services::Request()->ts() - $oOpts->getAutoExpireTime() )
|
557 |
->first();
|
558 |
-
return $oIp;
|
559 |
}
|
560 |
}
|
19 |
|
20 |
$oCon = $this->getCon();
|
21 |
/** @var IPs\Options $oOpts */
|
22 |
+
$oOpts = $this->getOptions();
|
23 |
if ( $oOpts->isEnabledAutoBlackList() ) {
|
24 |
add_filter( $oCon->prefix( 'firewall_die_message' ), [ $this, 'fAugmentFirewallDieMessage' ] );
|
25 |
add_action( $oCon->prefix( 'pre_plugin_shutdown' ), [ $this, 'doBlackMarkCurrentVisitor' ] );
|
127 |
*/
|
128 |
public function getRemainingTransgressions( $sIp = '' ) {
|
129 |
/** @var IPs\Options $oOpts */
|
130 |
+
$oOpts = $this->getOptions();
|
131 |
if ( empty( $sIp ) ) {
|
132 |
$sIp = Services::IP()->getRequestIp();
|
133 |
}
|
174 |
$this->setIfLogRequest( false ); // don't log traffic from killed requests
|
175 |
|
176 |
/** @var Databases\IPs\Update $oUp */
|
177 |
+
$oUp = $oMod->getDbHandler_IPs()->getQueryUpdater();
|
|
|
|
|
178 |
$oUp->updateLastAccessAt( $this->getAutoBlackListIp( $sIp ) );
|
179 |
|
180 |
try {
|
225 |
$oMod->updateIpRequestAutoUnblockTs( $sIp );
|
226 |
|
227 |
/** @var Databases\IPs\Delete $oDel */
|
228 |
+
$oDel = $oMod->getDbHandler_IPs()->getQueryDeleter();
|
229 |
$oDel->deleteIpFromBlacklists( $sIp );
|
230 |
Services::Response()->redirectToHome();
|
231 |
}
|
342 |
$nNewOffenses = min( $nLimit, $oBlackIp->transgressions + $nToIncrement );
|
343 |
|
344 |
/** @var Databases\IPs\Update $oUp */
|
345 |
+
$oUp = $oMod->getDbHandler_IPs()->getQueryUpdater();
|
346 |
$oUp->updateTransgressions( $oBlackIp, $nNewOffenses );
|
347 |
|
348 |
$oCon->fireEvent( $bBlock ? 'ip_blocked' : 'ip_offense',
|
370 |
* @return Databases\IPs\EntryVO[]
|
371 |
*/
|
372 |
public function getWhitelistIpsData() {
|
373 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
374 |
+
$oMod = $this->getMod();
|
375 |
/** @var Databases\IPs\Select $oSelect */
|
376 |
+
$oSelect = $oMod->getDbHandler_IPs()->getQuerySelector();
|
377 |
return $oSelect->allFromList( \ICWP_WPSF_FeatureHandler_Ips::LIST_MANUAL_WHITE );
|
378 |
}
|
379 |
|
402 |
*/
|
403 |
public function isIpToBeBlocked( $sIp ) {
|
404 |
/** @var IPs\Options $oOpts */
|
405 |
+
$oOpts = $this->getOptions();
|
406 |
$oIp = $this->getBlackListIp( $sIp );
|
407 |
return ( $oIp instanceof Databases\IPs\EntryVO && $oIp->getTransgressions() >= $oOpts->getOffenseLimit() );
|
408 |
}
|
415 |
private function isIpOnList( $sIp, $sList ) {
|
416 |
$bOnList = false;
|
417 |
|
418 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
419 |
+
$oMod = $this->getMod();
|
420 |
/** @var Databases\IPs\Select $oSelect */
|
421 |
+
$oSelect = $oMod->getDbHandler_IPs()->getQuerySelector();
|
422 |
foreach ( $oSelect->allFromList( $sList ) as $oIp ) {
|
423 |
try {
|
424 |
if ( Services::IP()->checkIp( $sIp, $oIp->ip ) ) {
|
458 |
* @return Databases\IPs\EntryVO|null
|
459 |
*/
|
460 |
private function addIpToManualList( $sIp, $sList, $sLabel = '' ) {
|
461 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
462 |
+
$oMod = $this->getMod();
|
463 |
+
$oDbh = $oMod->getDbHandler_IPs();
|
464 |
|
465 |
/** @var Databases\IPs\Select $oSelect */
|
466 |
$oSelect = $oDbh->getQuerySelector();
|
490 |
private function addIpToList( $sIp, $sList, $sLabel = '' ) {
|
491 |
$oIp = null;
|
492 |
|
493 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
494 |
$oMod = $this->getMod();
|
495 |
|
496 |
// Never add a reserved IP to any black list
|
497 |
if ( $sList == $oMod::LIST_MANUAL_WHITE || !in_array( $sIp, $oMod->getReservedIps() ) ) {
|
498 |
+
$oDbh = $oMod->getDbHandler_IPs();
|
499 |
|
500 |
// delete any previous old entries as we go.
|
501 |
/** @var Databases\IPs\Delete $oDel */
|
525 |
* @return Databases\IPs\EntryVO|null
|
526 |
*/
|
527 |
protected function getBlackListIp( $sIp ) {
|
528 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
529 |
$oMod = $this->getMod();
|
530 |
/** @var IPs\Options $oOpts */
|
531 |
$oOpts = $oMod->getOptions();
|
532 |
/** @var Databases\IPs\Select $oSelect */
|
533 |
+
$oSelect = $oMod->getDbHandler_IPs()->getQuerySelector();
|
534 |
/** @var Databases\IPs\EntryVO $oIp */
|
535 |
$oIp = $oSelect->filterByIp( $sIp )
|
536 |
->filterByLists( [
|
548 |
* @return Databases\IPs\EntryVO|null
|
549 |
*/
|
550 |
protected function getAutoBlackListIp( $sIp ) {
|
551 |
+
/** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
|
552 |
$oMod = $this->getMod();
|
553 |
/** @var IPs\Options $oOpts */
|
554 |
$oOpts = $oMod->getOptions();
|
555 |
/** @var Databases\IPs\Select $oSelect */
|
556 |
+
$oSelect = $oMod->getDbHandler_IPs()->getQuerySelector();
|
557 |
+
return $oSelect->filterByIp( $sIp )
|
|
|
558 |
->filterByList( $oMod::LIST_AUTO_BLACK )
|
559 |
->filterByLastAccessAfter( Services::Request()->ts() - $oOpts->getAutoExpireTime() )
|
560 |
->first();
|
|
|
561 |
}
|
562 |
}
|
@@ -10,6 +10,8 @@ class ICWP_WPSF_Processor_LoginProtect extends Modules\BaseShield\ShieldProcesso
|
|
10 |
public function run() {
|
11 |
/** @var \ICWP_WPSF_FeatureHandler_LoginProtect $oMod */
|
12 |
$oMod = $this->getMod();
|
|
|
|
|
13 |
|
14 |
// XML-RPC Compatibility
|
15 |
if ( Services::WpGeneral()->isXmlrpc() && $oMod->isXmlrpcBypass() ) {
|
@@ -26,8 +28,15 @@ class ICWP_WPSF_Processor_LoginProtect extends Modules\BaseShield\ShieldProcesso
|
|
26 |
$this->getSubProGasp()->execute();
|
27 |
}
|
28 |
|
29 |
-
if ( $
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
32 |
|
33 |
if ( $oMod->isGoogleRecaptchaEnabled() ) {
|
10 |
public function run() {
|
11 |
/** @var \ICWP_WPSF_FeatureHandler_LoginProtect $oMod */
|
12 |
$oMod = $this->getMod();
|
13 |
+
/** @var Modules\LoginGuard\Options $oOpts */
|
14 |
+
$oOpts = $this->getOptions();
|
15 |
|
16 |
// XML-RPC Compatibility
|
17 |
if ( Services::WpGeneral()->isXmlrpc() && $oMod->isXmlrpcBypass() ) {
|
28 |
$this->getSubProGasp()->execute();
|
29 |
}
|
30 |
|
31 |
+
if ( $oOpts->isCooldownEnabled() ) {
|
32 |
+
if ( Services::Request()->isPost() ) {
|
33 |
+
$this->getSubProCooldown()->execute();
|
34 |
+
}
|
35 |
+
/*
|
36 |
+
( new Modules\LoginGuard\Lib\CooldownRedirect() )
|
37 |
+
->setMod( $oMod )
|
38 |
+
->run();
|
39 |
+
*/
|
40 |
}
|
41 |
|
42 |
if ( $oMod->isGoogleRecaptchaEnabled() ) {
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
use FernleafSystems\Wordpress\
|
4 |
|
5 |
class ICWP_WPSF_Processor_LoginProtect_Cooldown extends ICWP_WPSF_Processor_LoginProtect_Base {
|
6 |
|
@@ -8,8 +8,6 @@ class ICWP_WPSF_Processor_LoginProtect_Cooldown extends ICWP_WPSF_Processor_Logi
|
|
8 |
* @throws \Exception
|
9 |
*/
|
10 |
protected function performCheckWithException() {
|
11 |
-
/** @var ICWP_WPSF_FeatureHandler_LoginProtect $oFO */
|
12 |
-
$oFO = $this->getMod();
|
13 |
|
14 |
if ( !$this->isFactorTested() ) {
|
15 |
$this->setFactorTested( true );
|
@@ -17,12 +15,12 @@ class ICWP_WPSF_Processor_LoginProtect_Cooldown extends ICWP_WPSF_Processor_Logi
|
|
17 |
// At this point someone has attempted to login within the previous login wait interval
|
18 |
// So we remove WordPress's authentication filter and our own user check authentication
|
19 |
// And finally return a WP_Error which will be reflected back to the user.
|
20 |
-
$
|
21 |
-
if ( $
|
22 |
$sErrorString = __( "Request Cooldown in effect.", 'wp-simple-firewall' ).' '
|
23 |
.sprintf(
|
24 |
__( "You must wait %s seconds before attempting this action again.", 'wp-simple-firewall' ),
|
25 |
-
$
|
26 |
);
|
27 |
|
28 |
$this->getCon()->fireEvent( 'cooldown_fail' );
|
@@ -30,32 +28,7 @@ class ICWP_WPSF_Processor_LoginProtect_Cooldown extends ICWP_WPSF_Processor_Logi
|
|
30 |
throw new \Exception( $sErrorString );
|
31 |
}
|
32 |
|
33 |
-
$
|
34 |
}
|
35 |
}
|
36 |
-
|
37 |
-
/**
|
38 |
-
* @return int
|
39 |
-
*/
|
40 |
-
private function getSecondsSinceLastLogin() {
|
41 |
-
$sFile = $this->getLastLoginTimeFilePath();
|
42 |
-
$nLastLogin = Services::WpFs()->exists( $sFile ) ? filemtime( $sFile ) : 0;
|
43 |
-
return ( Services::Request()->ts() - $nLastLogin );
|
44 |
-
}
|
45 |
-
|
46 |
-
/**
|
47 |
-
* @return string
|
48 |
-
*/
|
49 |
-
private function getLastLoginTimeFilePath() {
|
50 |
-
return path_join( $this->getCon()->getRootDir(), 'mode.login_throttled' );
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* @return $this
|
55 |
-
*/
|
56 |
-
private function updateLastLoginTime() {
|
57 |
-
Services::WpFs()->deleteFile( $this->getLastLoginTimeFilePath() );
|
58 |
-
Services::WpFs()->touch( $this->getLastLoginTimeFilePath(), Services::Request()->ts() );
|
59 |
-
return $this;
|
60 |
-
}
|
61 |
}
|
1 |
<?php
|
2 |
|
3 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
|
4 |
|
5 |
class ICWP_WPSF_Processor_LoginProtect_Cooldown extends ICWP_WPSF_Processor_LoginProtect_Base {
|
6 |
|
8 |
* @throws \Exception
|
9 |
*/
|
10 |
protected function performCheckWithException() {
|
|
|
|
|
11 |
|
12 |
if ( !$this->isFactorTested() ) {
|
13 |
$this->setFactorTested( true );
|
15 |
// At this point someone has attempted to login within the previous login wait interval
|
16 |
// So we remove WordPress's authentication filter and our own user check authentication
|
17 |
// And finally return a WP_Error which will be reflected back to the user.
|
18 |
+
$oCooldownFlag = ( new LoginGuard\Lib\CooldownFlagFile() )->setMod( $this->getMod() );
|
19 |
+
if ( $oCooldownFlag->isWithinCooldownPeriod() ) {
|
20 |
$sErrorString = __( "Request Cooldown in effect.", 'wp-simple-firewall' ).' '
|
21 |
.sprintf(
|
22 |
__( "You must wait %s seconds before attempting this action again.", 'wp-simple-firewall' ),
|
23 |
+
$oCooldownFlag->getCooldownRemaining()
|
24 |
);
|
25 |
|
26 |
$this->getCon()->fireEvent( 'cooldown_fail' );
|
28 |
throw new \Exception( $sErrorString );
|
29 |
}
|
30 |
|
31 |
+
$oCooldownFlag->updateCooldownFlag();
|
32 |
}
|
33 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
}
|
@@ -17,14 +17,11 @@ class ICWP_WPSF_Processor_LoginProtect_GoogleRecaptcha extends ICWP_WPSF_Process
|
|
17 |
* @throws \Exception
|
18 |
*/
|
19 |
protected function performCheckWithException() {
|
20 |
-
/** @var ICWP_WPSF_FeatureHandler_BaseWpsf $oFO */
|
21 |
-
$oFO = $this->getMod();
|
22 |
-
|
23 |
if ( !$this->isFactorTested() ) {
|
24 |
$this->setFactorTested( true );
|
25 |
try {
|
26 |
( new Shield\Utilities\ReCaptcha\TestRequest() )
|
27 |
-
->setMod( $
|
28 |
->test();
|
29 |
}
|
30 |
catch ( \Exception $oE ) {
|
17 |
* @throws \Exception
|
18 |
*/
|
19 |
protected function performCheckWithException() {
|
|
|
|
|
|
|
20 |
if ( !$this->isFactorTested() ) {
|
21 |
$this->setFactorTested( true );
|
22 |
try {
|
23 |
( new Shield\Utilities\ReCaptcha\TestRequest() )
|
24 |
+
->setMod( $this->getMod() )
|
25 |
->test();
|
26 |
}
|
27 |
catch ( \Exception $oE ) {
|
@@ -52,13 +52,14 @@ class ICWP_WPSF_Processor_Sessions extends Modules\BaseShield\ShieldProcessor {
|
|
52 |
}
|
53 |
|
54 |
public function onModuleShutdown() {
|
|
|
|
|
|
|
55 |
if ( !Services::Rest()->isRest() ) {
|
56 |
$oSession = $this->getCurrentSession();
|
57 |
-
if ( $oSession instanceof Session\EntryVO) {
|
58 |
/** @var Session\Update $oUpd */
|
59 |
-
$oUpd = $
|
60 |
-
->getDbHandler()
|
61 |
-
->getQueryUpdater();
|
62 |
$oUpd->updateLastActivity( $this->getCurrentSession() );
|
63 |
}
|
64 |
}
|
@@ -131,9 +132,10 @@ class ICWP_WPSF_Processor_Sessions extends Modules\BaseShield\ShieldProcessor {
|
|
131 |
* @return bool
|
132 |
*/
|
133 |
public function terminateSession( $nSessionId ) {
|
|
|
|
|
134 |
$this->getCon()->fireEvent( 'session_terminate' );
|
135 |
-
return $
|
136 |
-
->getDbHandler()
|
137 |
->getQueryDeleter()
|
138 |
->deleteById( $nSessionId );
|
139 |
}
|
@@ -195,10 +197,10 @@ class ICWP_WPSF_Processor_Sessions extends Modules\BaseShield\ShieldProcessor {
|
|
195 |
|
196 |
$this->getCon()->fireEvent( 'session_start' );
|
197 |
|
|
|
|
|
198 |
/** @var Session\Insert $oInsert */
|
199 |
-
$oInsert = $
|
200 |
-
->getDbHandler()
|
201 |
-
->getQueryInserter();
|
202 |
return $oInsert->create( $sSessionId, $sUsername );
|
203 |
}
|
204 |
|
@@ -209,10 +211,10 @@ class ICWP_WPSF_Processor_Sessions extends Modules\BaseShield\ShieldProcessor {
|
|
209 |
* @return Session\EntryVO|null
|
210 |
*/
|
211 |
private function queryGetSession( $sSessionId, $sUsername = '' ) {
|
|
|
|
|
212 |
/** @var Session\Select $oSel */
|
213 |
-
$oSel = $
|
214 |
-
->getDbHandler()
|
215 |
-
->getQuerySelector();
|
216 |
return $oSel->retrieveUserSession( $sSessionId, $sUsername );
|
217 |
}
|
218 |
}
|
52 |
}
|
53 |
|
54 |
public function onModuleShutdown() {
|
55 |
+
/** @var \ICWP_WPSF_FeatureHandler_Sessions $oMod */
|
56 |
+
$oMod = $this->getMod();
|
57 |
+
|
58 |
if ( !Services::Rest()->isRest() ) {
|
59 |
$oSession = $this->getCurrentSession();
|
60 |
+
if ( $oSession instanceof Session\EntryVO ) {
|
61 |
/** @var Session\Update $oUpd */
|
62 |
+
$oUpd = $oMod->getDbHandler_Sessions()->getQueryUpdater();
|
|
|
|
|
63 |
$oUpd->updateLastActivity( $this->getCurrentSession() );
|
64 |
}
|
65 |
}
|
132 |
* @return bool
|
133 |
*/
|
134 |
public function terminateSession( $nSessionId ) {
|
135 |
+
/** @var \ICWP_WPSF_FeatureHandler_Sessions $oMod */
|
136 |
+
$oMod = $this->getMod();
|
137 |
$this->getCon()->fireEvent( 'session_terminate' );
|
138 |
+
return $oMod->getDbHandler_Sessions()
|
|
|
139 |
->getQueryDeleter()
|
140 |
->deleteById( $nSessionId );
|
141 |
}
|
197 |
|
198 |
$this->getCon()->fireEvent( 'session_start' );
|
199 |
|
200 |
+
/** @var \ICWP_WPSF_FeatureHandler_Sessions $oMod */
|
201 |
+
$oMod = $this->getMod();
|
202 |
/** @var Session\Insert $oInsert */
|
203 |
+
$oInsert = $oMod->getDbHandler_Sessions()->getQueryInserter();
|
|
|
|
|
204 |
return $oInsert->create( $sSessionId, $sUsername );
|
205 |
}
|
206 |
|
211 |
* @return Session\EntryVO|null
|
212 |
*/
|
213 |
private function queryGetSession( $sSessionId, $sUsername = '' ) {
|
214 |
+
/** @var \ICWP_WPSF_FeatureHandler_Sessions $oMod */
|
215 |
+
$oMod = $this->getMod();
|
216 |
/** @var Session\Select $oSel */
|
217 |
+
$oSel = $oMod->getDbHandler_Sessions()->getQuerySelector();
|
|
|
|
|
218 |
return $oSel->retrieveUserSession( $sSessionId, $sUsername );
|
219 |
}
|
220 |
}
|
@@ -16,7 +16,7 @@ class ICWP_WPSF_Processor_Traffic extends Modules\BaseShield\ShieldProcessor {
|
|
16 |
*/
|
17 |
public function onWpInit() {
|
18 |
/** @var Modules\Traffic\Options $oOpts */
|
19 |
-
$oOpts = $this->
|
20 |
if ( false && $oOpts->isTrafficLimitEnabled() ) {
|
21 |
( new Modules\Traffic\Limiter\Limiter() )
|
22 |
->setMod( $this->getMod() )
|
16 |
*/
|
17 |
public function onWpInit() {
|
18 |
/** @var Modules\Traffic\Options $oOpts */
|
19 |
+
$oOpts = $this->getOptions();
|
20 |
if ( false && $oOpts->isTrafficLimitEnabled() ) {
|
21 |
( new Modules\Traffic\Limiter\Limiter() )
|
22 |
->setMod( $this->getMod() )
|
@@ -21,7 +21,7 @@ class ICWP_WPSF_Processor_TrafficLogger extends ShieldProcessor {
|
|
21 |
/** @var ICWP_WPSF_FeatureHandler_Traffic $oMod */
|
22 |
$oMod = $this->getMod();
|
23 |
/** @var Options $oOpts */
|
24 |
-
$oOpts = $this->
|
25 |
$oWp = Services::WpGeneral();
|
26 |
$bLoggedIn = Services::WpUsers()->isUserLoggedIn();
|
27 |
return parent::getIfLogRequest()
|
@@ -96,7 +96,7 @@ class ICWP_WPSF_Processor_TrafficLogger extends ShieldProcessor {
|
|
96 |
$oMod = $this->getMod();
|
97 |
$oReq = Services::Request();
|
98 |
/** @var Traffic\Handler $oDbh */
|
99 |
-
$oDbh = $oMod->
|
100 |
|
101 |
// For multisites that are separated by sub-domains we also show the host.
|
102 |
$sLeadingPath = Services::WpGeneral()->isMultisite_SubdomainInstall() ? $oReq->getHost() : '';
|
21 |
/** @var ICWP_WPSF_FeatureHandler_Traffic $oMod */
|
22 |
$oMod = $this->getMod();
|
23 |
/** @var Options $oOpts */
|
24 |
+
$oOpts = $this->getOptions();
|
25 |
$oWp = Services::WpGeneral();
|
26 |
$bLoggedIn = Services::WpUsers()->isUserLoggedIn();
|
27 |
return parent::getIfLogRequest()
|
96 |
$oMod = $this->getMod();
|
97 |
$oReq = Services::Request();
|
98 |
/** @var Traffic\Handler $oDbh */
|
99 |
+
$oDbh = $oMod->getDbHandler_Traffic();
|
100 |
|
101 |
// For multisites that are separated by sub-domains we also show the host.
|
102 |
$sLeadingPath = Services::WpGeneral()->isMultisite_SubdomainInstall() ? $oReq->getHost() : '';
|
@@ -49,7 +49,7 @@ class ICWP_WPSF_Processor_UserManagement_Passwords extends Modules\BaseShield\Sh
|
|
49 |
$bFailed = false;
|
50 |
}
|
51 |
catch ( \Exception $oE ) {
|
52 |
-
$bFailed =
|
53 |
}
|
54 |
$this->setPasswordFailedFlag( $oUser, $bFailed );
|
55 |
}
|
@@ -158,11 +158,18 @@ class ICWP_WPSF_Processor_UserManagement_Passwords extends Modules\BaseShield\Sh
|
|
158 |
if ( !empty( $sPassword ) ) {
|
159 |
try {
|
160 |
$this->applyPasswordChecks( $sPassword );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
if ( Services::WpUsers()->isUserLoggedIn() ) {
|
162 |
$this->getCon()->getCurrentUserMeta()->pass_check_failed_at = 0;
|
163 |
}
|
164 |
}
|
165 |
-
|
166 |
$sMessage = __( 'Your security administrator has imposed requirements for password quality.', 'wp-simple-firewall' )
|
167 |
.'<br/>'.sprintf( __( 'Reason', 'wp-simple-firewall' ).': '.$oE->getMessage() );
|
168 |
$oErrors->add( 'shield_password_policy', $sMessage );
|
@@ -251,6 +258,7 @@ class ICWP_WPSF_Processor_UserManagement_Passwords extends Modules\BaseShield\Sh
|
|
251 |
* @param string $sPass
|
252 |
* @return bool
|
253 |
* @throws \Exception
|
|
|
254 |
*/
|
255 |
protected function sendRequestToPwned( $sPass ) {
|
256 |
$oHttpReq = Services::HttpRequest();
|
@@ -306,7 +314,7 @@ class ICWP_WPSF_Processor_UserManagement_Passwords extends Modules\BaseShield\Sh
|
|
306 |
* @return bool
|
307 |
* @throws \Exception
|
308 |
*/
|
309 |
-
|
310 |
$oHttpReq = Services::HttpRequest();
|
311 |
|
312 |
$sPassHash = strtoupper( hash( 'sha1', $sPass ) );
|
@@ -320,42 +328,48 @@ class ICWP_WPSF_Processor_UserManagement_Passwords extends Modules\BaseShield\Sh
|
|
320 |
);
|
321 |
|
322 |
$sError = '';
|
|
|
323 |
if ( !$bSuccess ) {
|
324 |
$sError = 'API request failed';
|
|
|
325 |
}
|
326 |
else {
|
327 |
-
$
|
328 |
-
if ( empty( $
|
329 |
$sError = 'Unexpected Error: No response code available from the Pwned API';
|
330 |
}
|
331 |
-
else if ( $
|
332 |
$sError = 'Unexpected Error: The response from the Pwned API was unexpected';
|
333 |
}
|
334 |
else if ( empty( $oHttpReq->lastResponse->body ) ) {
|
335 |
$sError = 'Unexpected Error: The response from the Pwned API was empty';
|
336 |
}
|
337 |
else {
|
338 |
-
$
|
339 |
foreach ( array_map( 'trim', explode( "\n", trim( $oHttpReq->lastResponse->body ) ) ) as $sRow ) {
|
340 |
if ( $sSubHash.substr( strtoupper( $sRow ), 0, 35 ) == $sPassHash ) {
|
341 |
-
$
|
342 |
break;
|
343 |
}
|
344 |
}
|
345 |
-
if ( $
|
346 |
$sError = __( 'Please use a different password.', 'wp-simple-firewall' )
|
347 |
.'<br/>'.__( 'This password has been pwned.', 'wp-simple-firewall' )
|
348 |
.' '.sprintf(
|
349 |
'(<a href="%s" target="_blank">%s</a>)',
|
350 |
'https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/',
|
351 |
-
sprintf( __( '%s times', 'wp-simple-firewall' ), $
|
352 |
);
|
353 |
}
|
|
|
|
|
|
|
|
|
354 |
}
|
355 |
}
|
356 |
|
357 |
-
if (
|
358 |
-
throw new \Exception( '[Pwned Request] '.$sError );
|
359 |
}
|
360 |
|
361 |
return true;
|
49 |
$bFailed = false;
|
50 |
}
|
51 |
catch ( \Exception $oE ) {
|
52 |
+
$bFailed = ( $oE->getCode() != 999 ); // We don't fail when the PWNED API is not available.
|
53 |
}
|
54 |
$this->setPasswordFailedFlag( $oUser, $bFailed );
|
55 |
}
|
158 |
if ( !empty( $sPassword ) ) {
|
159 |
try {
|
160 |
$this->applyPasswordChecks( $sPassword );
|
161 |
+
$bChecksPassed = true;
|
162 |
+
}
|
163 |
+
catch ( \Exception $oE ) {
|
164 |
+
$bChecksPassed = ( $oE->getCode() === 999 );
|
165 |
+
}
|
166 |
+
|
167 |
+
if ( $bChecksPassed ) {
|
168 |
if ( Services::WpUsers()->isUserLoggedIn() ) {
|
169 |
$this->getCon()->getCurrentUserMeta()->pass_check_failed_at = 0;
|
170 |
}
|
171 |
}
|
172 |
+
else {
|
173 |
$sMessage = __( 'Your security administrator has imposed requirements for password quality.', 'wp-simple-firewall' )
|
174 |
.'<br/>'.sprintf( __( 'Reason', 'wp-simple-firewall' ).': '.$oE->getMessage() );
|
175 |
$oErrors->add( 'shield_password_policy', $sMessage );
|
258 |
* @param string $sPass
|
259 |
* @return bool
|
260 |
* @throws \Exception
|
261 |
+
* @deprecated 8.1.2
|
262 |
*/
|
263 |
protected function sendRequestToPwned( $sPass ) {
|
264 |
$oHttpReq = Services::HttpRequest();
|
314 |
* @return bool
|
315 |
* @throws \Exception
|
316 |
*/
|
317 |
+
private function sendRequestToPwnedRange( $sPass ) {
|
318 |
$oHttpReq = Services::HttpRequest();
|
319 |
|
320 |
$sPassHash = strtoupper( hash( 'sha1', $sPass ) );
|
328 |
);
|
329 |
|
330 |
$sError = '';
|
331 |
+
$nErrorCode = 2; // Default To Error
|
332 |
if ( !$bSuccess ) {
|
333 |
$sError = 'API request failed';
|
334 |
+
$nErrorCode = 999; // We don't fail PWNED passwords on failed API requests.
|
335 |
}
|
336 |
else {
|
337 |
+
$nHttpCode = $oHttpReq->lastResponse->getCode();
|
338 |
+
if ( empty( $nHttpCode ) ) {
|
339 |
$sError = 'Unexpected Error: No response code available from the Pwned API';
|
340 |
}
|
341 |
+
else if ( $nHttpCode != 200 ) {
|
342 |
$sError = 'Unexpected Error: The response from the Pwned API was unexpected';
|
343 |
}
|
344 |
else if ( empty( $oHttpReq->lastResponse->body ) ) {
|
345 |
$sError = 'Unexpected Error: The response from the Pwned API was empty';
|
346 |
}
|
347 |
else {
|
348 |
+
$nPwnedCount = 0;
|
349 |
foreach ( array_map( 'trim', explode( "\n", trim( $oHttpReq->lastResponse->body ) ) ) as $sRow ) {
|
350 |
if ( $sSubHash.substr( strtoupper( $sRow ), 0, 35 ) == $sPassHash ) {
|
351 |
+
$nPwnedCount = substr( $sRow, 36 );
|
352 |
break;
|
353 |
}
|
354 |
}
|
355 |
+
if ( $nPwnedCount > 0 ) {
|
356 |
$sError = __( 'Please use a different password.', 'wp-simple-firewall' )
|
357 |
.'<br/>'.__( 'This password has been pwned.', 'wp-simple-firewall' )
|
358 |
.' '.sprintf(
|
359 |
'(<a href="%s" target="_blank">%s</a>)',
|
360 |
'https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/',
|
361 |
+
sprintf( __( '%s times', 'wp-simple-firewall' ), $nPwnedCount )
|
362 |
);
|
363 |
}
|
364 |
+
else {
|
365 |
+
// Success: Password is not pwned
|
366 |
+
$nErrorCode = 0;
|
367 |
+
}
|
368 |
}
|
369 |
}
|
370 |
|
371 |
+
if ( $nErrorCode != 0 ) {
|
372 |
+
throw new \Exception( '[Pwned Request] '.$sError, $nErrorCode );
|
373 |
}
|
374 |
|
375 |
return true;
|
@@ -1,5 +1,6 @@
|
|
1 |
<?php
|
2 |
|
|
|
3 |
use FernleafSystems\Wordpress\Services\Services;
|
4 |
|
5 |
/**
|
@@ -566,6 +567,8 @@ class ICWP_WPSF_Wizard_Plugin extends ICWP_WPSF_Wizard_BaseWpsf {
|
|
566 |
private function wizardOptin() {
|
567 |
$oReq = Services::Request();
|
568 |
$oMod = $this->getCon()->getModule_Plugin();
|
|
|
|
|
569 |
|
570 |
$bSuccess = false;
|
571 |
$sMessage = __( 'No changes were made as no option was selected', 'wp-simple-firewall' );
|
@@ -586,7 +589,7 @@ class ICWP_WPSF_Wizard_Plugin extends ICWP_WPSF_Wizard_BaseWpsf {
|
|
586 |
|
587 |
if ( !empty( $sInput ) ) {
|
588 |
$bEnabled = $sInput === 'Y';
|
589 |
-
$
|
590 |
$bSuccess = true;
|
591 |
$sMessage = __( 'Preferences have been saved.', 'wp-simple-firewall' );
|
592 |
}
|
@@ -646,8 +649,9 @@ class ICWP_WPSF_Wizard_Plugin extends ICWP_WPSF_Wizard_BaseWpsf {
|
|
646 |
private function wizardConfirmDelete() {
|
647 |
$bDelete = Services::Request()->post( 'ConfirmDelete' ) === 'Y';
|
648 |
if ( $bDelete ) {
|
649 |
-
$
|
650 |
-
|
|
|
651 |
->getQueryDeleter();
|
652 |
foreach ( $this->getGdprSearchItems() as $sItem ) {
|
653 |
$oDeleter->reset()
|
@@ -737,8 +741,9 @@ class ICWP_WPSF_Wizard_Plugin extends ICWP_WPSF_Wizard_BaseWpsf {
|
|
737 |
* @return array[]
|
738 |
*/
|
739 |
private function runGdprSearch() {
|
740 |
-
$
|
741 |
-
|
|
|
742 |
->getQuerySelector()
|
743 |
->setResultsAsVo( false );
|
744 |
|
1 |
<?php
|
2 |
|
3 |
+
use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
|
4 |
use FernleafSystems\Wordpress\Services\Services;
|
5 |
|
6 |
/**
|
567 |
private function wizardOptin() {
|
568 |
$oReq = Services::Request();
|
569 |
$oMod = $this->getCon()->getModule_Plugin();
|
570 |
+
/** @var Plugin\Options $oOpts */
|
571 |
+
$oOpts = $this->getOptions();
|
572 |
|
573 |
$bSuccess = false;
|
574 |
$sMessage = __( 'No changes were made as no option was selected', 'wp-simple-firewall' );
|
589 |
|
590 |
if ( !empty( $sInput ) ) {
|
591 |
$bEnabled = $sInput === 'Y';
|
592 |
+
$oOpts->setPluginTrackingPermission( $bEnabled );
|
593 |
$bSuccess = true;
|
594 |
$sMessage = __( 'Preferences have been saved.', 'wp-simple-firewall' );
|
595 |
}
|
649 |
private function wizardConfirmDelete() {
|
650 |
$bDelete = Services::Request()->post( 'ConfirmDelete' ) === 'Y';
|
651 |
if ( $bDelete ) {
|
652 |
+
$oDeleter = $this->getCon()
|
653 |
+
->getModule_AuditTrail()
|
654 |
+
->getDbHandler_AuditTrail()
|
655 |
->getQueryDeleter();
|
656 |
foreach ( $this->getGdprSearchItems() as $sItem ) {
|
657 |
$oDeleter->reset()
|
741 |
* @return array[]
|
742 |
*/
|
743 |
private function runGdprSearch() {
|
744 |
+
$oFinder = $this->getCon()
|
745 |
+
->getModule_AuditTrail()
|
746 |
+
->getDbHandler_AuditTrail()
|
747 |
->getQuerySelector()
|
748 |
->setResultsAsVo( false );
|
749 |
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<h3 style="text-align: center;">{{ strings.title|raw }}</h3>
|
2 |
+
<ul>
|
3 |
+
{% for line in strings.lines %}
|
4 |
+
<li>{{ line }}</li>
|
5 |
+
{% endfor %}
|
6 |
+
</ul>
|
7 |
+
<p>{{ strings.time_remaining }}: <span id="TimeRemaining">{{ vars.remaining }}</span></p>
|
8 |
+
<script type="text/javascript">
|
9 |
+
var nRemaining = {{ vars.remaining }};
|
10 |
+
|
11 |
+
var timeout = function () {
|
12 |
+
nRemaining--;
|
13 |
+
if ( nRemaining < 1 ) {
|
14 |
+
location.reload();
|
15 |
+
}
|
16 |
+
else {
|
17 |
+
document.getElementById( 'TimeRemaining' ).innerHTML = nRemaining;
|
18 |
+
}
|
19 |
+
|
20 |
+
setTimeout( timeout, 1000 );
|
21 |
+
};
|
22 |
+
timeout();
|
23 |
+
</script>
|
24 |
+
<style>
|
25 |
+
p {
|
26 |
+
margin: 10px 0 !important;
|
27 |
+
}
|
28 |
+
</style>
|
29 |
+
<div style="">
|
30 |
+
<form method="get" action="{{ vars.login_url }}">
|
31 |
+
<p><label>
|
32 |
+
<input type="checkbox" name="cooldown_bypass" value="1" />
|
33 |
+
{{ strings.understand }}
|
34 |
+
</label></p>
|
35 |
+
<p><button type="submit">{{ strings.button }}</button></p>
|
36 |
+
</form>
|
37 |
+
</div>
|
@@ -31,12 +31,12 @@
|
|
31 |
<div id="FooterWizardBanner" class="container-fluid">
|
32 |
<div id="WizardBanner" class="row">
|
33 |
<div class="col-xl-5 offset-xl-1 col-6">
|
34 |
-
<h6 class="text-left">
|
35 |
-
<p>
|
36 |
</div>
|
37 |
<div class="offset-1 col-3">
|
38 |
<a href="{{ hrefs.go_pro }}" target="_blank" class="btn btn-success">
|
39 |
-
|
40 |
</div>
|
41 |
</div>
|
42 |
</div>
|
31 |
<div id="FooterWizardBanner" class="container-fluid">
|
32 |
<div id="WizardBanner" class="row">
|
33 |
<div class="col-xl-5 offset-xl-1 col-6">
|
34 |
+
<h6 class="text-left">{{ strings.join_thousands_H }}</h6>
|
35 |
+
<p>{{ strings.pro_features }}: {{ strings.join_thousands_P }}</p>
|
36 |
</div>
|
37 |
<div class="offset-1 col-3">
|
38 |
<a href="{{ hrefs.go_pro }}" target="_blank" class="btn btn-success">
|
39 |
+
{{ strings.get_pro_protection }} →</a>
|
40 |
</div>
|
41 |
</div>
|
42 |
</div>
|
@@ -71,12 +71,12 @@
|
|
71 |
<label class="form-label" for="_fDateFrom" title="{{ strings.show_after }}...">
|
72 |
{{ strings.time_since }}:</label>
|
73 |
<input type="text" class="form-control date-picker" id="_fDateFrom"
|
74 |
-
name="fDateFrom" value="" placeholder="
|
75 |
|
76 |
<label class="form-label" for="_fDateTo" title="{{ strings.show_before }}...">
|
77 |
{{ strings.time_until }}:</label>
|
78 |
<input type="text" class="form-control date-picker" id="_fDateTo"
|
79 |
-
name="fDateTo" value="" placeholder="
|
80 |
</div>
|
81 |
|
82 |
<div class="form-group text-right">
|
71 |
<label class="form-label" for="_fDateFrom" title="{{ strings.show_after }}...">
|
72 |
{{ strings.time_since }}:</label>
|
73 |
<input type="text" class="form-control date-picker" id="_fDateFrom"
|
74 |
+
name="fDateFrom" value="" placeholder="{{ strings.yyyymmdd }}">
|
75 |
|
76 |
<label class="form-label" for="_fDateTo" title="{{ strings.show_before }}...">
|
77 |
{{ strings.time_until }}:</label>
|
78 |
<input type="text" class="form-control date-picker" id="_fDateTo"
|
79 |
+
name="fDateTo" value="" placeholder="{{ strings.yyyymmdd }}">
|
80 |
</div>
|
81 |
|
82 |
<div class="form-group text-right">
|
@@ -18,7 +18,8 @@
|
|
18 |
<th colspan="4">
|
19 |
<h6 class="m-0">
|
20 |
{{ notice_section.title }}
|
21 |
-
<span class="text-muted"
|
|
|
22 |
</h6>
|
23 |
</th>
|
24 |
</tr>
|
@@ -50,7 +51,7 @@
|
|
50 |
</div>
|
51 |
{% else %}
|
52 |
<div class="alert alert-success">
|
53 |
-
|
54 |
</div>
|
55 |
{% endif %}
|
56 |
|
18 |
<th colspan="4">
|
19 |
<h6 class="m-0">
|
20 |
{{ notice_section.title }}
|
21 |
+
<span class="text-muted"
|
22 |
+
style="font-size: smaller;">({{ notice_section.count }})</span>
|
23 |
</h6>
|
24 |
</th>
|
25 |
</tr>
|
51 |
</div>
|
52 |
{% else %}
|
53 |
<div class="alert alert-success">
|
54 |
+
{{ strings.no_security_notices }} {{ strings.this_is_wonderful }} :)
|
55 |
</div>
|
56 |
{% endif %}
|
57 |
|