| 开发者 |
giannis4
thewpgarden |
|---|---|
| 更新时间 | 2026年10月28日 02:06 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
*@bad-domain.com blocks every address at that domainspam*@bad-domain.com blocks spammer@bad-domain.com but leaves nice@bad-domain.com alone*@*.bad-domain.com blocks its subdomains, such as mail.bad-domain.com*.edu blocks every address ending in that TLD* or *@* would block every order on your store, so they are rejected when you save.
🛡️ Reject junk names
Catches checkouts where the name is obviously not a name: test, asdf, qwerty, John Doe and similar. Matching is exact and whole-field, so a customer called Testa or Contestabile is never affected by the entry test.
You can read the full list on the settings screen before switching the rule on.
🛡️ Block by phone number
Block numbers you have seen on fraudulent orders, in whatever format the customer types them:
+30 210 1234567 blocks that exact international number+234* blocks every number starting with that country code210 1234567 blocks the local number however it is written0000000000 or 123456789. Billing phone is optional in WooCommerce, so a customer who leaves it empty is never blocked by this rule.
🛡️ Check that the email can actually receive mail
Optionally look up the address's domain during checkout and turn the order away if it cannot receive mail at all. If the lookup itself fails, the order goes through, so a DNS problem never costs you a sale.
🛡️ Block by IP address
Block individual IPv4 or IPv6 addresses, or cover a whole range with a wildcard or CIDR notation:
203.0.113.*203.0.113.0/242001:db8::/32Set Protection Mode to Learning first. Every rule runs and records what it would have caught, but nothing is blocked and no customer is turned away. When the results look right, switch to Enforce.
Around 22,000, bundled with the plugin and based on the public disposable email domains list. The settings screen links to the source so you can check any domain. It is a copy taken when the plugin was released, so it will not match the source exactly.
No. Firefox Relay, Apple Hide My Email and Addy deliver to a real permanent inbox, so blocking them would reject a paying customer. They are excluded from the bundled list.
No. Matching is exact and whole-field, never a substring, so test blocks a customer who types "Test" as their whole name but never affects Testa, Contestabile or Testani. The full list is shown on the settings screen so you can check it before switching the rule on.
Enter *@bad-domain.com on its own line in the email blocklist. That blocks every billing email at that domain, and nothing else.
You can also enter the bare domain, bad-domain.com. The difference is precision: a bare domain matches anywhere in the address, so it will also catch someone@notbad-domain.com. The *@ form matches the domain exactly. Prefer the wildcard unless you specifically want the looser match.
Enter two lines: *@bad-domain.com for the domain itself and *@*.bad-domain.com for every subdomain under it, such as mail.bad-domain.com or x.y.bad-domain.com. Neither line touches notbad-domain.com.
The * wildcard stands for any run of characters, and the pattern must match the whole address:
*@bad-domain.com blocks every address at that domain.spam*@bad-domain.com blocks spammer@bad-domain.com but leaves nice@bad-domain.com alone.*@*.bad-domain.com blocks every subdomain, such as mail.bad-domain.com, but not bad-domain.com itself.*.edu blocks every address ending in that TLD.* or *@* would block every order on your store, so they are rejected and removed when you save.
Yes. 203.0.113.* covers that whole IPv4 range. Each * stands for one whole number, so 192.168.*.1 covers 192.168.7.1 but not 192.168.7.2, and the first number must be written out. For IPv6, or for ranges that do not end on a dot, use CIDR notation: 203.0.113.0/24, 198.51.100.128/25, 2001:db8::/32. IPv6 addresses match however they are written, so 2001:db8::1 also blocks 2001:0db8:0:0:0:0:0:1.
Yes. Checkout Guard reads forwarded proxy headers by default, so IP rules match the real visitor rather than the CDN edge. If your store is not behind a proxy you can switch that off in Store setup.
Not currently. The country rule is a blocklist: you list the countries to turn away.
Yes. The classic checkout, the WooCommerce Checkout block and express checkouts are all enforced, with one known exception noted below, and the plugin declares HPOS compatibility.
Apple Pay is, including on product and cart pages. The WooCommerce PayPal Payments gateway sends it through WooCommerce's own checkout, so every rule runs and a blocked attempt is stopped before the order is created. Express buttons in general are checked whenever the gateway creates its order through WooCommerce. WooPayments is covered in full: its Apple Pay, Google Pay, Link and WooPay buttons all place the order the same way the Checkout block does, so every rule runs wherever you put the button. A blocked attempt leaves nothing in your orders list. There is one known exception. WooCommerce PayPal Payments has a setting called "Pay Now Experience", which lets customers skip the Order Review page and is switched on for new merchants during its setup. With it on, the PayPal button on a product or cart page builds the order itself without going through WooCommerce's checkout, and Checkout Guard does not see those orders. Support for them is planned. In the meantime, switching "Pay Now Experience" off in the PayPal settings sends those customers through the checkout page instead, where every rule runs. Apple Pay is unaffected either way.
No. Checks run during checkout validation, not on normal browsing, so browsing speed is unaffected. The bundled disposable-domain list is only loaded when you enable it, and the optional deliverability lookup is the only rule that touches the network.
The free attempt limit turns away a source that tries checkout too many times in a short window, which is how card testing looks from the store. Checkout Guard Premium Security also reacts to declined payments, the clearest sign of card testing, and can close checkout for an hour during an attack.
Only if you switch recording on, and it is off by default. When enabled, each blocked attempt (and, in Learning mode, each attempt that would have been blocked) stores the billing email, IP address, first and last name, country, postcode and phone number, the cart total and product IDs, the customer's account if they were logged in, and which rules matched. Repeat attempts from the same source within 10 minutes are kept as one record with a count. Records are deleted automatically after the retention period you choose, 90 days by default. Deleting the plugin from the Plugins screen always removes its tables, including every record of blocked checkouts. Your settings are kept, so a reinstall picks up your rules, unless you switch on Delete settings on uninstall in Store setup. The attempt limit keeps short-lived counters so it can count attempts. They are stored as hashes rather than readable email or IP addresses, and are cleared out daily once their time window has passed. In Premium Security, a shopper blocked for declined payments is listed by IP or email address on the Blocked attempts tab until the block expires, so you can see and lift it.
Checkout itself never calls an outside service, with one exception you switch on yourself: the mail deliverability check looks up the email domain in DNS. Licensing and the Premium Security trial run on Freemius. When you activate the plugin, it asks whether you want to share basic diagnostic information with Freemius, such as your site address, WordPress and PHP versions, and the admin email address, to receive security and feature updates. Skip it and nothing is sent. You can change your mind later from the Plugins screen.
At thewpgarden.com/docs/checkout-guard: setup, plus a guide for each rule.
Open a topic in the WordPress.org support forum. For anything else, contact us.
Yes. You can translate Checkout Guard into your language on translate.wordpress.org.
cgbs_block_by_total_cost_min or cgbs_block_by_total_cost_max filter returning 0.0, '0' or an empty string now turns that bound off, as 0 does. Before, a maximum of 0.0 blocked every order1.*.*.*, the same limit CIDR ranges have. *.*.*.* is no longer saved, and a saved one stops blocking every checkout* in an IP entry stands for one whole number. 192.168.*.1 covers 192.168.7.1 and no longer every address from 192.168.0.1 to 192.168.255.1. Entries ending in * match as before. The Premium Security Always allow list uses the same matching2001:db8::* are no longer saved; they never matched anything. Use CIDR for IPv6 ranges::ffff:203.0.113.5) now matches wildcard entries, as it already matched exact and CIDR ones*.com, shows a warning. The entry is keptcgbs_decline_window filter.xn--p1ai) are accepted in the email blocklist and the Always allow list*@*.co.uk and *.com.au*@*.co.uk or *@*.com.au. *@*.yourshop.co.uk still works. A saved pattern like that is removed the next time the settings are saved90250-1234) against your 5-digit entries and ranges as well. A country prefix must be a real country (XX:123 is not saved)203.0.113.0/24, 2001:db8::/32), in the blocklist and the Premium Security Always allow list. Ranges wider than /8 (IPv4) or /16 (IPv6) are not saved2001:db8::1 also blocks 2001:0db8:0:0::1*@*.bad-domain.com)+234*, or local numbers in any format, plus an optional check for obviously fake numberscgbs_skip_evaluation, cgbs_save_settings, cgbs_blocked_tab_before_log and cgbs_settings_tab_after_formtest, asdf and John Doe, matched exact and whole-field so real surnames are unaffected. The full list is readable on the settings screencgbs_rules), with a surface-agnostic engine and thin adapters per checkout*@bad-domain.com, spam*@bad-domain.com, *.edu)