User Authentication only local authentication with database no passportjs - TechMaster/NodeShop GitHub Wiki
LOCAL USER AUTHENTICATION - Thuần đăng ký và đăng nhập sử dụng email và password
Sửa config của database trong file config.json cho phù hợp. Trong DB có 1 bảng user_account chứa thông tin người dùng
CREATE TABLE user_account(user_id serial PRIMARY KEY, email TEXT NOT NULL UNIQUE, pass TEXT NOT NULL, fullname TEXT NOT NULL, gender TEXT, address TEXT, agreement TEXT);
Các bước xử lí log in hay sign up request
- Sign-up Người dùng nhập email và password vào sign up form -> gửi qua POST request ->
- Trên server kiểm tra xem email này có trùng lập không -> nếu không trùng, băm password với bcryptjs -> lưu vào cơ sở dữ liệu
- Log-in Gửi log in form qua POST request -> dùng hàm compare password của bcryptjs -> nếu kiểm tra đúng -> cho phép log in
Về bảo mật Password
- Lữu trữ trực tiếp password như text bình thường là không an toàn
- Passwords cũng không nên mã hoá (encrypted) vì nếu để mất secret key, dữ liệu sẽ bị giải mã và chuyển lại thành text bình thường
- Với passwords, chúng ta nên sử dụng các hàm băm (hash functions). Quá trình salt (thêm dữ liệu ngẫu nhiên) và hash (băm) là 1 chiều. Sau khi được băm, không có 1 key nào có thể chuyển đổi chuỗi password đã đuợc băm quay lại text.
- Vì 1 chuỗi password chạy qua cùng 1 hàm hash sẽ luôn ra 1 kết quả cố định
VD: Với 1 hàm hash bcrypt chuỗi "pass_01" sẽ luôn ra 1 chuỗi giải định "5f4dcc3b5aa765d6"
- Với hàng băm, khi người dùng đăng nhập, email và pass được gửi về sever, hàm hash sẽ so sánh pass đc gửi về với dữ liệu trong DB. Chạy pass đc gửi về qua hàm hash và xem nó có giống kết quả trong DB không.
Lựa chọn hàm Hash: MD5 vs SHA vs Brycpt -> sử dụng Brycptjs node module
- MD5 or SHA1 are checksum algorithms -> with dramatic increase in processing speed of hackers -> these methods are no longer sufficiently secure (they are vulnerable with GPU attack)
- MD5 hoặc SHA1 so sánh tính toàn vẹn của file so sánh nhưng 2 cách thức này đã không phù hợp để lưu password vì với tốc độc xử lí ngày càng nhanh của hackers (với GPU attack)
- Tại vì các thuật toán tính checksum hash được thiết kế với mục tiêu càng nhanh càng tốt. Nó thường được dùng để tạo ra checksum dùng trong việc kiểm tra sự bảo toàn của lượng dữ liệu lớn. Với tốc độ nhanh
- Bcrypt được thiết kế riêng cho việc bảo vệ mật khẩu. Nó chậm hơn rất nhiều so với hash functions vì quy trình tính toán phức tạp hơn, tốn nhiều công sức hơn. Bởi vậy các phương pháp tấn công có thể nhanh với MD5/SHA… ở trên cũng phải chậm theo.