Một cách khác để thực hiện việc này có thể là sử dụng cookie làm bộ nhớ được mã hóa cho dữ liệu duy nhất. Bạn sẽ cần một số loại mã định danh không mã hóa có thể phục vụ như một con trỏ tới khóa (hoặc thông tin bắt buộc để lấy khóa) trong cơ sở dữ liệu của ứng dụng, theo sau là một blob được mã hóa bằng khóa thu được từ mã định danh. một số loại định danh có thể sử dụng một lần để xác thực phiên.
Với giả định sau:
- cơ sở dữ liệu của bạn được an toàn (ví dụ, ứng dụng của bạn có thể truy cập vào nó, nhưng người dùng của bạn không thể trực tiếp làm như vậy, và cũng có thể giả định rằng các ứng dụng đã được khả năng chống chống SQL injection)
- Muối của bạn rất mạnh; đó là, entropy hợp lý đủ cao mà cố gắng để crack mật khẩu muối là không khả thi ngay cả khi mật khẩu được biết đến
Sau đó, điều này sẽ là một cách hợp lý nhất định rằng phiên đó là không thể bị tấn công hoặc bị đánh cắp dưới bất kỳ hình thức nào.Đó là để nói rằng một cookie sao chép chỉ là hữu ích hạn chế, vì người dùng không phải đã sử dụng cookie giữa trộm cắp và sử dụng của nó bởi một kẻ tấn công.
Trong khi điều này bảo vệ chống lại phát lại, điều đó cũng có nghĩa là nếu ai đó quản lý để ăn cắp cookie đúng lúc và quản lý cũng sử dụng nó trước khi người dùng hợp pháp ban đầu thực hiện, kẻ tấn công hiện đang nắm quyền kiểm soát phiên. Người ta có thể giới hạn một phiên tới một địa chỉ IP để giảm thiểu rủi ro đó (phần nào đó, nếu cả người dùng và kẻ tấn công đều đứng sau cùng NAT, đó là kịch bản có khả năng nhất trong bất kỳ mạng gia đình hoặc doanh nghiệp vừa và nhỏ). là khá tranh luận, vì địa chỉ IP có vẻ giống nhau. Cũng hữu ích có thể là hạn chế đối với tác nhân người dùng hiện tại (mặc dù điều đó có thể phá vỡ đột ngột nếu người dùng cập nhật trình duyệt của họ và phiên không hết hạn vào thời gian đóng trình duyệt) hoặc tìm một số phương pháp để người dùng có thể xác định máy tính cũng đủ để có sự chắc chắn hợp lý rằng người dùng đã không chuyển cookie từ hệ thống này sang hệ thống khác. Ngắn của việc sử dụng một số plugin nhị phân (Flash, hoặc Silver/Moonlight), tôi không chắc chắn rằng sau này là có thể.
Để bảo vệ chống lại một phiên vĩnh viễn chiếm đoạt, yêu cầu người dùng xác thực lại theo định kỳ (ví dụ: giới hạn thời gian phiên được phép hoặc yêu cầu mã thông báo/fob/dongle) và yêu cầu người dùng xác nhận lại anh ta- hoặc khi bước vào các khu vực nhạy cảm của ứng dụng, chẳng hạn như thay đổi mật khẩu và các hành động, mẫu hoặc hành vi nguy hiểm tiềm tàng như xóa dữ liệu, các mẫu sử dụng bất thường, hành động hàng loạt, v.v.
Rất khó để bảo mật các ứng dụng mà vẫn giữ được tính dễ sử dụng của chúng. Nếu được thực hiện một cách cẩn thận, bảo mật có thể được thực hiện theo cách thức tối thiểu xâm nhập và vẫn hiệu quả - tốt, đối với hầu hết các ứng dụng phải đối mặt với Internet, dù sao đi nữa.
Nguồn
2010-12-09 21:59:35
Bạn sẽ không cần phải lưu trữ mật khẩu để 'nhớ' người dùng, phải không? –
@ o.k.w: Nó được sử dụng để xác thực lại người dùng. – Gumbo