Що таке кодувальник паролів bcrypt




Що таке кодувальник паролів bcrypt



Як працює Bcrypt - бібліотека для хешування паролів у Node.js

Безпека даних є одним із найважливіших аспектів у сучасній розробці програмного забезпечення. Однією з основних уразливостей програм є зберігання паролів користувачів. Помилки обробки паролів можуть призвести до серйозних наслідків, аж до команди надати доступ до інформації зловмисникам.

Однак розробники не можуть просто зберігати паролі у базі даних у відкритому вигляді. Натомість вони повинні хешувати паролі, щоб зробити їх нерозбірливими для будь-кого, хто отримає несанкціонований доступ до бази даних.

У Node.js розробники часто використовують бібліотеку Bcrypt для хешування паролів користувачів. Bcrypt – це сильний алгоритм хешування паролів, який забезпечує безпеку та захист від різних видів атак.

Bcrypt використовує комбінацію солі та алгоритму хешування для створення унікального рядка хешу для кожного пароля. Сіль - це випадковий рядок, що додається до пароля перед хешуванням. Він запобігає використанню «готових таблиць» для відновлення вихідних паролів та створює унікальний хеш для кожного пароля навіть у разі використання однакових паролів.

Що таке Bcrypt і навіщо він потрібний?

Основна причина використання Bcrypt у Node.js полягає в тому, що він пропонує потужну та надійну функцію хешування паролів. Bcrypt приймає на вхід пароль, хешує його та зберігає результат у вигляді унікального рядка. Цей хеш може бути збережений у базі даних або передано через мережу.

Одна з основних особливостей Bcrypt – це його здатність повільно обчислювати хеш.Кожна операція хешування споживає багато часу, що робить процес злому дуже скрутним і уповільнює атаки методом перебору. Це особливо важливо, оскільки зловмисники зазвичай використовують потужні комп'ютери та спеціалізовані апаратні засоби для прискорення процесу злому паролів.

Завдяки своїй складності та високому рівню безпеки, Bcrypt є однією з найбільш рекомендованих бібліотек хешування паролів. Він забезпечує надійний захист даних і допомагає запобігти можливим загрозам безпеці, пов'язаним із зберіганням і передачею паролів.

Принципи роботи бібліотеки Bcrypt

Бібліотека Bcrypt призначена для хешування паролів у Node.js і пропонує надійний спосіб захисту даних користувача. Основні засади роботи цієї бібліотеки включають:

1. Солі для додаткової безпеки: Bcrypt додає випадкові дані до пароля перед хешуванням. Така практика називається «соління» і дозволяє запобігти атакам за словником, оскільки кожен хеш буде унікальним залежно від використаної солі.

2. Повільність: Bcrypt розроблено з метою уповільнити хешування паролів. Це зроблено для того, щоб ускладнити підбір пароля хакерам. Алгоритм Bcrypt виконує безліч ітерацій та інших дорогих операцій, що додає час, необхідний його виконання.

3. Гнучкість у параметрах: Bcrypt дозволяє настроювати параметри хешування, такі як кількість ітерацій та розмір солі. Це дозволяє адаптувати рівень безпеки під конкретні вимоги проекту.

4. Ідентичність хешей: Bcrypt генерує хеш пароля, який завжди матиме однакову довжину.Це дозволяє безпечно зберігати хеші у базі даних, оскільки зловмисник зможе однозначно дізнатися, який пароль відповідає конкретному хешу.

Бібліотека Bcrypt ефективно захищає паролі користувача, надаючи стійкий захист навіть у разі скомпрометування бази даних. Вона є надійним вибором для реалізації безпеки в програмах Node.js.

Переваги використання Bcrypt для хешування паролів

1. Опір атакам перебору

Bcrypt надає спеціальні функції, що ускладнюють процес перебору паролів зловмисниками. Вона використовує повільне хешування, що ускладнює можливість підбору паролів шляхом грубої сили. Таким чином, Bcrypt забезпечує високий ступінь захисту від перебору атак.

