ЗАЩО ИМА ЗНАЧЕНИЕ: Повечето от успешните атаки са причинени от човешки грешки. Правим грешки, които понякога не осъзнаваме.
- Склонни сме да използваме едни и същи идентификационни данни за много портали.
- Ние съхраняваме пароли в отворени файлове.
- Копираме паролите в клипборда.
Всичко това са МНОГО ЛОШИ практики. Може да има просто решение - използвайте подходящи програми. Ами ако направим нещо много по-лошо?
ЗАдълбочете: Обикновено програмистите имат администраторски достъп до услугите. Разбирам, че ТРЯБВА да имаме всички необходими инструменти, за да създадем програма. Понякога не осъзнаваме, че изтичаме важна и секретна информация.
- Идентификационни данни за услугите
- Токени
- 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. Четенето на инструкциите трябва да позволи на новите потребители да стартират приложението без усилие.
Ако ви е харесала историята 👌 оставете коментар 🗯 и не забравяйте да ръкопляскате 👏.