BẢO MẬT NHẬP MÔN – QUẢN LÝ NGƯỜI DÙNG – TƯỞNG DỄ ĂN MÀ KHÔNG ĐƠN GIẢN

Website được tạo ra là để phục vụ người dùng. Có người sử dụng thì website và doanh nghiệp mới có thu nhập. Một trong những việc rắc rối nhất chính là quản lý và bảo mật thông tin người dùng.

Trong bài này, mình chia sẻ những điều cần lưu ý khi thực hiện tính năng này. Khá nhiều khê và phức tạp đấy, các bạn chịu khó đọc kĩ nhé!

Úi giời! Đăng kí đăng nhập có gì khó?

Không như bạn tưởng tượng, việc đăng kí/đăng nhập và quản lý người dùng thật ra không hề đơn giản. Nó có thể trở nên khá loằng ngoằng với những tính năng sau:

  • Cho phép người dùng đăng kí, đăng nhập bằng email
  • Phân quyền người dùng
  • Tích hợp với Gmail, Facebook
  • Tích hợp với hệ thống người dùng có sẵn trong doanh nghiệp
  • Reset mật khẩu khi người dùng quên
  • Block account khi người dùng nhập sai pass nhiều lần
  • Bảo mật cho API với app di động
  • Bảo mật 2 lớp (Two factor authentication) với các account quan trọng
  • Quản lý: Thêm bớt xoá sửa người dùng

screen-shot-2016-11-08-at-4-40-45-pm

 

Khi tính năng này hoạt động ổn định, không ai khen nó lấy một câu. Tuy nhiên, chỉ cần nó gặp phải chút vấn đề, cam đoan bạn sẽ hứng chịu vô số cơn thịnh nộ từ khách hàng.

 

Quan trọng nhất – Không lưu mật khẩu!

Developer phải thuộc nằm lòng câu nói sau

Tuyệt đối không bao giờ lưu mật khẩu khách hàng, dù sếp có nói gì đi nữa!

Là một developer có tâm, bạn không bao giờ được lưu mật khẩu của khách hàng vào database (nhắc lại lần thứ ba cho nhớ).

Đến cả web lớn là vietnamwork mà cũng tắc trách đến mức không dùng https khi đăng nhập, không bảo mật dữ liệu đến nỗi làm lộ mật khẩu của người dùng: http://nghenhinvietnam.vn/tin-tuc/web-tim-viec-vietnamwork-bi-tan-cong-23535.html.

Hậu quả của việc này cũng không có gì nghiêm trọng, cùng lắm là mất mặt công ty, mất account khách hàng và làm khách hàng chuyển qua dùng dịch vụ khác thôi.

Nếu không lưu mật khẩu, làm sao người dùng có thể login? Mình đã đề cập tới phương pháp giải quyết trong bài Lỗ hổng bảo mật của Lotte Cinema, các bạn chịu khó đọc lại nhé.

data-security-breach

Làm thế nào khi người dùng quên mật khẩu?

Do không lưu mật khẩu trong database, ta không thể gửi mật khẩu về mail cho người dùng khi họ quên mật khẩu. Ở đây ta có 2 cách giải quyết.

 

Cách 1: Reset mật khẩu mới ngẫu nhiên rồi gửi cho người dùng

Cách này có thể làm lộ mật khẩu vì email có thể bị đọc trộm. Ngoài ra, nếu như biết địa chỉ mail, hacker có thể lợi dụng nó để reset mật khẩu hàng loạt người dùng, nhằm ngăn cản họ đăng nhập vào hệ thống.

Cách 2: Gửi link để người dùng reset

Dựa theo tài khoản, ta tạo reset token rồi gắn nó vào link: http://shop.com/resetpass?token=32343, gửi link này vào mail cho người dùng.

Người dùng sử dụng link này để reset mật khẩu. Với cách này, dù hacker có request reset thì mật khẩu người dùng vẫn giữ nguyên, không bị ảnh hưởng.

