Nhận diện loại file API
Nhận diện loại thật của file từ nội dung (hơn 130 định dạng), so với tên và Content-Type, cảnh báo file thực thi giả dạng và macro.
Tải file lên (multipart, body thô hoặc file_base64) hoặc gửi url, API xác định nội dung thật sự là gì mà không tin vào đuôi file: ảnh (JPEG, PNG, WebP, AVIF, HEIC, ảnh RAW…), PDF, tài liệu Office (DOCX / XLSX / PPTX phân biệt qua danh sách tệp trong ZIP, DOC / XLS / PPT đời cũ qua luồng OLE2, ODF, EPUB), file nén (ZIP, RAR, 7z, gzip, bzip2, xz, zstd, tar, ISO…), âm thanh và video, file thực thi (Windows PE kèm kiến trúc, cờ DLL / .NET, ELF, Mach-O, APK, JAR, DEX, WebAssembly, script có shebang, shortcut LNK, MSI, DEB / RPM), font, SQLite và nhiều định dạng dữ liệu; file văn bản được phân loại thành SVG, HTML, XML, JSON, CSV, PEM…
Kết quả gồm MIME, đuôi chuẩn, nhóm và chi tiết, rồi so với tên file (filename hoặc tên lúc tải lên) và content_type khai báo. Mỗi cảnh báo có mức độ, risk là mức cao nhất: file thực thi núp dưới đuôi tài liệu hoặc ảnh, macro VBA (nhất là khi tên là .docx / .xlsx), đuôi kép (hoadon.pdf.exe), ký tự đảo chiều phải-sang-trái trong tên, SVG / HTML chứa script, PDF có JavaScript hoặc lệnh Launch, file nén chứa file thực thi.
API chỉ đọc 64 KB đầu (cộng thư mục trung tâm ZIP với file tải lên), nên khi dùng URL chỉ tải tối đa 64 KB. File không được lưu lại. Đây là kiểm tra định dạng, không phải phần mềm diệt virus: mức "none" không chứng minh file vô hại.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
file | body | file | không | File cần kiểm tra (multipart, body thô hoặc file_base64). | |
url | query|body | string | không | URL công khai của file (đọc 64 KB đầu). | |
filename | query|body | string | không | Tên file để so sánh (mặc định: tên lúc tải lên hoặc đường dẫn URL). | |
content_type | query|body | string | không | MIME khai báo để so sánh (mặc định: Content-Type của file tải lên / phản hồi). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/file-type" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "0=@./my-file"const form = new FormData();
form.append('0', fileInput.files[0]);
const res = await fetch('https://apibox.io.vn/v1/file-type', {
method: 'POST',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
body: form,
});
console.log(await res.json());import requests
res = requests.post(
"https://apibox.io.vn/v1/file-type",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"0": open("my-file", "rb")},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/file-type');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
CURLOPT_POSTFIELDS => ['0' => new CURLFile('my-file')],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"source": "upload",
"file_name": "contract.docx",
"size_bytes": 401,
"bytes_inspected": 401,
"type": {
"extension": "docm",
"mime": "application/vnd.ms-word.document.macroEnabled.12",
"kind": "document",
"description": "Word document with macros",
"executable": false,
"details": {
"entries": 3,
"entries_listed": "all",
"macros": true
}
},
"extension": "docx",
"extension_matches": false,
"declared_content_type": null,
"content_type_matches": null,
"expected_extensions": [
"docm",
"dotm"
],
"risk": "high",
"warnings": [
{
"code": "macros",
"severity": "high",
"message": "The file contains VBA macros but is named .docx (macro-free format)"
},
{
"code": "extension_mismatch",
"severity": "low",
"message": "The name ends in .docx but the content is Word document with macros (.docm)"
}
]
}
Ứng dụng
- Kiểm tra file người dùng tải lên trước khi lưu (theo OWASP)
- Chặn file thực thi đổi tên thành ảnh hoặc PDF
- Phát hiện file Office chứa macro gửi qua e-mail
- Sửa Content-Type sai khi phục vụ file của người dùng
Hỏi đáp
Làm sao phân biệt DOCX, XLSX và PPTX?
Cả ba đều là file ZIP: API đọc tên các tệp bên trong ([Content_Types].xml, word/, xl/, ppt/, vbaProject.bin) để phân biệt và phát hiện macro.
API có quét virus không?
Không. API nhận diện định dạng thật và dấu hiệu rủi ro (mã thực thi, macro, script); hãy dùng phần mềm diệt virus để tìm mã độc.
Dùng URL thì tải bao nhiêu dữ liệu?
Tối đa 64 KB. Với file dạng ZIP chỉ đọc các header trong phần đó, đủ để nhận ra file Office.
API liên quan
Metadata ảnh & EXIF
Đọc kích thước, định dạng, thông tin EXIF máy ảnh, thông số chụp và vị trí GPS của ảnh JPEG, PNG, WebP, HEIC, AVIF, GIF… – upload file hoặc qua URL.
PDFMetadata PDF
Đọc metadata file PDF: số trang, tiêu đề, tác giả, phần mềm tạo, ngày tạo, phiên bản PDF, mã hoá, số trường form và khổ giấy từng trang (A4, Letter…).
PDF₫Tạo PDF báo giá, phiếu thu
Tạo PDF báo giá, phiếu thu, đơn đặt hàng, hoá đơn bán hàng gọn đẹp từ JSON: tiếng Việt chuẩn, thuế GTGT, số tiền bằng chữ và mã VietQR để thanh toán.