bazaar

Una tienda e-commerce sobre un microframework PHP propio - sin Laravel ni Symfony. Catálogo, carrito en sesión, Stripe Checkout, cuentas de clientes y un back office de administración completo, sobre sesiones endurecidas y únicamente sentencias preparadas.

bazaar
TL;DR

Una tienda de comercio electrónico sobre un microframework PHP hecho a mano, sin Laravel, sin Symfony. Un catálogo de productos, un carrito en sesión, Stripe Checkout, cuentas de clientes y un back office de administración completo. Con los pagos no hay lugar para atajos, así que las sesiones están endurecidas y solo sentencias preparadas llegan a la base de datos.

Introducción

Los grandes frameworks PHP resuelven muchas cosas por ti, seguridad incluida. bazaar renuncia a ellos a propósito: un microframework escrito desde cero significa que tú mismo cuidas las sesiones, construyes tú mismo las consultas y eres el único responsable de que los datos del cliente no se filtren. No hay una capa que remiende en silencio tus descuidos.

Es un proyecto sobre disciplina, no sobre funcionalidades. La tienda hace exactamente lo que esperas de una tienda, pero todo su valor reside en que cada punto de contacto con el usuario y la base de datos es una frontera que hay que vigilar a mano y de forma consciente.

Un descenso deliberado al PHP desnudo

Cuando quitas el framework, la red de seguridad que normalmente vive en la configuración por defecto se va con él. El escapado, la protección de sesiones, el enlace de parámetros en las consultas, nada de eso es gratis ya. bazaar lo trata como una lección: para escribir una tienda segura en PHP desnudo, debes entender cada amenaza de la que un framework normalmente te protege.

La disciplina aquí es estimulante, porque no hay ningún sitio donde esconder un atajo. Si en algún lado pegaste una consulta a partir de cadenas o confiaste en datos de un formulario, se ve enseguida, y la responsabilidad es inequívocamente tuya.

Del carrito al pago

1
Catálogo

productos con precios, categorías y un estado de publicación.

2
Carrito en sesión

líneas guardadas del lado del servidor, inmunes a la manipulación en el formulario.

3
Stripe Checkout

el pago confiado a un proveedor especializado, sin tocar los datos de la tarjeta.

4
Cuenta y back office

historial de pedidos para el cliente, un panel de administración completo para el propietario.

La clave está en los pasos dos y tres. El carrito vive del lado del servidor, así que los precios y las cantidades no son lo que vino del navegador sino lo que la tienda misma decidió. El pago va a Stripe, así que un número de tarjeta nunca pasa por nuestro código, lo que elimina del sistema la parte de responsabilidad más peligrosa.

La frontera que vigilas a mano

!
Atención

La tienda acepta pagos, así que los errores no son cosméticos. Ni una sola consulta se arma a partir de cadenas. Solo sentencias preparadas, siempre, porque es la única frontera que detiene de verdad una inyección SQL.

repository.php · sql
SELECT id, name, price_cents
FROM products
WHERE slug = :slug AND published = 1
LIMIT 1;

Cada entrada del exterior se trata como hostil hasta que se enlaza a un parámetro o se escapa. No es paranoia sino la única manera en que una tienda sin la red de un framework puede ser segura.

El resultado no es una tienda más rica en funcionalidades que las de Laravel, sino una tienda cuya seguridad entiendes hasta el fondo, porque la construiste tú mismo. Cada frontera es explícita, cada consulta parametrizada, y el elemento más sensible, los datos de la tarjeta, no vive en absoluto en nuestro sistema.

Dónde está la frontera y por qué se vigila

FronteraVigilada por
Entrada de formulariovalidación y escapado
Consulta a la basesolo sentencias preparadas
Carritodel lado del servidor, sesión endurecida
Datos de la tarjetaconfiados a Stripe, nunca en nuestro poder

Más proyectos

Más trabajos de la misma categoría - mira cómo abordamos retos parecidos.

¿Tiene un proyecto similar?

Escríbenos - el presupuesto es gratuito y llega en una hora.