2. Генерація унікальної солі

Bcrypt автоматично генерує та додає унікальну сіль до кожного хешованого паролю. Це означає, що навіть якщо у двох користувачів однакові паролі, їх хеші відрізнятимуться. Використання солі підвищує безпеку системи, оскільки воно ускладнює атаки, що базуються на попередній генерації таблиці райдужних хешів.

3. Простота у використанні

Bcrypt був розроблений для забезпечення простоти використання. Його API легко зрозуміти та використовувати. Підключення та використання Bcrypt у проекті Node.js не потребує великих зусиль та особливих знань. До того ж, Bcrypt сумісний із великою кількістю платформ та фреймворків, що робить його популярним інструментом у спільноті розробників.

4. Можливість управління вартістю хешування

В Bcrypt можна задати «вартість» хешування, яка визначає скільки часу буде витрачено виконання хеш-функции. Час хешування може бути налаштований на рівні, який потрібний для конкретної програми.Це особливо корисно за умов експоненційного зростання обчислювальних потужностей сучасних процесорів, оскільки дозволяє підтримувати безпеку паролів досить рівні.

5. Автоматична перевірка солі

Bcrypt автоматично виймає сіль з хешованого пароля під час його перевірки. Це дозволяє використовувати той самий хеш для перевірки, що спрощує процес виключення неправильних перевірок, пов'язаних з неправильним узгодженням солі.

Загалом використання Bcrypt для хешування паролів у Node.js має безліч переваг. Стабільність, безпека та простота у використанні роблять Bcrypt одним з найбільш підходящих інструментів для забезпечення безпеки паролів користувача в веб-додатках.

Приклад використання Bcrypt в Node.js додатку

Ось приклад коду, що показує, як використовувати Bcrypt для хешування пароля в Node.js додатку:

  • Встановіть пакет Bcrypt, виконавши команду npm install bcrypt .
  • Імпортуйте модуль Bcrypt у вашій програмі за допомогою команди const bcrypt = require('bcrypt'); .
  • Створіть асинхронну функцію для хешування пароля. Наприклад:
async function hashPassword(password)

У цьому прикладі функція hashPassword приймає пароль як аргумент і повертає пароль хешування. Значення saltRounds вказує на кількість раундів, що використовуються для генерації солі.

async function comparePassword(password, hashedPassword)

Функція comparePassword приймає як аргумент вихідний пароль і хешований пароль. Вона повертає булеве значення, що вказує, чи вихідний пароль збігається з хешованим.

Ви можете використовувати ці функції у вашому Node.js додатку для хешування та перевірки паролів користувачів. Це є стандартною практикою для безпеки паролів у веб-додатках.

Хешування паролів у Python за допомогою BCrypt

Хешування паролів – це спосіб безпечного зберігання паролів. Він включає перетворення простих текстових паролів в хешований формат, який неможливо легко звернути назад або розшифрувати. Завдяки хешування паролів, навіть якщо хакер отримає доступ до бази даних паролів, він не зможе розшифрувати паролі.

BCrypt — це алгоритм хешування паролів, який вважається одним із найбезпечніших алгоритмів хешування паролів у Python. BCrypt спроектований так, щоб працювати повільно, що ускладнює зламування хешованих паролів хакерам. У цьому пості ми пояснимо синтаксис, алгоритм коду та приклади коду Python для хешування паролів за допомогою BCrypt у Python.

Синтаксис

Імпортуйте необхідні пакети та бібліотеки, необхідні для хешування паролів за допомогою BCrypt у Python. Спочатку виконайте "pip install bcrypt"

import bcrypt hashed_password = bcrypt.hashpw(password, salt)

Тут пароль - це рядок, надісланий користувачем, а сіль - це випадковий текст, який додається до пароля для його ще безпечнішого зберігання. hashpw - найважливіша функція, яка фактично шифрує пароль. Пізніше це буде використано для розшифровки для автентифікації сторін.

Деякі інші популярні методи доступні:

hashpw(пароль, сіль)

Синтаксис

