Shield Security for WordPress - Version 11.5.1

Version Description

Download this release

Release Info

Developer paultgoodchild
Plugin Icon 128x128 Shield Security for WordPress
Version 11.5.1
Comparing to
See all releases

Code changes from version 11.5.0 to 11.5.1

cl.json CHANGED
@@ -101,9 +101,10 @@
101
  "description": []
102
  },
103
  {
104
- "type": "fixed",
105
- "title": "Sidebar navigation bugs.",
106
- "description": []
 
107
  }
108
  ]
109
  },
101
  "description": []
102
  },
103
  {
104
+ "type": "improved",
105
+ "title": "Prevent overloading ShieldNET API in some cases.",
106
+ "description": [],
107
+ "patch": "11.5.1"
108
  }
109
  ]
110
  },
icwp-wpsf.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://shsec.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
- * Version: 11.5.0
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages
9
  * Author: Shield Security
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://shsec.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
+ * Version: 11.5.1
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages
9
  * Author: Shield Security
plugin-spec.php CHANGED
@@ -1,8 +1,8 @@
1
  {
2
  "properties": {
3
- "version": "11.5.0",
4
- "release_timestamp": 1627376940,
5
- "build": "202107.2701",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield Security",
@@ -92,19 +92,19 @@
92
  "plugin"
93
  ]
94
  },
95
- "datatables-bootstrap": {
96
  "url": "https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap4.min.css",
97
  "deps": [
98
  "bootstrap"
99
  ]
100
  },
101
- "datatables-select": {
102
  "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
103
  "deps": [
104
  "datatables-bootstrap"
105
  ]
106
  },
107
- "datatables-buttons": {
108
  "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
109
  "deps": [
110
  "datatables-bootstrap"
@@ -149,7 +149,7 @@
149
  "footer": true
150
  },
151
  "shield/mainwp": {},
152
- "shield/scanners": {
153
  "deps": [
154
  "datatables-select",
155
  "datatables-buttons",
@@ -157,8 +157,8 @@
157
  "tp/highlightjs"
158
  ]
159
  },
160
- "tp/highlightjs": {
161
- "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
162
  }
163
  },
164
  "js": {
@@ -193,19 +193,19 @@
193
  "wp-jquery"
194
  ]
195
  },
196
- "datatables-bootstrap": {
197
  "url": "https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js",
198
  "deps": [
199
  "datatables"
200
  ]
201
  },
202
- "datatables-select": {
203
  "url": "https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js",
204
  "deps": [
205
  "datatables"
206
  ]
207
  },
208
- "datatables-buttons": {
209
  "url": "https://cdn.datatables.net/buttons/1.7.1/js/dataTables.buttons.min.js",
210
  "deps": [
211
  "datatables-bootstrap"
@@ -290,12 +290,12 @@
290
  "plugin"
291
  ]
292
  },
293
- "shield/scanners": {
294
  "deps": [
295
  "shield/scantables"
296
  ]
297
  },
298
- "shield/scantables": {
299
  "deps": [
300
  "datatables-select",
301
  "datatables-buttons",
@@ -309,7 +309,7 @@
309
  "introjs"
310
  ]
311
  },
312
- "shield/notbot": {
313
  },
314
  "shield/scans": {
315
  "deps": [
@@ -360,8 +360,8 @@
360
  "defer": "defer"
361
  }
362
  },
363
- "tp/highlightjs": {
364
- "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/highlight.min.js"
365
  }
366
  }
367
  }
@@ -417,7 +417,7 @@
417
  },
418
  {
419
  "name": "↑ Go Pro ↑",
420
- "title": "For just $1/month. Seriously.",
421
  "href": "https://shsec.io/d8",
422
  "target": "_blank",
423
  "highlight": true,
1
  {
2
  "properties": {
3
+ "version": "11.5.1",
4
+ "release_timestamp": 1627565600,
5
+ "build": "202107.2901",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield Security",
92
  "plugin"
93
  ]
94
  },
95
+ "datatables-bootstrap": {
96
  "url": "https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap4.min.css",
97
  "deps": [
98
  "bootstrap"
99
  ]
100
  },
101
+ "datatables-select": {
102
  "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
103
  "deps": [
104
  "datatables-bootstrap"
105
  ]
106
  },
107
+ "datatables-buttons": {
108
  "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
109
  "deps": [
110
  "datatables-bootstrap"
149
  "footer": true
150
  },
151
  "shield/mainwp": {},
152
+ "shield/scanners": {
153
  "deps": [
154
  "datatables-select",
155
  "datatables-buttons",
157
  "tp/highlightjs"
158
  ]
159
  },
160
+ "tp/highlightjs": {
161
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
162
  }
163
  },
164
  "js": {
193
  "wp-jquery"
194
  ]
195
  },
