Compra Procesada SEGURO

Volver a la tienda
BLOQUEADO
Intento de Price Tampering neutralizado
Enviaste price=1 pero el servidor uso el precio real de la BD: $299.990
Orden #DEMO Precio verificado
Producto Nexo Enterprise
Cantidad 1
Precio unitario $299.990 (de la BD)
Total $299.990
Precio que intentaste enviar $1 IGNORADO
¿Por que no funciono el ataque?

El codigo del servidor hace esto:

// procesar_secure.php (SEGURO)

// Solo acepta el product_id del cliente
$productId = $_POST['product_id'];  // 3
// Obtiene el precio de la BASE DE DATOS
$product = getProductById($productId);
$amount = $product['price'];  // $299.990 (de la BD)

// El campo "price" del POST se IGNORA COMPLETAMENTE
// $_POST['price'] = 1  <-- Ignorado

// Procesa el pago con el precio REAL
procesarPago($user, $amount);
Regla de oro: Nunca confies en datos del cliente para calcular precios, descuentos, totales o cualquier valor que afecte dinero. Siempre calcula todo en el servidor usando datos de tu base de datos.
Request recibido
POST /a06_checkout/procesar_secure.php

product_id=3price=1  <-- IGNORADO
quantity=1
El campo price fue ignorado. El precio real vino de la BD.
Version Vulnerable

La version vulnerable SI acepta el precio del cliente:

Ahi SI va a cobrar $1.

Diferencia de diseno
procesar.php (INSECURE DESIGN)
// Confia en el cliente
$amount = $_POST['price'];

// Procesa con ese monto
procesarPago($user, $amount);

El cliente controla el precio. No hay forma de "parchear" esto - hay que redisenar.

procesar_secure.php (SECURE DESIGN)
// Obtiene de la BD
$product = getProduct($_POST['product_id']);
$amount = $product['price'];

// Procesa con precio real
procesarPago($user, $amount);

El servidor controla el precio. El cliente solo puede elegir QUE comprar, no A QUE PRECIO.