Đừng Dại Dùng Local Storage: Giải Thích Cặn Kẽ Tại Sao

Có một trào lưu kỳ lạ đang lan rộng trong giới lập trình viên: lưu trữ thông tin phiên (session information) vào local storage. Điều này cần phải dừng lại, trước khi mọi thứ vượt khỏi tầm kiểm soát.

Gần như mỗi ngày, tôi lại bắt gặp một trang web mới toanh “vô tư” lưu trữ thông tin nhạy cảm của người dùng trong local storage. Thật khó hiểu khi ngày càng nhiều nhà phát triển “tin tưởng” giao phó dữ liệu quan trọng cho nó.

Hãy cùng nhau tìm hiểu về local storage và lý do tại sao bạn nên cân nhắc kỹ trước khi sử dụng.

Local Storage Là Gì?

Local storage là gì? Xin hãy ngừng dùng local storage.Local storage là gì? Xin hãy ngừng dùng local storage.

Đối với những ai chưa quen thuộc, local storage là một tính năng của HTML5 cho phép lưu trữ thông tin trực tiếp trong trình duyệt bằng JavaScript. Nó đơn giản đến mức đáng ngạc nhiên.

Về cơ bản, local storage là một đối tượng JavaScript lớn, cho phép bạn thêm, sửa đổi hoặc xóa dữ liệu. Dưới đây là một ví dụ về cách lưu trữ thông tin cá nhân vào local storage bằng JavaScript:

// Lưu trữ dữ liệu vào local storage
localStorage.setItem("userName", "Nguyen Van A");
localStorage.setItem("favoriteColor", "Blue");

// Lấy dữ liệu từ local storage và hiển thị
alert(localStorage.getItem("userName") + " thích màu " + localStorage.getItem("favoriteColor") + ".");

Khi chạy đoạn mã này trên trình duyệt, bạn sẽ thấy một thông báo hiển thị “Nguyen Van A thích màu Blue”. Nếu bạn sử dụng công cụ dành cho nhà phát triển (developer tools) của trình duyệt, bạn sẽ thấy cả hai biến userNamefavoriteColor được lưu trữ trong local storage.

Một biến thể khác là sessionStorage. Nó hoạt động tương tự như local storage, nhưng dữ liệu sẽ tự động bị xóa khi người dùng đóng tab trình duyệt.

Ưu Điểm Của Local Storage

Local storage là gì? Xin hãy ngừng dùng local storage.Local storage là gì? Xin hãy ngừng dùng local storage.

Mặc dù bài viết này tập trung vào việc cảnh báo về việc lạm dụng local storage, nhưng không thể phủ nhận nó có một số ưu điểm nhất định:

  • JavaScript thuần túy: Một trong những điểm khó chịu của cookies là chúng phải được tạo bởi máy chủ web. Với local storage, bạn có thể lưu trữ dữ liệu trực tiếp từ trang web mà không cần đến backend. Điều này đặc biệt hữu ích cho các ứng dụng đơn trang (single-page application) hoặc các trang web tĩnh.
  • Dung lượng lớn hơn cookies: Local storage cung cấp ít nhất 5MB dung lượng lưu trữ, lớn hơn nhiều so với giới hạn 4KB của cookies. Điều này giúp bạn có thể lưu trữ nhiều dữ liệu hơn, chẳng hạn như dữ liệu ứng dụng để sử dụng offline.

Nhược Điểm Chết Người Của Local Storage

Local storage là gì? Xin hãy ngừng dùng local storage.Local storage là gì? Xin hãy ngừng dùng local storage.

Bây giờ, hãy nói về những điều tồi tệ. Local storage có những hạn chế nghiêm trọng mà hầu hết các nhà phát triển dường như không nhận ra:

  • Chỉ lưu trữ được chuỗi: Local storage chỉ có thể lưu trữ dữ liệu dạng chuỗi (string). Điều này gây khó khăn cho việc lưu trữ các loại dữ liệu phức tạp hơn. Mặc dù bạn có thể tìm cách “lách luật” bằng cách chuyển đổi dữ liệu sang chuỗi, nhưng đây là một giải pháp không mấy tối ưu.
  • Đồng bộ: Các thao tác đọc/ghi local storage được thực hiện đồng bộ, nghĩa là mỗi thao tác sẽ được thực hiện tuần tự. Điều này có thể gây ảnh hưởng đến hiệu năng của ứng dụng nếu bạn thực hiện nhiều thao tác với local storage.
  • Web worker không thể truy cập: Web worker là các tiến trình chạy nền, giúp cải thiện hiệu năng của ứng dụng. Tuy nhiên, chúng không thể truy cập vào local storage. Điều này hạn chế khả năng sử dụng local storage trong các ứng dụng phức tạp hoặc các tiện ích mở rộng của trình duyệt.
  • Giới hạn dung lượng: Mặc dù 5MB là lớn hơn cookies, nhưng nó vẫn là một giới hạn đối với các ứng dụng cần lưu trữ nhiều dữ liệu hoặc cần hoạt động offline.
  • Bảo mật kém: Đây là vấn đề lớn nhất. Bất kỳ đoạn mã JavaScript nào trên trang web của bạn đều có thể truy cập vào local storage. Điều này có nghĩa là nếu trang web của bạn bị tấn công XSS (Cross-site scripting), kẻ tấn công có thể dễ dàng đánh cắp dữ liệu được lưu trữ trong local storage.

Tóm lại, local storage chỉ nên được sử dụng khi bạn cần lưu trữ thông tin không nhạy cảm, không yêu cầu bảo mật cao, dung lượng nhỏ hơn 5MB và chỉ ở dạng chuỗi.

Vậy Có Nên Tiếp Tục Sử Dụng Local Storage?

Câu trả lời là hãy cẩn trọng. Mặc dù local storage có một số ưu điểm, nhưng nhược điểm về bảo mật là quá lớn để bỏ qua. Đặc biệt, tuyệt đối không nên lưu trữ thông tin nhạy cảm như mật khẩu, thông tin thẻ tín dụng hoặc thông tin cá nhân quan trọng trong local storage.

Hãy cân nhắc sử dụng các giải pháp thay thế an toàn hơn, chẳng hạn như cookies (với thuộc tính HttpOnlySecure), IndexedDB hoặc các giải pháp lưu trữ phía máy chủ.

Hãy là một nhà phát triển có trách nhiệm và bảo vệ dữ liệu của người dùng!