bcrypt.hashpw(password, salt)

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

Параметри

  • пароль – пароль, який буде хешований у вигляді байтового рядка.
  • сіль - Сіль, яка використовуватиметься в процесі хешування. Це також має бути байтовий рядок.

генсоль (раундів = 12)

Синтаксис

bcrypt.gensalt(rounds=12)

Цей метод генерує випадкову сіль, яку можна використовувати у процесі хешування пароля. Він повертає сіль у вигляді байтового рядка.

Параметри

  • раундів - Кількість раундів, що використовуються в процесі хешування. Безпека хешу залежить від кількості раундів. Значення за замовчуванням – 12, рекомендується використовувати значення від 10 до 15.

checkpw(пароль, хеш_пароль)

Синтаксис

bcrypt.checkpw(password, hashed_password)

Цей метод перевіряє, чи простий текстовий пароль відповідає хешованому паролю. Він повертає логічне значення.

Параметри

  • пароль – текстовий пароль, який потрібно перевірити.
  • hashed_password − хешований пароль для порівнювати.

kdf(пароль, сіль, бажані_ключові_байти, раунди, хеш_функція)

Синтаксис

bcrypt.kdf(password, salt, desired_key_bytes, rounds, hash_function)

Цей метод генерує функцію деривації ключа (KDF), яку можна використовувати для отримання криптографічного ключа з паролю та солі.

Параметри

  • пароль – пароль, який використовуватиметься в KDF.
  • сіль — сіль, яка використовуватиметься у KDF.
  • desired_key_bytes - Кількість байтів похідного ключа.
  • раунди — кількість раундів, які використовуються у KDF.
  • hash_function - хеш-функція, яка використовується в KDF. За промовчанням використовується SHA-512.

Алгоритм

  • Згенеруйте випадкову сіль (рядок символів) за допомогою вбудованої функції BCrypt.
  • Поєднайте простий текстовий пароль із сіллю.
  • Хешуйте комбінацію простого текстового пароля та солі за допомогою функції BCrypt hashpw().
  • Збережіть пароль для хешування в базі даних паролів.

Важливість додавання солі до пароля хешованого неможливо переоцінити. Додавання солі ускладнює злом хешованого пароля хакерам.Сіль — це випадковий рядок символів, що є унікальним для кожного користувача, що унеможливлює використання хакерами заздалегідь розрахованих таблиць для злому хешованого пароля.

приклад

import bcrypt password = b"password123" salt = bcrypt.gensalt(rounds=15) hashed_password = bcrypt.hashpw(password, salt) print(hashed_password)

Вихід

b'$2b$15$4bBaa1VTwVvZlEolrZD/ZOX9.83EZn30JbDZnLgQVgW8fKyQNmzZi'

Пояснення

import bcrypt password = b"password123" salt = bcrypt.gensalt(rounds=15) hashed_password = bcrypt.hashpw(password, salt) if bcrypt.checkpw(password, hashed_password): print("Password is correct") "Password is incorrect")

Вихід

  • Імпортуйте бібліотеку bcrypt за допомогою оператора імпорту.
  • Визначте простий текстовий пароль як "password123".
  • Використовуйте вбудовану функцію gensalt() BCrypt для створення випадкової солі. Вказуємо кількість раундів 15.
  • 4. Об'єднайте текстовий пароль та сіль.
  • Застосуйте функцію hashpw() BCrypt для хешування комбінації простого текстового пароля та солі.
  • Збережіть хешований пароль у змінній hashed_password.
  • Використовуйте функцію checkpw() BCrypt, щоб порівняти простий текстовий пароль із хешованим паролем.
  • Якщо простий текстовий пароль відповідає хешованому паролю, виведіть "Пароль правильний". В іншому випадку ми друкуємо "Пароль невірний".

Додаток

Хешування паролів - це важливий елемент, який слід враховувати, якщо ви хочете бути впевненим, що ваша програма надійно зберігає паролі. Він широко використовується програмами, включаючи онлайн-банкінг, веб-сайти електронної комерції та сайти соціальних мереж, для захисту паролів користувачів. BCrypt — один з найпопулярніших і найбезпечніших методів хешування паролів у Python, і його настійно рекомендується використовувати при хешуванні паролів.

