Personalización de la protección de pruebas de tarjetas de Stripe en WPForms

WPForms 2.0 introdujo 3 capas de protección automáticas que detectan y bloquean ataques de prueba de tarjetas contra la integración de Stripe incorporada: detección de picos de bajo importe, un límite de tasa en todo el sitio y telemetría de sesión de Stripe Radar. Las pruebas de tarjetas (también llamadas 'carding') son un ataque en el que los scripts prueban números de tarjetas robadas con pequeños cargos para encontrar los que funcionan.

Las protecciones se ejecutan automáticamente con valores predeterminados ajustados y no tienen una interfaz de usuario de configuración. Cada umbral y comportamiento se controla a través de los filtros de PHP documentados en esta página. Si en su lugar busca instrucciones generales de configuración de Stripe, consulte nuestra documentación de Stripe.

Requisitos:

  • WPForms 2.0 o posterior. Las protecciones se aplican a los pagos de Stripe tanto en las versiones gratuitas como en las de pago.
  • Por defecto, las protecciones solo se ejecutan en pagos en modo 'live'. Los pagos en modo de prueba de Stripe las omiten a menos que opte por participar con el filtro wpforms_stripe_run_protections_in_test_mode.

Cómo funcionan las protecciones

  • Detección de picos de bajo importe: Cuenta los intentos de pago de Stripe en o por debajo de un importe umbral (por defecto 3,00 $) en todo el sitio en una ventana deslizante. Cuando el recuento supera el límite, todos los pagos de Stripe de bajo importe se bloquean durante un período determinado. Los pagos por encima del umbral siguen procesándose. WPForms envía 1 correo electrónico al administrador del sitio y muestra un aviso de administrador que se puede descartar por cada período de bloqueo.
  • Límite de tasa global: Cuenta los intentos fallidos de tarjeta (errores CardException de Stripe) en todos los visitantes de todo el sitio. Cuando los fallos superan el límite, todos los pagos de Stripe se bloquean hasta que expire la ventana. Esto amplía el límite de tasa por IP que se incluye con WPForms desde la versión 1.8.2, y los 2 límites funcionan de forma independiente.
  • Sesiones de Stripe Radar: Crea una sesión de Radar cuando se carga un formulario de Stripe y la adjunta al método de pago. Esto proporciona señales de comportamiento al motor de fraude de Stripe para que su puntuación de riesgo sea más precisa. Es telemetría pasiva sin umbrales ni bloqueos por parte de WPForms.

Cuando un pago es bloqueado por la detección de picos, el cliente ve "El procesamiento del pago no está disponible temporalmente. Por favor, inténtelo de nuevo más tarde o póngase en contacto con el propietario del sitio". Cuando el límite de tasa global bloquea los pagos, el cliente ve "No se puede procesar el pago, inténtelo de nuevo más tarde". Los bloqueos se levantan automáticamente cuando expira su duración.

Filtros de detección de picos de bajo importe

FiltroTipoPredeterminadoDescripción
wpforms_stripe_low_amount_surge_enabledboolverdaderoActiva o desactiva la detección de picos.
wpforms_stripe_low_amount_thresholdflotante3.00Umbral de importe. Los pagos en o por debajo de este importe cuentan para el pico y se bloquean mientras un bloqueo está activo.
wpforms_stripe_low_amount_surge_countint10Número de intentos de bajo importe dentro de la ventana que activan un bloqueo.
wpforms_stripe_low_amount_surge_windowint120Duración de la ventana deslizante en segundos.
wpforms_stripe_low_amount_block_durationintHORA_EN_SEGUNDOSCuánto dura el bloqueo, en segundos.
wpforms_stripe_low_amount_surge_email_tocadenaget_option( 'admin_email' )Destinatario del correo electrónico de alerta de prueba de tarjetas.

Por ejemplo, un sitio de donaciones concurrido que recibe legítimamente muchos pagos pequeños puede querer un recuento de ráfagas (surge count) más alto y un bloque más corto.

// Allow 30 low-amount attempts per window before blocking.
add_filter( 'wpforms_stripe_low_amount_surge_count', function () {
	return 30;
} );

