W
Web3 разработчик
@web3dev_notes280 подп.
589просмотров
17 апреля 2025 г.
Score: 648
Приватники текстом в .env файлах   Каюсь, делал это до недавнего времени. Даже видел, как лежат в открытом виде приватники от $100K кошельков в .env. Думаю, не надо объяснять, почему это опасно – простой сканер .env файлов может вытащить немалые деньги. А скамеров хватает.   Наконец, нашел час и разобрался. Оказывается, все есть в ethers. Идея – зашифровать приватник паролем и хранить его в env в зашифрованном виде. Приложение при запуске читает зашифрованный приватник и дешифрует паролем. Я пароль разместил в таблицу в БД – т.к. вероятность одновременной утечки БД и .env файла мала.   Итак, сначала шифруем приватник. Пароль выбираете сами.   const wallet = new ethers.Wallet("PRIVATE_KEY"); const encryptedWalletString = await wallet.encrypt('PASSWORD'); console.log(encryptedWalletString);     Зашифрованный приватник выглядит так (в начале адрес кошеля, что удобно - сразу понятно от какого):   {"address":"32f04","id":"f0596bf7-","version":3,"Crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":""},"ciphertext":"","kdf":"scrypt","kdfparams":{"salt":"","n":131072,"dklen":32,"p":1,"r":8},"mac":"*"}}   Это вставляете в .env. В БД записываете пароль.   Далее в приложении расшифровываете:   const encrypted = process.env.WALLET_ENCRYPTED!; const password = …. // load password from the DB   const wallet = (await ethers.Wallet.fromEncryptedJson(encrypted, password)).connect(       new ethers.JsonRpcProvider(process.env.RPC_URL),     );   Просто как 1-2-3! Наслаждаемся тем, что сильно улучшили свою безопасность. А как ваши приложения хранят приватники?
589
просмотров
1708
символов
Нет
эмодзи
Нет
медиа

Другие посты @web3dev_notes

Все посты канала →
Приватники текстом в .env файлах   Каюсь, делал это до — @web3dev_notes | PostSniper