Висновок

Тепер після прочитання цього посібника ви знаєте, як використовувати BCrypt для хешування паролів у Python. Ми надали приклади коду Python і детально описали синтаксис та метод використання BCrypt для хешування паролів. Ми також наголосили, наскільки важливо підвищити безпеку хешованого пароля шляхом додавання солі. Деякі програми, які потребують хешування паролів, використовують надзвичайно безпечний метод хешування паролів BCrypt. Тому рекомендується використовувати BCrypt, якщо ви хочете підвищити безпеку своєї програми за рахунок хешування паролів.

Статті з цієї тематики:

  • Шифрування проти хешування
  • Як правильно зберігати паролі: соління, хешування та PBKDF2
  • Хешування паролів у Python за допомогою BCrypt
  • Вам потрібно керувати паролями Linux у командному рядку? Нема графічного інтерфейсу, немає проблем!
  • "Секрети" - сучасний простий додаток GTK4 для зберігання ваших паролів в Ubuntu/Fedora
  • Microsoft: цей ботнет швидко росте і полює на сервери зі слабкими паролями
  • Це нове шкідливе ПЗ для Linux, що «вислизає», створює бекдор для крадіжки паролів і багато іншого
  • Перегляд прихованих паролів за зірочками у веб-браузерах
  • Примушувати користувачів використовувати надійні паролі в Debian та Ubuntu
  • Jumble Password – створюйте унікальні ідентифікатори та паролі в Linux
  • Як Linux зберігає та керує паролями користувачів
  • Як використовувати сховище паролів для керування паролями в Linux
  • Як видалити пароль із PDF-файлу в Linux
  • Jumble Password — програма для створення унікальних ідентифікаторів та паролів з відкритим вихідним кодом для Linux
  • Введіть невидимі паролі за допомогою цього модуля Python

Як безпечно обробляти паролі за допомогою BcryptsJS JavaScript

Захист паролів веб-сайтів — важлива навичка, яку повинен мати будь-який розробник.JavaScript забезпечує безпечне зберігання та обробку паролів або інших конфіденційних даних з використанням алгоритмів хешування, що надаються модулем BcryptJS JavaScript.

У цьому посібнику ви дізнаєтеся про BcryptJS та хешування для налаштування базового експрес-сервера, який зберігатиме паролі у вигляді хешів у базі даних, а не необроблених рядків, та витягуватиме їх для аутентифікації пароля.

Попередні умови

Щоб продовжити роботу з цим посібником, у вас мають бути наступні налаштування.

    На комп'ютері встановлена ​​стабільна версія Node.js версії 12.x або вище. Ви можете використовувати цей посібник DigitalOcean для встановлення останньої версії Node Js на свій комп'ютер.

Навіщо використовувати BcryptJS?

Bcrypt — це алгоритм хешування, що дозволяє створювати хеші для паролів та зберігати їх у разі витоку даних. Цей удосконалений алгоритм хешування використовує солі, що ускладнює його зламування за допомогою таких атак, як перебір.

BcryptJS - це JavaScript-реалізація алгоритму хешування Bcrypt, що дозволяє використовувати хеш-шифрування без необхідності використання складних функцій хешування. Ось деякі з причин, які роблять BcryptJS чудовим вибором для захисту паролів:

  1. Безпека – BcryptJS реалізує алгоритм Bcrypt, повільний алгоритм (який добре підходить для хешування) та потребує інтенсивних обчислювальних потужностей. Це ставить перед зловмисниками складне завдання зі злому хешу пароля, забезпечуючи безпеку паролів навіть у разі витоку даних.
  2. Сіль – BcryptJS генерує випадкові солі для паролів, щоб забезпечити безпеку зберігання (докладніше ми дізнаємося про хеші та солі в наступному розділі). Солі ускладнюють хеш щодо слабкого пароля, що ускладнює його розшифрування.
  3. Простота використання. BcryptJS надає розробникам JavaScript інструмент для шифрування паролів, не вимагаючи глибокого розуміння хешування.