// Shorten the block from 1 hour to 15 minutes.
add_filter( 'wpforms_stripe_low_amount_block_duration', function () {
	return 15 * MINUTE_IN_SECONDS;
} );

// Send the alert email to a dedicated inbox.
add_filter( 'wpforms_stripe_low_amount_surge_email_to', function () {
	return '[email protected]';
} );

Nota: El estado de la ráfaga se almacena en las transients wpforms_stripe_low_amount_counter, wpforms_stripe_low_amount_block y wpforms_stripe_low_amount_notified. Si cambia estos valores de filtro mientras un bloque está activo, elimine las transients para que los nuevos valores surtan efecto inmediatamente.

Filtros de Límite de Tasa Global

FiltroTipoPredeterminadoDescripción
wpforms_stripe_rate_limit_global_enabledboolverdaderoActiva o desactiva el límite de tasa en todo el sitio.
wpforms_stripe_rate_limit_global_allowed_attemptsint50Número de intentos fallidos de tarjeta en todo el sitio antes de que se bloqueen todos los pagos de Stripe.
wpforms_stripe_rate_limit_global_expires_inintHORA_EN_SEGUNDOSDuración de la ventana de conteo y del bloque, en segundos.

El límite de tasa preexistente por IP mantiene sus propios filtros y no se ve afectado por el ámbito global: wpforms_stripe_rate_limit_allowed_attempts (valor predeterminado 3) y wpforms_stripe_rate_limit_expires_in (valor predeterminado 6 horas).

Por ejemplo, para aumentar el límite global en una tienda de alto tráfico:

// Allow 200 failed card attempts per hour site-wide before blocking.
add_filter( 'wpforms_stripe_rate_limit_global_allowed_attempts', function () {
	return 200;
} );

Filtro de Sesión de Stripe Radar

Las sesiones de Radar envían telemetría de comportamiento desde la página de pago a Stripe Radar, el motor de prevención de fraudes de Stripe. WPForms crea la sesión al cargar el formulario tanto en los flujos de Card Element como de Payment Element y la adjunta al método de pago que crea. La llamada es un esfuerzo de "best-effort": si la API de Radar no está disponible, el pago procede normalmente sin una sesión.

FiltroTipoPredeterminadoDescripción
wpforms_stripe_radar_session_enabledboolverdaderoActiva o desactiva la creación de sesiones de Radar.
// Disable Radar session telemetry.
add_filter( 'wpforms_stripe_radar_session_enabled', '__return_false' );

Nota: Stripe no adjunta sesiones de Radar a los pagos completados a través de Stripe Link. Esta es una limitación de la plataforma de Stripe, no una configuración de WPForms.

Prueba de las Protecciones en Modo de Prueba de Stripe

Las protecciones omiten el modo de prueba de Stripe por defecto para que los flujos de trabajo de desarrollo normales no se vean afectados por falsos positivos. Para ejercitarlas en modo de prueba, opte por ellas y reduzca los umbrales para que los bloqueos se activen rápidamente:

// Run the protections in Stripe test mode.
add_filter( 'wpforms_stripe_run_protections_in_test_mode', '__return_true' );

// Trigger the surge block on the 3rd low-amount attempt.
add_filter( 'wpforms_stripe_low_amount_surge_count', function () {
	return 2;
} );

// Auto-unblock after 30 seconds for fast retries.
add_filter( 'wpforms_stripe_low_amount_block_duration', function () {
	return 30;
} );

Con esos filtros activos, envíe 3 pagos de 2 $ o menos usando una tarjeta de prueba de Stripe. El tercer intento se bloquea, se envía el correo electrónico de alerta y aparece el aviso de administrador. Un pago superior al umbral todavía se procesa durante el bloqueo. Consulte nuestra guía para probar pagos de Stripe para configurar el modo de prueba y las tarjetas de prueba.

Si un bloqueo de una prueba anterior todavía está activo después de cambiar los valores del filtro, borre el estado almacenado con WP-CLI:

wp transient delete wpforms_stripe_low_amount_block
wp transient delete wpforms_stripe_low_amount_counter
wp transient delete wpforms_stripe_low_amount_notified