bazaar

Un negozio e-commerce su un micro-framework PHP proprietario - senza Laravel e Symfony. Catalogo, carrello in sessione, Stripe Checkout, account clienti e un back office amministrativo completo, su sessioni rafforzate e solo prepared statement.

bazaar
TL;DR

Un negozio e-commerce su un microframework PHP fatto a mano, senza Laravel, senza Symfony. Un catalogo di prodotti, un carrello in sessione, Stripe Checkout, account clienti e un back office di amministrazione completo. Con i pagamenti non c'è spazio per scorciatoie, quindi le sessioni sono irrobustite e solo prepared statement raggiungono il database.

Introduzione

I grandi framework PHP gestiscono molte cose per te, sicurezza inclusa. bazaar vi rinuncia di proposito: un microframework scritto da zero significa che custodisci tu stesso le sessioni, costruisci tu stesso le query e sei l'unico responsabile di impedire che i dati dei clienti trapelino. Non c'è uno strato che in silenzio rattoppa le tue sviste.

È un progetto sulla disciplina, non sulle funzionalità. Il negozio fa esattamente ciò che ti aspetti da un negozio, ma tutto il suo valore sta nel fatto che ogni punto di contatto con l'utente e il database è un confine che devi sorvegliare a mano e consapevolmente.

Una discesa deliberata al PHP nudo

Quando togli il framework, se ne va anche la rete di sicurezza che di solito vive nella configurazione predefinita. Escaping, protezione delle sessioni, binding dei parametri nelle query, niente di tutto ciò è più gratuito. bazaar lo tratta come una lezione: per scrivere un negozio sicuro in PHP nudo, devi capire ogni minaccia da cui un framework normalmente ti protegge.

La disciplina qui è tonificante, perché non c'è alcun posto dove nascondere una scorciatoia. Se hai messo insieme una query da stringhe da qualche parte o ti sei fidato dei dati di un modulo, si vede subito, e la responsabilità è senza ambiguità tua.

Dal carrello al pagamento

1
Catalogo

prodotti con prezzi, categorie e uno stato di pubblicazione.

2
Carrello in sessione

voci tenute lato server, immuni alle manomissioni nel modulo.

3
Stripe Checkout

il pagamento affidato a un fornitore specializzato, senza toccare i dati della carta.

4
Account e back office

storico ordini per il cliente, un pannello di amministrazione completo per il proprietario.

La chiave è nei passi due e tre. Il carrello vive lato server, quindi prezzi e quantità non sono ciò che è arrivato dal browser ma ciò che il negozio stesso ha deciso. Il pagamento va a Stripe, quindi un numero di carta non passa mai per il nostro codice, il che rimuove dal sistema la fetta di responsabilità più pericolosa.

Il confine che sorvegli a mano

!
Attenzione

Il negozio accetta pagamenti, quindi gli errori non sono cosmetici. Non una sola query viene assemblata da stringhe. Solo prepared statement, sempre, perché è l'unico confine che ferma davvero un'iniezione SQL.

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

Ogni input dall'esterno viene trattato come ostile finché non viene legato a un parametro o sottoposto a escaping. Non è paranoia ma l'unico modo in cui un negozio senza la rete di un framework può essere sicuro.

Il risultato non è un negozio più ricco di funzionalità di quelli su Laravel, ma un negozio la cui sicurezza capisci fino in fondo, perché l'hai costruita tu stesso. Ogni confine è esplicito, ogni query parametrizzata, e l'elemento più sensibile, i dati della carta, non vive affatto nel nostro sistema.

Dov'è il confine e da cosa è sorvegliato

ConfineSorvegliato da
Input del modulovalidazione ed escaping
Query al databasesolo prepared statement
Carrellolato server, sessione irrobustita
Dati della cartaaffidati a Stripe, mai da noi

Altri progetti

Altri lavori della stessa categoria - scopri come affrontiamo sfide simili.

Hai un progetto simile?

Contattaci - il preventivo è gratuito e arriva entro un'ora.