1. Dữ liệu được xử lý
Tùy tính năng bạn sử dụng, hệ thống có thể lưu:
- Định danh Google: email, tên và thông tin hồ sơ cơ bản để tạo phiên đăng nhập.
- Hồ sơ thành viên: họ và tên, lớp, ngày sinh, avatar và trạng thái phê duyệt.
- Hoạt động câu lạc bộ: sự kiện, số buổi hoạt động, ca điểm danh và cấu hình điểm.
- Điểm danh: bản ghi có mặt/trễ/vắng gắn với tài khoản và ca/sự kiện liên quan.
- Chat: tin nhắn sảnh, hội thoại riêng, nhóm chat và thông tin đọc/chưa đọc cần thiết để vận hành realtime.
- Audit: người thực hiện, thao tác, đối tượng và thời điểm đối với hoạt động quản trị.
Hệ thống không yêu cầu mật khẩu Google của bạn. Mật khẩu được Google xử lý trong quy trình OAuth.
2. Xác thực và phân quyền
Google OAuth
Đăng nhập bắt đầu tại Google và callback được cấu hình cho domain. Server kiểm tra state OAuth, trao đổi code và tạo cookie phiên. Email từ phiên là định danh để tìm hồ sơ, không phải dữ liệu do người dùng tự nhập trong giao diện.
Quyền ở backend
Mọi endpoint nhạy cảm đều yêu cầu server xác minh phiên và vai trò: Members, approvals, tạo/đóng ca QR, phân quyền, xóa dữ liệu, audit và điều chỉnh điểm. Việc ẩn nút ở frontend chỉ là lớp trải nghiệm; không phải cơ chế bảo mật duy nhất.
Nguyên tắc tối thiểu: thành viên chỉ làm được thao tác của thành viên; admin chỉ thao tác trong phạm vi quyền; tài khoản owner được bảo vệ khỏi xóa hoặc giáng chức trái phép.
3. Bảo vệ phiên và trình duyệt
- Cookie phiên có cờ HttpOnly, Secure và SameSite=Lax để giảm nguy cơ script đọc cookie và giảm gửi cookie chéo site.
- Phản hồi web dùng các header như X-Content-Type-Options, X-Frame-Options, Referrer-Policy và Permissions-Policy.
- Content Security Policy giới hạn nguồn script, font, ảnh và kết nối theo các dịch vụ cần thiết.
- Cooldown 5 giây cho cùng một nút/form giúp hạn chế gửi lặp do bấm liên tục; backend vẫn phải tự kiểm tra dữ liệu.
Người dùng nên đăng xuất khi dùng máy dùng chung, không cài extension không rõ nguồn gốc và không gửi cookie phiên cho bất kỳ ai.
4. Điểm danh QR an toàn thế nào?
- Mã có giới hạnMỗi ca có mã chữ-số ngẫu nhiên 15 ký tự, sessionId và mốc bắt đầu/kết thúc riêng.
- Server xác thựcQuét QR chỉ gửi dữ liệu để server đối chiếu tài khoản, ca, thời gian và trạng thái; không tin dữ liệu hiển thị do frontend tự sửa.
- Ca độc lậpNhiều admin có thể tạo nhiều ca; mã này không dùng được để thay thế hoặc sửa ca khác.
- Đóng ca chặn quét mớiKhi admin đóng ca, QR không còn hiện tại giao diện và server không nhận lượt mới cho ca đã đóng.
QR là thông tin nhạy cảm trong thời gian ngắn. Admin nên chỉ hiển thị trực tiếp cho nhóm cần điểm danh, đóng ca khi xong và tạo mã mới nếu mã bị chụp/chia sẻ ngoài ý muốn.
5. Avatar, camera và tệp tải lên
Avatar chỉ nhận loại hình ảnh được cho phép và giới hạn 5 MB. Server kiểm tra MIME type và kích thước trước khi upload. Khi thay avatar, asset cũ được xóa nếu không còn tham chiếu hợp lệ.
Camera chỉ được dùng khi người dùng chủ động mở trình quét và cấp quyền cho trình duyệt. Website không tự mở camera nền. Có thể từ chối quyền camera và dùng mã thủ công.
6. Chat và quyền riêng tư
- Hội thoại riêng được định danh theo cặp tài khoản; người mới được kết nối theo mô hình mạng lưới bạn bè mặc định của câu lạc bộ.
- Lịch sử chat riêng giữ tối đa 512 tin nhắn gần nhất; tin cũ nhất được loại trước khi vượt giới hạn này.
- Người dùng chỉ thu hồi tin nhắn của mình. Không thể mở tùy chọn thu hồi trên tin nhắn của người khác bằng chuột phải hoặc nhấn giữ.
- Nhóm chat có quyền quản lý theo người tạo và vai trò admin; không dùng quyền frontend để vượt qua kiểm tra server.
Không gửi mật khẩu, mã OAuth, mã QR đang hoạt động, thông tin sức khỏe hoặc dữ liệu nhạy cảm của người khác vào chat.
7. Lưu giữ, nhật ký và xóa dữ liệu
Nhật ký hoạt động được giới hạn còn 50 bản ghi mới nhất để giảm lưu trữ dư thừa. Lịch sử điểm danh và dữ liệu chat có quy tắc riêng theo tính năng. Xóa lịch sử là thao tác quản trị có điều kiện, yêu cầu ca đang mở được đóng trước.
Người dùng có thể yêu cầu quản trị viên kiểm tra, cập nhật hoặc xử lý hồ sơ của mình. Các yêu cầu xóa có thể bị giới hạn nếu dữ liệu cần thiết cho an toàn hệ thống, đối soát sự kiện hoặc nghĩa vụ quản trị.
8. Trách nhiệm người dùng và báo cáo sự cố
- Dùng tài khoản Google của chính mình, không chia sẻ phiên đăng nhập và không cho người khác quét QR thay.
- Đăng xuất trên máy công cộng; cập nhật trình duyệt; chỉ cấp camera khi thực sự cần.
- Báo ngay cho admin nếu thấy đăng nhập lạ, quyền sai, QR bị phát tán, tin nhắn bất thường hoặc dữ liệu hồ sơ bị thay đổi.
Khi báo sự cố, cung cấp thời điểm, URL, thiết bị, bước tái hiện và ảnh chụp đã che email/mã nhạy cảm. Không gửi token, cookie, mã QR, mã xác thực hoặc toàn bộ nội dung chat.
Cam kết minh bạch: trang này mô tả các biện pháp đang được triển khai, không phải lời đảm bảo rằng mọi rủi ro trên Internet đều bằng không. Khi có thay đổi lớn về cách xử lý dữ liệu, nội dung an toàn thông tin sẽ được cập nhật.
9. Kiểm tra nhanh trước khi dùng
| Việc nên làm | Mục đích |
|---|---|
| Kiểm tra đúng domain | Tránh nhập thông tin trên trang giả mạo. |
| Không chia sẻ QR | Ngăn người ngoài sử dụng ca điểm danh. |
| Đăng xuất máy chung | Giảm nguy cơ người khác dùng lại phiên. |
| Che dữ liệu khi báo lỗi | Không làm lộ email, cookie, mã QR hoặc nội dung riêng tư. |