Blog
hệ thống chat và note bảo mật
- Tháng 5 27, 2025
- Posted by: duytanschool
- Category: Blog
Không có bình luận
Tổng quan Kiến trúc Hệ thống
Để đạt được mức độ bảo mật mong muốn cho hình ảnh, chúng ta sẽ áp dụng các thay đổi sau:
Thư mục lưu trữ hình ảnh riêng tư: Hình ảnh sẽ không được lưu trong các thư mục công khai của web server. Thay vào đó, chúng sẽ nằm ở một vị trí an toàn, không thể truy cập trực tiếp qua URL.
Mã hóa hình ảnh trên Server: Khi người dùng tải ảnh lên, ảnh sẽ được nén (giảm kích thước) và sau đó được mã hóa bằng PHP trước khi lưu vào thư mục riêng tư.
Script phục vụ hình ảnh với xác thực: Để xem ảnh, trình duyệt sẽ không truy cập trực tiếp file ảnh. Thay vào đó, nó sẽ gọi một script PHP (get_image.php) với ID của ảnh và thông tin xác thực. Script này sẽ kiểm tra quyền, giải mã ảnh và truyền về trình duyệt.
Mã hóa thông tin ảnh trong nội dung chat/note: Trong nội dung chat và note, chúng ta sẽ chỉ lưu trữ ID của ảnh (không phải URL đầy đủ). ID này sẽ được mã hóa cùng với toàn bộ nội dung chat/note như bình thường.
Tích hợp vào Quill Editor cho Note: Đối với phần Note, chúng ta sẽ tùy chỉnh Quill Editor để xử lý việc tải ảnh lên server an toàn và chèn ID ảnh vào nội dung Delta của Quill.
Cấu trúc File và Thư mục
Để hệ thống hoạt động, bạn sẽ cần cấu trúc thư mục như sau. Giả sử thư mục gốc website của bạn là my_app.
my_app/
├── index.html <-- File HTML chính
├── css/
│ └── style.css <-- CSS của bạn
├── js/
│ └── script.js <-- JavaScript chính của bạn (chứa các hàm chat, note, login)
├── backend/
│ ├── save.php <-- Lưu nội dung chat/note đã mã hóa
│ ├── get.php <-- Lấy nội dung chat/note đã mã hóa
│ ├── upload_image_secure.php <-- Xử lý tải lên, nén, mã hóa ảnh (MỚI)
│ └── get_image.php <-- Phục vụ ảnh đã mã hóa với xác thực (MỚI)
└── private_data/ <-- THƯ MỤC NÀY KHÔNG ĐƯỢC NẰM TRONG WEBROOT!
└── images/ <-- Lưu trữ ảnh đã mã hóa
├── chat/ <-- Ảnh của chat sẽ được lưu trong các thư mục con theo room ID
└── note/ <-- Ảnh của note sẽ được lưu trong các thư mục con theo note ID
Lưu ý quan trọng: Thư mục private_data phải nằm ngoài thư mục gốc của web server (my_app). Ví dụ: nếu my_app là /var/www/html/my_app/, thì private_data có thể là /var/www/private_data/.