Như đã nói phía trên, do email không an toàn nên token này nên được expired ngay sau khi dùng, hoặc sau 24-48 tiếng đồng hồ sau khi email được gửi đi.

reset-your-password-from-instagram

Gửi email có link Reset Password về cho người dùng

Chống việc đoán mò mật khẩu

Để dò mật khẩu, hacker có thể viết một con bot, lần lượt submit username và password cho tới khi đăng nhập được. Để phòng tránh việc này, ta áp dụng những phương pháp sau:

  • Khi người dùng đăng nhập sai, đừng báo là sai username hay sai password. Chỉ cần báo username hay password không match, hacker sẽ gặp khó khăn hơn.
  • Hacker lợi dụng chức năng reset mật khẩu để dò xem người dùng có email trên trang đó hay không. Dù account có tồn tại hay không, ta vẫn chỉ hiện thông báo: đã gửi message.
  • Hạn chế số lần đăng nhập khi nhập mật khẩu sai. Ví dụ sau 3 lần nhập pass sai thì khoá account trong 10 phút. Hacker có thể dùng cách này để khoá tài khoản người dùng, nên cẩn thận. Có thể kết hợp thêm capcha.

 

Lưu ý: Những cách cách này có thể gây khó chịu cho người dùng, nếu dữ liệu không quá quan trọng (game, web hỏi đáp, giao lưu, giải trí …) thì có thể nới lỏng một số yếu tố.

cell-security

Facebook tạm khoá tài khoản khi hacker cố tình đăng nhập nhiều lần

Biện pháp nho nhỏ tăng cường bảo mật

Một số điểm cần lưu ý khác:

  • Với các thao tác quan trọng như đổi email, đổi pass, xoá nick, cần bắt người dùng nhập lại password. Lý do là đôi khi người dùng bị chôm cookie, hoặc lơ là quên khoá máyHãy nhìn Facebook và Google, cả 2 trang này đều bắt ta phải nhập lại mật khẩu khi muốn đổi pass.
  • Với các ứng dụng cần bảo mật cao, phải có Two-factor verification (Gửi tin nhắn, device tạo authentication token).Mình hiện tại cũng đang dùng nó, dù các bạn có biết mật khẩu Gmail hay WordPress của mình cũng “éo” thể nào đăng nhập được.
  • Nên khuyến khích (hoặc bắt buôc) người dùng sử dụng mật khẩu dài, đi kèm chữ và số, viết hoa viết thường và kí tự đặc biệt. Máy móc rất hiện đại khi crack mật khẩu, có thể vào đây để test xem máy mất bao lâu để mò ra mật khẩu của bạn.
  • Nếu site của bạn không có HTTPS, hoặc team không có kinh nghiệm làm bảo mật, cứ để cho bọn khác lo. Bạn có thể dùng OAuth, cho phép người dùng đăng nhập từ Google, Facebook.
  • Lúc này Google, Facebook sẽ chịu trách nhiệm quản lý mật khẩu và dữ liệu của người dùng. Người dùng thì không cần phải đăng kí nhiều tài khoản, một công đôi việc. Tìm hiểu thêm tại https://oauth.io/ hoặc https://auth0.com/.

 

1x-new

Thay lời kết

Đây cũng là bài viết cuối cùng của series “Bảo mật nhập môn”. Chân thành cảm ơn các bạn đã theo dõi và đồng hành cùng blog trong suốt thời gian qua!

Mình chỉ có một hi vọng “nhỏ nhoi” là series này được nhiều người biết tới hơn. Nếu lập trình viên nào cũng biết những lỗi bảo mật cơ bản thế này, ta sẽ không phải gặp những lỗ hổng “ngớ ngẩn” kiểu lottecinema hay vietnamwork nữa.

Hãy nhớ rằng, bảo mật là một chuyên ngành rất lớn, thế giới bảo mật rất bao la. Những lỗi bảo mật mới xuất hiện từng ngày, không thua gì công nghệ mới trong lập trình.

