Node.js - хранение пароля в переменной env - PullRequest
0 голосов
/ 14 декабря 2018

Я создаю учетные данные администратора для своего приложения, модель довольно проста, у нее есть свойства имени пользователя и пароля, а также некоторая проверка.У меня есть функция, где я заполняю некоторую информацию в БД.

async function init() {
  const admin = new Admin({
    username: "admin",
    password: "12345"
  });

  const salt = await bcrypt.genSalt(10);
  admin.password = await bcrypt.hash(admin.password, salt);

  try {
    await admin.save({ username: admin.username });
  } catch (ex) {
    console.log(ex.message);
  }
}

Однако при таком подходе я сохраняю пароль в своем исходном коде, и я этого не хочу.Я думал, что, возможно, я смогу сохранить свой пароль администратора в переменной окружения, используя пакет config.

Я попробовал следующее:

  • Создан default.jsonфайл:

    { "adminPassword": "" }

  • Создан файл custom-environment-variables.json:

    { "adminPassword": "fifteen_adminPassword" }

  • Затем изменил мой код следующим образом:

const admin = new Admin({ username: "admin", password: config.get("adminPassword") });

Наконец, я установил переменную env export fifteen_adminPassword=12345, но это неверный пароль, когда япроверяю.

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

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

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

Если вашему приложению нужны учетные данные для входа в какую-либо службу, и выне может хранить хэши паролей (например, потому что вам нужно войти в систему с использованием реального пароля), тогда необходимо сохранить текстовый пароль clea.Если вы разрабатываете управление пользователями и управляете механизмом входа в систему, вам, скорее всего, не нужно хранить пароли в виде открытого текста, но вместо этого можно хранить хэши и использовать их для входа в систему.

На случай, если вы по-прежнемуЕсли вы хотите хранить пароли в виде открытого текста, вы должны попытаться сохранить их в безопасном месте (переменные окружения не безопасное место).Вы можете:

  • Хранить пароль в диспетчере паролей / безопасных местах (например, связке ключей iOS)
  • Шифровать пароли с помощью парольной фразы, которая вводится при каждом запуске приложения, а затем сохранять зашифрованные пароли внекоторый файл конфигурации вашего приложения
  • Шифрование паролей парольной фразой, которая, в свою очередь, хранится в безопасном месте (например, директория ~/.ssh/, доступная только для чтения пользователем).Обратите внимание, что это только тонкий слой безопасности, но обеспечивает максимальный комфорт
0 голосов
/ 16 июля 2019

Я использовал пакет config , но у меня слишком много головной боли.поэтому я перешел на пакет env-cmd .вот как вы должны реализовать:

npm install env-cmd

, затем создайте каталог / config в вашей корневой папке.создайте внутри него файл dev.env.введите здесь свои переменные следующим образом:

/ config / dev.env

PORT=3000
ADMIN_PASSWORD=fifteeen_adminpassword

обратите внимание, что для соглашения об именовании переменные env всегда являются заглавными буквами, и мы разделяем их через "_".и значения НЕ являются строками.

теперь вам нужно настроить файл package.json.в «скриптах» у нас обычно есть сценарии запуска, разработки, тестирования.start для платформ развертывания, test для тестирования и dev для нашей текущей среды разработки.если вы используете nodemon (скорее всего, и вы), ваши сценарии разработки должны выглядеть следующим образом.

"scripts": {
    "start": "node src/index.js",
    "dev": "nodemon src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

при запуске npm run dev, терминал запустит этот nodemon src/index.js.это базовая конфигурация для любого приложения узла.Теперь нам нужно передать наши переменные, которые хранятся в /config/dev.env.к нашему приложению.для этого изменения "dev" на

"dev": "env-cmd -f ./config/dev.env nodemon src/index.js",

теперь пакет env-cmd устанавливает все переменные, которые вы передали в /config/dev.env как переменную окружения.теперь вы используете их следующим образом:

const admin = new Admin({
        username: "admin",
        password: process.env.ADMIN_PASSWORD
      });

Обратите внимание, что при развертывании проекта в github вы добавляете имя папки конфигурации в файл .gitignore.поэтому ваши пароли или ключи API не будут общедоступными.

также каждый раз, когда вы добавляете новую переменную в процесс терминала dev.env и перезапускаете ее.mongodb выдаст ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...