Я провел аудит своих сторонних проектов на предмет безопасности — вот что я обнаружил

Недавно я провел аудит всех своих сторонних проектов. Я проверил свои бэкенды на FastAPI, Telegram-ботов и веб-приложения. Я думал, что я осторожен.

Я ошибался.

Я нашел реальные баги, которые фактически попали в продакшн. Это не теоретические проблемы. Это ошибки, которые я совершил, пытаясь работать быстро.

Вот основные проблемы, которые я обнаружил, и способы их решения:

  1. Условная аутентификация Я писал код, который проверял API-ключи только в том случае, если существовал секретный ключ (secret). Если я забывал установить секрет в переменных окружения, проверка просто пропускалась. Это оставляло мой API открытым для всех.
  1. Утечка ключей в истории Git Я нашел старые API-ключи в истории Git. Позже я перенес их в .env файлы, но Git хранит каждую старую версию вашего кода вечно.
  1. Оставшиеся отладочные эндпоинты Я оставил в продакшне эндпоинты, которые показывали конфигурацию моей базы данных и системные настройки. Они полезны во время разработки, но опасны в реальной среде.
  1. Избыточные сообщения об ошибках Я возвращал пользователю «сырые» системные ошибки. Эти ошибки раскрывают пути к файлам, типы баз данных и версии библиотек. Злоумышленник может использовать эти данные для атаки на вашу систему.
  1. XSS через innerHTML Я использовал innerHTML для рендеринга пользовательских данных на фронтенде. Это позволяет злоумышленникам внедрять скрипты на ваш сайт.
  1. Отсутствие ограничения частоты запросов (Rate Limiting) У меня были эндпоинты, которые вызывали дорогостоящие модели ИИ без ограничений. Один пользователь мог за считанные минуты накрутить огромный счет.
  1. Слишком разрешительные настройки CORS Я использовал allow_origins=["*"] в своем middleware. Это позволяет любому веб-сайту делать запросы к вашему API.
  1. Утечка файлов Я писал код, который создавал временные файлы, но не удалял их в случае сбоя процесса. Эти файлы остаются на сервере навсегда.

Проблемы безопасности редко бывают намеренными. Они — результат фразы «Я исправлю это позже». Это «позже» никогда не наступает.

Внедряйте безопасность в свой рабочий процесс с первого дня. Проверяйте код перед коммитом и перед деплоем.

Источник: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb