EP 3: Cách Thiết Lập Mã Hóa Trong Dự Án Web Của Bạn

Giới thiệu

Mã hóa không chỉ là lý thuyết mà là một phần cốt lõi của bảo mật web. Nó giúp bảo vệ dữ liệu nhạy cảm, duy trì sự tin tưởng của người dùng và giảm thiểu rủi ro từ các cuộc tấn công. Sau khi đã hiểu mã hóa là gì, các loại và thuật toán phổ biến, bước tiếp theo là triển khai chúng trong dự án web thực tế.

Bài viết này hướng dẫn chi tiết cách áp dụng mã hóa an toàn và hiệu quả trong quá trình phát triển ứng dụng web.


Cách Thiết Lập Mã Hóa Trong Dự Án Web

Giờ đây, bạn đã nắm được khái niệm mã hóa, các loại và thuật toán liên quan. Vậy thì hãy cùng bắt tay vào triển khai từng bước.


1. Luôn Sử Dụng HTTPS

Bước quan trọng nhất là mã hóa dữ liệu khi truyền tải bằng HTTPS. Điều này được thực hiện nhờ TLS (Transport Layer Security), giúp mã hóa toàn bộ thông tin trao đổi giữa trình duyệt và máy chủ.

👉 Cách bật HTTPS:

  • Lấy chứng chỉ TLS miễn phí từ Let’s Encrypt.
  • Dùng NGINX hoặc Apache để chạy website qua HTTPS.
  • Chuyển hướng toàn bộ HTTP → HTTPS bằng 301 redirect.

2. Sử Dụng Thư Viện Mã Hóa Có Sẵn

⚠️ Không bao giờ tự viết thuật toán mã hóa. Thay vào đó, hãy dùng các thư viện chuẩn, đã được kiểm chứng:

  • Node.js: crypto module
  • Python: cryptography, PyNaCl
  • PHP: openssl_encrypt(), Sodium
  • Java: javax.crypto

Ví dụ trong Node.js:

const crypto = require('crypto');
const secret = 'mySuperSecretKey';
const cipher = crypto.createCipher('aes-256-cbc', secret);
let encrypted = cipher.update('Hello World', 'utf8', 'hex');
encrypted += cipher.final('hex');

👉 Best practice:

  • Luôn dùng khóa mạnh (ví dụ AES 256-bit).
  • Tuyệt đối không lưu khóa trong code, hãy dùng secret storage hoặc biến môi trường.

3. Mã Hóa Dữ Liệu Khi Lưu Trữ (Encryption at Rest)

Ngoài dữ liệu khi truyền tải, bạn cần mã hóa dữ liệu khi lưu trữ (ví dụ email, token API, thông tin cá nhân).

📌 Nên áp dụng ở đâu?

  • Trường dữ liệu nhạy cảm trong database (VD: số thẻ tín dụng).
  • File upload (PDF, hình ảnh, tài liệu).
  • Local storage trong mobile app.

💡 Có thể dùng field-level encryption để chỉ mã hóa một vài cột quan trọng (VD: ssn, credit_card_number) thay vì mã hóa cả database.

Một số DB hỗ trợ sẵn mã hóa:

  • MongoDB: hỗ trợ mã hóa cấp trường (Client-Side Field Level Encryption – CSFLE).
  • PostgreSQL: dùng extension pgcrypto.
  • MySQL/MariaDB: Transparent Data Encryption (TDE) (chỉ bản enterprise).
  • SQL Server: Always Encrypted, cho phép mã hóa ngay từ phía client.
  • Firebase: tự động mã hóa dữ liệu khi truyền tải và lưu trữ, nhưng bạn vẫn nên mã hóa thủ công cho trường cực kỳ nhạy cảm.

4. Quản Lý Khóa Mã Hóa (Key Management)

Dữ liệu chỉ an toàn khi khóa được quản lý đúng cách. Nếu hacker có khóa → mọi lớp bảo mật coi như vô nghĩa.

👉 Nguyên tắc quản lý khóa:

  • Dùng hệ thống quản lý khóa (KMS) như AWS KMS, Azure Key Vault, HashiCorp Vault.
  • Thường xuyên rotate key (thay đổi định kỳ).
  • Không hard-code khóa trong code.
  • Lưu trữ khóa bằng biến môi trường hoặc secret storage an toàn.

💡 Lưu khóa cùng nơi với dữ liệu chẳng khác nào để chìa khóa ngay dưới tấm thảm trước cửa nhà.


Tham khảo

Nội dung được biên soạn lại từ khóa học Encryption Basics for Web Developers tại Linux Foundation Training Portal.