- vừa được xem lúc

Lưu Access Token Ở Đâu? Được nhưng chưa đủ

0 0 5

Người đăng: Nguyễn Văn Khải

Theo Viblo Asia

Access Token là một phần quan trọng trong bảo mật API, giúp xác thực và phân quyền người dùng. Tuy nhiên, nếu lưu trữ Access Token không đúng cách, ứng dụng có thể bị tấn công, gây rò rỉ dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu các cách phổ biến để lưu trữ Access Token, phân tích ưu nhược điểm của từng phương pháp và đề xuất giải pháp tốt nhất để bảo vệ thông tin người dùng.

Các phương pháp lưu trữ Access Token phổ biến

1. Lưu trong Local Storage

  • Access Token được lưu trữ trong localStorage, có thể truy cập từ JavaScript trên trình duyệt.
  • Khi cần sử dụng, ứng dụng sẽ lấy token từ localStorage và gửi trong các yêu cầu HTTP. Ưu điểm:
  • Dễ triển khai và truy xuất từ bất kỳ trang nào trong ứng dụng.
  • Token tồn tại sau khi reload trang hoặc đóng/mở lại trình duyệt. Nhược điểm:
  • Dễ bị tấn công XSS (Cross-Site Scripting): Nếu một kẻ tấn công chèn được mã độc vào ứng dụng (ví dụ qua form nhập liệu hoặc tập lệnh bên ngoài), họ có thể truy cập localStorage và đánh cắp token.
  • Không thể tự động gửi token trong mỗi request như Cookie.
  • Không bảo vệ khỏi các cuộc tấn công CSRF. Khi nào nên dùng? Không khuyến nghị sử dụng Local Storage để lưu Access Token trong các ứng dụng yêu cầu bảo mật cao.

Nguồn: Internet

2. Lưu trong Session Storage

Token được lưu trong sessionStorage, chỉ tồn tại trong phiên làm việc của trình duyệt. Ưu điểm:

  • Ít rủi ro hơn so với localStorage vì token bị xóa khi người dùng đóng trình duyệt.
  • Hạn chế được phần nào nguy cơ XSS nếu kết hợp với cơ chế bảo vệ tốt. Nhược điểm:
  • Vẫn có thể bị tấn công XSS nếu ứng dụng không bảo vệ đúng cách.
  • Token bị mất khi người dùng reload trang. Khi nào nên dùng? Có thể phù hợp với các ứng dụng có yêu cầu bảo mật trung bình nhưng không phải là giải pháp tốt nhất.

3. Lưu trong Cookie (HttpOnly, Secure)

  • Access Token được lưu trong cookie với flag HttpOnly, Secure, SameSite để bảo vệ khỏi các cuộc tấn công phổ biến.
  • Trình duyệt sẽ tự động gửi token trong mỗi request đến server.

Ưu điểm:

  • Bảo vệ tốt hơn khỏi XSS vì JavaScript không thể truy cập cookie HttpOnly.
  • Khi kết hợp với SameSite=Strict hoặc Lax, có thể giảm thiểu nguy cơ CSRF.
  • Cookie có thể được cấu hình để chỉ gửi qua HTTPS, tăng cường bảo mật.

Nhược điểm:

  • Có thể bị tấn công CSRF nếu không thiết lập SameSite đúng cách.
  • Phải quản lý thời gian hết hạn của cookie một cách hợp lý.

Khi nào nên dùng?

Rất phù hợp với các ứng dụng yêu cầu bảo mật cao. image.png

Nguồn: Internet

4. Lưu trong Memory (RAM)

Lưu trữ token trong biến JavaScript, thường là trong state của ứng dụng (ví dụ: React Context, Vuex, Redux, Pinia).

Ưu điểm:

  • Token chỉ tồn tại trong phiên làm việc, không thể bị truy cập bởi XSS sau khi trang được reload.
  • Giảm nguy cơ rò rỉ dữ liệu so với lưu trong localStorage hoặc sessionStorage.

Nhược điểm:

  • Token sẽ bị mất nếu người dùng reload trang hoặc đóng trình duyệt.
  • Cần kết hợp với Refresh Token để đảm bảo trải nghiệm người dùng.

Khi nào nên dùng?

  • Khi yêu cầu bảo mật cao và kết hợp với Refresh Token.

Cách Làm Đúng Và Khuyến Nghị

  • Sử dụng HttpOnly Cookie kết hợp với SameSite & Secure flag: Đây là cách tốt nhất để bảo vệ khỏi XSS và CSRF. Cookies nên được thiết lập với các flag HttpOnly, Secure, và SameSite để tăng cường bảo mật.
  • Cân nhắc lưu Access Token trong Memory: Nếu cần bảo mật cao, lưu trữ trong Memory có thể là lựa chọn tốt vì dữ liệu không được lưu trữ lâu dài.
  • Sử dụng Refresh Token: Để giảm thiểu rủi ro khi Access Token bị đánh cắp, sử dụng Refresh Token để có thể lấy lại Access Token mới mà không cần người dùng đăng nhập lại.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 531

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 442

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 162

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 114

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 256