Cookie và cách bảo vệ chúng

date
Mar 29, 2026
slug
cookie-va-cach-bao-ve-chung
status
Published
tags
Front-end
summary
Giao thức HTTP là một giao thức kết nối ngắt quãng. Client gửi yêu cầu tới Server, và Server sẽ phản hồi lại thông tin cho Client. Sau khi gửi phản hồi về cho Client thì kết nối giữa Client và Server sẽ kết thúc tại đây, giữa Server và Client không còn duy trì kết nối. Và HTTP cũng là giao thức không trạng thái, do Server không lưu trữ lại thông tin của các lần kết nối trước đó. Phản hồi của Server như nào sẽ phụ thuộc vào thông tin có trong yêu cầu của Client. Đó là thời đại của các trang web tĩnh.
type
Post

Cờ HttpOnly

Chúng ta chỉ cần đặt thêm cờ HttpOnly = true. Khi cờ này được đặt cho một giá trị cookie, thì giá trị này sẽ chỉ có thể được gửi qua giao thức HTTP mà thôi. Lúc này mã Javascript không thể tác động vào giá trị cookie nữa, do đó session cookie cũng sẽ an toàn trước các cuộc tấn công XSS.

Cờ Secure

Đây là người bạn tốt phối hợp cực nhịp nhàng với cờ HttpOnly. Nếu chỉ có cờ HttpOnly thì cookie vẫn có thể được gửi qua giao thức HTTP, và có nguy cơ bị nghe lén trên đường truyền
Giải pháp để chống nghe lén trên đường truyền là cần truyền gói tin qua giao thức HTTPS, để các gói tin đều được mã hóa, cookie cũng không có khả năng bị đọc lén nữa. Cờ Secure chính là đèn báo hiệu cho trình duyệt biết rằng chỉ gửi cookie này trong gói tin nếu đường truyền có mã hóa.
Khi cờ Secure được phối hợp với cờ HttpOnly thì cookie đã được bảo vệ 2 lớp: an toàn trên đường truyền và an toàn trước các đoạn mã Javascript.

Cờ Same-site

Cờ Same-site được thiết kế để ngăn chặn các cuộc tấn công liên quan đến việc gửi cookie qua các yêu cầu từ các trang web khác, nói ngắn gọn thì là chống bị tấn công CSRF. Cờ này cũng có thể giảm được hậu quả khi cuộc tấn công XSS được thực thi thành công.
Xin giới thiệu với các bạn đọc 1 bài viết cực chi tiết và dễ hiểu về cờ SameSite và cách sử dụng cờ này để ngăn chặn tấn công CSRF: https://viblo.asia/p/tan-cong-csrf-va-cac-van-de-xung-quanh-djeZ1PGjKWz#_same-site-4

Cờ Expires hoặc Max-Age

Cả 2 cờ đều có chung tác dụng là quy định thời gian cookie có thể được sử dụng, khi hết thời gian thì trình duyệt sẽ xóa cookie đó đi. Giữa 2 cờ chỉ khác nhau một chút trong cách thể thiện thời gian sử dụng của cookie mà thôi.
Cờ Expires sẽ hiển thị ngày giờ cookie hết hạn dưới định dạng "Wdy, DD-Mon-YYYY HH:MM:SS GMT". Còn cờ Max-Age sẽ hiển thị thời gian có thể sử dụng cookie dưới dạng số giây. Cả 2 đều được trình duyệt chấp nhận, nhưng giữa 2 cờ vẫn có điểm đặc sắc riêng:
  • Cờ Expires sẽ dễ đọc và thân thiện với người dùng hơn. Trong trường hợp ứng dụng mốn cookie có thể sử dụng được lâu thì cờ Expires là sự lựa chọn hợp lý.
  • Cờ Max-Age sẽ là sự lựa chọn hoàn hảo trong trường hợp ứng dụng chỉ cho phép cookie tồn tại trong thời gian ngắn (VD như ứng dụng ngân hàng số,...).
Việc sử dụng 2 cờ trên để đặt thời gian hết hạn cho cookie cũng giúp giảm thiểu phần nào khả năng cookie bị đánh cắp. Tưởng tượng trường hợp ứng dụng bị khai thác bằng lỗ hổng CSRF, nhưng khi người dùng bấm vào link, request được thực hiện, nhưng cookie thì hết hạn và bị trình duyệt xóa mất rồi.