Nói đúng ra, câu trả lời là không . Nhà phát triển không thể ngăn người dùng tải lên các tệp thuộc bất kỳ loại hoặc phần mở rộng nào.
Tuy nhiên, thuộc tính chấp nhận<input type = "file">
có thể giúp cung cấp bộ lọc trong hộp thoại chọn tệp của HĐH. Ví dụ,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
nên cung cấp một cách để lọc các tệp khác ngoài .xls hoặc .xlsx. Mặc dù trang MDN cho input
phần tử luôn nói rằng nó hỗ trợ điều này, nhưng thật ngạc nhiên, điều này không hoạt động với tôi trong Firefox cho đến phiên bản 42. Điều này hoạt động trong IE 10+, Edge và Chrome.
Vì vậy, để hỗ trợ Firefox cũ hơn 42 cùng với IE 10+, Edge, Chrome và Opera, tôi đoán sẽ tốt hơn khi sử dụng danh sách các loại MIME được phân tách bằng dấu phẩy:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
Hành vi [ Edge (EdgeHTML): thả xuống bộ lọc loại tệp hiển thị các loại tệp được đề cập ở đây, nhưng không phải là mặc định trong danh sách thả xuống. Bộ lọc mặc định là All files (*)
.]
Bạn cũng có thể sử dụng dấu hoa thị theo kiểu MIME. Ví dụ:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
W3C khuyến nghị các tác giả chỉ định cả loại MIME và phần mở rộng tương ứng trong accept
thuộc tính. Vì vậy, cách tiếp cận tốt nhất là:
<!-- Right approach: Use both file extensions and corresponding MIME-types. -->
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
JSFiddle giống nhau: ở đây .
Tham khảo: Danh sách các loại MIME
QUAN TRỌNG: Sử dụng accept
thuộc tính chỉ cung cấp cách lọc trong các tệp thuộc loại quan tâm. Trình duyệt vẫn cho phép người dùng chọn các loại tệp. Các kiểm tra bổ sung (phía máy khách) nên được thực hiện (sử dụng JavaScript, một cách là như vậy ) và chắc chắn các loại tệp PHẢI được xác minh trên máy chủ , sử dụng kết hợp loại MIME bằng cả phần mở rộng tệp và chữ ký nhị phân của nó ( ASP .NET , PHP , Ruby , Java ). Bạn cũng có thể muốn tham khảo các bảng này cho các loại tệp và số ma thuật của chúng, để thực hiện xác minh phía máy chủ mạnh mẽ hơn.
Dưới đây là ba cách đọc tốt về tải lên tập tin và bảo mật.
EDIT: Có thể xác minh loại tệp bằng chữ ký nhị phân của nó cũng có thể được thực hiện ở phía máy khách bằng cách sử dụng JavaScript (thay vì chỉ nhìn vào phần mở rộng) bằng API tệp HTML5, nhưng vẫn phải xác minh tệp trên máy chủ, vì người dùng độc hại vẫn có thể tải lên các tệp bằng cách thực hiện một yêu cầu HTTP tùy chỉnh.