Cách mình nhét Tỏi vào mồm Hacker
Thằng này chắc là do nó đã có tư thù với mình từ trước. Nó vẫn còn quanh quẩn đâu đây thôi, kiểu gì nó cũng sẽ rình để cắn mình tiếp. Cho nên mình mới làm thêm chức năng đăng nhập bằng tài khoản Gmail của Google để khóa mõm nó lại.
09/05/2025•Ngô Tuấn
Cái web này của mình tính đến thời điểm hiện tại 9/5/2025 mọi thứ từ tên miền, server cho đến cơ sở dữ liệu đều là free hết. Do số lượng bài viết vẫn còn hạn chế cho nên mình cũng chưa có ý định nâng cấp hạ tầng cho nó. Tuy vậy, lượt truy cập hàng ngày vẫn khá đều, dù ko phải là nhiều. Có thể là do mọi người vào FB mình thấy đường link thì nhấn vào thôi.
Lúc đầu mình chỉ làm chức năng đăng nhập và đăng ký nội bộ cho đơn giản đối với người dùng. Cũng ko nghĩ là sẽ bị spam vì xác suất để gặp mấy thằng nhãi mất dậy lại rảnh rỗi là ko cao, nên cũng chủ quan ko đề phòng chúng nó. Và kết quả là đây. Mình đã bị 1 thằng nhãi nó code hẳn tool để spam tài khoản rác vào cơ sở dữ liệu của mình.
Thằng này chắc là do nó đã có tư thù với mình từ trước. Nó vẫn còn quanh quẩn đâu đây thôi, kiểu gì nó cũng sẽ rình để cắn mình tiếp. Cho nên mình mới làm thêm chức năng đăng nhập bằng tài khoản Gmail của Google để khóa mõm nó lại.
Web của mình có 3 role là người dùng thường, tác giả và quản trị viên. Lúc trước vẫn phân quyền dựa trên token của backend. Khi tích hợp Google Auth vào thì vẫn phải giữ nguyên luồng xác thực cũ. Nếu web chỉ có 1 role thì chỉ cần token của Google Auth thôi là đủ rồi. Nhưng do có nhiều role nên mình vẫn muốn dùng token của backend để phân quyền. Mình đã có 1 bài trước đó về cách quản lý Access Token và Refresh Token đối với hệ thống gồm có backend riêng và frontend kiểu server side rendering như NextJS khá chi tiết.
Bài toán của mình là phải tích hợp được Google Auth vào hệ thống hiện tại. Google auth lúc này chỉ làm nhiệm vụ xác thực ban đầu thôi. Về phân quyền và kiểm tra tính hợp lệ của user vẫn phải dựa trên token riêng mà backend của mình phát hành.
Luồng cơ bản của nó như này. Đầu tiên người dùng đăng nhập bằng tài khoản google. Google sẽ cấp cho Frontend 1 vài thông tin cơ bản như tên, avatar và token của người dùng. Frontend sẽ phải gọi api đến backend và backend trả về token nội bộ để user đó có các quyền tương ứng trong hệ thống. Nếu là user mới thì insert vào cơ sở dữ liệu nữa. Về kỹ thuật lập trình thì ko có gì phức tạp. Tuy nhiên có 1 điểm quan trọng cần chú ý là làm sao cho backend phân biệt được Token của Google Auth mà nó nhận được là do đúng frontend của mình cấp. Tức là bắt buộc phải xác thực thông qua Google thì mới vào được đến backend.
Như vậy thì việc khóa mõm ko cho bọn mất dậy spam đã được mình giao hết cho google rồi. Nói dễ hiểu là muốn spam được vào CSDL của mình thì phải có token nội bộ, muốn có token nội bộ thì phải có token của google. Tóm lại muốn spam được mình thì phải bước qua được xác của Google đã.
Nhưng mà khoan, ngay cả như vậy thì cũng chưa đủ đâu. Bởi vì Api lấy token của mình được gọi ở server next chứ ko phải là từ trình duyệt nên hacker cũng đâu dễ gì biết được để mà spam. Bảo mật tận mấy lớp đấy. Dùng google thôi đã mạnh lắm rồi mà lại còn giấu cả api nữa thì có thể nói là an toàn tuyệt đối.
Thực tình cái web này chả cần phải bảo mật đến mức đấy đâu. Nhưng mình thích.