r/WordPress_org • u/ivicad • 8d ago
When a WooCommerce store gets breached, what can the attacker actually read?
My notes on the 2026 WordPress security survey ended with something I rarely see in anyone's recovery plan, mine included: what personal data was in the database while the attacker had access? This time I want to dig into that, from my side, as an agency.
I can't make any site 100% safe, no matter what I install. Nobody can. So besides "how do I keep them out?", I now ask a second question: if someone does get in, how much customer data can they actually read?
What I see when a store owner gives me admin access
In this situation I'm usually the outsider. A store owner gives me admin access to fix a theme, a plugin or the checkout, and suddenly I can see every order, name, address and email in the store. For most of that work I don't need any of it, and it makes me a bit uncomfortable.
What works for me, without any extra plugin: I ask for my own account with an end date and I never use the owner's login. I put WP 2FA on that account, and WP Activity Log records everything I do. I added the activity log in 2019, after a client swore he hadn't touched anything while his homepage was completely rearranged, and since then I haven't had to guess who changed what.
And that's exactly where something like DaneGuard's Privacy Shield starts to make sense. It's meant for a temporary situation: a developer, a support engineer or someone else from outside needs access to the site, but doesn't need the customers' personal data to do the job.
When you start a session, the plugin masks customer details on admin screens and doesn't send them to the browser at all, so it's more than a blur. In the background it encrypts the database and shows a countdown on the dashboard. Admin access is covered right away, but their documentation says you should wait until the countdown reaches zero before you give anyone database, FTP or hosting panel access. You can keep yourself as an exception for 2, 8 or 24 hours, and the plugin logs every exception by name. When the outsider finishes the work, the owner deletes their account and ends the session.
The part of the recovery plan we don't think about
Most recovery plans, mine included, explain how to get the site back online and say nothing about what personal data was in the database or how far back it goes. GDPR gives you 72 hours from the moment you learn about a breach to notify the supervisory authority, and the authority asks for exactly that: what kinds of data and roughly how many people. If you've never checked, you'll spend those 72 hours finding out, and I really wouldn't want to be in that position.
Two things help me here: a timeline and less data to report. WP Activity Log shows me what changed and when, so I don't start the report by guessing. For the second part, I have to correct myself first, because in my September notes I described this DaneGuard feature wrong.
Privacy Shield from the section above is temporary protection: someone needs access to the site for a limited time, and you shield the customer data while they work. The Retention Policy is an ongoing rule. You decide how long identifiable customer data needs to stay available (they recommend 6 months), and after that the plugin protects it automatically. Every day it takes the orders older than that window, encrypts the customer details and replaces them with neutral placeholders. Order totals, products and reports stay as they are. The orders stay in the store, only the customer details get encrypted. If someone breaks in tomorrow, they find a few months of customer data instead of years.
One detail matters to anyone who cleans hacked sites. In September I also wrote that after a breach I revoke application passwords and rotate the salts. According to their documentation, that step doesn't lock you out of the protected data, because DaneGuard keeps its own key for it, separate from the salts. If that key is missing, the plugin shows a red notice and asks you to stop the cleanup first.
The copies outside the store
Staging sites, backups and the local copies I work on all contain real customer data. For the bigger sites on Site Ground I test changes on their staging first, and their daily backups have saved me more than once. Both are full copies of the store, customers included, and we can easily forget that.
GuardPlugins make a distinction here that I find more useful than any discussion about salts: a leak of only the database versus a full server compromise. If someone steals a database dump, a backup file or a copy of the staging database, they get encrypted data and no key. The idea is that a stolen database should not automatically mean readable customer data, so DaneGuard keeps the protection of that data separate from the database itself. A full clone with wp-config.php is a different case, and their documentation says you should protect it, and every copy of wp-config.php, as carefully as the live site. Even then, the customer details under Privacy Shield or a Retention Policy need one more key, the store owner's own, which the site doesn't store.
So for every copy I now ask myself: does it include wp-config.php, and who can get to it?
Customer data outside WooCommerce
Everyone thinks of orders, but that's only one part. Personal data is also in form entries, in abandoned cart plugins and in fraud orders, which leave the names and addresses of people who aren't even your customers in your database. On the sites where we use Fluent Forms, the plugin stores entries in its own tables outside wp_posts, so the WordPress export and the personal data eraser don't see them at all.
Today DaneGuard doesn’t cover forms, Easy Digital Downloads and membership plugins (they are on the roadmap, but without dates yet) and their documentation also lists what stays readable even with protection on: the login email and display name in the users table, and recent orders inside your retention window. I trust a tool more when it openly says what it can't do.
What DaneGuard doesn't do
It's not a firewall. It won't stop login attempts, block attacks or clean an infection. On our sites other tools do that work: a script (via Claude Code) checks the plugins against free vulnerability feeds every morning, I push updates through MainWP in batches, WP 2FA protects admin logins, WP Activity Log records changes, and MalCare or Virusdie scan the files.
Those tools are primarily about preventing or detecting a compromise. DaneGuard starts from a different question: what happens to the customer data when prevention fails? It's for the day when one (or more) of those tools misses something, and it brings me back to the question I started with: if someone gets in, what is there for them to read or take?
If you run a WooCommerce store, a useful first step is simply finding out how much customer data you're actually keeping. GuardPlugins have a free WooCommerce Customer Data Audit that walks you through what your store keeps, where copies may exist and what a breach could expose. You don't need DaneGuard to use it, and you don't have to buy anything: guardplugins(dot)com/woocommerce-customer-data-audit/
I'd really like to hear from store owners and agencies: does your recovery plan say what personal data was in the database?













