Thứ Hai, 16 tháng 4, 2018

Cách xử lý vấn đề an toàn mật khẩu người dùng của người lập trình



Việc giúp người dùng có được mật khẩu đủ an toàn luôn gặp khó khăn trong lập trình. Bạn yêu cầu mật khẩu có nhiều tổ hợp, không theo qui tắc phổ biến nào, nhưng người dùng lại muốn dễ nhớ, ngắn. Điều này bản chất là mâu thuẫn. Nhưng chúng ta có một số cách để cải thiện như sau:

1. Quy tắc mật khẩu là nhảm nhí


Chúng ta có thể đã dùng trình tạo mật khẩu tự động cho người dùng lựa chọn. Nhưng vấn đề ở đây là, mật khẩu tự động được tạo ra người dùng sẽ không thể nhớ.

Nếu người dùng vẫn sử dụng mật khẩu mà bạn tạo ngẫu nhiên này thì họ bắt buộc phải lưu nó ở đâu đó họ có thể tìm thấy (hacker cũng có thể tìm thấy), mà không phải là trong đầu.

Cách tạo mật khẩu ngẫu nhiên cho người dùng gây rắc rối trong việc đăng nhập của họ.

Và thêm một vấn đề ở đây nữa là, mật khẩu ngẫu nhiên được tạo ra bằng một thuật toán nào đó.

Hãy tưởng tượng rằng, 1.000.000 tài khoản người dùng của bạn đang được tạo ra bởi 1 thuật toán. Bạn hiểu ý tôi không? Hacker đơn giản là sẽ chỉ cần tìm ra thuật toán đó.

2. Thực thi độ dài mật khẩu Unicode tối thiểu


Một quy tắc dễ nhớ nhất. Đây là quy tắc một mang lại cho chúng ta nhiều lợi ích, và thật đơn giản để thực hiện.

Bạn có thể đếm, rất đơn giản để thêm số lượng ký tự.

Nó hoạt động tốt. Dữ liệu cho chúng ta thấy nó hoạt động tốt; chỉ cần tải xuống bất kỳ danh sách mật khẩu chung nào mà bạn chọn và nhóm theo độ dài mật khẩu.

Toán học không nói dối. Trừ nhưng mật khẩu kiểu khác, mật khẩu dài hơn sẽ ngẫu nhiên hơn - và do đó an toàn hơn - so với mật khẩu ngắn.

Chấp nhận rằng ngay cả quy tắc này cũng không phải là bất biến. Độ dài mật khẩu tối thiểu trên 6 ký tự là hoàn toàn hợp lý. Nhưng mật khẩu 20 ký tự có thể không an toàn.

Mật khẩu dài đến 20 ký tự thì có thể ban đang sử dụng qui tắc quen thuộc nào đó để đẩy số ký tự lên.
Đó là thực tế, nhưng chắc chắn rằng chiều dài mật khẩu dài, hợp lý là tốt.

Hãy giới hạn ký tự tối thiểu cho phép ngừoi dùng tạo.

3. Kiểm tra các mật khẩu phổ biến


Như tôi đã lưu ý, định nghĩa "phổ biến" tùy thuộc vào đối tượng và ngôn ngữ bạn sử dụng, nhưng nó là một sự khủng khiếp với người dùng khi bạn cho phép họ chọn mật khẩu đã tồn tại trong danh sách 10k, 100k hoặc triệu mật khẩu phổ biến nhất đã được biết đến.

Không dám chắc rằng một hacker sẽ gửi các mật khẩu phổ biến này để nỗ lực mở khóa -tôi đã test 1.000 mật khẩu phổ biến nhất trong các user của tôi. Và đây là kết quả.


  • 1,6% mật khẩu có từ 10 mật khẩu hàng đầu
  • 4.4% mật khẩu có từ 100 mật khẩu hàng đầu
  • 9,7% mật khẩu có từ 500 mật khẩu hàng đầu
  • 13.2% mật khẩu có từ 1.000 mật khẩu hàng đầu
  • 30% mật khẩu có từ 10.000 mật khẩu hàng đầu


Làm nghiên cứu. Thu thập dữ liệu. Tự bảo vệ người dùng của bạn.


4. Kiểm tra trường hợp mật khẩu đặc biệt


Tôi xấu hổ khi thừa nhận rằng khi xây dựng trang đăng nhập Discourse, như tôi đã thảo luận trong The God Login, chúng tôi đã bỏ lỡ hai trường hợp phổ biến mà bạn thực sự phải chặn:


  • Mật khẩu bằng tên người dùng
  • Mật khẩu bằng địa chỉ email

- Nếu bạn đang sử dụng phiên bản Discourse nhỏ hơn 1.4, tôi rất xin lỗi và vui lòng nâng cấp ngay lập tức.

Tương tự, bạn cũng có thể muốn chặn các trường hợp đặc biệt khác như


  • Mật khẩu bằng URL hoặc tên miền của trang web
  • Mật khẩu bằng tên ứng dụng


Tóm lại, hãy thử suy nghĩ cách đặt mật khẩu thông thường giống như người dùng.

- Làm rõ

Một vài người đã giải thích bài đăng này là "tất cả các quy tắc mật khẩu khác đều nhảm nhí, ngoại trừ bốn quy tắc này tôi đã liệt kê". Đó không phải là điều tôi đang cố nói ở đây.

Ý tưởng là tập trung vào quy tắc dễ hiểu, đơn giản, thực tế, hoạt động trong thực tế-cuộc sống-trong-mọi-tình-huống: Hãy đảm bảo về chiều dài.

Người dùng có thể nhập (gần như) bất cứ điều gì, trong Unicode thích hợp, miễn là nó đủ dài. Đó là một quy tắc để ràng buộc tất cả những gì chúng ta cần dạy cho người dùng đó là: Độ dài!

Các khoản từ # 3 đến # 4 giống như kiểm tra ngoại lệ gen-đặc biệt hơn, bạn không thể mong ước những điều không thể khác.

Vấn đề mật khẩu cần phải được thảo luận trước bởi vì nó thực sự quan trọng. Bạn phải ngăn người dùng có mật khẩu không đúng với tên người dùng của họ hoặc sử dụng "aaaaaaaaaaa" hoặc 0123456789.

Hãy tự kiểm tra và bảo vệ người dùng của bạn bằng cách thêm một vài qui tắc nhỏ. Điều này sẽ không quá khó đối với người dùng.


Share:

0 nhận xét:

Đăng nhận xét

Fanpage

Tổng số lượt xem trang