Код-ревью Middle Сборка и публикация обновлено

Код-ревью: конфигурация сборки

Вопрос

Фрагмент конфигурации приложения. Найдите проблемы.

class Config {
  static const apiUrl = 'https://api.example.com';
  static const paymentSecret = 'sk_live_51H...';
  static const isDebug = true;
}

void main() {
  if (Config.isDebug) {
    debugPrint('секрет: ${Config.paymentSecret}');
  }
  runApp(const App());
}

Коротко

Окружения задаются при сборке, флаги режима берутся из kDebugMode, а секреты в клиент не попадают вовсе. Любая строка в приложении доступна злоумышленнику.

Что должен найти ревьюер

  1. Стильстрока 2
    Адрес API зашит в код: dev и prod не развести без правки. Передавать через String.fromEnvironment и --dart-define.
  2. Безопасностьстрока 3
    Секретный ключ платёжного провайдера в клиенте: его извлекут из бинарника. Операции с ним должны выполняться на сервере.
  3. Ошибкастрока 4
    Флаг отладки константой true уйдёт в релиз. Использовать kDebugMode или kReleaseMode.
  4. Безопасностьстрока 9
    Печать секрета в лог: логи попадают в отчёты и на устройства тестировщиков.

Разбор

Окружения задаются при сборке, флаги режима берутся из kDebugMode, а секреты в клиент не попадают вовсе. Любая строка в приложении доступна злоумышленнику.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.