На наступному етапі ми коротко дізнаємось про хешах і солях.

Як працює хешування?

Перш ніж використовувати ці концепції у своїх проектах, ви повинні зрозуміти, як працюють хешування та засолювання.

Хешування

Хешування — перетворення простого рядка або відкритого тексту на рядок випадкових символів (шифрування). Це дозволяє безпечно зберігати та/або передавати конфіденційні дані. Хешування включає такі ключові етапи:

Введення даних. По-перше, зберігаються дані будь-якого типу (двійкові, символьні, десяткові тощо) у вигляді звичайного тексту або рядка.

Хеш-функція. Хеш-функція - це математичний алгоритм, який приймає вхідні дані та перетворює їх на набір символів або хеш-кодів. Хеш-функції є детермінованими (видають один і той же результат для того самого введення) і односторонніми функціями (це означає, що практично неможливо реконструювати вихідні дані хеш-функцій, тобто хешувати їх вхідні дані).

Опір зіткненню. Це означає, що хеш-функція створюється з урахуванням ідеї стійкості до зіткнень, тобто два різних входи не можуть мати однаковий вихід (хеш-код).

Аутентифікація. Хеш-функції є детермінованими і створюють той самий хеш для тих самих вхідних даних. Таким чином, при аутентифікації пароля, що зберігається у вигляді хеша, основна ідея полягає в тому, що якщо пароль для аутентифікації відповідає хешу, що зберігається в базі даних, правильний пароль.

Соління

Оскільки хешування існує вже кілька десятиліть, з'явилися такі розробки, як райдужні таблиці, які містять мільярди записів даних, що містять рядки даних і відповідні хеші, засновані на різних алгоритмах хешування.

Тепер розглянемо ситуацію, коли користувач, який створює обліковий запис на вашому сайті, створює слабкий пароль. Таким чином, у разі витоку даних зловмисник може переглянути хеші ваших користувачів та знайти збіг хешу з обліковим записом користувача зі слабким паролем. Це може призвести до катастрофічних наслідків для програм з високим рівнем безпеки. Щоб цього не сталося, використовують солі.

Солення — це додатковий рівень безпеки, який додається до хеш шляхом додавання випадкового рядка символів у хеш пароля перед його збереженням у базі даних. Таким чином, навіть якщо в результаті злому станеться витік даних, зловмиснику буде складно розшифрувати хеш, що містить сіль. Розглянемо наступний приклад:

Password = 'sammy' Hash = £%$^&£!23!3%!! Salt = 2vqw£4Df$%sdfk Hash + Salt = £%$^&£!23!3%!!2vqw£4Df$%sdfk

Як ми ясно бачимо, пароль, що зберігається із сіллю, з меншою ймовірністю буде зламаний через детерміновану природу хешів. Отже, якщо зловмисник, наприклад, знайде цей рядок хеш+пароль у райдужній таблиці, він отримає справжній рядок пароля, а щось зовсім інше.

Тепер ви готові використати BcryptJS та захищати свої паролі стандартним галузевим способом.

Встановлення BcryptJS та інших необхідних модулів

Тепер, коли ви знаєте про хешування та соління, вам залишається взяти комп'ютер та почати програмувати. Структура проекту буде наступною:

По-перше, ми почнемо зі створення проекту npm, виконавши такі кроки:

  1. Відкрийте папку та створіть файл app.js.
  2. Відкрийте вікно терміналу у цій папці та введіть команду

Після цього вам буде запропоновано ввести дані, але ви можете натиснути клавішу Enter, не вводячи жодних даних.

  1. У тому ж вікні терміналу введіть наступну команду, щоб встановити потрібні пакети.
npm install express mongoose BcryptJS nodemon

