WooCommerce store protection: WAF, 2FA, geo-blocking and monitoring
WooCommerce store stores payment data, customer personal data and administrative access. We analyze complex protection: WAF, two-factor authentication, geo-blocking, file integrity monitoring and activity log.
COS / KNOWLEDGE BASE
Last week I received an email from a client who owns an online store for industrial oils on WooCommerce. The topic was laconic: “We were hacked.” After half an hour of calling, I learned that the story was banal to the point of gnashing teeth. Someone guessed the password to the manager’s account, went into the admin area, exported the customer database - names, phone numbers, delivery addresses, order history - and disappeared. No one noticed the invasion for two days. The manager used the password “company2024”, there was no two-factor authentication, the standard wp-login.php hung in full view of the entire Internet, and the only “protection” was Wordfence, which stopped updating three months ago due to an expired license. Is this a familiar picture? I've seen this happen dozens of times over the past five years, and every time I get the same feeling - a mixture of frustration and the knowledge that it could have been avoided.
Here's the thing - when we launch a WooCommerce store, everyone thinks about the design, the product catalog, payment methods, setting up delivery, and SEO. Security is the very item that consistently ends up at the bottom of the list. “We’ll set it up later,” “this doesn’t concern us, we’re a small store,” “who needs us.” And then it turns out that they are needed. Because WooCommerce is not just a WordPress blog where you can spoil the article at most. These are payment data, personal data of clients, access to the administrative panel, from where you can do things worth hundreds of thousands of rubles. And they are not attacking you specifically - they are attacking everyone in a row, with automated scripts that are absolutely indifferent to whether you sell industrial lubricants or designer candles.
I've been developing and marketing for B2B and industrial companies for many years, and during that time I've seen enough of the consequences of hacks to understand one thing: WooCommerce store security is not an option, it's a foundation. Without it, everything else—a beautiful website, a streamlined sales funnel, a customized CRM—falls apart instantly. That’s why, when we designed the security module for COS WP Woo, we approached it not as “another feature,” but as a system that should cover all the main attack vectors for WooCommerce. And today I want to tell you how this system works - not in the abstract, but with specific examples and an explanation of why each level of protection is needed.
Why a WooCommerce store is a tasty target
Let's first figure out why WooCommerce stores are so often hacked. There are several reasons, and they all work simultaneously. WordPress is the most popular CMS in the world, powering more than 40% of all websites. WooCommerce is the most popular e-commerce plugin that turns WordPress into a full-fledged online store. This means that any vulnerability found instantly becomes applicable to millions of sites. Hackers are not looking for a vulnerability in your specific store - they find a hole in WordPress version 6.4.2 or in the Contact Form 7 plugin version 5.8, and then an automated script crawls hundreds of thousands of sites and tries to exploit this hole. You just end up under the skating rink. No personal hatred.
But there is another side. Unlike a regular blog, WooCommerce stores data that provides real value. The wp_postmeta table on an average store contains hundreds of megabytes of information, including delivery addresses, phone numbers, email addresses, and sometimes even partial card data. The wp_users table contains password hashes, and if one of the admins uses the same password on several services, consider the entire chain to be compromised. I worked with one store where the wp_postmeta table weighed almost a gigabyte - almost 17,000 products, tens of thousands of orders over seven years. The leak of such a database is not just a nuisance, it is a potential fine under 152-FZ and a reputational blow from which small businesses may not recover.
And here’s something else I noticed: there is a common misconception among online store owners that if they have an SSL certificate configured and some kind of security plugin installed, then they are protected. SSL is an encryption of the connection between the browser and the server, a wonderful thing, but it does not protect against SQL injections, password guessing, or malicious script in someone else’s plugin. And “some kind of security plugin” often turns out to be a free version of Wordfence or iThemes Security, which was installed two years ago and has never been opened since then. Real protection is not one tool, it is a set of measures that work at different levels. And I want to go through each of these levels.
Think of your WooCommerce store as a building. SSL is a fence around the territory. But inside the fence you need a video surveillance system (monitoring), a security guard at the entrance who checks documents (authentication), locks on the doors (access restriction), a motion detector (firewall), and even a warning system if someone starts picking at the wall (file integrity monitoring). Remove any element and the entire system becomes vulnerable. This is exactly how we approached the design of the security module: not one big switch, but layered defense.
WAF is the first line of defense that works before trouble happens
I thought for a long time about where to start talking about specific tools, and decided to start with WAF - Web Application Firewall. Because this is the very component that cuts off 80% of junk traffic before the request even reaches your PHP code. Essentially, a WAF is a filter that analyzes every incoming HTTP request and compares it to a set of rules. If the request looks like an attempt at SQL injection, block it. If the URL contains a construction like ../../../etc/passwd, this is a path traversal, block it. If there is JavaScript code in the request parameters, this is an XSS attack, block it.
Sounds simple, but the implementation is the devil in the details. I remember how on one project we installed ModSecurity on the server, and it immediately began blocking legitimate requests from WooCommerce. Because WooCommerce sends such forms when placing an order that ModSecurity with OWASP CRS rules begins to suspect SQL injection in every second POST request. The result was that customers couldn’t place an order, the conversion rate dropped to zero, and we spent two days tuning the rules. This is why a WAF that works at the application level and understands the context of WordPress and WooCommerce is not the same as a WAF at the server level.
In our module, WAF works as middleware that intercepts the request at a very early stage, even before WordPress starts processing routing. It checks GET parameters, POST body, cookies, headers - everything that comes from the client. And he knows what WooCommerce is. He understands that a POST request to checkout with the billing_address_1 field is normal, but a GET request with the parameter ?id=1 UNION SELECT * FROM wp_users is not normal. This is an important difference from universal solutions: our WAF is designed for WordPress and WooCommerce, so the number of false positives is minimal.
Honestly, when I look at the WAF logs after the first week of working on any more or less visited WooCommerce store, my eyes widen every time. Tens of thousands of blocked requests. SQL injections, directory traversal attempts, XSS probes, scanning of known vulnerabilities in popular plugins - this happens 24/7, without breaks or weekends. On one of our client projects, WAF blocked 47,000 malicious requests in the first month. Forty seven thousand. And the store owner, before installing our module, was sure that no one would attack his “site that no one needs.”
But WAF is the first line. It stops massive automated attacks. WAF will not help against targeted hacking using stolen credentials. This requires other tools.
Custom login URL and XML-RPC blocking: removing targets from visible places
What if we look at the problem from the other side? Instead of building walls, you can simply remove what is being shot at. Anyone who has ever looked at the access logs of a WordPress site has seen endless requests to /wp-login.php and /xmlrpc.php. These are two addresses that bots know by heart. They are written in every brute force script, in every automated scanner. Remove these addresses, and 90% of automated attacks will simply run into a 404 error and go looking for the next victim.
A custom URL for the login page is an idea that I used to think of as “security through obscurity” and was a bit snobbishly dismissive of. Like, real security should be based on strong passwords and proper authentication, not on us hiding the door. But practice has shown that I was mistaken. No, of course, a custom URL is not a replacement for strong passwords and two-factor. But it is an incredibly effective way to reduce bot load and remove 99% of automated garbage from logs. When we changed /wp-login.php to a custom URL on one of the sales sites, the number of login attempts per day dropped from 3,000 to 12. Twelve! These are real people who knew the address - store administrators and managers. All the other three thousand were bots that stupidly hammered away at the standard address.
In our module this is implemented through the LoginUrl component. You specify an arbitrary address - at least /my-secret-door, at least /academic, at least /login-1234. The standard /wp-login.php and /wp-admin (for those not logged in) stop working, returning 404. The bot comes to /wp-login.php, receives “page not found”, makes a note “there is no WordPress here” and leaves. Elegant and efficient.
Now about XML-RPC. This is an ancient protocol that WordPress inherited from its previous engine - b2/cafelog. It allows you to remotely manage your site via XML requests. This was once useful for mobile apps and front-end editors, but with the advent of the REST API, the need for XML-RPC has all but disappeared. But attackers love XML-RPC. Why? Because the system.multicall method allows you to send hundreds of authentication attempts in a single HTTP request. That is, instead of making 500 requests to wp-login.php (which is easy to notice and block), the attacker makes one request to xmlrpc.php with 500 login-password combinations inside. Some brute force protection plugins do not even notice this vector, because they only count login attempts through a standard form.
We simply close xmlrpc.php completely. One switch in the settings and the protocol is blocked. No XML-RPC, no multicall. If you need access from external applications, there is a REST API for this with normal authentication and rate limiting. I haven't seen any real business scenario in 2025-2026 where XML-RPC would be necessary. But I’ve come across enough scenarios where websites were broken through it.
An important clarification is worth making here. Some will say, "Well, Jetpack uses XML-RPC to communicate with WordPress.com." Yes, he does. But if you switched to our security module, you no longer need Jetpack for these purposes. In addition, Jetpack began migrating to the REST API a long time ago. In short, close XML-RPC and don't look back.
Two-factor authentication and brute force protection: two locks are better than one
Let's talk about authentication - the most seemingly simple and at the same time the most vulnerable point of any WooCommerce store. I can install the most powerful WAF, close XML-RPC, hide the login URL, but if the site administrator uses the password “admin123”, all my defenses crumble like a house of cards. And don’t think that I’m exaggerating. According to statistics that I have seen in real projects, approximately every fourth WooCommerce store has at least one user with administrative rights and a ten-character password without special characters. This is not negligence - this is the reality in which a sales manager must remember passwords for twenty systems and chooses what is easier to remember.
Two-factor authentication solves this problem radically. Even if an attacker found out the password - stole it, picked it up, intercepted it, found it in a leaked database - he will not be able to log in without a second factor. In our module, we implemented TOTP - Time-based One-Time Password, the same standard that Google Authenticator, Microsoft Authenticator and dozens of other applications use. The administrator scans the QR code, the application begins to generate six-digit codes that change every 30 seconds. When logging in, you need to enter your login, password and current code from the application. Three factors? No, two - the password is “what do you know”, the code from the application is “what do you have” (phone with the application). Classic two-factor.
I insist that 2FA be mandatory for all store administrators and managers at a minimum. Optional - for all users. Do you know what argument I hear most often? “It’s inconvenient for employees, they will complain.” I always answer the same: you know what’s inconvenient? Call clients and explain that their personal data was leaked because Masha from the sales department decided that “qwerty” was a fairly strong password. The one-time code adds three seconds to the login process. Three seconds against potential data leakage of thousands of clients. It seems to me that the choice is obvious.
But 2FA is a second lock. What about the first one? This is where brute force protection comes into play. Our LoginProtection module works on the principle of progressive blocking. The first three unsuccessful login attempts are a warning. After the fifth, the IP is blocked for 15 minutes. After the tenth hour - for an hour. After the twentieth - for a day. Moreover, blocking works not only by IP, but also by user name. This is important because attackers sometimes use distributed botnets with thousands of IP addresses, but target a single account - “admin” or “manager”. If the username “admin” had 20 unsuccessful attempts from different IPs, we block the login for this username for a certain time, regardless of the IP.
And here I want to tell a story that perfectly illustrates why all these mechanisms are needed together. One of our clients is a hydraulic equipment manufacturer with a WooCommerce store. He had three managers working for him, each with his own account. One of the managers quit, but no one blocked her account. Two months later, the password for this account surfaced in a public data leak of another service (where the manager used the same password). The bot found this password, tried it on wp-login.php - and entered. If our module had been installed, a custom login URL would have meant that the bot simply would not have found the login page. If by some miracle I found it, 2FA would require a code from an application that the bot does not have. And if there were no 2FA, activity monitoring would show an entry from an unfamiliar IP at 3 a.m., and the administrator would receive a notification. Three lines of defense, each of which could have prevented the incident on its own. And all three together make hacking almost impossible.
I would also like to say something about CAPTCHA. We support Google reCAPTCHA v2, reCAPTCHA v3 and hCaptcha - your choice. CAPTCHA can be enabled on the login form, on the registration form, on the checkout page, on the password recovery form. reCAPTCHA v3 works invisibly - the user does not notice anything, and Google, based on behavioral analysis, decides whether it is a bot or a person. For most stores, I recommend v3 - it does not irritate customers and at the same time effectively cuts off bots. On the admin login forms, you can check v2 with the classic “I’m not a robot” checkbox, here the UX is less critical, but the protection is stricter.
Geo-blocking: a surgical approach to filtering traffic
You know, I've been skeptical about geoblocking for a long time. It seemed that blocking entire countries was too crude a tool, something like “hitting mosquitoes with a hammer.” But then I started analyzing attack logs on client sites and changed my mind. Not 180 degrees - more like 120. Geo-blocking is not a panacea, but it is a surprisingly effective tool for certain scenarios.
Here are specific numbers from one of the projects. In a month, WAF blocked about 50,000 malicious requests. I divided them by geolocation. 38% were from Southeast Asian countries that were not part of the store's target market. 22% are from South America, also passing by. 15% are from Africa. 12% are from Eastern Europe (but not from Russia or the CIS). Total: 87% of malicious traffic came from regions where the store did not have a single real client. Zero orders, zero registrations, zero requests. Pure attack traffic.
Geo-blocking allows you to block access to the site (or certain parts of it - for example, only wp-admin and REST API) for IP addresses from selected countries. This is not a replacement for WAF - it is an addition. WAF analyzes the content of the request, geoblocking filters by source. Together they create a double filter: first, traffic from non-target regions is cut off, and what remains is checked by WAF for maliciousness.
But I want to be honest: geo-blocking isn't for everyone. If your store sells worldwide, blocking countries is a bad idea. If you have clients in Brazil or India, you cannot block these regions. Geo-blocking is ideal for stores with a clearly defined geographic market. A Russian B2B store that sells only in Russia and the CIS? You can safely block access from countries where orders will definitely not come from, but attacks will definitely come from. A store that works for Russia and the EU? Close those regions that you do not work with. Each blocked region means thousands of malicious requests that simply will not reach your server. This is both security and saving server resources.
In our module, geo-blocking is configured through a convenient interface - select countries, indicate what to block (the entire site or just the admin area), and turn it on. GeoIP databases are updated automatically. You can set a whitelist for specific IPs that should not be blocked regardless of the country - this is useful if you have a remote developer from a blocked region.
And one more point that is worth highlighting. Geoblocking at the application level (our plugin) works slightly differently than geoblocking at the CDN (Cloudflare) or server level (CSF/iptables). At the application level, the request has already reached PHP, and we are processing it. This means minimal load on the server, but the request is still processed. If you have Cloudflare, it’s ideal to enable geo-blocking both there and here. Cloudflare will cut off traffic before it reaches the server, and our module will catch what has slipped through Cloudflare (for example, requests directly to the server IP, bypassing the CDN). Defense in depth - remember?
IP management: black and white lists, automatic blocking by patterns
IP management is a tool that at first glance seems primitive. Blacklist, whitelist - what's so complicated about it? But when used correctly, it becomes a powerful tactical tool. I will tell you how we use it and why it is important in combination with other measures.
Whitelisting is sacred territory. IP addresses that are never blocked, under any circumstances. This includes the addresses of your office, home IP administrators, IP addresses of trusted services - payment systems, 1C, API partners. I saw a situation where the monitoring service started sending requests that the WAF interpreted as vulnerability scanning and blocked them. The result was that monitoring showed that the site was down, although it worked perfectly. A whitelist solves such problems.
The blacklist is a hard block. An address on the blacklist is rejected immediately, without any processing. The blacklist is convenient for manually blocking specific sources of attacks that you have detected in the logs. If we see that there is suspicious activity coming from a specific IP, we’ll add it to the blacklist, we’ll figure it out later.
But the most interesting thing is automatic blocking based on patterns. Our module can automatically send an IP to the blacklist if a certain pattern of behavior is detected from this address: too many 404 errors in a short time (a sign of scanning), too many login attempts, attempts to access non-existent PHP files, access to typical backdoors (wp-config.php.bak, .env, debug.log). This works in conjunction with WAF and LoginProtection, creating an automatic response system: detected suspicious activity - blocked, logged, notified the administrator.
You know what I like about this approach? He is self-learning. Not in the sense of machine learning, but in the sense that every attack makes the system stronger. Each blocked IP adds to the database, each attack pattern refines the rules. After a month of operation, your security module knows the specific IP ranges from which your site is most often attacked, and proactively blocks them.
File integrity monitoring: your silent watchman
Now let's talk about what happens when all previous lines of defense have failed. Let's say the attacker still gained access. Perhaps through a vulnerability in a third-party plugin, through a compromised FTP hosting account, through a SQL injection that WAF did not recognize. What's the first thing he does? It modifies files. Adds a backdoor to the theme's functions.php, places a PHP shell in the uploads directory, modifies WordPress core files to intercept credentials.
File Integrity Monitoring (FIM) is a system that monitors changes to WordPress core, plugin, and theme files. It takes a “snapshot” of the file system—a hash of each file—and regularly compares the current state to that snapshot. If a file has changed, a new file has appeared where it should not be, or a file that should be there has disappeared, the administrator receives a notification.
I'll tell you the real story. On one of the projects, we discovered that someone had changed the wp-includes/version.php file. This file contains the WordPress version number and usually does not change between updates. The change was subtle: a line of code was added to the end of the file, which, under certain conditions, downloaded and executed a script from an external server. Without integrity monitoring, this change might not be noticed for months. With monitoring, we received notification within an hour.
In our module, integrity monitoring works on a schedule - you can set up a check every hour, every six hours or once a day. When changes are detected, an email notification is sent with a list of changed files. The administrator can view what exactly has changed and decide whether this is a legitimate plugin update or an attempt to introduce malicious code.
Important note: when you update WordPress, plugins or themes, the files naturally change. A good FIM must be able to distinguish legitimate changes from suspicious ones. Our module knows which files are included in the standard WordPress distribution of a certain version, and can compare your files with the reference ones. If the wp-login.php file on your server differs from what is supplied in the official WordPress release, this is a cause for concern.
And here I want to make a philosophical digression. File integrity monitoring is not a prevention tool. This is a discovery tool. It won't stop hacking, but it will let you know about it quickly. And in cybersecurity, detection speed is everything. According to statistics, the average time between a hack and its detection is 197 days for small businesses. For almost seven months, an attacker can take over your website, steal data, use the server to send spam, plant malicious links - and you won’t even know about it. Integrity monitoring reduces this window to hours.
Activity log: a complete picture of what is happening
The activity log is a feature that people only begin to understand the value of after an incident occurs. When everything is fine, the log seems to be useless noise: “User admin is logged in,” “User manager changed product #15748,” “User admin updated plugin settings.” It’s boring, uninteresting, why keep it? And then an incident occurs, and the first question is: “Who did this? When? What exactly did you change?” And without an activity log it is impossible to answer these questions.
Our ActivityLog module records all significant activities in the WordPress and WooCommerce admin panel. User logins and logouts (with IP addresses and user-agent). Creating, editing and deleting content - posts, pages, products, orders. Changing settings - any settings, including plugin settings. Installation, activation and deactivation of plugins and themes. Actions with users - creating, deleting, changing roles. Working with media files. And dozens more types of events.
I use activity logs not only for incident investigation, but also for day-to-day management. When a team has three or four people with access to the store admin, the log is your control tool. Who changed the price of this product? Who deleted that category? Who installed the strange plugin? Without a log - accusations, misunderstandings, conflicts. With a log - facts, dates, times. Nothing personal, just data.
And the activity log is also a legal safety net. In the event of a dispute with a customer who claims that his order was changed without his knowledge, you can show that the order was changed by a specific manager at a specific time. Or vice versa - prove that none of your employees touched the order. In a world where disputes over personal data are becoming increasingly serious, this level of documentation is not a luxury, but a necessity.
Logs are stored in a separate database table with contexts, which allows you to filter by user, by type of action, by date. You can set up automatic cleaning of old records - for example, store logs for the last 90 days. This is sufficient for most stores. If you need long-term archiving, you can export to CSV.
I find especially valuable the linking of the activity log with other security modules. When WAF blocks a request, it goes into the log. When LoginProtection blocks an IP, it goes into the log. When FIM detects a file change, it goes into the log. As a result, you have a single chronology of all security events that can be viewed in one interface. No need to switch between ten screens of different plugins - everything is in one place.
Why we don't use Wordfence and why you probably shouldn't either
And this is where the fun part begins - comparison with what is already on the market. Wordfence is the most popular security plugin for WordPress, with over 4 million active installations. He is good, serious, deserved. I myself have used it for several years on various projects. And I accumulated a list of complaints, which ultimately led to the decision to develop my own module.
The first and foremost issue is size and performance. Wordfence is a monster. The free version takes up about 30 MB of disk space, the Premium version takes up even more. But the size on the disk is not so bad. Wordfence runs its own firewall on every request to the site, scans the database, checks files, and calls an external API to update signatures. On shared hosting, this can increase page loading time by 200-300 milliseconds. On a busy WooCommerce store with thousands of products and active traffic, this is noticeable.
Our security module is a part of WP Woo's COS that weighs... well, it's part of a plugin, not a separate entity. It doesn't carry its own PHP-level firewall that intercepts every request via auto_prepend_file. It works through standard WordPress hooks, which means better compatibility and predictability.
The second problem is caching conflicts. I've encountered this on every other Wordfence project. LiteSpeed Cache, WP Super Cache, W3 Total Cache - Wordfence conflicts with them with enviable regularity. Then it cannot scan files because the cache returns the page before Wordfence has time to check it. Then its firewall blocks requests from the cache plugin. Then live traffic monitoring begins to show cached requests as “suspicious”. On one project with LiteSpeed, we spent two working days getting Wordfence and LiteSpeed Cache to work together without conflicts. Two days of developer work is real money.
The third problem is price. Wordfence Premium costs $119 per year for one site. If you have five stores - $595 per year. Over ten years, six thousand dollars just for security. And this despite the fact that the free version has significant limitations: firewall signatures are updated with a delay of 30 days (thirty days, Karl! - during this time the vulnerability will have time to become the property of every script kiddie), there is no real-time IP blacklist, limited scanning. That is, the free version is, in fact, a marketing tool for selling Premium.
Our security module does not have a free and paid version. All functions - WAF, 2FA, geo-blocking, FIM, activity log, CAPTCHA, IP management, custom URL, XML-RPC blocking, brute force protection - are available as part of COS WP Woo. One plugin, one license, complete set of tools. You do not pay separately for security, separately for B2B, separately for search, separately for integration with 1C. All together.
The fourth challenge is integration. Wordfence is a standalone plugin. He knows nothing about your B2B module, about your search, about your CRM. Our security module is part of a single ecosystem. It knows about B2B users and can enforce different security policies for different customer groups. It is integrated with the email notifications module. It uses a common settings system and a common administrative interface. It's not a patchwork of ten different plugins from ten different developers - it's a single system where all the components are designed to work together.
I don't mean to say that Wordfence is a bad product. For a regular WordPress blog where there is no WooCommerce and performance is not critical, Wordfence Premium is a great choice. But for a WooCommerce store with thousands of products, B2B functionality, integration with 1C and performance requirements, the built-in security module works better because it is designed for this context.
Integrated approach: how all the elements work together
I specifically did not describe each component of the security module as an isolated function - because they do not work in isolation. The whole idea is that each component enhances the others. Let's walk through a typical attack scenario and see how the system reacts at each stage.
A bot from Vietnam is trying to access the site. Geoblocking checks IP - Vietnam is not on the list of allowed countries. The request is blocked. The incident is recorded in the activity log. Done, the story is over, it didn’t even get to WAF.
Another bot, from a permitted country, is trying to access /wp-login.php. The LoginUrl module intercepts the request - the URL does not match the custom one. 404 is returned. The bot thinks that the site does not have WordPress. Moving on.
The third bot, more advanced, somehow learned the real login URL. Trying to guess the password. After the fifth attempt, LoginProtection blocks the IP. Logging, notification to administrator. The IP is automatically blacklisted via IpManagement.
The fourth scenario is that the attacker does not attempt to log in, but tries SQL injection via the search parameter. WAF recognizes the pattern, blocks the request, and writes it to the log. The IP is sent to quarantine.
The fifth scenario is that an attacker found a vulnerability in a third-party plugin (not ours) and managed to upload a PHP shell to the uploads directory. FIM detects a new PHP file where there should only be images. The administrator receives a notification, deletes the file, and updates the vulnerable plugin.
The sixth scenario is a bot trying to attack via xmlrpc.php. The request is blocked at the XmlRpc module level. It's not even processed.
See the pattern? Each level has its own filter. To get to your data, an attacker must go through all levels. Each level is independent and self-contained, but together they create a system that is extremely difficult to bypass. It's not just one lock that can be picked - it's ten locks, and each one is more difficult than the previous one.
I often hear the question: “Will all this slow down my site?” Fair question. Answer: no, if implemented correctly. Geo-blocking is one IP check against a database in memory, microseconds. Login URL check - string comparison, nanoseconds. WAF - a set of regex checks for an incoming request, a couple of milliseconds. CAPTCHA is a client-side verification and does not load the server at all. FIM runs on schedule, in the background. Activity log - one insertion into the database during an event. The total load on processing one request is about 5-10 milliseconds. This is several times less than Wordfence with its full scanning of each request.
There is one more point that I want to mention separately, because it is often overlooked. Security is not a one-time setup, it is a process. You can configure all the modules perfectly today, but in three months there will be a new attack vector, a new vulnerability in WordPress or in one of your plugins, a new CAPTCHA bypass technique. That is why our module is updated along with the plugin - WAF rules are replenished, GeoIP databases are updated, detection algorithms are improved. You don't need to keep an eye on it - updates come automatically. This is a fundamental difference from the “set it and forget it” approach, which ends with the fact that six months later your “protection” works according to the rules of six months ago, and attackers are already using methods that your plugin does not yet know about.
Let me be clear: WooCommerce store security is not an area where you should skimp or procrastinate. Every day without protection is a day that your data, your customers' data, and your reputation are at risk. I've seen stores close after a data breach - not because the breach was catastrophic, but because customer trust could not be restored. I saw companies that paid hundreds of thousands of rubles for recovery after a hack - transfer to a clean server, code audit, notification to clients, legal advice. And all this could have been prevented by a module that could be configured in half an hour.
Our approach is not to sell security as a separate expensive product, but to make it an integral part of the tool you already use to manage your store. No need to install a separate plugin, no need to buy a separate license, no need to understand the interface of another product. Open the COS WP Woo settings, go to the Security section, enable the necessary modules - and your store is protected. WAF is working, 2FA is configured, geo-blocking filters junk traffic, monitoring monitors files, a log records every action. Not one tool, but ten - and they all work harmoniously, like parts of one mechanism.
What if you look at it from a business perspective? The cost of one security incident for an average online store is from 200,000 to 2,000,000 rubles, if you count direct losses (recovery, audit, lawyers) and indirect (loss of customers, reputational damage, business downtime). The cost of prevention is zero additional rubles if you already have COS WP Woo. I don't know of a better business investment. The math is simple: spend half an hour setting up now or spend weeks restoring later. It seems to me that the choice is obvious. And the client who called me with the phrase “we were hacked” would now agree with this.
Try COS WP Woo for free- install the plugin and get 14 days of full access to all modules, including Security. WAF, two-factor authentication, geo-blocking, file monitoring, activity log - all this will start protecting your store from the first minute. No restrictions, no hidden fees, no need to buy five different plugins. One tool - complete protection.