bazaar

Sklep e-commerce na własnym mikroframeworku PHP - bez Laravela i Symfony. Katalog, koszyk w sesji, Stripe Checkout, konta klientów i pełne zaplecze administracyjne, na hartowanych sesjach i wyłącznie prepared statements.

bazaar
TL;DR

Sklep e-commerce na własnym mikroframeworku PHP, bez Laravela i Symfony. Katalog produktów, koszyk w sesji, Stripe Checkout, konta klientów i pełne zaplecze administracyjne. Przy płatnościach nie ma miejsca na skróty, więc sesje są hartowane, a do bazy idą wyłącznie prepared statements.

Wprowadzenie

Duże frameworki PHP załatwiają za ciebie mnóstwo rzeczy, w tym bezpieczeństwo. bazaar rezygnuje z nich celowo: mikroframework napisany od zera oznacza, że sam pilnujesz sesji, sam budujesz zapytania i sam odpowiadasz za to, żeby dane klienta nie wyciekły. Nie ma warstwy, która po cichu łata twoje niedopatrzenia.

To projekt o dyscyplinie, a nie o funkcjach. Sklep robi dokładnie to, czego oczekujesz od sklepu, ale cała jego wartość siedzi w tym, że każdy punkt styku z użytkownikiem i z bazą jest granicą, której trzeba pilnować ręcznie i świadomie.

Świadome zejście na goły PHP

Kiedy odejmiesz framework, znika też siatka bezpieczeństwa, która zwykle jest w domyślnej konfiguracji. Escaping, ochrona sesji, wiązanie parametrów w zapytaniach, to wszystko przestaje być darmowe. bazaar traktuje to jako lekcję: żeby napisać bezpieczny sklep na gołym PHP, musisz rozumieć każde zagrożenie, przed którym framework zwykle cię zasłania.

Dyscyplina jest tu ożywcza, bo nie ma gdzie schować skrótu. Jeśli gdzieś skleiłeś zapytanie ze stringów albo zaufałeś danym z formularza, to widać od razu, a odpowiedzialność jest jednoznacznie twoja.

Od koszyka do płatności

1
Katalog

produkty z cenami, kategoriami i stanem publikacji.

2
Koszyk w sesji

pozycje trzymane po stronie serwera, odporne na majstrowanie w formularzu.

3
Stripe Checkout

płatność oddana wyspecjalizowanemu dostawcy, bez dotykania danych karty.

4
Konto i zaplecze

historia zamówień dla klienta, pełen panel administracyjny dla właściciela.

Klucz jest w kroku drugim i trzecim. Koszyk żyje po stronie serwera, więc ceny i ilości nie są tym, co przyszło z przeglądarki, tylko tym, co sklep sam ustalił. Płatność idzie do Stripe, więc numer karty nigdy nie przechodzi przez nasz kod, co usuwa najgroźniejszy fragment odpowiedzialności z systemu.

Granica, której pilnujesz ręcznie

!
Ostrzeżenie

Sklep przyjmuje płatności, więc błędy nie są kosmetyczne. Do bazy nie trafia ani jedno zapytanie sklejone ze stringów. Wyłącznie prepared statements, zawsze, bo to jedyna granica, która realnie zatrzymuje wstrzyknięcie SQL.

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

Każde wejście z zewnątrz jest traktowane jak wrogie, dopóki nie zostanie związane parametrem albo zescapowane. To nie paranoja, tylko jedyny sposób, w jaki sklep bez frameworkowej siatki może być bezpieczny.

Efektem nie jest sklep bogatszy w funkcje niż te na Laravelu, tylko sklep, którego bezpieczeństwo rozumiesz do końca, bo sam je zbudowałeś. Każda granica jest jawna, każde zapytanie parametryzowane, a najbardziej wrażliwy element, czyli dane karty, w ogóle nie żyje w naszym systemie.

Gdzie jest granica i czym pilnowana

GranicaCzym pilnowana
Wejście z formularzawalidacja i escaping
Zapytanie do bazywyłącznie prepared statements
Koszykpo stronie serwera, hartowana sesja
Dane kartyoddane Stripe, nigdy u nas

Więcej projektów

Inne realizacje z tej samej kategorii - zobacz, jak podchodzimy do podobnych wyzwań.

Masz podobny projekt?

Napisz do nas - wycena jest bezpłatna i wraca w godzinę.