HTTP stateless: request sau không tự biết request trước đã đăng nhập. Cookie và session không làm HTTP có state; chúng gửi một định danh hoặc dữ liệu kèm mỗi request để ứng dụng dựng lại context.
1 | session[:user_id] = user.id |
Dòng code nhỏ, trách nhiệm không nhỏ.
Cookie hoạt động thế nào?
Server gửi header Set-Cookie; browser lưu cookie và gửi lại theo domain/path phù hợp. Thuộc tính quan trọng:
Secure: chỉ gửi qua HTTPS.HttpOnly: JavaScript không đọc được, giảm tác động của một số XSS.SameSite: kiểm soát gửi cookie trong cross-site request, hỗ trợ giảm CSRF.Expires/Max-Age: thời hạn lưu.
Cookie không nên chứa secret chỉ vì user “không thấy trên giao diện”. DevTools tồn tại và khá ít tôn trọng niềm tin đó.
Signed và encrypted cookies
1 | cookies.signed[:theme] = "dark" |
- Signed cookie đảm bảo tính toàn vẹn nhưng nội dung không bí mật.
- Encrypted cookie vừa mã hóa vừa xác thực.
Không tự decode format nội bộ hoặc hard-code salt/cipher theo một Rails version. Dùng API Rails; format có thể thay đổi.
Session mặc định trong Rails
Rails thường dùng cookie store: session data được mã hóa/xác thực và lưu phía client. Giới hạn cookie khoảng 4 KB, nên session chỉ nên chứa dữ liệu nhỏ như user ID, không phải nguyên object hoặc giỏ hàng cỡ database.
Có thể dùng Redis/database-backed session khi cần revoke tập trung, dung lượng lớn hơn hoặc kiểm soát lifecycle phía server. Đổi store tạo ra trade-off mới: network, cleanup, availability và vận hành.
Session hijacking
Nếu attacker lấy được session cookie hợp lệ, server có thể xem họ như user. Mã hóa cookie không ngăn replay. Vì vậy:
- bắt buộc HTTPS;
- đặt
Secure,HttpOnly,SameSitephù hợp; - rotate session sau login/logout hoặc thay đổi privilege;
- chống XSS và CSRF;
- giới hạn thời gian session;
- rotate
secret_key_basetheo kế hoạch vì thay đổi key làm invalid cookie cũ.
1 | reset_session |
Session là một hash tiện dụng ở API level, nhưng security của nó là cả chuỗi từ browser, TLS, cookie flags, secret management đến authorization. Gọi nó là “hash thôi mà” là đúng theo cách gọi động cơ máy bay là “mấy cục kim loại quay”.