Ваш SaaS теряет деньги
Большинство разработчиков выпускают свой SaaS и идут дальше. Они относятся к безопасности как к задаче на будущее. Они ждут появления реальных пользователей или реальных денег.
Реальные финансовые потери часто происходят из-за простых ошибок. Это не сложные хакерские атаки. Это логические ошибки в вашем коде.
Вот четыре распространенных способа, которыми вы теряете деньги:
- Состояние гонки (Race Conditions) в кредитных системах Вы считываете баланс пользователя, проверяете его, а затем записываете новый баланс. Если пользователь отправляет два запроса одновременно, оба запроса могут пройти проверку до того, как первый обновит базу данных. Вы предоставляете две услуги по цене одной.
Решение: Используйте атомарные операции базы данных. Вместо чтения с последующей записью используйте одну команду для обновления баланса только в том случае, если у пользователя достаточно кредитов.
- Доверие клиентским данным при идентификации Вы берете адрес электронной почты из тела запроса во время оформления заказа. Аутентифицированный пользователь может изменить этот email на адрес другого человека. Это позволяет им создавать платежные сессии для неверных аккаунтов или прощупывать вашу систему.
Решение: Никогда не доверяйте идентификационным данным из тела запроса. Извлекайте email из проверенного токена сессии на стороне вашего сервера.
- Нарушенная логика ежегодной оплаты Многие разработчики сбрасывают кредиты пользователей, отслеживая события оплаты Stripe. Это работает для ежемесячных планов. Это не работает для годовых планов. Stripe отправляет одно событие в год. Ваши пользователи получают кредиты в первый день и ничего в течение следующих одиннадцати месяцев.
Решение: Отделите сброс кредитов от событий оплаты. Используйте ежедневное задание cron для проверки того, каким пользователям требуется сброс, на основе даты сброса.
- Небезопасное хранение токенов Вы храните токены сброса пароля в localStorage. Любой скрипт на вашей странице может получить доступ к localStorage. Это касается расширений браузера и сторонней аналитики.
Решение: Используйте ваш SDK аутентификации для обработки токенов восстановления. Позвольте библиотеке обрабатывать токен автоматически, не сохраняя его в localStorage.
Проблема всегда одна и та же: вы доверяете клиенту. Вы верите, что запросы приходят по одному. Вы верите, что события оплаты покрывают все случаи.
Исправление этих проблем занимает меньше одного дня. Проведите аудит своего кода, прежде чем начнете терять деньги.
Источник: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38
