Backup Restore Verifier Pro — Documentation

Guide to installing and using Backup Restore Verifier Pro for WordPress.

Contents

Current version: 1.0.6

1. Installation and requirements

  1. Upload the backup-restore-verifier-pro folder to /wp-content/plugins/, or install the zip with Plugins → Add New → Upload Plugin.
  2. Activate the plugin. Do not run it together with another edition of Backup Restore Verifier: if both are active a single notice asks you to deactivate one. Settings and backups are shared, so switching keeps everything.
  3. Open Backup Restore Verifier and click Backup Now.
  4. Configure destinations and options under Backup Restore Verifier → Advanced.
  5. If DISABLE_WP_CRON is true, set up a real system cron that requests wp-cron.php, otherwise scheduled backups do not run.

Requirements: WordPress 6.3 or newer, PHP 7.4 or newer with the ZipArchive extension. Encryption needs libsodium with Argon2id; FTP needs the PHP ftp extension. Multisite is not supported.

2. Backups

A backup is one zip with a manifest and SHA-256 checksums. Choose which components to include: database, plugins, themes, uploads.

Backups are stored in wp-content/brverify-working/, which is protected by deny rules. On Nginx, add a rule that denies direct access to that folder.

3. Restore

4. Destinations

Local protected storage is always used. You can add: S3-compatible storage (Amazon S3 and others), Backblaze B2, SFTP, FTP/FTPS, Dropbox, Google Drive, OneDrive and WebDAV. With several destinations selected, one backup goes to every one of them. A failing remote destination does not remove the finished local copy. Credentials are entered under Advanced; see External Services and Privacy below for what is sent and stored.

Large archives are uploaded in parts across requests: S3-compatible storage and Backblaze B2 use multipart uploads, SFTP and FTP send 8 MB slices (FTP servers must support resuming with REST), and Dropbox, Google Drive and OneDrive use their resumable upload sessions. If a request is interrupted, the next one continues from the last saved position. WebDAV has no standard resumable upload, so the archive is sent in one request; for very large sites on servers with short request limits, prefer another destination.

Endpoint safety (local and private addresses)

Addresses you enter for S3-compatible, Backblaze B2, WebDAV, FTP and SFTP destinations must be public. HTTP endpoints must use https:// on port 443 (or 80), without a user name or password in the URL. Every address the host name resolves to (IPv4 and IPv6) is checked, and localhost, private networks (10.x, 172.16–31.x, 192.168.x, IPv6 ULA), link-local addresses including the cloud metadata address 169.254.169.254, carrier-grade NAT and other reserved ranges are refused. The check runs when you save the settings and again before every connection. Redirects are not followed automatically: S3 requests never follow them, and WebDAV follows at most 3, checking each hop again.

For a test or development site that uses a local server such as LocalStack or MinIO, add define( 'BRVERIFY_ALLOW_PRIVATE_ENDPOINTS', true ); to wp-config.php. There is no switch for this on the settings screen, and a warning is shown there while it is active. Developers can limit the opt-in to specific hosts with the brverify_pro_private_endpoint_hosts filter and allow extra public HTTPS ports with brverify_pro_allowed_endpoint_ports. Do not use the opt-in on production sites.

5. Incremental file backups

In incremental mode only files changed since the previous backup are packed. The database dump is a full dump on every run. A restore needs the complete chain of backups; retention keeps a parent backup as long as a kept child needs it.

6. Site migration

Under Migrate: choose a backup, enter the target URL, then plan, dry run, confirm and run. URLs and paths are rewritten, including serialized and JSON data, and the table prefix can change. The existing site is snapshotted first and rolled back if the run fails. Migration packages (zip with manifest and checksums) can be exported and imported.

Export and import run in short steps while the Migrate screen stays open. Export checks every member of the backup against its checksum, then writes the package and its SHA-256. Import accepts only the four package files, checks the descriptor, copies the inner backup out while hashing it, and runs the same one-to-one archive check as a restore before the backup appears in the list. The prepared database of a migration is fingerprinted, checked again before the first statement runs, and must come from the database member that passed validation.

7. Database encryption

When switched on, the database dump inside each new backup is encrypted with libsodium (Argon2id key derivation, XChaCha20-Poly1305 stream).

8. Backups before updates

Optional. Takes a backup right before plugin, theme and WordPress core updates, with its own rules (update types, skip window, optional remote upload, optional block of the update when the backup fails) and its own retention.

9. External Services

The plugin contacts a service only for the feature you switch on. It sets no cookies and collects no usage statistics.

Backup destinations (only after you configure and select them)

Data flows from your site to the destination (the backup archive, a file name, and requests to list or delete archives) and back to your site when you restore, check or migrate from a stored archive. An archive is a copy of your database and the files you chose, so it can contain personal data of your users and visitors. The credentials you enter are saved in the WordPress options table without extra encryption and are included in the database part of every archive.

ServiceData sent
S3-compatible storage (for example Amazon S3)Archive data, object names and list/delete requests to the endpoint and bucket you enter. Requests carry your access key ID and a signature computed with the secret key; the secret key itself is not sent.
Backblaze B2As S3-compatible storage, through the S3-compatible endpoint you enter.
SFTPArchive data, file names and list/delete requests to the host and port you enter, authenticated with the user name and the password or private key (the private key signs the login locally and is not sent).
FTP / FTPSArchive data, file names and list/delete requests to the host and port you enter, with the user name and password. The connection is not encrypted unless you tick the FTPS option.
Dropbox (api.dropboxapi.com, content.dropboxapi.com)Archive data, file paths and list/delete requests, plus the app key, app secret, authorization code and access/refresh tokens used to sign in.
Google Drive (oauth2.googleapis.com, www.googleapis.com)Archive data, file names, the folder ID and list/delete requests, plus the client ID, client secret, authorization code and access/refresh tokens used to sign in.
OneDrive (login.microsoftonline.com, graph.microsoft.com)Archive data, file paths and list/delete requests, plus the application ID, client secret, authorization code and access/refresh tokens used to sign in.
WebDAVArchive data, file paths and list/delete (PROPFIND) requests to the URL you enter, with the user name and password (HTTP Basic or Digest).

Each of these services has its own terms and privacy policy.

10. Privacy and personal data

11. Deleting the plugin

By default your settings, backup history and backup files are kept; scheduled events and transients are removed. Tick Delete all data when the plugin is deleted in Settings first to remove all plugin options, tables, user meta and the backup files.

12. Common questions

Does the plugin prove that my backup restores cleanly?

It proves that the archive is intact (checksums, format, safe paths). It does not start a copy of the site.

Does the plugin work on 32-bit PHP?

Yes, with a limit. On PHP 7.4 the resumable SHA-256 needs 64-bit PHP, so on 32-bit PHP 7.4 a file has to be hashed within one request, and 32-bit PHP cannot handle files of 2 GB or more at all. Use 64-bit PHP (the norm on current hosting) for large sites.

I used an earlier pre-release build under another name.

On first load the plugin moves the old options, tables and backup folder to the new names. Backups that pre-release builds made with database encryption turned on used a different header format and cannot be opened by this version; make new backups after upgrading.

13. Changelog

1.0.6

1.0.5

1.0.4

1.0.3

1.0.2

1.0.1

1.0.0

14. Support

E-mail admin@007aj.com.

© 007AJ Security & Analytics · Backup Restore Verifier Pro · Terms · Privacy