Bỏ qua điều hướng
Blog

Giải nén ZIP an toàn: kiểm đường dẫn trước khi nhận cả thư mục hồ sơ

Kiểm tra đường dẫn đích, liên kết và dung lượng sau giải nén. Dùng bảng cho phép–cách ly–từ chối trước khi đưa hồ sơ ZIP vào luồng import.

Chia sẻFacebookLinkedInZalo
Giải nén ZIP an toàn: kiểm đường dẫn trước khi nhận cả thư mục hồ sơ
Nội dung bài viết

Một file ZIP có thể chứa nhiều thư mục hồ sơ hữu ích, nhưng tên từng entry do bên gửi kiểm soát. Giải nén ZIP an toàn cần bảo đảm mỗi file chỉ được ghi vào vùng được phép. Kiểm phần mở rộng của file ZIP ngoài cùng không chứng minh nội dung bên trong sẽ ở đúng chỗ.

Rủi ro nằm ở đường dẫn sau khi ghép

CodeQL mô tả Zip Slip là tình huống quá trình giải nén dùng tên entry không tin cậy để ghi file ngoài thư mục dự kiến. Kiểm đích đã chuẩn hóa và ranh giới thư mục là kiểm soát quan trọng; so sánh tiền tố chuỗi đơn giản có thể nhầm những thư mục chỉ giống tên. Cách triển khai phải theo API đường dẫn và hệ điều hành thực tế.

Đường dẫn tuyệt đối, thành phần đi lên thư mục, liên kết và hành vi ghi đè cần có chính sách riêng. Không dùng tên archive hay tên khách hàng làm quyền ghi lên hệ thống. Vùng nhận tạm nên tách khỏi mã ứng dụng và vùng public; tài khoản giải nén chỉ có quyền cần thiết trong vùng đó.

Phiếu quyết định cho từng entry

Điểm kiểm Kết quả được nhận Khi chưa đạt
Đích chuẩn hóa Nằm trong root được phép Từ chối archive hoặc cách ly theo chính sách
Loại entry File/thư mục được hỗ trợ Không tự đi theo liên kết
Tài nguyên Trong quota kích thước, số file, độ sâu Dừng có biên nhận
Ghi đè Quy tắc trùng tên đã chốt Không thay file cũ im lặng
Archive không quyết định nơi được ghi
Minh họa: Phiếu kiểm entry ZIP theo đích chuẩn hóa, loại file, quota và quyết định cách ly; không đưa payload khai thác vào ví dụ.

Ví dụ giả định: hồ sơ có tên hợp lệ nhưng sai đích

Một đối tác gửi gói “ho-so.zip”. Bên trong có một entry mà sau chuẩn hóa sẽ nằm ngoài vùng nhận tạm. Hệ thống không thử “sửa hộ” đường dẫn rồi tiếp tục import như thể hồ sơ đầy đủ. Biên nhận nên nêu gói bị từ chối hoặc cách ly, lý do và những file chưa được xử lý. Không hiển thị đường dẫn nội bộ hoặc nội dung nhạy cảm cho người không có quyền.

Dung lượng nén nhỏ chưa nói lên chi phí xử lý

Ngoài ranh giới đường dẫn, cần giới hạn tài nguyên sau giải nén: tổng byte thực ghi, số entry, độ sâu thư mục, thời gian và chính sách archive lồng nhau. Đây là yêu cầu thiết kế bổ sung, không phải bảo đảm do một phép kiểm Zip Slip cung cấp. Khi dừng giữa chừng, vùng tạm phải được thu dọn có kiểm soát; không để một hồ sơ giải nén nửa chừng bị nhận là đã import xong.

Ca nghiệm thu nên gồm tên trùng, đường dẫn không được phép, quota bị vượt và file không đọc được. Dùng dữ liệu giả lập trong môi trường được cấp quyền, không thử ghi ra ngoài hệ thống production. Bài viết không khẳng định đã chạy các ca này.

Tách nhận file với chấp nhận dữ liệu

Giải nén thành công chỉ đưa file vào vùng tiếp nhận. Kiểm định nội dung, ánh xạ hồ sơ và duyệt import vẫn là bước riêng. Với website nhận tài liệu khách hàng, xem thêm kiểm soát upload hồ sơ RFQ; bài đó không thay thế kiểm đường dẫn từng entry trong archive.

Khi làm rõ phạm vi import hồ sơ cho phần mềm, hãy chốt trước danh sách định dạng được nhận và biên nhận từ chối. Cho phép ZIP là thêm một quy trình xử lý, không chỉ thêm đuôi file vào biểu mẫu.

Nguồn tham khảo và giới hạn

CodeQL: Arbitrary file access during archive extraction (Zip Slip) (đọc ngày 13/10/2026). Các biểu mẫu và tình huống trong bài là hướng dẫn biên tập hoặc ví dụ giả định; không phải kết quả kiểm thử, dữ liệu khách hàng hay cam kết năng lực đã triển khai. Cách áp dụng cần đối chiếu nền tảng và quyền thực tế.

Tài khoản Onter

Đăng nhập rồi tiếp tục việc đang làm.

Mở trang đăng nhập riêng nếu trình duyệt chưa hiển thị biểu mẫu.

Contact Me on Zalo