Sơ lược về Web Cookies
Với tốc độ phát triển của công nghệ hiện nay, ứng dụng web đã trở thành một khái niệm quá đỗi quen thuộc. Một chút hiểu biết về Web Cookie chắc chắn là thứ cần thiết cho dù bạn là người tạo ra hay là sử dụng trang Web. Bởi Cookie về bản chất nó thực sự không mấy an toàn.
Sơ lược về Web Cookie
Có rất nhiều loại Cookie, trong đó có 3 loại cookie chính là session cookie, pesistent cookie và third-party cookie:
Third-Party Cookie (cookie bên thứ ba) dùng để theo vết người dùng trên nhiều miền và trang web. Cookie này thường được sử dụng cho những trang web quảng cáo.
Cách triển khai Cookie
Tạo Cookie ở Server-Side
Khi tạo cookie, server sẽ gửi header Set-Cookie cùng với các phản hồi tới Client. Header này nhằm thông báo đến trình duyệt về việc tạo và lưu trữ Cookie, các HTTP request sau này đều được tự động thêm Cookie header.
Ví dụ cú pháp của cookie:
Set-Cookie: key=value;
Trong Node.js:
response.setHeader('Set-Cookie', 'key=value');
Trong đó value là một chuỗi hay một mảng giá trị được liên kết với cùng một Cookie:
response.setHeader('Set-Cookie',['id=1','name=Diogenis']);
Để xóa một Cookie bạn có thể làm theo các cách sau:
Đặt giá trị Expries là một ngày trong quá khứ
Đặt Max-Age = 0
Sử dụng phương thức clearCookie() của ExpressJS
Cài đặt Cookie ở phía Client-Side
Cookie có thể tạo bằng một Object của JavaScript là Document.Cookie.
Tạo cookie phía client cũng tương tự như ví dụ với NodeJS ở trên, bạn có thể truyền giá trị và các thuộc tính áp dụng dưới dạng chuỗi: document.cookie = “name=Diogenis”;
Để truy cập cookie, bạn có thể đọc trực tiếp từ đối tượng:
Input: console.log(document.cookie);
Output:
“name=Diogenis”
Để xóa cookie, hãy ghi đè giá trị trống lên và đặt Expires trong quá khứ: document.cookie = “name=; expires=Mon, 20 Dec 1920 00:00:00 UTC;”;
Cookie Flags
Cookie Flag (cờ) bổ sung vào Cookie giúp tăng tính cụ thể cho dữ liệu.
Expires và Max-Age
Để xây dựng persistent Cookie bạn cần phải đặt ngày hết hạn, điều này có thể thực hiện thông qua hai cách:
- Với một ngày cụ thể trong Expires:Set-Cookie: id=2; Expires=Monday, 20 Jan 2021 00:00:00 GMT;
- Với một khoảng thời gian cụ thể trong Max-Age:Set-Cookie: id=2; Max-Age=58162000;
Domain và Path
Các cờ Domain (miền) và Path (đường dẫn) xác định phạm vi các miền có thể truy cập của cookie.
Domain chỉ định các server được phép truy cập, bao gồm cả các miền phụ. Nếu không có cờ này, mặc định chỉ cho phép server lưu trữ dữ liệu của trang web hiện tại chứa Cookie, không bao gồm các tên miền phụ.
Path chỉ định một đường dẫn URL (bao gồm trong URL được yêu cầu) để cho phép gửi cookie cùng với HTTP Request. Khi đặt cờ, sử dụng dấu gạch chéo (/) để bao gồm cả các thư mục con.
Path=/page
cho phép truy cập trên Path=/page/1
và Path=/page/1/custom
Secure và HttpOnly
Đối với các Cookie được dùng với mục đích duy trì thông tin theo phiên phía máy chủ, thì nên sử dụng cờ HttpOnly để ngăn Cookie truy cập các đối tượng Document trong JavaScript.
SameSite
Vì lý do bảo mật và ngăn cookie nhận được các Request trên nhiều trang web nên đặt cờ SameSite. SameSitee tuân theo các thuộc tính sau: None, Lax hoặc Strict.
None cho phép gửi cookie trên cùng một trang hoặc trên nhiều trang.
Lax sẽ cho phép gửi cookie khi khách hàng điều hướng đến miền từ một trang web bên ngoài.
Strict chỉ cho phép trình duyệt gửi cookie cho các request trên cùng một trang web.