
Un lunes abres tu tienda y encuentras cientos de pedidos nuevos. Pero no hay nada que celebrar: casi todos están fallidos, son por montos bajos, los nombres no tienen sentido y llegaron en pocos minutos.
Es un ataque de carding (o «tarjeteo»). Alguien compró una lista de tarjetas robadas y usa tu checkout para comprobar cuáles funcionan. Tu tienda es solo la herramienta, pero tú pagas las consecuencias.
Por qué te afecta aunque no pierdas productos
- Comisiones: algunas pasarelas cobran por cada intento, aunque se rechace.
- Bloqueo de tu cuenta: si la pasarela ve muchos rechazos o contracargos, puede suspender tu cuenta de pagos, y sin pagos no hay tienda.
- Contracargos: las tarjetas que sí pasan se usan después, y cuando el dueño reclama, el cobro se revierte y te cobran una multa.
- Servidor saturado: cientos de peticiones al checkout pueden dejar la tienda lenta para tus clientes reales.
Cómo reconocerlo
- Muchos pedidos fallidos o pendientes en poco tiempo.
- Montos bajos, a menudo siempre el mismo producto barato.
- Compras como invitado, con nombres y correos sin sentido.
- La misma dirección o direcciones inventadas.
- Picos de actividad de madrugada.
- Intentos en la página Añadir método de pago de «Mi cuenta», que permite probar tarjetas sin comprar nada.
Capa 1: limitar intentos en WooCommerce
WooCommerce incluye un límite de peticiones para su pago en bloques, pero viene apagado. Este mu-plugin lo activa: máximo 5 intentos de pago cada 60 segundos por visitante. Guárdalo como wp-content/mu-plugins/cwp-anti-carding.php:
<?php
/**
* Plugin Name: Anti carding (Curso WordPress)
*/
// 1. Límite de intentos en el pago en bloques (Store API).
add_filter( 'woocommerce_store_api_rate_limit_options', function () {
return array(
'enabled' => true,
'proxy_support' => false, // true solo si usas Cloudflare u otro proxy.
'limit' => 5,
'seconds' => 60,
);
} );
// 2. Desactivar "Añadir método de pago" en Mi cuenta si no lo necesitas.
add_filter( 'woocommerce_account_menu_items', function ( $menu ) {
unset( $menu['payment-methods'] );
return $menu;
} );
add_action( 'template_redirect', function () {
if ( function_exists( 'is_add_payment_method_page' ) && is_add_payment_method_page() ) {
wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );
exit;
}
} );
Si usas Cloudflare, pon proxy_support en true, o todos tus clientes compartirán la IP de Cloudflare y el límite los bloqueará a todos. Y si vendes suscripciones con renovación automática, no quites «Añadir método de pago»: tus clientes lo necesitan para cambiar su tarjeta.
Capa 2: un captcha invisible en el pago
Un captcha detiene a la mayoría de los robots. Cloudflare Turnstile es gratuito, no obliga a tus clientes a buscar semáforos y tiene plugins que lo integran con el pago, el registro y el login de WooCommerce. Si tu pasarela de pago ya trae protección antifraude con desafío, actívala.
Capa 3: límites en Cloudflare
Si tu tienda está detrás de Cloudflare, crea una regla de limitación de velocidad (Rate limiting) para las rutas del pago:
(http.request.uri.path contains "/wc/store/v1/checkout")
or (http.request.uri.query contains "wc-ajax=checkout")
or (http.request.uri.path contains "add-payment-method")
Por ejemplo, máximo 10 peticiones por minuto por IP, con acción Desafío administrado. Así el ataque se frena antes de llegar a tu servidor.
Capa 4: tu pasarela de pago
Escríbele al soporte de tu pasarela apenas detectes el ataque. Explícales qué pasó y pregunta por:
- Reglas antifraude (bloquear por país, por cantidad de intentos, por montos).
- Verificación 3D Secure obligatoria, que pide confirmar la compra en la app del banco.
- La revisión de las comisiones cobradas por intentos fraudulentos.
Avisar a tiempo también deja constancia de que actuaste, lo que ayuda si tu cuenta queda en revisión.
Después del ataque: limpiar
- No completes ni envíes ningún pedido sospechoso, aunque aparezca como pagado. Reembolsa y cancela.
- Borra los pedidos fallidos del ataque. Lo más simple es ir a WooCommerce → Pedidos, filtrar por estado Fallido y usar Acciones en lote → Mover a la papelera. Si son miles, con WP-CLI (cambia la fecha por la del ataque y revisa primero la lista):
# Ver los pedidos fallidos desde la fecha del ataque
wp wc shop_order list --status=failed --after=2026-10-27T00:00:00 --fields=id,total --per_page=100 --user=1
# Borrarlos (de a 100; repite hasta que no quede ninguno)
for id in $(wp wc shop_order list --status=failed --after=2026-10-27T00:00:00 --field=id --per_page=100 --user=1); do
wp wc shop_order delete "$id" --force=true --user=1
done
- Si se crearon cuentas de cliente falsas, revisa Usuarios filtrando por el rol Cliente y la fecha de registro.
- Mantén las capas 1 a 3 activas: los atacantes suelen volver a las tiendas que les funcionaron.
Prevención básica que ayuda mucho: evita tener a la vista un producto de $500 o $1.000 que nadie compra. Es el favorito de los atacantes, porque pasa desapercibido en los estados de cuenta de las tarjetas robadas.
¿Tu tienda está recibiendo un ataque ahora mismo? Escribe en el foro qué pasarela usas y si tienes Cloudflare, y te ayudamos a priorizar qué activar primero.





