Mật khẩu MongoDB được lưu trữ ở đâu
Những gì nó làmLưu trữ dữ liệu người dùng như email và mật khẩu trong cơ sở dữ liệu được xây dựng với
dùng thử
Nộp cho
Được tạo bởi
Khi xây dựng ứng dụng với Node. js, MongoDB và Mongoose, sẽ có lúc bạn cần xử lý mật khẩu người dùng Vì việc lưu trữ mật khẩu dưới dạng văn bản thuần túy trong cơ sở dữ liệu của bạn là điều tối kỵ, bạn phải xử lý và lưu trữ chúng như thế nào? Câu trả lời là tạo ra cái được gọi là hàm băm của mật khẩu. Đây là một chuỗi dài, phức tạp và duy nhất được tạo bằng cách sử dụng phiên bản văn bản thuần túy của mật khẩu người dùng. Thay vì lưu trữ mật khẩu văn bản thuần túy của người dùng trong cơ sở dữ liệu, thay vào đó, bạn sẽ lưu trữ phiên bản băm Nếu cơ sở dữ liệu của bạn bị tấn công trong trường hợp này, tin tặc sẽ để lại các chuỗi băm ngẫu nhiên thay vì các chuỗi văn bản thuần túy mà chúng có thể sử dụng để dễ dàng khai thác tài khoản người dùng của bạn Cách duy nhất để tìm mật khẩu hoặc thông báo tạo ra một hàm băm nhất định là thử tìm kiếm brute-force-các đầu vào có thể để xem liệu chúng có tạo ra kết quả khớp hay không. Hoặc sử dụng bảng cầu vồng của các giá trị băm phù hợp. Nếu bạn tạo các giá trị băm của mình một cách chính xác, cả hai phương pháp sẽ khiến tin tặc mất rất nhiều thời gian và hàng tấn sức mạnh tính toán để hoàn thành (tốn tiền) Trước khi tiếp tục, chúng tôi sẽ cho rằng bạn có Node. js được cài đặt trên máy của bạn và cơ sở dữ liệu MongoDB để hoạt động với cơ sở dữ liệu được kết nối với Nút của bạn. ứng dụng js Nếu cần, chúng tôi đã viết hướng dẫn cài đặt Node. js và một hướng dẫn khác về cách tạo và kết nối với cơ sở dữ liệu MongoDB Atlas bằng Node. js Trước khi chúng tôi có thể lưu trữ mật khẩu đã băm trong cơ sở dữ liệu, chúng tôi cần cài đặt bcrypt. gói NPM js Bcrypt là một trong những thư viện mã hóa được sử dụng nhiều nhất hiện nay. Nó kết hợp mã hóa băm cùng với hệ số công việc, cho phép bạn xác định mức độ tốn kém của hàm băm (i. e. mất bao lâu để giải mã nó bằng các biện pháp vũ phu). Do đó, nó tuân theo định luật Moore, vì vậy khi máy tính trở nên nhanh hơn, bạn có thể tăng hệ số công việc và hàm băm sẽ chậm hơn đối với brute force
Bây giờ chúng ta có thể băm mật khẩu và lưu trữ nó trong cơ sở dữ liệu Trước tiên, hãy xem qua chức năng cơ bản sẽ lấy mật khẩu văn bản và tạo hàm băm
Đầu tiên, chúng ta tạo hai biến tên là 6 và 7Biến mật khẩu sẽ là chuỗi băm bcrypt. Ví dụ: đây sẽ là chuỗi được người dùng nhập thông qua biểu mẫu đăng ký Và số nguyên 7 cho phép chúng ta kiểm soát chi phí xử lý dữ liệu sẽ là bao nhiêu. Con số càng cao, máy sẽ mất nhiều thời gian hơn để tính toán hàm băm được liên kết với mật khẩuVì vậy, chúng tôi muốn chọn một con số đủ cao để khiến một cuộc tấn công vũ phu mất quá nhiều thời gian và đủ ngắn để giữ cho sự kiên nhẫn của người dùng cuối không bị mất khi đăng ký hoặc đăng nhập vào tài khoản của họ
Phương thức 9 lấy số nguyên 7 của 1 làm tham số và trả về hàm gọi lại có bao gồm kết quả muối được tạo
Phương thức 2 này lấy chuỗi 3 (sẽ là giá trị mật khẩu do người dùng nhập) và muối mà chúng tôi đã tạo làm tham số. Trong hàm 4, nó ghi lại chuỗi băm được tạo cho mật khẩu của chúng taKhi bạn chạy mã, hàm băm sẽ được in ra dòng lệnh của bạn và trông giống như thế này
Đây là chuỗi bạn sẽ lưu trữ trong cơ sở dữ liệu của mình thay vì mật khẩu ở dạng văn bản thuần túy Bây giờ chúng ta đã biết cách tạo mật khẩu băm, hãy xem cách thêm nó vào cơ sở dữ liệu bằng Mongoose Nếu bạn chưa cài đặt Mongoose, bạn có thể thực hiện bằng một trong các lệnh bên dưới
Đầu tiên, chúng tôi tạo cái gọi là Lược đồ Mongoose với lớp 5. Mỗi khóa trong mã 6 xác định một thuộc tính trong tài liệu sẽ được thêm vào cơ sở dữ liệu MongoDBĐể sử dụng định nghĩa lược đồ, chúng ta cần chuyển đổi biến 6 thành mô hình Mongoose mà chúng ta có thể làm việc với. Để làm điều đó, chúng tôi chuyển nó vào phương thức 8. Sau đó, chúng tôi xuất mô hình để chúng tôi có thể 9 và sử dụng nó trong các tệp khác nơi chúng tôi tương tác với cơ sở dữ liệuBất cứ khi nào một người dùng mới được thêm vào cơ sở dữ liệu, mô hình này sẽ được sử dụng để cho Mongoose biết loại dữ liệu nào cần được đưa vào Tiếp theo, chúng ta cần thêm chức năng Mongoose vào mô hình mà chúng ta vừa tạo. Phần mềm trung gian này cần muối và băm mật khẩu trước khi chúng được lưu vào cơ sở dữ liệu
Đây là chức năng phần mềm trung gian của Mongoose 0 sẽ được gọi trước khi bất kỳ tài liệu người dùng nào được lưu hoặc thay đổi. Và có mục đích chung là băm mật khẩu bất cứ khi nào tài liệu người dùng được lưu vào cơ sở dữ liệu với giá trị mật khẩu mớiBên trong chức năng phần mềm trung gian 0, điều đầu tiên chúng tôi làm là kiểm tra xem chức năng của chúng tôi có cần băm mật khẩu thông qua mã 2 hay khôngĐiều này có nghĩa là hàm của chúng ta cần băm mật khẩu cho tài liệu nếu giá trị 3 đã bị thay đổi (i. e. người dùng đã thay đổi mật khẩu của họ) hoặc một tài liệu hoàn toàn mới đang được thêm vào cơ sở dữ liệu (i. e. một người dùng mới đã đăng ký). Mặt khác, hàm 0 không cần thực hiện bất kỳ thao tác băm nàoSau đó, chúng tôi sử dụng phương pháp 2 để tạo hàm băm cho mật khẩu. Nó lấy mật khẩu và muối mà chúng tôi đã tạo làm tham số. Trong hàm gọi lại, nó trả về chuỗi băm được tạo cho mật khẩu của chúng tôiKhi mật khẩu của bạn được lưu vào cơ sở dữ liệu, chuỗi băm sẽ giống như thế này
Để bạn tham khảo, mã cho toàn bộ mô hình Mongoose mẫu sẽ như thế này
Bây giờ mô hình sẽ sẵn sàng để sử dụng khi thêm mật khẩu băm của người dùng vào cơ sở dữ liệu Ví dụ, chúng ta hãy xem mô hình Mongoose sẽ được sử dụng như thế nào trong thực tế Hãy tạo một kịch bản tưởng tượng trong đó bạn có một biểu mẫu đăng ký trên trang web của mình có cả trường nhập tên người dùng và mật khẩu Khi người dùng đó gửi trường, bạn muốn tạo một người dùng mới trong cơ sở dữ liệu với tên người dùng và mật khẩu băm của người dùng 0Mã này tạo một hàm cơ bản có tên là 6 được xuất bằng cách sử dụng đối tượng 7Trong hàm, chúng tôi sử dụng mô hình Mongoose 8. Điều này được nhập vào tệp và đại diện cho mô hình Mongoose mẫu mà chúng tôi đã tạo một lúc trước 9 và 6 đại diện cho các giá trị được nhập bởi người dùng thông qua trang web của bạn. Và chức năng gọi lại được sử dụng để kết thúc chức năng sau khi hoàn thành nhiệm vụ lưu người dùng mới vào cơ sở dữ liệuBên trong hàm, chúng tôi tạo một tài liệu cơ sở dữ liệu người dùng mới bằng cách sử dụng phương thức 1 1Điều này tạo ra một tài liệu mới với các giá trị tham số chức năng 9 và 6 bao gồmSau đó, chúng tôi sử dụng phương thức 4 của Mongoose để thêm tài liệu vào cơ sở dữ liệuTrước khi mật khẩu của bạn được lưu, phương pháp 0 mà chúng tôi đã thêm vào mô hình Mongoose sẽ băm mật khẩu của bạnSau khi bạn tạo một người dùng mới trong cơ sở dữ liệu với chức năng đó, nó sẽ chứa tên người dùng và mật khẩu băm của người dùng Bây giờ chúng tôi đã băm mật khẩu của người dùng và lưu trữ nó trong cơ sở dữ liệu, chúng tôi cần một cách để so sánh nó với một chuỗi được nhập bởi người dùng (i. e. trên trang đăng nhập) và xem nó có khớp với mật khẩu ban đầu được nhập cho tài khoản đó không May mắn thay, Bcrypt có một cách tích hợp để làm điều này bằng cách sử dụng phương pháp 6 của họPhương thức này sẽ lấy một chuỗi mật khẩu và so sánh nó với hàm băm được lưu trữ trong cơ sở dữ liệu. Nếu hai giá trị khớp nhau, nó sẽ trả về giá trị là 7. Nếu không, nó sẽ trả về 8 thay thế 2Đầu tiên, chúng ta tạo hai biến có tên là 9 và 0 9 đại diện cho mật khẩu mà người dùng sẽ nhập vào biểu mẫu đăng nhập và biến 0 là những gì sẽ được lưu trữ trong cơ sở dữ liệu cho người dùngSau đó, chúng tôi sử dụng chức năng 3 để so sánh 4 và 0 với nhau. Nó có chức năng gọi lại trả về kết quả boolean ( 7 hoặc 8) cho biết mật khẩu có khớp hay khôngCuối cùng, chúng tôi sử dụng 8 để cho biết mật khẩu có khớp hay khôngNếu bạn cung cấp mật khẩu khớp với mật khẩu ban đầu được sử dụng để tạo hàm băm, thông báo sau sẽ được ghi lại Bây giờ chúng ta đã biết cách khớp mật khẩu, hãy xem cách triển khai nó trong cơ sở dữ liệu MongoDB bằng Mongoose 3Phương pháp này sử dụng 9 để so sánh tham số mật khẩu (i. e. từ một biểu mẫu đăng nhập trang web) và mật khẩu băm được lưu trữ trong cơ sở dữ liệu. Nếu mật khẩu khớp, thông báo thành công sẽ được trả về. Nếu không, thay vào đó, một thông báo lỗi sẽ được trả về 4Ví dụ, chúng ta hãy xem mô hình Mongoose sẽ được sử dụng như thế nào trong thực tế Hãy tạo một kịch bản tưởng tượng trong đó bạn có một biểu mẫu đăng nhập trên trang web của mình có cả trường tên người dùng và mật khẩu Khi người dùng đó gửi trường, bạn muốn xem liệu người dùng có nên đăng nhập không. Điều này sẽ chỉ được phép nếu tên người dùng được tìm thấy trong cơ sở dữ liệu và khớp với mật khẩu được nhập qua trang đăng nhập 5Trong mã này, chúng tôi khai báo một hàm mới có tên là 0 có ba tham sốCác giá trị 9 và 6 là những gì người dùng sẽ nhập vào các trường đầu vào trên trang đăng nhập của trang web của bạnBên trong chức năng, điều đầu tiên chúng tôi làm là lấy người dùng từ cơ sở dữ liệu với 9 đã cho. Để làm điều đó, chúng ta sử dụng phương thức 4 MongooseSau khi tìm thấy người dùng, chúng tôi sử dụng phương pháp 5 mà chúng tôi vừa tạo để xem liệu mật khẩu được cung cấp cho chức năng có khớp với mật khẩu được lưu trữ trong cơ sở dữ liệu hay khôngNếu mật khẩu khớp, kết quả thành công sẽ được trả về bằng chức năng gọi lại. Điều này có nghĩa là nỗ lực đăng nhập đã thành công Nếu không, một kết quả không thành công sẽ được trả về thay thế Đó là mã cuối cùng chúng tôi sẽ trình bày trong bài viết này Chúng tôi đã giới thiệu cách băm mật khẩu và lưu nó vào cơ sở dữ liệu MongoDB bằng Mongoose và Node. js. Và chúng tôi cũng đề cập đến cách kiểm tra các mật khẩu được băm đó để tìm các trận đấu Làm cách nào tôi có thể khôi phục mật khẩu quản trị viên MongoDB của mình?Bạn có thể đặt lại mật khẩu quản trị viên bằng cách thực hiện theo các bước bên dưới. . Chỉnh sửa /opt/bitnami/mongodb/mongodb. conf và thay thế các dòng sau. # Bật/tắt bảo mật. . Khởi động lại máy chủ MongoDB. cd /opt/bitnami Sudo /opt/bitnami/ctlscript. sh khởi động lại mongodb Tạo người dùng quản trị mới với mật khẩu mới Làm thế nào mật khẩu được lưu trữ trong DB?Một phần cơ bản của bảo mật mật khẩu, về mặt lưu trữ cơ sở dữ liệu, được gọi là hàm băm . Hàm băm là một hàm phức tạp thay đổi mật khẩu văn bản thành một bộ ký tự phức tạp hơn bằng cách sử dụng các phép toán phức tạp hơn phép toán quen thuộc như phép nhân.
Làm cách nào để thay đổi mật khẩu cơ sở dữ liệu MongoDB?Làm cách nào để thay đổi mật khẩu cho người dùng MongoDB? . sử dụng quản trị viên. db. changeUserPassword("tom", "mật khẩu bí mật") sử dụng quản trị viên. db. changeUserPassword("tom", passwordPrompt()) Nhập mật khẩu Lưu trữ mật khẩu trong MongoDB có an toàn không?Mặc dù bảo mật mặc định của MongoDB dựa trên các tiêu chuẩn công nghiệp hiện đại, chẳng hạn như TLS cho lớp truyền tải và SCRAM-SHA-2356 để trao đổi mật khẩu, ai đó vẫn có thể lấy được . . |