Код-ревью Junior Секреты и управление ключами обновлено
Ревью: конфигурация сервиса на Python
Вопрос
Найдите проблемы обращения с секретами.
import logging, requests
DB_URL = "postgresql://app:Pr0dPassw0rd@db.internal:5432/shop"
PAYMENT_KEY = "sk_live_51HxQ2eLkdf83jdKq"
def charge(order):
headers = {"Authorization": f"Bearer {PAYMENT_KEY}"}
logging.info("charge request %s headers=%s", order.id, headers)
r = requests.post("https://pay.example/charge", json=order.to_dict(), headers=headers, verify=False)
if r.status_code != 200:
logging.error("payment failed: %s %s", r.text, DB_URL)
return r.json()
Коротко
Секреты из кода переезжают в хранилище, логгер маскирует чувствительные заголовки и строки подключения, проверка TLS никогда не отключается.
Что должен найти ревьюер
- Безопасностьстрока 3Пароль базы в коде: попадает в git, во все копии репозитория и окружения. Брать из хранилища секретов.
- Безопасностьстрока 4Боевой ключ платёжного провайдера в коде.
- Безопасностьстрока 8В лог пишутся заголовки с Bearer-токеном.
- Безопасностьстрока 9
verify=Falseотключает проверку сертификата: ключ можно перехватить атакой посредника. - Безопасностьстрока 11В лог ошибки попадает строка подключения к базе с паролем.
Разбор
Секреты из кода переезжают в хранилище, логгер маскирует чувствительные заголовки и строки подключения, проверка TLS никогда не отключается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.