Тепер у вас є повна настройка середовища проекту, яке можна слідувати в цьому посібнику.На наступному етапі ви дізнаєтесь, як створити сервер для використання BcryptJS для безпечного зберігання та автентифікації паролів за допомогою MongoDB.

Налаштування сервера за допомогою Express JS

Тепер, коли ви налаштували структуру проекту, ви можете створити сервер, який буде використовувати bcrytjs для захисту паролів, зберігаючи їх у вигляді хешів та перевіряючи їхню справжність. Ми створимо сервер, виконавши такі кроки.

Крок 1. Створення підключення до бази даних MongoDB.

Для підключення до mongoDB ми використовуємо версію спільноти. Щоб проект був організований, збережіть код для налаштування з'єднання у файлі db.js .

const mongoose = require ("mongoose"); const mongoURI = "mongodb://127.0.0.1:27017/bcrypt_database"; const connectMongo = async() => < try < await mongoose.connect(mongoURI); console.log("Connected to MongoDB!"); >catch (error) < console.error("Error connecting to MongoDB: ", error.message); >>; module.exports = connectMongo;

Тут ви імпортуєте пакет mongoose , який надає API для підключення Javascript до MongoDB. Крім того, у цьому випадку URI підключення призначене для локальної установки mongoDB, якщо ви використовуєте хмарну базу даних (наприклад, Atlas), вам потрібно тільки змінити URI на URI вашої конкретної бази даних.

Інформація URI схожа на URL-адресу сервера з тією різницею, що URI може ідентифікувати ім'я та ідентичність ресурсів, а також їхнє розташування в Інтернеті. Навпаки, URL-адреса - це підмножина URI, здатне виконувати тільки останнє.

Функція connectToMongo є асинхронною функцією, оскільки mongoose.connect повертає обіцянку JavaScript. Ця функція надасть з'єднання для успішного виконання. Інакше він поверне помилку.

Нарешті, ми використовуємо module.exports для експорту цієї функції під час кожного імпорту модуля db.js .

Крок 2 – Створення схеми користувача

Вам потрібна базова схема для створення або автентифікації користувачів за допомогою бази даних MongoDB.Якщо ви не знаєте, що таке схема, ви можете використовувати цей відмінний посібник з DO, щоб зрозуміти і створити схему в MongoDB. Ми будемо використовувати лише два поля для нашої схеми: email та пароль.

Використовуйте наступний код у своєму модулі User.js.

const mongoose = require ("mongoose"); const UserSchema = new mongoose.Schema(< email:< type:String, required:true, unique:true >, password: < type:String, required:true >>); module.exports = mongoose.model('user', UserSchema)

У цій схемі ми створюємо два поля: email та пароль. Обидва вони є обов'язковими полями та мають рядковий тип даних. Крім того, email є унікальним полем, яке означає, що одну адресу електронної пошти можна використовувати лише один раз для створення облікового запису на цьому сервері.

Нарешті ми експортуємо модель з ім'ям users . Модель є схемою за бази даних. Ви можете розглядати схему зазвичай визначення моделі, тоді як модель зберігається як колекція у базі даних MongoDB .

Ви можете перетворити схему на модель, використовуючи функцію model() бібліотеки mongoose .

Крок 3 - Налаштування сервера в app.js

Виконавши попередні кроки, ви успішно створили модель та модуль для підключення до бази даних MongoDB. Тепер ви навчитеся налаштовувати сервер. Використовуйте наступний код у файлі app.js .

const connectToMongo = require("./db"); const express = require("express"); const app = express(); connectToMongo(); app.use(express.json()); app.use("/auth", require("./auth")); const port = 3300; app.listen(port, () => < console.log(`Listening at http://localhost:$`); >);

Тут ми імпортуємо модулі express та db.js для підключення до MongoDB. Потім ми використовуємо проміжне програмне забезпечення express.json() для обробки відповідей JSON. Маршрути створюються в іншому модулі (auth.js), щоб код був чистим та організованим. Потім ми створюємо кінцеву точку для прослуховування сервером порту 3300 на локальному хості.(Ви можете використовувати будь-який порт на ваш вибір)

