Một trong những điều thường xuyên khiến website bị tấn công (hacked) là việc người dùng sử dụng những mật khẩu giống nhau cho tất cả các dịch vụ. Vì rằng, nếu họ dính bẫy và trở thành nạn nhân trong một trò lừa của hacker ở một dịch vụ nào đó (ví dụ như giả mạo facebook chẳng hạn), những hacker này có thể có thông tin đăng nhập của tất cả các trang web khác với việc chỉ dựa vào thói quen đặt cùng một mật khẩu của người dùng.
Khi mà chúng ta nghĩ rằng việc đó là do lỗi của phía bên người dùng, không phải của chúng ta, điều này chưa đúng lắm! Chuyện không bao giờ xảy ra là “vì người dùng sử dụng lại mật khẩu dẫn đến website bị hacker tấn công”. Thay vào đó, một tiêu đề khác giật gân hơn sẽ được thay thế kiểu như: “Website Thư Viện Hướng Dẫn bị hacker tấn công quá dễ dàng” hoặc những điều tương tự. Và website của bạn sẽ bị đổ lỗi ngay cả khi đó cũng không phải là lỗi của bạn.
Cho dù bạn nghĩ rằng đây có phải là trách nhiệm của bạn hay không thì, việc dừng sử dụng lại các mật khẩu đơn giản trên trang web của bạn nên được ưu tiên ngay từ bây giờ. Một trong những cách mà các trang web thực hiện điều này chính là việc yêu cầu người dùng nhập một mật khẩu phức tạp hơn bình thường. Dĩ nhiên, việc này cũng ảnh hưởng đến hiệu quả và trải nghiệm của người dùng, nhưng chúng ta sẽ không nói về vấn đề này vì nó khá là phức tạp. Thay vào đó, chúng ta hãy tập trung vào việc thiết lập mật khẩu này.
Mỗi năm, một số công ty bảo mật lớn trên thế giới sẽ công bố một danh sách các mật khẩu phổ biến được sử dụng lại nhiều lần nhất. Có thể bạn nghĩ rằng thật ngớ ngẩn khi mọi người đều sử dụng chúng, nhưng thật là có đấy. Trong ứng dụng Laravel của mình, chúng ta có thể chắc chắn rằng không có ai có thể sử dụng những mật khẩu trên, đây có lẽ là điều duy nhất chúng ta có thể làm để bảo vệ người dùng và danh tiếng của website.
Vậy còn chờ gì nữa, bắt đầu nào!
File: app/Rules/RejectCommonPasswords.php
namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class RejectCommonPasswords implements Rule { public function passes($attribute, $value) { return !in_array($value, [ '12345', '123456', '123456789', 'test1', //... thêm theo ý của bạn 'Password', 'maria', 'lovely', ]); } public function message() { return trans('validation.reject-commons-passwords'); } }
Bước 3: thêm bản dịch của bạn vào tệp biên dịch ngôn ngữ trong tất cả các ngôn ngữ theo khóa reject-commons-passwords trong file resources/lang/vi/validation.php (chẳng hạn). Hoặc bạn có thể tiếp tục “gắn chết” thông báo vào hàm message() bên trên. Kiểu như: `Vui lòng chọn một mật khẩu phức tạp hơn." Ngắn gọn, và dễ hiểu.
reject-commons-passwords
resources/lang/vi/validation.php
message()
Bước 4: Thêm Rule này vào mọi trường mật khẩu trong ứng dụng của bạn. Có thể là cấu hình xác thực biểu mẫu trong form đăng ký và khôi phục mật khẩu của bạn. Trong ví dụ bên dưới, phương thức xác minh mật khẩu của bạn có thể như sau:
'password' => [ 'required', 'string', 'min:8', new RejectCommonPasswords(), ]
Hoặc bạn có thể kết hợp điều này với phương thức xác minh mật khẩu của Laravel 8:
'password' => [ Password::min(8)->letters()->numbers(), new RejectCommonPasswords(), ]
Lưu ý rằng việc bạn đang làm không phải thay thế cho phương thức Password::uncompromised(). Nhưng, nếu bạn đang trong tình huống cần bỏ qua các yêu cầu đến một bên thứ ba, quy tắc từ chối mật khẩu phổ biến này có lẽ sẽ hữu ích với bạn.
Password::uncompromised()
Vậy là bạn đã giúp ứng dụng của mình trở nên an toàn hơn với người dùng của bạn rồi!
Đến đây thì mẹo thứ sáu đã kết thúc, rất cảm ơn bạn đã chịu khó đọc đến đây, nếu có chỗ nào khó hiểu, bạn có thể để lại bình luận, mình sẽ trả lời lại cho các bạn trong sự hiểu biết của mình nhé. Hẹn gặp lại bạn trong mẹo tiếp theo.