Mở đầu
Việc cho phép nhiều người dùng đăng nhập vào các trang web app cực xịn của bạn chưa bao giờ dễ dàng đến thế. Người dùng gửi request bao gồm tài khoản, mật khẩu,.... sau đó bạn kiểm tra xem người dùng có "bịp" mình không, nếu đạt yêu cầu bạn sẽ cấp cho người dùng ID của họ. Đoạn code trông sẽ như thế này:
if user = User.authenticate(username, password) session[:user_id] = user.id end
Tất nhiên là đoạn code này nó hoạt động rất tốt, đúng như mong đợi, tuy nhiên nó không hoàn toàn được bảo mật cho lắm. Hiện tại framework Ruby on Rails chỉ đảm bảo rằng người dùng không thể đọc hoặc giả mạo nội dung session của bạn, nhưng nó lại không thể ngăn một hacker nào đó vô trộm mất cái session cookies và sử dụng trong mục đích cá nhân, tệ hơn nữa là bọn chúng mạo danh nạn nhân để trục lợi.
Sau khi đọc bài hướng dẫn này, bạn sẽ biết:
- Sesion là gì?
- Session ID
- Kĩ thuật hack Session Hijacking
- Session Guidelines
Session
- Session là gì ?
HTTP is a stateless protocol. Sessions make it stateful.
Một session hay còn gọi là một "phiên" làm việc. Trong Computer Science, nó đơn giản là cách giao tiếp giữa client (ở đây là trình duyệt web hoặc ứng dụng trên thiết bị của bạn) với server. 2. Session được tạo ra như thế nào? Một session được khởi tạo khi client gửi request đến sever, nó tồn tại xuyên suốt từ trang này đến trang khác trong ứng dụng và chỉ kết thúc khi hết thời gian timeout hoặc khi bạn close ứng dụng. 3. Session được lưu ở đâu? Những gì bạn ghi trong session sẽ được lưu trong một tệp tin trên server. Chính vì điều này, nếu bạn dùng session một cách vô tội vạ thì sẽ khiến cho server phải lưu rất nhiều. Đặc biệt nếu ứng dụng đó có đến vài triệu người dùng chẳng hạn thì … điều đó thật là kinh khủng. Thông thường chúng ta chỉ nên lưu trữ những thông tin tạm thời trong session VD như: thông tin đăng nhập, thông tin các sản phẩm trong giỏ hàng…
SessionID
The session ID is a 32-character random hex string
Session ID được tạo ra bằng cách sử dụng SecureRandom.hex. SecureRandom.hex sẽ tạo ra một đoạn chuỗi thập lục phân một cách ngẫu nhiên bằng việc sử dụng các thư viện phần mềm bảo mật truyền thông (OpenSSL, /dev/urandom hoặc Win32 CryptoAPI) cho việc tạo ra một đoạn mã hóa số. Hiện tại việc dùng kĩ thuật Brute-force vẫn chưa thể lấy được session ID nên các bạn có thể yên tâm rùi