bazaar
Интернет-магазин на собственном PHP-микрофреймворке - без Laravel и Symfony. Каталог, корзина в сессии, Stripe Checkout, аккаунты клиентов и полноценная админ-панель, на закаленных сессиях и исключительно prepared statements.
Интернет-магазин на собственном PHP-микрофреймворке, без Laravel и Symfony. Каталог товаров, корзина в сессии, Stripe Checkout, аккаунты клиентов и полноценная административная часть. При платежах нет места для срезания углов, поэтому сессии закалены, а в базу идут исключительно подготовленные запросы.
Введение
Большие PHP-фреймворки делают за вас массу вещей, включая безопасность. bazaar намеренно от них отказывается: микрофреймворк, написанный с нуля, означает, что вы сами стережете сессии, сами строите запросы и сами отвечаете за то, чтобы данные клиента не утекли. Нет слоя, который тихо латает ваши недосмотры.
Это проект о дисциплине, а не о функциях. Магазин делает ровно то, чего вы ждете от магазина, но вся его ценность в том, что каждая точка соприкосновения с пользователем и базой - это граница, которую нужно стеречь вручную и осознанно.
Осознанный спуск к голому PHP
Когда вы убираете фреймворк, вместе с ним исчезает и страховочная сетка, которая обычно есть в конфигурации по умолчанию. Экранирование, защита сессий, привязка параметров в запросах - все это больше не бесплатно. bazaar относится к этому как к уроку: чтобы написать безопасный магазин на голом PHP, нужно понимать каждую угрозу, от которой фреймворк обычно вас заслоняет.
Дисциплина здесь освежает, потому что нет места, где спрятать срезанный угол. Если вы где-то склеили запрос из строк или доверились данным из формы, это видно сразу, и ответственность однозначно ваша.
От корзины к оплате
товары с ценами, категориями и статусом публикации.
позиции хранятся на стороне сервера, защищены от подмены в форме.
оплата отдана специализированному провайдеру, без касания данных карты.
история заказов для клиента, полная панель администратора для владельца.
Ключ в шагах два и три. Корзина живет на стороне сервера, поэтому цены и количества - это не то, что пришло из браузера, а то, что решил сам магазин. Оплата идет в Stripe, поэтому номер карты никогда не проходит через наш код, что убирает из системы самый опасный кусок ответственности.
Граница, которую вы стережете вручную
Магазин принимает платежи, поэтому ошибки не косметические. В базу не попадает ни один запрос, склеенный из строк. Только подготовленные запросы, всегда, потому что это единственная граница, которая реально останавливает SQL-инъекцию.
Любой ввод извне считается враждебным, пока не будет привязан к параметру или экранирован. Это не паранойя, а единственный способ, которым магазин без сетки фреймворка может быть безопасным.
Результат - не магазин, богаче функциями, чем те, что на Laravel, а магазин, безопасность которого вы понимаете до конца, потому что построили ее сами. Каждая граница явная, каждый запрос параметризован, а самый чувствительный элемент, данные карты, вообще не живет в нашей системе.
Где граница и чем стережется
| Граница | Чем стережется |
|---|---|
| Ввод из формы | валидация и экранирование |
| Запрос к базе | только подготовленные запросы |
| Корзина | на стороне сервера, закаленная сессия |
| Данные карты | отданы Stripe, никогда у нас |
Больше проектов
Другие работы из той же категории - посмотрите, как мы решаем похожие задачи.
Есть похожий проект?
Напишите нам - смета бесплатна и приходит в течение часа.



