Token không có expiry - hacker dùng trọn đời


Tụi em tự viết hệ thống đăng nhập cho chủ động
– Hay quá, vậy token có expiry không?
– Ủa… cái đó là sao anh?

Tôi đã từng audit một sản phẩm Fintech nội bộ, phát hiện hệ thống auth “tự build cho nhanh” - không expiration, không revoke, không refresh token.

Ai login 1 lần thì token dùng cả năm, không cần renew. Lỡ token bị lộ thì… thôi, chấp nhận.

Vấn đề: Token “vô thời hạn”

Nhiều hệ thống tự viết auth, tạo token mà quên đặt expiry:
  • Token JWT không có exp claim.
  • Không có cơ chế revoke token khi user logout.
Hậu quả:
  • Hacker tận dụng: Token bị lộ, hacker dùng mãi không cần đăng nhập lại.
  • Khó kiểm soát: Không biết token nào đang active.

Giải pháp: Token có expiry và revoke

Để bảo mật:
  • Dùng JWT có expiry: Đặt exp (thường 1 giờ) và refresh token (7-30 ngày).
  • Revoke token: Lưu danh sách token đã logout vào Redis/blacklist.
  • Rotate refresh token: Đổi refresh token định kỳ để tăng bảo mật.
Ví dụ: API /login trả {access_token, refresh_token}, với access_token hết hạn sau 1 giờ.

🎯 Bài học:
  • Bảo mật không phải là thứ “làm sau cũng được”
  • Nếu không có đội security chuyên, nên dùng các giải pháp sẵn như Cognito, Auth0, Keycloak
  • Fractional CTO cần review kỹ Auth, IAM, và session lifecycle từ sớm
  • Token cần expiry và cơ chế revoke để bảo vệ hệ thống. Đừng để hacker “sống mãi” với token bị lộ.

Post a Comment

Mới hơn Cũ hơn