ЗАЩО ИМА ЗНАЧЕНИЕ: Повечето от успешните атаки са причинени от човешки грешки. Правим грешки, които понякога не осъзнаваме.

  • Склонни сме да използваме едни и същи идентификационни данни за много портали.
  • Ние съхраняваме пароли в отворени файлове.
  • Копираме паролите в клипборда.

Всичко това са МНОГО ЛОШИ практики. Може да има просто решение - използвайте подходящи програми. Ами ако направим нещо много по-лошо?

ЗАдълбочете: Обикновено програмистите имат администраторски достъп до услугите. Разбирам, че ТРЯБВА да имаме всички необходими инструменти, за да създадем програма. Понякога не осъзнаваме, че изтичаме важна и секретна информация.

  • Идентификационни данни за услугите
  • Токени
  • API ключове

Ако кракерът ги вземе, те получават достъп до акаунтите НА ВСИЧКИ - не само до вашия.

КОНТЕКСТЪТ: Наскоро самият аз направих тази грешка. Разработвах библиотека за един от моите клиенти. Исках ВРЕМЕННО да натисна API КЛЮЧ към хранилището на GitHub. За щастие направих PR и беше забелязан веднага.

Намеренията ми бяха добри. Исках да го махна по-късно. Но така или иначе остава в историята.

  • Забравих за правилото „Направи го както трябва от първия път“.
  • Сигурността е като застраховката - съжалявате, че не сте я имали, когато нещата вече са се случили.
  • През повечето време е лесно да се вземат предпазни мерки.

ПЪРВО РЕШЕНИЕ: Можете просто да създадете самостоятелен клас, който съдържа статично поле с API ключа. Не забравяйте, добавете този клас към файла .gitignore.

  • Незабавна обратна връзка — ако класът не съществува, той не успява да се компилира.
  • Важно е този клас да е добре наименуван.

ApiKey.kt

object ApiKey {
  const val API_KEY = “abc123”
}

.gitignore

**/ApiKey.kt

ВТОРО РЕШЕНИЕ: Експортирайте променлива на средата. Имайте предвид, че такава променлива е достъпна само от системата, за която сте я експортирали. Не можете да го експортирате на Mac и да го прочетете в приложението за Android. Вместо това трябва да го предоставите по време на изграждането.

  • Предоставя се по време на изграждане, но вие научавате дали сте го направили правилно по време на изпълнение (липсваща променлива на средата води със стойност „null”, която все още е низ)
  • Това е РЕШЕНИЕТО, ако използвате CI Server, за да създадете приложението си.

В зависимост от това коя обвивка използвате bash или zsh има файлове за конфигурационен скрипт съответно .bashrc и .zshrc.

  • В MacOS те се намират в главната директория (`cd`)
  • Създайте ги, ако не съществуват (`touch .zshrc`)
  • Не забравяйте да презаредите скрипта или да рестартирате Terminal/Android Studio, ако е необходимо (`source .zshrc`)

.zshrc

export API_KEY=abc123

build.gradle

android {
  …
  buildTypes {
    debug {
      buildConfigField `String`, `API_KEY`, "\"${System.getenv(‘API_KEY’)}\""
    }
  }
}

SampleActivity.kt

Library.initialize(apiKey = BuildConfig.API_KEY)

ЗАКЛЮЧЕНИЕ: Независимо от решението, не забравяйте да документирате необходимите стъпки във файл README.md. Четенето на инструкциите трябва да позволи на новите потребители да стартират приложението без усилие.

Ако ви е харесала историята 👌 оставете коментар 🗯 и не забравяйте да ръкопляскате 👏.