196
+ "datatables-bootstrap": {
197
  "url": "https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js",
198
  "deps": [
199
  "datatables"
200
  ]
201
  },
202
+ "datatables-select": {
203
  "url": "https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js",
204
  "deps": [
205
  "datatables"
206
  ]
207
  },
208
+ "datatables-buttons": {
209
  "url": "https://cdn.datatables.net/buttons/1.7.1/js/dataTables.buttons.min.js",
210
  "deps": [
211
  "datatables-bootstrap"
290
  "plugin"
291
  ]
292
  },
293
+ "shield/scanners": {
294
  "deps": [
295
  "shield/scantables"
296
  ]
297
  },
298
+ "shield/scantables": {
299
  "deps": [
300
  "datatables-select",
301
  "datatables-buttons",
309
  "introjs"
310
  ]
311
  },
312
+ "shield/notbot": {
313
  },
314
  "shield/scans": {
315
  "deps": [
360
  "defer": "defer"
361
  }
362
  },
363
+ "tp/highlightjs": {
364
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/highlight.min.js"
365
  }
366
  }
367
  }
417
  },
418
  {
419
  "name": "↑ Go Pro ↑",
420
+ "title": "Get All PRO Security Features",
421
  "href": "https://shsec.io/d8",
422
  "target": "_blank",
423
  "highlight": true,
plugin.json ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "properties": {
3
+ "version": "11.5.1",
4
+ "release_timestamp": 1627565600,
5
+ "build": "202107.2901",
6
+ "slug_parent": "icwp",
7
+ "slug_plugin": "wpsf",
8
+ "human_name": "Shield Security",
9
+ "menu_title": "Shield",
10
+ "text_domain": "wp-simple-firewall",
11
+ "base_permissions": "manage_options",
12
+ "wpms_network_admin_only": true,
13
+ "logging_enabled": true,
14
+ "show_dashboard_widget": true,
15
+ "show_admin_bar_menu": true,
16
+ "autoupdate": "confidence",
17
+ "autoupdate_days": 2,
18
+ "options_encoding": "json",
19
+ "enable_premium": true
20
+ },
21
+ "requirements": {
22
+ "php": "7.0",
23
+ "wordpress": "3.7"
24
+ },
25
+ "upgrade_reqs": {
26
+ "10.0": {
27
+ "php": "7.0",
28
+ "wp": "3.5.2"
29
+ }
30
+ },
31
+ "paths": {
32
+ "source": "src",
33
+ "autoload": "lib/vendor/autoload.php",
34
+ "assets": "resources",
35
+ "languages": "languages",
36
+ "templates": "templates",
37
+ "custom_templates": "shield_templates",
38
+ "flags": "flags",
39
+ "cache": "shield"
40
+ },
41
+ "includes": {
42
+ "admin": {
43
+ "css": [
44
+ "global-plugin"
45
+ ],
46
+ "js": [
47
+ "global-plugin"
48
+ ]
49
+ },
50
+ "plugin_admin": {
51
+ "css": [
52
+ "select2",
53
+ "plugin",
54
+ "jquery/featherlight",
55
+ "introjs",
56
+ "shield/scanners"
57
+ ],
58
+ "js": [
59
+ "select2",
60
+ "plugin",
61
+ "jquery/featherlight",
62
+ "jquery/fileDownload",
63
+ "shield/tours",
64
+ "bootstrap-select",
65
+ "shield/scanners"
66
+ ]
67
+ },
68
+ "frontend": {
69
+ "css": [],
70
+ "js": []
71
+ },
72
+ "register": {
73
+ "css": {
74
+ "bootstrap": {
75
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"
76
+ },
77
+ "bootstrap-datepicker": {
78
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.min.css",
79
+ "deps": [
80
+ "bootstrap"
81
+ ]
82
+ },
83
+ "bootstrap-select": {
84
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/css/bootstrap-select.min.css",
85
+ "deps": [
86
+ "bootstrap"
87
+ ]
88
+ },
89
+ "select2": {
90
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css",
91
+ "deps": [
92
+ "plugin"
93
+ ]
94
+ },
95
+ "datatables-bootstrap": {
96
+ "url": "https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap4.min.css",
97
+ "deps": [
98
+ "bootstrap"
99
+ ]
100
+ },
101
+ "datatables-select": {
102
+ "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
103
+ "deps": [
104
+ "datatables-bootstrap"
105
+ ]
106
+ },
107
+ "datatables-buttons": {
108
+ "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
109
+ "deps": [
110
+ "datatables-bootstrap"
111
+ ]
112
+ },
113
+ "global-plugin": {},
114
+ "plugin": {
115
+ "deps": [
116
+ "bootstrap",
117
+ "global-plugin"
118
+ ]
119
+ },
120
+ "shield/wizard": {
121
+ "deps": [
122
+ "bootstrap",
123
+ "global-plugin"
124
+ ]
125
+ },
126
+ "jquery/featherlight": {
127
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.13/featherlight.min.css"
128
+ },
129
+ "chartist": {
130
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/chartist/0.11.4/chartist.min.css"
131
+ },
132
+ "chartist-plugin-legend": {
133
+ "deps": [
134
+ "chartist"
135
+ ]
136
+ },
137
+ "introjs": {
138
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/introjs.min.css"
139
+ },
140
+ "shield/charts": {
141
+ "deps": [
142
+ "plugin"
143
+ ]
144
+ },
145
+ "shield/dialog": {
146
+ "deps": [
147
+ "wp-wp-jquery-ui-dialog"
148
+ ],
149
+ "footer": true
150
+ },
151
+ "shield/mainwp": {},
152
+ "shield/scanners": {
153
+ "deps": [
154
+ "datatables-select",
155
+ "datatables-buttons",
156
+ "datatables-bootstrap",
157
+ "tp/highlightjs"
158
+ ]
159
+ },
160
+ "tp/highlightjs": {
161
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
162
+ }
163
+ },
164
+ "js": {
165
+ "bootstrap": {
166
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.bundle.min.js",
167
+ "deps": [
168
+ "wp-jquery"
169
+ ]
170
+ },
171
+ "select2": {
172
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js",
173
+ "deps": [
174
+ "plugin"
175
+ ]
176
+ },
177
+ "bootstrap-datepicker": {
178
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.min.js",
179
+ "deps": [
180
+ "bootstrap"
181
+ ]
182
+ },
183
+ "bootstrap-select": {
184
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/js/bootstrap-select.min.js",
185
+ "deps": [
186
+ "bootstrap"
187
+ ]
188
+ },
189
+ "datatables": {
190
+ "url": "https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js",
191
+ "deps": [
192
+ "bootstrap",
193
+ "wp-jquery"
194
+ ]
195
+ },
196
+ "datatables-bootstrap": {
197
+ "url": "https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js",
198
+ "deps": [
199
+ "datatables"
200
+ ]
201
+ },
202
+ "datatables-select": {
203
+ "url": "https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js",
204
+ "deps": [
205
+ "datatables"
206
+ ]
207
+ },
208
+ "datatables-buttons": {
209
+ "url": "https://cdn.datatables.net/buttons/1.7.1/js/dataTables.buttons.min.js",
210
+ "deps": [
211
+ "datatables-bootstrap"
212
+ ]
213
+ },
214
+ "global-plugin": {
215
+ "deps": [
216
+ "wp-jquery"
217
+ ]
218
+ },
219
+ "plugin": {
220
+ "deps": [
221
+ "bootstrap",
222
+ "datatables-bootstrap",
223
+ "global-plugin",
224
+ "shield/navigation",
225
+ "base64.min",
226
+ "lz-string.min"
227
+ ]
228
+ },
229
+ "base64.min": {
230
+ "url": "https://cdn.jsdelivr.net/npm/js-base64@2.6.4/base64.min.js"
231
+ },
232
+ "lz-string.min": {},
233
+ "jquery/fileDownload": {},
234
+ "jquery/steps": {
235
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/jquery-steps/1.1.0/jquery.steps.min.js"
236
+ },
237
+ "jquery/featherlight": {
238
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.13/featherlight.min.js"
239
+ },
240
+ "chartist": {
241
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/chartist/0.11.4/chartist.min.js"
242
+ },
243
+ "chartist-plugin-legend": {
244
+ "deps": [
245
+ "chartist"
246
+ ]
247
+ },
248
+ "introjs": {
249
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/intro.min.js"
250
+ },
251
+ "shield/charts": {
252
+ "deps": [
253
+ "chartist",
254
+ "chartist-plugin-legend",
255
+ "plugin"
256
+ ]
257
+ },
258
+ "shuffle": {
259
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/Shuffle/5.3.0/shuffle.min.js"
260
+ },
261
+ "shield/shuffle": {
262
+ "deps": [
263
+ "shuffle"
264
+ ]
265
+ },
266
+ "shield/dialog": {
267
+ "deps": [
268
+ "wp-jquery-ui-dialog"
269
+ ]
270
+ },
271
+ "shield/comments": {
272
+ "deps": [
273
+ "wp-jquery"
274
+ ],
275
+ "footer": true
276
+ },
277
+ "shield/loginbot": {
278
+ "deps": [
279
+ "wp-jquery"
280
+ ]
281
+ },
282
+ "shield/navigation": {},
283
+ "shield/secadmin": {
284
+ "deps": [
285
+ "wp-jquery"
286
+ ]
287
+ },
288
+ "shield/tables": {
289
+ "deps": [
290
+ "plugin"
291
+ ]
292
+ },
293
+ "shield/scanners": {
294
+ "deps": [
295
+ "shield/scantables"
296
+ ]
297
+ },
298
+ "shield/scantables": {
299
+ "deps": [
300
+ "datatables-select",
301
+ "datatables-buttons",
302
+ "datatables-bootstrap",
303
+ "tp/highlightjs"
304
+ ]
305
+ },
306
+ "shield/tours": {
307
+ "deps": [
308
+ "plugin",
309
+ "introjs"
310
+ ]
311
+ },
312
+ "shield/notbot": {
313
+ },
314
+ "shield/scans": {
315
+ "deps": [
316
+ "shield/tables"
317
+ ]
318
+ },
319
+ "shield/import": {
320
+ "deps": [
321
+ "plugin"
322
+ ]
323
+ },
324
+ "shield/ipanalyse": {
325
+ "deps": [
326
+ "plugin"
327
+ ]
328
+ },
329
+ "shield/mainwp": {
330
+ "deps": [
331
+ "wp-jquery"
332
+ ]
333
+ },
334
+ "shield/userprofile": {
335
+ "deps": [
336
+ "u2f-bundle",
337
+ "shield/dialog"
338
+ ],
339
+ "footer": true
340
+ },
341
+ "shield/wizard": {
342
+ "deps": [
343
+ "bootstrap",
344
+ "global-plugin",
345
+ "jquery/steps"
346
+ ]
347
+ },
348
+ "u2f-bundle": {},
349
+ "tp/grecaptcha": {
350
+ "url": "https://www.google.com/recaptcha/api.js",
351
+ "attributes": {
352
+ "async": "async",
353
+ "defer": "defer"
354
+ }
355
+ },
356
+ "tp/hcaptcha": {
357
+ "url": "https://hcaptcha.com/1/api.js",
358
+ "attributes": {
359
+ "async": "async",
360
+ "defer": "defer"
361
+ }
362
+ },
363
+ "tp/highlightjs": {
364
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/highlight.min.js"
365
+ }
366
+ }
367
+ }
368
+ },
369
+ "menu": {
370
+ "show": true,
371
+ "title": "Shield Security",
372
+ "top_level": true,
373
+ "do_submenu_fix": true,
374
+ "icon_image": "pluginlogo_16x16.png",
375
+ "has_submenu": true
376
+ },
377
+ "labels": {
378
+ "Name": "Shield Security",
379
+ "Description": "Ultimate WP Security Protection - Scans, 2FA, Firewall, SPAM, Audit Trail, Security Admin, and so much more.",
380
+ "Title": "Shield Security",
381
+ "Author": "Shield Security",
382
+ "AuthorName": "Shield Security",
383
+ "PluginURI": "https://shsec.io/2f",
384
+ "AuthorURI": "https://shsec.io/bv",
385
+ "icon_url_16x16": "pluginlogo_16x16.png",
386
+ "icon_url_32x32": "pluginlogo_32x32.png",
387
+ "icon_url_128x128": "pluginlogo_128x128.png"
388
+ },
389
+ "meta": {
390
+ "url_repo_home": "https://shsec.io/eh",
391
+ "announcekit_changelog_id": "3ObUvS",
392
+ "privacy_policy_href": "https://shsec.io/shieldprivacypolicy"
393
+ },
394
+ "plugin_meta": [
395
+ {
396
+ "name": "5✩ Rate This Plugin",
397
+ "href": "https://shsec.io/wpsf29"
398
+ }
399
+ ],
400
+ "version_upgrades": [
401
+ "9.1.1",
402
+ "9.2.0",
403
+ "9.2.2",
404
+ "10.1.0",
405
+ "10.2.1",
406
+ "11.2.0"
407
+ ],
408
+ "action_links": {
409
+ "remove": null,
410
+ "add": [
411
+ {
412
+ "name": "Security Dashboard",
413
+ "title": "Go To Security Dashboard",
414
+ "href": "getPluginUrl_DashboardHome",
415
+ "target": "_top",
416
+ "show": "always"
417
+ },
418
+ {
419
+ "name": "↑ Go Pro ↑",
420
+ "title": "Get All PRO Security Features",
421
+ "href": "https://shsec.io/d8",
422
+ "target": "_blank",
423
+ "highlight": true,
424
+ "show": "free"
425
+ }
426
+ ]
427
+ }
428
+ }
readme.txt CHANGED
@@ -8,7 +8,7 @@ Requires at least: 3.7
8
  Requires PHP: 7.0