Шифрування паролів та їх зберігання у базі даних MongoDB

До цього моменту сервер практично готовий, і тепер ви створюватимете кінцеві точки для сервера. Ми створимо дві кінцеві точки - реєстрація та вхід. В кінцевій точці реєстрації ми візьмемо адресу електронної пошти та пароль від нового користувача та збережемо їх із шифруванням пароля за допомогою BcryptJS.

У файлі auth.js введіть наступний код:

const express = require("express"); const router = express.Router(); const User = require("./User"); const bcrypt = require("bcryptjs"); // ROUTE 1: router.post("/signup", async (req, res) => <const salt = await bcrypt.genSalt(10); const secPass = await bcrypt.hash(req.body.password, salt) ; let user = await User.create(<email: req.body.email, password: secPass, >); module.exports = router;

Ми робимо необхідний імпорт, а потім налаштовуємо експрес-маршрутизатор для створення кінцевої точки /signup. Ми використовуємо метод POST для того, щоб облікові дані не розкривалися в URL-адресі програми. Після цього ми створюємо Salt за допомогою функції genSalt пакету scripts; параметр, що передається функцій genSalt() містить довжину символу солі. Потім ми використовуємо функцію hash() BcryptJS, яка приймає обов'язковий параметр, рядок пароля, який потрібно перетворити на хеш-код, і необов'язковий аргумент - сольовий рядок. А потім він повертає хеш, який містить як пароль, так і salt.

Після цього ми використовуємо функцію create() mongoose модуля для створення документа в нашій базі даних, визначеного правилами моделі users . Він приймає об'єкт Javascript, що містить адресу електронної пошти та пароль, але замість того, щоб передавати йому необроблений рядок, ми передаємо secPass (хеш пароля + salt) для зберігання в базі даних. Таким чином, ми надійно зберегли пароль у базі даних, використовуючи його хеш у поєднанні із сіллю замість необробленого рядка.Зрештою ми повертаємо відповідь JSON, що містить модель користувача. (Цей метод відправки відповідей призначений тільки для етапу розробки ; у робочій версії ви заміните його токеном аутентифікації або ще чимось).

Щоб протестувати цю кінцеву точку, потрібно спочатку запустити сервер, що можна зробити, ввівши наступну команду в терміналі.

Ця команда запустить ваш сервер на локальному хості та порту 3300 (або будь-який інший порт, який ви вкажете). Потім ви можете надіслати запит HTTP на URL http://localhost:3300/auth/signup з наступним тілом:

Це призведе до наступного висновку/відповіді:

Примітка. Хеш пароля та ідентифікатор не будуть однаковими, оскільки вони завжди є унікальними.

У наступному розділі ви дізнаєтесь, як отримати доступ до збереженого хешу пароля та аутентифікувати його за допомогою пароля, вказаного при вході до системи/автентифікації.

Доступ до зашифрованого пароля та його використання для автентифікації

На даний момент ви дізналися про BcryptJS, хешування, соління та розробку експрес-сервера, який створює нових користувачів. з паролями, які у вигляді хешів. Тепер ви дізнаєтесь, як використовувати збережений пароль та автентифікувати користувача, коли він намагається увійти до програми.

Щоб додати метод аутентифікації, додайте наступний маршрут до auth.js після маршруту /signup :

// ROUTE 2: router.post("/login", async (req, res) => < let user = await User.findOne(< email: req.body.email >); if (!user) < return res .status(400).json(< error: "Login with proper credentials!" >); > const passwordCompare = await bcrypt.compare(req.body.password, user.password); if (!passwordCompare) < return res . status(400) .json(< error: "Login with proper credentials!" >); > res.json(< success: "Authenticated!" >);

Тут ми використовуємо підшлях /auth/login для аутентифікації входу в систему для вже існуючого користувача.Подібно до кінцевої точки /auth/signup , це буде функція асинхронного очікування, оскільки BcryptJS повертає обіцянки.

