Mã hóa thông tin đăng nhập của người dùng tại Client

Standard

Để bảo mật thông tin giữa Server – Client, thông thường phổ biến nhất là dùng giao thức HTTPS, tuy nhiên, nếu bạn không triển khai giao thức này vì nhiều lý do khách quan / chủ quan thì vấn đề cần quan tâm trước hết chống lại việc bị “chôm” thông tin tài khoản của user trong quá trình đăng nhập hệ thống.

Lưu ý: Phương pháp trình bày sẽ giúp bạn mã hóa hóa giữ liệu trên đường truyền khi user submit tài khoản của họ (tên đăng nhập, mật khẩu), tuy nhiên, nó không thể thay thế HTTPS vì attacker có thể không nhắm đến user/pass mà sẽ chôm token của browser để giả mạo client với server.

Các bước:

  1. Tạo KEY bí mật giữa Server và Client để mã hóa/giải mã dữ liệu
  2. Tại client: mã hóa dữ liệu bằng KEY trước khi submit
  3. Tại server: giải mã dữ liệu nhận từ client bằng KEY, tiến hành các thủ tục thông thường

* KEY có thể xem được tại client, tuy nhiên attacker sẽ rất khó biết được KEY này, trừ khi săm soi rất kỹ mọi dữ liệu truyền trên hệ thống mạng.

Mã hóa tại client:

– Dùng $_SESSION print ra KEY trong code javascript để xử lý mã hóa dữ liệu trước khi submit lên server (KEY tạo như thế nào thì có nhiều cách, 1 cách là bạn có thể dùng MD5 kết hợp unique_id)
– Dùng javascript bắt sự kiện form submit, lấy giá trị user điền để mã hóa với KEY đã biết, thuật toán sử dụng AES 256bit
– Chèn dữ liệu đã mã hóa vào form submit, tiếp tục quá trình submit

Code ví dụ:

Lưu ý: trên thực tế bạn không muốn submit 2 trường user/pass clean mà người dùng điền, thay vào đó sẽ submit các giá trị đã mã hóa, vì vậy input username và input password bạn không đặt tên (name) cho field >> đoạn mã dưới cần sửa phần lấy giá trị theo tên thành theo id:

[codesyntax lang=”javascript”]

[/codesyntax]

Tại server:

  • Giải mã dữ liệu tại client dùng KEY đã lưu trong $_SESSION
  • Tiến hành xử lý các bước thông thường

[codesyntax lang=”php”]

[/codesyntax]

Leave a Reply

Your email address will not be published. Required fields are marked *

8 + 1 =