Series “nhập môn” này chỉ cover được một phần rất nhỏ trong đấy (Còn vô số điều hay ho như: social engineering, row hammering … không được nhắc tới trong series).

Do vậy, đừng nghĩ rằng đọc xong series là mình đã biết “tuốt tuồn tuột” những điều cần biết về bảo mật. Hãy tự trau dồi thêm kiến thức bảo mật, áp dụng vào code và thiết kế nhé.

 

Có thể bạn muốn đọc
Clean code là gì? Tại sao phải Clean code?

Chào các bạn, trong bài viết này mình xin được chia sẻ một số kiến thức về clean code mình tổng hợp được. Hãy cùng mình tìm hiểu Clean code là gì và tại sao phải sử dụng chúng nhé.

10 bí quyết giúp học và ghi nhớ nhanh mọi thứ bạn muốn

Nếu đang gặp khó khăn khi phải thu nạp kiến thức mới, thông tin mới hay rèn luyện một kỹ năng mới thì bài viết này sẽ gỡ rối cho bạn.

8 Bước đăng ký Google Project Shield chống DDoS một cách dễ dàng

Google Project Shield là một dự án chống DDoS (tấn công từ chối dịch vụ) một cách hoàn toàn miễn phí từ Google. Project Shield là cách bảo vệ website của bạn một cách hoàn hảo bằng công nghệ của Google với việc Cache sao lưu bản dự phòng web của các bạn lên máy chủ của Google thông qua Proxy đảo chiều và sàng lọc các truy cập độc hại bất thường và chỉ cho phép các cuộc truy cập an toàn đến server chứa web của bạn. Project Shield còn có khả năng tăng tốc độ load trang web của bạn và giảm tải đáng kể băng thông và truy cập trực tiếp đến máy chủ của bạn.

PHP chạy như nào? Từ Source code đến render

Khi chúng ta chạy một đoạn code PHP, có rất nhiều thứ xảy ra sâu bên dưới mà ta không nhìn thấy. Một cách khái quát, bộ thông dịch PHP trải qua 4 giai đoạn khi nó thực thi 1 đoạn code:

Thủ thuật tìm kiếm trên Google

Trong quá trình làm việc và giảng dạy của mình, tôi nhận thấy hầu hết các bạn đang còn thiếu một kỹ năng rất quan trọng trong thời đại thông tin số bùng nổ như hiện nay, đó chính là kỹ năng ứng dụng các thủ thuật tìm kiếm trên Google. Hiện nay Google đang chiếm khoảng ~85% lượng người dùng tìm kiếm thông tin trên toàn thế giới (*), có khoảng ~95% người dùng tìm kiếm trên Google ở Việt Nam (**). Những con số trên cho ta thấy sự bành trướng của gã khổng lồ Google, ta cũng không thể phủ nhận những tiện ích, thông tin mà Google mang lại cho chúng ta. – Nếu bạn là học sinh, sinh viên: hàng ngày bạn phải dùng Google để tìm kiếm thông tin phục vụ cho quá trình học tập của mình. – Nếu bạn là người đi làm: hàng ngày bạn dùng Google để tìm kiếm thông tin đối tác, khách hàng… – Nếu bạn là dân SEO: hàng ngày bạn dùng Google để tìm website để building link, tìm tài liệu… – Dù bạn là ai thì tôi chắc chắn bạn đã dùng Google để tìm kiếm thông tin (nhất là khi bạn đang đọc bài viết này bằng các tìm kiếm trên Google).

[Lập trình] Cách học lập trình nhanh hơn

Học lập trình không phải là chuyện mà ta có thể làm trong một sớm, một chiều, nhưng nó không phải là quá khó khăn. Có rất nhiều điều bạn có thể làm cho nó dễ dàng hơn khi bạn học lập trình. Bài viết sau đây được tham khảo từ trang web cprogramming.com sẽ có thể giúp ích cho chúng ta khám phá được những bí quyết để học lập trình tốt hơn và nhanh hơn.