Như những người khác đã đề cập, không nguy hiểm hơn việc gửi một bài đăng HTTP từ một biểu mẫu. Trên thực tế, đó là một điều rất giống nhau.
Nhưng nếu HTTPS không phải là một tùy chọn, bạn luôn có thể sử dụng lược đồ thử thách / phản hồi qua kết nối không được mã hóa. Về cơ bản nó hoạt động như thế này:
- Máy chủ có hàm băm SHA (hoặc bất kỳ thuật toán băm nào bạn thích) cho mật khẩu của người dùng.
- Khách hàng có mật khẩu.
- Ứng dụng khách yêu cầu (sử dụng AJAX không được mã hóa) mà máy chủ gửi một thử thách (một chuỗi byte ngẫu nhiên; ký tự là được.)
- Máy chủ tạo một thử thách và một ID thử thách, và lưu nó khi hết hạn.
- Khách hàng nhận được thử thách và ID thử thách.
- Máy khách băm mật khẩu bằng SHA.
- Ứng dụng băm băm kết quả băm với thử thách được thêm vào theo một cách nào đó.
- Khách hàng gửi ID thử thách (không phải chính thử thách) và hàm băm kết quả thứ hai.
- Máy chủ tra cứu thử thách bằng ID nếu nó tồn tại và chưa hết hạn.
- Máy chủ gắn thử thách vào hàm băm mật khẩu được lưu trữ và tạo một hàm băm bằng cách sử dụng cùng một lược đồ với máy khách.
- Máy chủ so sánh hàm băm của nó với máy khách. Nếu nó giống nhau, người dùng đã được xác thực.
Nó thực sự khá đơn giản để thiết lập khi bạn có ý tưởng. Wikipedia có một số thông tin bổ sung về nó.
CHỈNH SỬA: Tôi nhận thấy rằng tôi đã quên đề cập, cho dù xác thực thành công hay không, bạn phải xóa thử thách, bất kể. Việc cho khách hàng thử nhiều lần trong một thử thách có thể dẫn đến các vấn đề bảo mật.