You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,24 @@
1
1
# Changelog for EngineScript Site Exporter
2
2
3
+
## 2.1.1 - Unreleased
4
+
5
+
### Security
6
+
7
+
-**Multisite Export Authorization**: Full-site export access now uses a shared permission helper. On multisite, exporter page access, export creation, secure download, and manual delete require a super admin or `manage_network_options`; single-site installs continue to require `manage_options`.
8
+
-**Per-Export Private Storage**: Each export is now staged in a random private child directory under the configured private temp export base. The exporter rejects symlinked or unsafe pre-existing directories and enforces `0700` directory permissions.
9
+
-**Private File Modes**: Sensitive export artifacts now use a private umask during export and explicit `0600` chmod verification after database dumps, compressed database payloads, file archives, manifests, final ZIPs, and protection files are created.
10
+
-**WP-CLI Trust Boundary**: WP-CLI discovery now prefers trusted system paths (`/usr/local/bin/wp`, `/usr/bin/wp`). Alternate executables must be explicitly configured with `SSE_WP_CLI_PATH` or the `sse_wp_cli_path` filter and must pass ownership and writable-mode checks.
11
+
-**Export Action Binding**: Generated download and delete actions include the private export directory identifier in their request data and nonce action so requests are tied to the generated export location.
12
+
13
+
### Architecture
14
+
15
+
-**Private Export Cleanup**: Bulk cleanup now scans generated private export directories, scheduled/manual deletion can clean up empty private export directories, and failed exports remove their private staging directory.
Copy file name to clipboardExpand all lines: README.md
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -71,16 +71,17 @@ The downloaded ZIP is named `<site>_enginescript_site_export_<timestamp>.zip`.
71
71
- WordPress 6.8 or higher
72
72
- PHP 8.2 or higher
73
73
- Write access to a private WordPress temporary directory. If your host's temp directory is inside the WordPress web root, configure `WP_TEMP_DIR` to a non-public writable path.
74
-
- WP-CLI installed at `/usr/local/bin/wp`, `/usr/bin/wp`, or as `wp-cli.phar` in the WordPress root for database exports
74
+
- WP-CLI installed at `/usr/local/bin/wp` or `/usr/bin/wp` for database exports. To use another trusted executable, define `SSE_WP_CLI_PATH`or filter `sse_wp_cli_path`; local paths must pass ownership and permission checks.
75
75
76
76
## Security Features
77
77
78
78
EngineScript Site Exporter is built with security as a priority:
79
79
80
-
-**Export Authentication**: Only authorized administrators can create and download exports
80
+
-**Export Authentication**: Only authorized administrators can create and download exports; multisite exports require a network-capable administrator
81
81
-**Secure Downloads**: All downloads are validated with WordPress nonces
82
82
-**Request Validation**: WordPress nonce validation for all admin actions
-**Private Export Storage**: Exports are staged in random private directories with `0700` directories and `0600` files
84
85
-**Automatic Deletion**: Exports are automatically cleaned up after 5 minutes
85
86
-**Security Headers**: Implements proper headers for download operations
86
87
-**Secure File Handling**: Uses WordPress Filesystem API for file operations
@@ -96,15 +97,15 @@ The plugin is designed to work with most WordPress sites, but very large sites (
96
97
Exports are staged in WordPress' temporary directory under:
97
98
`<temp-dir>/enginescript-site-exporter-exports/`
98
99
99
-
For security, the plugin refuses to export if that directory resolves inside the WordPress web root. Configure `WP_TEMP_DIR` to a private writable path if your host's default temporary directory is public.
100
+
Each export is written inside a random private child directory. For security, the plugin refuses to export if the export directory resolves inside the WordPress web root. Configure `WP_TEMP_DIR` to a private writable path if your host's default temporary directory is public.
100
101
101
102
### Why do export files disappear after 5 minutes?
102
103
103
104
For security and disk space considerations, all exports are automatically deleted after 5 minutes. This ensures sensitive site data isn't left stored indefinitely.
104
105
105
106
### Can I create multiple exports?
106
107
107
-
Yes, you can create as many exports as needed. Each will have a unique filename based on the timestamp of creation.
108
+
Yes, you can create as many exports as needed. Each export is staged in its own random private directory.
0 commit comments