Session là gì và cách ngăn chặn Session hijacking
Trong lĩnh vực phát triển web, khái niệm về session (còn được gọi là phiên) là một khía cạnh quan trọng. Trong bài viết này, chúng ta sẽ tìm hiểu về session và cách ngăn chặn Session hijacking, với tư cách là người đang học phát triển ứng dụng web.
1. Giới thiệu
1.1 Session là gì?
Khi một người dùng hoặc một máy tính truy cập vào một trang web, một session sẽ được tạo ra để theo dõi hành vi của người dùng và phân biệt họ với các người dùng khác. Session sẽ tự đóng hoặc biến mất sau một thời gian hoặc ngay khi người dùng thoát khỏi trang web, tùy thuộc vào cấu hình của máy chủ web.
Cụ thể hơn, khi người dùng gửi yêu cầu tới máy chủ, máy chủ sẽ kiểm tra xem session id có tồn tại và hợp lệ không. Nếu hợp lệ, máy chủ sẽ trả về session trước đó cho người dùng. Session thường được lưu trữ ở phía máy chủ và có thể lưu trữ trong cơ sở dữ liệu, bộ nhớ (RAM) hoặc tập tin trên máy chủ. Session thường lưu trữ thông tin dưới dạng cặp key - value và những thông tin cụ thể được lưu trữ sẽ phụ thuộc vào máy chủ và không thể biết được bởi người dùng. Cụ thể về thông tin lưu trữ trong session là do phía máy chủ quyết định.
1.2 Session khác với Cookie như thế nào?
Hai khái niệm này - session và cookie - thường dễ bị nhầm lẫn, nhưng chúng hoàn toàn khác nhau và thường liên quan đến nhau. Một điểm khác biệt chính là cookie được lưu trữ ở phía người dùng, trong khi session được lưu trữ ở phía máy chủ (server).
Sự khác biệt quan trọng giữa session và cookie nằm ở việc bảo mật. Khi một người dùng đăng nhập, làm thế nào máy chủ biết rằng họ đã đăng nhập khi họ gửi các yêu cầu tiếp theo? Một cách đơn giản là gắn tên đăng nhập và mật khẩu trong URL, nhưng cách này không an toàn và làm giảm hiệu suất của máy chủ khi máy chủ phải kiểm tra tên và mật khẩu liên tục cho mỗi yêu cầu từ người dùng. Đây là lúc session và cookie xuất hiện.
1.3 Session và Cookie có thể tồn tại độc lập
- Một ứng dụng web nếu chỉ sử dụng session có thể kiểm tra session id thông qua URL, nhưng điều này có thể ảnh hưởng đến bảo mật của ứng dụng web vì các liên kết sẽ lưu trữ trong lịch sử hoặc có thể rò rỉ thông tin cho bên thứ ba.
- Ngược lại, khi chỉ sử dụng cookie, vì giới hạn kích thước của cookie là 4KB, nên không thể lưu trữ và ghi lại các hoạt động của người dùng như session.
2. Session hijacking
2.1 Session hijacking là gì?
Session hijacking, còn được gọi là session fixation, là một kỹ thuật tấn công mà kẻ tấn công cố gắng lấy thông tin về session id của người dùng và sau đó sử dụng nó để giả mạo phiên làm việc của họ. Một khi kẻ tấn công có session id của người dùng, họ có thể truy cập tài khoản và dữ liệu cá nhân của người dùng.
2.2 Sử dụng Session id trong Cookies
Bước đầu tiên để ngăn chặn session hijacking là đặt session id trong cookies thay vì sử dụng URL rewrites. Đồng thời, nên đặt thuộc tính cookie httponly là true. Điều này sẽ ngăn các mã script phía máy khách truy cập session id. Sử dụng những kỹ thuật này, cookies sẽ không thể truy cập bằng cách sử dụng XSS và lấy session id từ trình quản lý cookie sẽ không dễ dàng như chúng ta đã thấy.
2.3 Sử dụng Token để Ngăn chặn Session hijacking
Bước tiếp theo là thêm một token vào mỗi yêu cầu. Chúng ta có thể thêm token ẩn trong các form HTML. Khi gửi yêu cầu đến máy chủ, chúng ta có thể xác minh token này để chắc chắn rằng yêu cầu đó là duy nhất.
Sử dụng token giúp bảo vệ phiên làm việc của người dùng khỏi session hijacking, vì kẻ tấn công cần biết cả session id và token mới có thể giả mạo phiên làm việc của người dùng. Mỗi khi người dùng reload lại trang/gửi request, token sẽ được cập nhật, làm cho việc tấn công trở nên khó khăn hơn. Bạn có thể tham khảo CSRF token.
3. Lời kết
Trong bài viết này, chúng ta đã tìm hiểu về session trong phát triển web, sự khác biệt giữa session và cookie, và cách sử dụng token để bảo vệ phiên làm việc của người dùng khỏi session hijacking. Hiểu và quản lý session là một phần quan trọng trong việc xây dựng ứng dụng web an toàn và đáng tin cậy.