Câu hỏi về MP3 là hơi len. Các tệp MP3 thường chứa một loạt các chaff ở đầu và/hoặc kết thúc không phải là các khung MP3 hợp lệ. Thông thường điều này là để giữ thẻ ID3, nhưng nó không phải là không phổ biến để đáp ứng MP3 với dữ liệu vô nghĩa ở cuối cho các lý do khác (ví dụ như cắt dòng ngây thơ).
Trong thực tế hầu như mọi thứ đều có thể là MP3 và nhiều tệp nhị phân tùy ý sẽ có một cái gì đó trông giống như một khung MP3 trong đó.Tìm kiếm thông tin ID3 và chiều dài (như trong câu trả lời của Pekka) là một cách tiếp cận heuristic tốt để có được ý tưởng nếu một tệp là có khả năng là là MP3, nhưng điều đó không đủ nếu những gì bạn nghĩ đến là liên quan đến bảo mật.
nó trả về kiểu tập tin dựa trên phần mở rộng (Tôi đã thử nghiệm nó chỉ trên cửa sổ)
Trên thực tế nó sẽ trả về chuỗi loại trình duyệt web của người dùng gửi nó, mà trên Windows sẽ được xác định bởi phần mở rộng tệp gốc nhưng trên Mac hoặc Linux có thể đến từ các nguồn khác. Dù bằng cách nào, giống như tên tập tin, nó không đáng tin cậy. Máy tính của người dùng có thể được thiết lập sai hoặc có thể cố ý gửi chuỗi loại phương tiện sai cho một tệp.
Có một cách an toàn để làm điều đó với các hàm gốc php?
Ý định của bạn với ‘an toàn’ là gì? Nếu mục tiêu của bạn là ngăn chặn mọi người tải lên các tệp MP3 thực sự là các loại tệp khác trong ngụy trang — thường cho mục đích tiêm nội dung HTML, Java hoặc Flash cho các cuộc tấn công qua nhiều trang, thì không có cách nào thực tế để thực hiện việc này. Bạn có thể tạo các tệp là các tệp MP3 hợp lệ và cũng có thể được hiểu là một loại khác cùng một lúc. (Xem các cuộc tấn công 'GIFAR', tương tự với MP3.)
Cuối cùng, cách tiếp cận duy nhất bảo vệ bạn khỏi các cuộc tấn công XSS là phục vụ các tệp không được tải lên không đáng tin cậy từ một tên máy chủ khác. trang web chính, do đó, cross-site-scripting vào nó không có gì. Một giải pháp một phần bạn cũng có thể xem xét thay thế hoặc cũng là để phục vụ tất cả các tệp của bạn với tiêu đề Content-Disposition: attachment
(nếu bạn không cần lưu trữ hình ảnh sẽ được hiển thị nội tuyến trong một trang).
[cách kiểm tra xem tệp có phải là hình ảnh hoặc loại video trong phiên bản php 5.2.9 không?] (Http://stackoverflow.com/questions/3074527/how-to-check-whether-file-is-image-or -video-type-in-php-version-5-2-9) bao gồm cùng một cơ sở – Gordon