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.

GETPOSThttps://apibox.io.vn/v1/file-type

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ênVị tríKiểuBắt buộcMặc định
filebodyfilekhôngFile cần kiểm tra (multipart, body thô hoặc file_base64).
urlquery|bodystringkhôngURL công khai của file (đọc 64 KB đầu).
filenamequery|bodystringkhôngTên file để so sánh (mặc định: tên lúc tải lên hoặc đường dẫn URL).
content_typequery|bodystringkhôngMIME 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"

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

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →