Scraper Обновлено: 3 October, 2019

Как предоставить секреты для приложений Java или Node

  Перевод   Ссылка на автора

Вы когда-нибудь совершали ошибку, передавая свой пароль или ключ API в публичный репозиторий, такой как Github или Bitbucket? Я уверен, что большинство разработчиков допустили эту ошибку на ранних этапах развития своей карьеры один или два раза, прежде чем выучить урок.

В этой статье я объясню, как вы можете предотвратить случайное совершение вышеуказанной ошибки, отделив вашу конфиденциальную информацию от вашего кода, что предотвратит их случайную передачу в систему контроля версий, такую ​​как git, и попадание в публичный репозиторий.

Как вы можете отделить код от данных?

Есть несколько способов исключить вашу конфиденциальную информацию, такую ​​как данные для входа в систему, секреты приложения или API, из вашего кода.

  1. Установка секретов в качестве переменных среды
  2. Установка секретов в качестве аргументов командной строки
  3. Включение секретов в отдельный файл конфигурации

Теперь давайте посмотрим, как каждый из этих методов достигает нашей цели и как сделать это в приложении Java или Node в качестве примера.

1. Установите секреты как переменные среды

Один из лучших подходов для предотвращения случайной публикации секретов вашего приложения в общедоступных репозиториях - это установить их как переменную среды в операционной системе вместо того, чтобы включать их в ваш код. Вы можете импортировать эти переменные среды во время выполнения и использовать их по мере необходимости.

Переменные среды относятся не только к приложениям, но и к операционной системе, в которой вы запускаете приложение. Способ установки переменной среды отличается от операционной системы к операционной системе.

В Windows 10 вы можете найти параметр для установки переменных среды вРасширенные настройки системыв свойствах системы (щелкните правой кнопкой мыши «Мой компьютер»> «Свойства»> «Дополнительные параметры системы»> выберите вкладку «Дополнительно»> «Переменные среды») или на панели управления.

В операционных системах на основе Linux, чтобы установить переменную среды для всех процессов в глобальном масштабе, вы можете включить свои секреты в виде пары ключ-значение в файл в/etc/profile.dкаталог. Вы можете назвать файл с описательным именем с расширением .sh в конце.

sudo cd /etc/profile.d
sudo touch <file_name>.sh
sudo gedit <file_name>.sh #You can use vim or any other text editor

Добавьте нужную переменную среды во вновь созданный файл следующим образом. Убедитесь, что между словами и знаком равенства нет лишних пробелов.

export <VARIABLE_KEY>=<VARIABLE_VALUE>#For exampleexport MY_SECRET=this_is_my_secret

Возможно, вам придется перезапустить операционную систему, чтобы эти глобальные переменные были доступны в вашей среде разработки.

Теперь вы можете импортировать эти переменные в ваш код во время выполнения. Например, вы можете получить значения переменных среды в Java с помощьюGETENV ()метод.

String variable = System.getenv("VARIABLE_KEY")//To get the value of the above exampleString mySecret = System.getenv("MY_SECRET")

В Node.js вы можете использовать переменные окружения в вашем коде следующим образом.

VARIABLE = process.env.VARIABLE_KEY//To get the value of the above examplemySecret = process.env.MY_SECRET

Но вы должны помнить о реализации таких методов, как блоки try-catch для обработки ошибок, которые могут возникнуть в случае отсутствия этих переменных среды.

2. Установите секреты в качестве аргументов командной строки

Аргументы командной строки - это еще один способ задания переменных, которые можно импортировать во время выполнения. В отличие от переменных среды эти аргументы устанавливаются при запуске приложения в качестве свойств командной строки. Поэтому их необходимо указывать при каждом перезапуске программы, и они относятся к процессу, в котором переменные среды доступны для всех процессов, работающих в операционной системе. Способ установки и использования этих аргументов отличается от языка программирования к языку программирования.

В Java эти аргументы командной строки называютсяСвойства системы, Эти свойства могут быть установлены с помощью командной строки с параметром -D при запуске приложения следующим образом. Вы можете указать несколько пар ключ-значение, разделенных

java -DpropertyName=propertyValue MyAppLauncherClass#For examplejava -DmySecret=this_is_my_secret MySecretAppLauncherClass

Или вы можете установить их динамически в вашем коде следующим образом. (Не забывайте кавычки.)

System.setProperty("propertyName","propertyValue");

Вы можете использовать значение системного свойства, установленное любым способом, используяGetProperty ()метод.

String propertyValue = System.getProperty("propertyName");//For ExampleString mySecret = System.getProperty("mySecret");

Большинство современных Java IDE предоставляют графический интерфейс для установки этих аргументов командной строки / системных свойств, поэтому вам не нужно указывать их каждый раз, когда вы запускаете код в среде разработки.

В узле эти аргументы командной строки обрабатываются так же, как переменные среды, и они переопределяют любую переменную среды с тем же именем.

$ propertyName=propertyValue node index.js

Как и переменные окружения, к которым они могут быть прочитаны, мы обращаемся так же, как и к переменным окружения в Node.js.

3. Установите секреты в файле конфигурации

Вместо того, чтобы жестко кодироваться в вашем коде, ключи API и имя пользователя / пароли могут быть включены в отдельный файл конфигурации. Они могут быть импортированы и использованы при необходимости. Например, когда вы работаете над проектом Java, вы можете хранить конфиденциальную информацию вconfig.properties”И написать класс чтения файлов свойств для импорта и использования данных в этом файле.

Только включение ваших секретов в отдельный файл не решит проблему, так как если этот файл конфигурации будет загружен в общедоступный репозиторий, ваша конфиденциальная информация будет снова предоставлена. Чтобы предотвратить это, вы можете включить этот файл конфигурации в«.Gitignore»что предотвратит фиксацию этого файла, если он не был добавлен принудительно.

Если другой программист захочет поработать над вашим проектом, он должен будет либо сам создать файл конфигурации с необходимыми данными, либо получить копию исходного файла конфигурации. Если вы не хотите предоставлять исходный файл конфигурации, вы должны предоставить рекомендации о том, как данные конфигурации должны быть включены в файл конфигурации, включая любой файл шаблона, такой как «config_template.propertiesС фиктивными данными илиПрочти меня"файл с необходимой информацией для повторного создания файла конфигурации.

Вывод

Когда вы публикуете свой код, вы должны быть осторожны, чтобы не раскрывать вашу конфиденциальную информацию другим. Существует три простых способа отделить ваши секреты от кода. Они устанавливают ваши секреты в качестве общесистемных переменных среды, задают их в качестве аргументов командной строки или включают все из них в отдельный файл конфигурации и задают, чтобы они игнорировались системой контроля версий.

При использовании любого из вышеперечисленных методов вы должны предоставить четкую информацию о том, как установить необходимую информацию в"Прочти меня"файл или в коде для справки других или будущих разработчиков.

В следующей статье я объясню, как вы можете использовать git-хуки для предотвращения случайного передачи секретов в git.