По-перше, ми використовуємо функцію findOne бібліотеки Mongoose, яка використовується для пошуку документа в колекції на основі заданого пошукового запиту. У цьому випадку ми шукаємо користувача на адресу електронної пошти. Якщо користувача з вказаною адресою електронної пошти не існує, буде надіслано відповідь із кодом стану 400 для недійсних облікових даних. (Не рекомендується повідомляти, який параметр невірний при вході в систему, оскільки зловмисники можуть використовувати цю інформацію для пошуку облікових записів).

Якщо користувач із вказаною адресою електронної пошти існує, програма переходить до порівняння паролів. Для цього BcryptJS надає метод compare() , який приймає необроблений рядок як перший аргумент і хеш (з salt ) для другого аргументу. Потім він повертає Логічну обіцянку; true якщо пароль відповідає хешу, і false, якщо ні. Потім можна додати просту перевірку за допомогою оператора if і повертати успіх чи помилку на основі порівняння.

Нарешті, ви експортуєте express router , використовуючи module.exports як початкову точку app.js для використання його для маршрутів.

Щоб протестувати цей маршрут, ви можете надіслати ще одну відповідь HTTP на цю URL-адресу http://localhost:3300/auth/login з тілом таким чином:

Цей запит дасть таку відповідь:

У результаті auth.js виглядатиме так:

const express = require("express"); const router = express.Router(); const User = require("./User"); const bcrypt = require("bcryptjs"); // ROUTE 1: router.post("/signup", async (req, res) => <const salt = await bcrypt.genSalt(10); const secPass = await bcrypt.hash(req.body.password, salt) ; let user = await User.create(<email: req.body.email, password: secPass, >); // ROUTE 2: router.post("/login", async (req, res) => < let user = await User.findOne(< email: req.body.email >); if (!user) < return res .status(400).json(< error: "Login with proper credentials!" >); > const passwordCompare = await bcrypt.compare(req.body.password, user.password); if (!passwordCompare) < return res . status(400) .json(< error: "Login with proper credentials!" >); > res.json(< success: "Authenticated!" >); module.exports = router;

Висновок

У цьому посібнику створено сервер, на якому пояснюється використання BcryptJS для безпечного зберігання паролів бази даних та доступу до них. Ви можете піти далі:

  • Реалізація більшої кількості маршрутів для інших завдань, як-от отримання облікових даних користувача, оновлення облікових даних користувача і т.д.
  • Реалізація токенів аутентифікації для відправки як відповіді і т.д.

Із цього починається ваш шлях до безпечної роботи з паролями; ви завжди можете підвищити безпеку за допомогою різних методів і технологій, що дозволить вам створювати більш безпечні та стійкі до відмови.

Статті з цієї тематики:

  • Як впоратися із зависанням додатків/ОС у Linux
  • Як працювати з екраном Hi-Dpi у Linux
  • Як впоратися з Meltdown і Spectre у Linux Ubuntu
  • Як ефективно обробляти вхідні дані форми за допомогою експрес-валідатора ExpressJs
  • Як обробляти помилки в JavaScript
  • Як обробляти робочий процес забуття та скидання пароля за допомогою React та Node.js
  • Як обробляти події у Vue
  • Як обробляти помилки у Redux-Saga за допомогою блоків try…catch
  • Як керувати вихідним кодом GitHub та контролем версій з Xcode
  • 5 способів ефективної обробки помилок у додатках Express.js з практичними прикладами
  • Як використовувати фільтри виключень Nest.js для обробки помилок
  • Як обробляти пропущені значення категоріальних змінних у Python?
  • Як обробити дані, що відсутні, за допомогою seaborn?
  • Як обробляти аргументи командного рядка у Bash?
  • Як обробляти події ACPI у Linux

Схожі статті

  • Що таке Ципру
  • Що таке режим Atti для дронів Drones Cameras
  • Що таке Адамове яблуко у чоловіків
  • Що таке добори на міжкімнатні
  • Що таке дека на газонокосарці
  • Що таке код помилки 601
  • Що таке Жилка яловича
  • Що таке фонетична норма
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x