9
  Recommended PHP: 7.4
10
  Tested up to: 5.8
11
- Stable tag: 11.5.0
12
 
13
  No-Nonsense Security Hardening that protects WordPress against hackers, malicious bots, and spammers (no captchas!). Now with exclusive ShieldNET Technology.
14
 
8
  Requires PHP: 7.0
9
  Recommended PHP: 7.4
10
  Tested up to: 5.8
11
+ Stable tag: 11.5.1
12
 
13
  No-Nonsense Security Hardening that protects WordPress against hackers, malicious bots, and spammers (no captchas!). Now with exclusive ShieldNET Technology.
14
 
src/config/feature-hack_protect.php CHANGED
@@ -410,7 +410,8 @@
410
  "*/error_log",
411
  "*/php_error_log",
412
  "*/mail.log",
413
- "*/php_mail.log"
 
414
  ],
415
  "type": "array",
416
  "link_info": "",
@@ -420,14 +421,6 @@
420
  "summary": "Scan File and Folder Exclusions",
421
  "description": "Scan File and Folder Exclusions."
422
  },
423
- {
424
- "key": "snapshot_users",
425
- "section": "section_non_ui",
426
- "transferable": false,
427
- "sensitive": true,
428
- "type": "array",
429
- "default": []
430
- },
431
  {
432
  "key": "scans_to_build",
433
  "section": "section_non_ui",
410
  "*/error_log",
411
  "*/php_error_log",
412
  "*/mail.log",
413
+ "*/php_mail.log",
414
+ "*/sucuri-*.php"
415
  ],
