Your membership plugin can block access. But every request still reaches your server. Bots, scrapers, and shared links all trigger unnecessary load. XYZ Protect moves that decision to the edge—so unauthorized requests never hit WordPress at all.
10,000 protected media requests free. No credit card required.
MemberPress®, Paid Memberships Pro®, WooCommerce, and WordPress login control who sees your pages. But the images, videos, and documents on those pages? Anyone with the URL can download them—no login, no membership, no payment required.
Even when access is denied, your server still has to process every request. Under bot traffic, that means wasted CPU, bandwidth, and degraded performance for real users.
A paying member copies an image URL and texts it to a friend. The friend downloads your premium content without paying.
Anyone viewing your page source can extract every media URL. Your premium photos, course videos, and PDFs are accessible without logging in.
Google indexes your media files directly. Your premium content appears in image search results, accessible to anyone.
Most WordPress protection plugins work at the origin. They check permissions in PHP and return a 403 or 404.
But the request still reaches your server.
XYZ Protect handles access at the edge—before WordPress is involved.
That means fewer requests hitting your origin, better performance under load, and less need to upgrade hosting just to handle bots.
Install the plugin. Add three DNS records. Choose what to protect. That's it. No server changes, no file moves, no hosting requirements.
Upload XYZ Protect to your WordPress site and connect your account.
The plugin tells you exactly what to add. One CNAME, two TXT records. Takes two minutes.
Protect everything, or just specific folders. Your site logo and public images stay accessible.
Authorized visitors see your content. Everyone else sees a placeholder. No shared links work without authorization.
Choose the level of security that matches the value of your content.
Your media URLs are obfuscated and only accessible to visitors with valid authorization. Fast, simple, and works perfectly with page caching plugins.
Best for: Most membership sites, online courses, photography portfolios
Every media URL is unique to the individual visitor and expires automatically. Even if someone copies a URL and shares it, it won't work for anyone else.
Best for: Premium stock photography, exclusive video, confidential documents
Run both simultaneously. Standard members get Guard Cookie protection. Premium members get Encrypted URLs. Map protection levels directly to your membership tiers.
Other file protection plugins route every request through PHP on your server—even when access is denied.
Under bot traffic, that creates unnecessary load and slows your site.
XYZ Protect does the opposite. Requests are validated at the edge, so unauthorized traffic never reaches your origin.
Protected media is served from a global network, often faster than your server could deliver it.
Protected images served from 300+ locations worldwide. After the first request, repeat visitors in the same region get instant edge delivery.
Your WordPress server never processes media requests. No database queries, no PHP file streaming, no memory limits on file size.
Popular content is cached at the edge after the first request. Your server handles page rendering—the global network handles media delivery.
Replace an image? Flush your media cache from the WordPress admin. Site-scoped purge—your cache is yours alone.
Browser → Server → WordPress → PHP auth check → PHP streams file bytes → Browser
20 PHP processes loading WordPress, checking auth, streaming files through memory
Slower pages, higher server load, PHP memory limits cap file sizes
Browser → Edge network → Auth check (1-2ms) → Fetch from origin → Cache at edge → Browser
Browser → Edge network → Auth check (1-2ms) → Serve from edge cache → Browser
Faster delivery, zero server load for media, no PHP involved, no file size limits
XYZ Protect detects your membership plugin automatically. No add-on to buy, no extra configuration. Just map your membership levels to protection tiers with appropriate content protection rules and you're done.
Put premium content in a protected directory. Everything in that folder requires authorization, regardless of which page it appears on. The most secure option.
Media is only protected on pages that your membership plugin gates. No folder configuration needed—protection follows your existing membership and content protection rules automatically.
MemberPress: All editions—Launch, Growth, and Scale. No add-ons required.
Paid Memberships Pro: Works with the free core plugin. No premium plan required.
Administrators always see real content when previewing pages.
Sees watermarked previews from your public folder. Premium gallery shows placeholders.
Full access to the high-resolution gallery. Protected from direct link sharing.
RAW files and exclusive collections. URLs are per-user and expire automatically.
Other plugins physically move your files to hidden directories. XYZ Protect never touches your files. Deactivate the plugin and everything is exactly where it was.
No .htaccess rules, no Nginx config, no hosting-specific setup. Works on shared hosting, WP Engine, Kinsta, SiteGround, WordPress.com Business—everywhere.
Competitors route every image through PHP, slowing your site. XYZ Protect serves protected media from a global edge network with caching—your server does zero extra work.
Images, videos, PDFs, audio, documents—everything in your protected folders. Competing plugins warn against protecting images due to performance. We recommend it.
In Encrypted URL mode, every link expires automatically. A URL shared today stops working on its own—no manual intervention, no permanent leaks.
WordPress exposes your entire media library via the REST API by default. XYZ Protect blocks unauthenticated access to media endpoints while keeping the block editor functional.
Any WordPress site with user login can use XYZ Protect. MemberPress and Paid Memberships Pro add tiered access control, but neither is required.
Existing solutions rely on server-level tricks that create limitations. XYZ Protect takes a fundamentally different approach.
| XYZ Protect | PDA Gold | MemberPress Files | PMPro Files | |
|---|---|---|---|---|
| Setup required | 3 DNS records | .htaccess / Nginx config | .htaccess required | .htaccess / Nginx + wp-config.php |
| Nginx support | Yes | Manual config needed | Not supported | Manual config needed |
| WordPress.com compatible | Yes | No | No | No |
| Files moved on disk | Never | Moved to /_pda/ | No | Separate restricted folder |
| Media delivery | Edge-cached CDN | PHP on your server | PHP on your server | PHP on your server |
| Image protection | Recommended | Not recommended | Not recommended | Limited by server memory |
| Per-user URLs | Yes | No | No | No |
| Self-expiring URLs | Yes | No | No | No |
| REST API hardening | Built-in | No | No | No |
| Membership integration | Built-in | Separate extension | Built-in (limited) | Custom code required |
For sites serving age-restricted content, XYZ Protect includes region-based adult verification. Visitors from regulated jurisdictions are verified before they can view your content. Everyone else experiences zero friction.
Images processed in memory only, never stored. iBeta Level 2 certified. No personal data retained after verification.
Verification credits starting at $0.038 each. Other providers charge $0.30 to $0.50+ per verification.
Age verification requires a free Cloudflare account on your main domain for geographic detection. Content protection does not require Cloudflare. Learn more about age verification →
One price. All features. No per-request fees for media protection.
Cancel anytime
Two months free
10,000 protected media requests free during trial. No credit card required.
Need age verification? Purchase verification credit packs separately.
XYZ Protect has built-in support for MemberPress (all editions) and Paid Memberships Pro (including the free core plugin). Both are auto-detected—no configuration needed. Without a membership plugin, XYZ Protect works with standard WordPress login to protect media for any logged-in user.
No. Your media stays exactly where it is on your server. XYZ Protect controls who can access those files by verifying authorization before serving them. Deactivate the plugin and your site is exactly as it was before.
A subdomain is required—a subdirectory won't work. XYZ Protect enforces protection at the edge of a global network rather than on your WordPress server, which means media requests have to be routed through that network instead of going straight to your origin. DNS routes traffic by hostname, so a dedicated subdomain (like media.yoursite.com) is the only way to send media traffic through the protection layer without affecting the rest of your site. You don't need to create the subdomain in advance—adding the CNAME record is what creates it.
Three records, added at your domain registrar (or wherever you manage DNS—cPanel, your host's DNS panel, Cloudflare, Route 53, GoDaddy, etc.): one CNAME pointing your media subdomain to our protection network, and two TXT records—one for hostname ownership and one for automatic SSL certificate issuance. The plugin generates the exact values for you during setup. No Cloudflare account or API tokens are required on your end. The plugin polls every 30 seconds and activates protection automatically once DNS propagates, typically within 1–5 minutes.
No—it can actually speed it up. In Guard Cookie mode, protected media is edge-cached on a global network with 300+ locations. Your server handles zero media requests. Unlike PHP-based solutions that process every image through WordPress, XYZ Protect offloads media delivery entirely.
Everything. Images (JPEG, PNG, WebP, AVIF, SVG), videos (MP4, WebM), audio (MP3, WAV), documents (PDF, DOCX)—any file in a protected directory. No file type restrictions.
The $15/month or $150/year subscription is your full license to use XYZ Protect. There are no per-request fees for media protection—the subscription covers it. The 10,000 protected media requests referenced on the pricing page is a free trial allowance, letting you evaluate the media protection features of the plugin end-to-end before subscribing. Separately, if you enable the optional age verification module, that feature is metered using credits, billed per verification. For standard content protection without age verification, credits don't apply.
Your protection stays active through the end of your billing period. After that, media URLs revert to normal—no broken images, no changes to your files. You can reactivate anytime.
Any hosting that runs WordPress. Shared hosting, managed WordPress (WP Engine, Kinsta, SiteGround), VPS, dedicated servers, even WordPress.com Business plans. No special server configuration required.
You put the work in. Your members should be the only ones who benefit. Start protecting your media in five minutes.
10,000 protected media requests free. No credit card required.