2011-09-05 26 views
7

Tôi có thể tin tưởng loại tệp từ $_FILES khi tải lên hình ảnh không? Hay tôi phải kiểm tra lại với exif_imagetype()?

Trả lời

6

Từ documentation:

kiểu MIME của tập tin, nếu trình duyệt cung cấp thông tin này. Một ví dụ sẽ là "hình ảnh/gif". Tuy nhiên, loại mime này không được kiểm tra ở phía PHP và do đó, đừng coi trọng giá trị của nó.

+0

hoàn hảo, cảm ơn – HappyDeveloper

3

tôi luôn luôn sử dụng chức năng tiếp theo để kiểm tra hình ảnh hợp lệ:

function Check_Image($Filename) { 
    if ($Check_Image = @getimagesize($Filename)) { 
     return TRUE; 
    } 
    return FALSE; 
} 
5

Không bao giờ tin tưởng bất cứ điều gì mà đến từ bên ngoài, đặc biệt là tập tin cập nhật!

Kiểm tra kích thước, vị trí, mime/loại, extenstion và bất cứ điều gì khác mà bạn có thể kiểm tra!

+0

Nhưng loại hình có xuất phát từ bên ngoài không? Hoặc là một cái gì đó được thêm vào bởi php? – HappyDeveloper

+2

Trình duyệt cung cấp, không tin tưởng. –

+0

@Wesley van Opdorp đồng ý, cũng kiểm tra * nội dung * nếu có thể. – Cheekysoft

2

Không, bạn không thể tin tưởng được vì this information is provided by the client browser.

$_FILES['userfile']['type'] kiểu MIME của tập tin, nếu trình duyệt cung cấp thông tin này. Một ví dụ sẽ là "hình ảnh/gif". Tuy nhiên, loại mime này không được kiểm tra ở phía PHP và do đó không được dùng giá trị của nó cho được cấp.

4

Không, bạn không thể tin tưởng biến số $_FILES['userfile']['type']. Giá trị hiện tại trong biến này có thể được giả mạo. Bạn có thể sử dụng finfo_file để phát hiện loại tệp tin đáng tin cậy hơn:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // we need mime type 
echo finfo_file($finfo, "/path/to/uploaded/file"); // displays something like image/gif 
finfo_close($finfo); 

Các chức năng này yêu cầu PHP> = 5.3.0.

Các vấn đề liên quan