416
  "type": "array",
417
  "link_info": "",
421
  "summary": "Scan File and Folder Exclusions",
422
  "description": "Scan File and Folder Exclusions."
423
  },
 
 
 
 
 
 
 
 
424
  {
425
  "key": "scans_to_build",
426
  "section": "section_non_ui",
src/lib/src/Controller/Config/Ops/Read.php CHANGED
@@ -13,10 +13,14 @@ class Read {
13
  */
14
  public static function FromFile( string $path ) :array {
15
  $FS = Services::WpFs();
16
- foreach ( [ 'json', 'php' ] as $sExt ) {
17
- $cfgFile = Services::Data()->addExtensionToFilePath( $path, $sExt );
18
  if ( $FS->isFile( $cfgFile ) ) {
19
- return self::FromString( $FS->getFileContentUsingInclude( $cfgFile ) );
 
 
 
 
20
  }
21
  }
22
  throw new \LogicException( 'No config file present for slug: '.basename( $path ) );
13
  */
14
  public static function FromFile( string $path ) :array {
15
  $FS = Services::WpFs();
16
+ foreach ( [ 'json', 'php' ] as $ext ) {
17
+ $cfgFile = Services::Data()->addExtensionToFilePath( $path, $ext );
18
  if ( $FS->isFile( $cfgFile ) ) {
19
+ $content = $FS->getFileContent( $cfgFile );
20
+ if ( empty( $content ) ) {
21
+ $content = $FS->getFileContentUsingInclude( $cfgFile );
22
+ }
23
+ return self::FromString( $content );
24
  }
25
  }
26
  throw new \LogicException( 'No config file present for slug: '.basename( $path ) );
src/lib/src/Controller/Controller.php CHANGED
@@ -846,9 +846,16 @@ class Controller extends DynPropertiesClass {
846
  * @throws \Exception
847
  */
848
  private function loadConfig() :Config\ConfigVO {
849
- $this->cfg = ( new Config\Ops\LoadConfig( $this->getPathPluginSpec(), $this->getConfigStoreKey() ) )
850
- ->setCon( $this )
851
- ->run();
 
 
 
 
 
 
 
852
  $this->rebuild_options = $this->cfg->rebuilt;
853
  return $this->cfg;
854
  }
@@ -1046,8 +1053,8 @@ class Controller extends DynPropertiesClass {
1046
  return path_join( $this->getPath_Templates(), $template );
1047
  }
1048
 
1049
- private function getPathPluginSpec() :string {
1050
- return path_join( $this->getRootDir(), 'plugin-spec.php' );
1051
  }
1052
 
1053
  public function getRootDir() :string {
846
  * @throws \Exception
847
  */
848
  private function loadConfig() :Config\ConfigVO {
849
+ try {
850
+ $this->cfg = ( new Config\Ops\LoadConfig( $this->getPathPluginSpec( true ), $this->getConfigStoreKey() ) )
851
+ ->setCon( $this )
852
+ ->run();
853
+ }
854
+ catch ( \Exception $e ) {
855
+ $this->cfg = ( new Config\Ops\LoadConfig( $this->getPathPluginSpec( false ), $this->getConfigStoreKey() ) )
856
+ ->setCon( $this )
857
+ ->run();
858
+ }
859
  $this->rebuild_options = $this->cfg->rebuilt;
860
  return $this->cfg;
861
  }
1053
  return path_join( $this->getPath_Templates(), $template );
1054
  }
1055
 
1056
+ private function getPathPluginSpec( bool $asJSON = true ) :string {
1057
+ return path_join( $this->getRootDir(), $asJSON ? 'plugin.json' : 'plugin-spec.php' );
1058
  }
1059
 
1060
  public function getRootDir() :string {
src/lib/src/Modules/HackGuard/Lib/Snapshots/Store.php CHANGED
@@ -96,6 +96,18 @@ class Store {
96
  return is_array( $this->snapMeta ) ? $this->snapMeta : [];
97
  }
98
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  /**
100
  * @return $this
101
  */
@@ -183,13 +195,25 @@ class Store {
183
  implode( "\n", $toWrite ),
184
  true
185
  );
186
- Services::WpFs()->putFileContent(
 
 
 
 
 
 
 
 
 
 
 
 
187
  $this->getSnapStoreMetaPath(),
188
  json_encode( $this->getSnapMeta() ),
189
  true
190
  );
191
  }
192
- return $this;
193
  }
194
 
195
  /**
96
  return is_array( $this->snapMeta ) ? $this->snapMeta : [];
97
  }
98
 
99
+ public function verify() :bool {
100
+ $verified = false;
101
+ $meta = $this->getSnapMeta();
102
+ if ( !empty( $meta ) ) {
103
+ $asset = $this->getAsset();
104
+ $verified = $meta[ 'version' ] === $asset->Version
105
+ && $meta[ 'unique_id' ] ===
106
+ ( $asset->asset_type === 'plugin' ? $asset->file : $asset->stylesheet );
107
+ }
108
+ return $verified;
109
+ }
110
+
111
  /**
112
  * @return $this
113
  */
195
  implode( "\n", $toWrite ),
196
  true
197
  );
198
+ $this->saveMeta();
199
+ }
200
+ return $this;
201
+ }
202
+
203
+ /**
204
+ * @return bool
205
+ * @throws \Exception
206
+ */
207
+ public function saveMeta() :bool {
208
+ $success = false;
209
+ if ( $this->isReady() ) {
210
+ $success = (bool)Services::WpFs()->putFileContent(
211
  $this->getSnapStoreMetaPath(),
212
  json_encode( $this->getSnapMeta() ),
213
  true
214
  );
215
  }
216
+ return $success;
217
  }
218
 
219
  /**
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/Build.php CHANGED
@@ -3,7 +3,6 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots;
6
- use FernleafSystems\Wordpress\Services\Core\VOs\Assets\WpPluginVo;
7
  use FernleafSystems\Wordpress\Services\Services;
8
 
9
  class Build extends BaseAction {
@@ -36,19 +35,17 @@ class Build extends BaseAction {
36
  ->setAsset( $asset )
37
  ->run();
38
  $store->setSnapData( $hashes )
39
- ->setSnapMeta( $meta )
40
- ->save();
41
  }
42
  }
43
 
44
- /**
45
- * @return array
46
- */
47
- private function generateMeta() {
48
  $asset = $this->getAsset();
49
  $meta = [
50
  'ts' => Services::Request()->ts(),
51
  'snap_version' => $this->getCon()->getVersion(),
 
52
  ];
53
  $meta[ 'unique_id' ] = $asset->asset_type === 'plugin' ?
54
  $asset->file
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots;
 
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
  class Build extends BaseAction {
35
  ->setAsset( $asset )
36
  ->run();
37
  $store->setSnapData( $hashes )
38
+ ->setSnapMeta( $meta )
39
+ ->save();
40
  }
41
  }
42
 
43
+ private function generateMeta() :array {
 
 
 
44
  $asset = $this->getAsset();
45
  $meta = [
46
  'ts' => Services::Request()->ts(),
47
  'snap_version' => $this->getCon()->getVersion(),
48
+ 'cs_hashes_at' => 0,
49
  ];
50
  $meta[ 'unique_id' ] = $asset->asset_type === 'plugin' ?
51
  $asset->file
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/ScheduleBuildAll.php CHANGED
@@ -20,10 +20,24 @@ class ScheduleBuildAll extends BaseBulk {
20
  ->setAsset( $asset )
21
  ->run();
22
 
23
- if ( $this->getCon()->isPremiumActive() && ( $asset->asset_type === 'plugin' || !$asset->is_child ) ) {
24
- ( new SubmitHashes() )
25
- ->setMod( $this->getMod() )
26
- ->run( $asset );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  }
28
  }
29
  catch ( \Exception $e ) {
@@ -33,7 +47,7 @@ class ScheduleBuildAll extends BaseBulk {
33
  }
34
 
35
  public function hookBuild() {
36
- if ( wp_next_scheduled( $this->getCronHook() ) !== false ) {
37
  add_action( $this->getCronHook(), [ $this, 'build' ] );
38
  }
39
  }
20
  ->setAsset( $asset )
21
  ->run();
22
 
23
+ $store = ( new Load() )
24
+ ->setMod( $this->getMod() )
25
+ ->setAsset( $asset )
26
+ ->run();
27
+
28
+ if ( $this->getCon()->isPremiumActive()
29
+ && $store->verify()
30
+ && ( $asset->asset_type === 'plugin' || !$asset->is_child ) ) {
31
+
32
+ $meta = $store->getSnapMeta();
33
+ if ( empty( $meta[ 'cs_hashes_at' ] ) ) {
34
+ $meta[ 'cs_hashes_at' ] = Services::Request()->ts();
35
+ if ( $store->setSnapMeta( $meta )->saveMeta() ) {
36
+ ( new SubmitHashes() )
37
+ ->setMod( $this->getMod() )
38
+ ->run( $asset );
39
+ }
40
+ }
41
  }
42
  }
43
  catch ( \Exception $e ) {
47
  }
48
 
49
  public function hookBuild() {
50
+ if ( is_main_network() && wp_next_scheduled( $this->getCronHook() ) !== false ) {
51
  add_action( $this->getCronHook(), [ $this, 'build' ] );
52
  }
53
  }