Trách nhiệm cao nhất của bất kỳ nhà thiết kế hệ thống nào là bảo vệ dữ liệu người dùng. Vi phạm dữ liệu có thể gây ra thiệt hại trị giá hàng triệu đô la và theo Imperva, Hoa Kỳ có chi phí vi phạm dữ liệu cao nhất
Cơ hội lạm dụng dữ liệu cao hơn khi dữ liệu chỉ là văn bản thuần túy. Nếu bạn không thể bảo vệ dữ liệu, bước tiếp theo là làm cho dữ liệu không thể đọc được bằng cách mã hóa dữ liệu để kẻ tấn công không lấy được nhiều dữ liệu. Ví dụ: giả sử ai đó có quyền truy cập vào email và mật khẩu vào hồ sơ mạng xã hội của bạn. Trong trường hợp đó, thật dễ dàng để truy cập hồ sơ của bạn mà bạn không biết. Tuy nhiên, điều gì sẽ xảy ra nếu mật khẩu của bạn được mã hóa?
Nếu bạn muốn bảo vệ email của người dùng, điều đó thật tuyệt, nhưng bảo vệ mật khẩu người dùng là điều bắt buộc. Mặc dù người dùng phải đặt mật khẩu mạnh, cả người dùng và hệ thống đều hoạt động dựa trên mật khẩu bảo vệ. May mắn thay, có nhiều phương pháp thực hiện mã hóa/giải mã để giúp tăng cường an toàn cho mật khẩu. Bài viết này sẽ hướng dẫn bạn cách sử dụng password hashing với thư viện bcrypt trong Node. js
Nhảy ra đằng trước
- Băm mật khẩu là gì?
- Băm mật khẩu trong Node. js với bcrypt
- Phụ thuộc Bcrypt
- Ví dụ về băm mật khẩu với bcrypt trong Node. js
- Mã hóa mật khẩu trong Node. js sử dụng lời hứa JavaScript
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save
6 - Sử dụng hàm
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save
0 để băm mật khẩu trong Node. js
- Mã hóa mật khẩu trong Node. js sử dụng lời hứa JavaScript
- Nút. thông tin băm mật khẩu js bcrypt
- Chi phí dữ liệu băm mật khẩu
- Lợi ích của việc băm mật khẩu trong Node. js với bcrypt
Băm mật khẩu là gì?
Băm mật khẩu là quá trình biến mật khẩu thành các chữ cái và số bằng các thuật toán cụ thể. Băm có lợi khi kẻ xấu vi phạm dữ liệu. Với tính năng băm, dữ liệu họ nhận được ở định dạng băm và dữ liệu được băm không thể hiểu được. Một số thuật toán phổ biến để băm mật khẩu bao gồm bcrypt và SHA. Trong bài viết này, chúng tôi sẽ tập trung vào việc sử dụng bycrypt để băm mật khẩu trong Node. js. Đây là một ví dụ về băm văn bản thuần túy
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
Băm mật khẩu trong Node. js với bcrypt
Bcrypt là thư viện giúp bạn băm mật khẩu. Nó sử dụng hàm
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save1 dựa trên mật mã Blowfish. Mật mã Blowfish là mật mã khối đối xứng cung cấp tốc độ mã hóa tốt nhất trong ngành;
Bcrypt sử dụng muối để bảo vệ chống lại các cuộc tấn công như bảng cầu vồng, vũ phu, v.v. Bcrypt là một chức năng thích ứng, vì vậy nếu bạn thường xuyên gọi chức năng của bcrypt, nó sẽ trở nên chậm hơn. Điều này cản trở khả năng của kẻ tấn công được hưởng lợi từ một cuộc tấn công vũ phu
Phụ thuộc Bcrypt
Bcrypt cần một số phụ thuộc để hoạt động chính xác. Bcrypt yêu cầu gói nút-gyp, gói này biên dịch các mô-đun bổ trợ riêng cho Node. js. Bcrypt cũng phụ thuộc vào Python và bạn sẽ cần ≥v2. x. Người dùng Windows cần cài đặt các tùy chọn C# và C++ với phiên bản VS của họ. Bạn cũng sẽ cần OpenSSL v0. 7. 7
Ví dụ về băm mật khẩu với bcrypt trong Node. js
Điều quan trọng là phải muối và băm mật khẩu của người dùng trước khi lưu trữ chúng vì mục đích an toàn dữ liệu. Bcrypt biến một mật khẩu đơn giản thành các ký tự có độ dài cố định được gọi là hàm băm. Trước khi băm mật khẩu, bcrypt áp dụng một
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save2, một chuỗi ngẫu nhiên duy nhất làm cho hàm băm không thể đoán trước
Hãy tạo một nút. js và sử dụng bcrypt để băm mật khẩu. Sau khi tạo tệp
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save3, bạn cần cài đặt bcrypt
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save
Bây giờ, bạn đã sẵn sàng làm việc với bcrypt. Hãy nhập nó và xác định
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save4, như một yếu tố chi phí hoặc công việc
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"
Mã hóa mật khẩu trong Node. js sử dụng lời hứa JavaScript $ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
6
JavaScript
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save6 là một đối tượng được trả về bởi hàm
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save6, là biểu diễn của trạng thái hiện tại. Khi
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save6 được trả lại cho người gọi, nó cung cấp các phương thức để xử lý thành công hay thất bại của hoạt động dựa trên điều kiện
Có hai phương pháp để mã hóa mật khẩu. Đây là phương pháp đầu tiên
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd0
Đầu tiên, chúng ta sẽ tạo một
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save2 bằng cách sử dụng hàm
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"0 của bcrypt. Ở đây,
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"0 sẽ lấy một đối số là số
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"2. Sau đó, nếu thành công, chúng tôi sẽ cung cấp kết quả để băm cùng với mật khẩu của chúng tôi
Kết quả thành công, chúng ta sẽ nhận được hàm băm. Trong phương pháp này, chúng tôi đã sử dụng lời hứa
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save6 của JavaScript
Bạn có thể thấy đầu ra như hình bên dưới sau khi kích hoạt Node
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"4
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd6
Băm này sẽ được lưu trữ trong cơ sở dữ liệu cùng với các chi tiết khác. Một điều nữa, bạn có nghĩ rằng tôi sẽ nhận được kết quả nếu tôi chạy lại mã không?
Sử dụng hàm $ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
0 để băm mật khẩu trong Node. js
Rõ ràng, không phải.
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"6 sẽ tạo ra một hàm băm duy nhất dựa trên muối đặc biệt mỗi lần. Đó là cách nó ngăn chặn các cuộc tấn công bảng cầu vồng. Bây giờ, hãy xem xét phương pháp thứ hai
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd9
Ở đây, chúng tôi sẽ gọi hàm
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"7 và chỉ cung cấp
const bcrypt = require["bcrypt"] const saltRounds = 10 const password = "[email protected]"2. Điều này cũng sẽ tạo ra một hàm băm duy nhất mỗi lần. Bây giờ, chúng ta sẽ xác thực hàm băm đó như thế nào?
Vì vậy, đối với bcrypt đó, chúng tôi có hàm
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save0 sẽ đảm nhiệm phần đó
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save3
Nếu
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd00 là đúng, hàm băm do mật khẩu tạo cho nó được khớp
Nút. thông tin băm mật khẩu js bcrypt
Như bạn thấy ở cuối, bạn sẽ nhận được một hàm băm dài 60 ký tự
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save5
Sự phân nhánh của hàm băm là như thế này
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
01. Sẽ làhash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
02 có nghĩa làhash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
03hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
04. Đại diện cho số mũ được sử dụng để xác định số lần lặp lạihash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
05hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
06. [16-byte [128-bit]], mã hóa base64 thành 22 ký tựhash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
07. [24-byte [192-bit]], mã hóa base64 thành 31 ký tự
Chi phí dữ liệu băm mật khẩu
Dữ liệu băm sẽ trải qua một chuỗi
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save4, dẫn đến một hàm băm an toàn không thể đoán trước đối với bất kỳ hệ thống hoặc người dùng nào. Sau đó, một mô-đun sẽ sử dụng một giá trị nhất định và thực hiện
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd09. Chi phí dữ liệu tùy chọn băm thường đề cập đến thời gian một vòng băm diễn ra, điều này phụ thuộc vào phần cứng của hệ thống
Trên bộ xử lý lõi 2GHz, bạn có thể mong đợi những điều sau
$ mkdir bcrypt_demo $ cd mkdir $ npm init -y $ touch app.js $ npm install bcrypt --save5
Lợi ích của việc băm mật khẩu trong Node. js với bcrypt
Bcrypt có lợi thế đáng kể so với các phương pháp băm khác như MD5, SHA1, SHA2 và SHA3. Tất cả họ đều có thể thực hiện băm một số lượng lớn dữ liệu trong thời gian ngắn hơn. Giả sử kẻ tấn công có một hệ thống mạnh mẽ có khả năng thử 700-900 triệu mật khẩu trong vài giây. Mật khẩu của bạn chứa các giá trị chữ và số và ký tự đặc biệt sẽ bị bẻ khóa sau vài giây
Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơn
Vì vậy, bây giờ bạn biết rằng không thể sử dụng tất cả các phương pháp băm này để mã hóa mật khẩu. Bây giờ, câu hỏi chính là, làm thế nào để bcrypt cung cấp một lợi thế đáng kể ở đây? . Sau khi biết điều đó, bcrypt sẽ chậm hơn nếu kẻ tấn công thực hiện nhiều yêu cầu trong một khung thời gian. Vì vậy, nói chung, việc bẻ khóa một mật khẩu sẽ mất 12 năm chết tiệt
Ngoài ra, bcrypt sử dụng muối, giúp ngăn chặn các cuộc tấn công như tấn công bảng cầu vồng và phù hợp để bảo mật mật khẩu
Sự kết luận
Như bạn đã biết, điều quan trọng là phải bảo mật dữ liệu để tránh thiệt hại đáng kể. Kẻ tấn công có thể tìm cách truy cập vào kho lưu trữ dữ liệu của bạn nhưng mật khẩu được mã hóa tốt sẽ gây lãng phí thời gian và công sức cho kẻ tấn công. Họ sẽ không nhận được bất kỳ lợi ích nào từ dữ liệu được mã hóa của bạn
Nút. js cho phép chúng tôi sử dụng bcrypt mà không gặp trở ngại nào. Không có lý do gì để tránh nó khi xử lý mật khẩu của người dùng và các dữ liệu nhạy cảm khác. Một chức năng băm an toàn như bcrypt là cần thiết để tạo ra một hệ thống mạnh mẽ. Tôi đề nghị bạn sử dụng nó để lưu trữ mật khẩu. Bạn sẽ không phải đối phó với các vấn đề làm lộ thông tin nhạy cảm của người dùng nếu bạn đã thực hiện băm bằng bcrypt
Chỉ dành cho 200 Theo dõi các yêu cầu mạng chậm và không thành công trong sản xuất
Triển khai trang web hoặc ứng dụng web dựa trên Node là phần dễ dàng. Đảm bảo phiên bản Node của bạn tiếp tục cung cấp tài nguyên cho ứng dụng của bạn là lúc mọi thứ trở nên khó khăn hơn. Nếu bạn quan tâm đến việc đảm bảo các yêu cầu đối với dịch vụ phụ trợ hoặc bên thứ ba thành công, hãy thử LogRocket. LogRocket giống như một DVR dành cho ứng dụng web và thiết bị di động, ghi lại mọi thứ diễn ra trong khi người dùng tương tác với ứng dụng của bạn theo đúng nghĩa đen. Thay vì đoán xem tại sao lại xảy ra sự cố, bạn có thể tổng hợp và báo cáo về các yêu cầu mạng có vấn đề để nhanh chóng hiểu nguyên nhân gốc rễ