Tworzę prosty skrypt do wysyłania php, a użytkownicy mogą przesyłać tylko pliki ZIP i RAR.
Jakich typów MIME należy używać do sprawdzania $_FILES[x][type]
? (proszę o pełną listę)
Dziękuję Ci..
php
zip
mime-types
rar
mrdaliri
źródło
źródło
Odpowiedzi:
Odpowiedzi udzielone przez freedompeace, Kiyarash i Sam Vloeberghs:
Sprawdziłbym też nazwę pliku. Oto, jak możesz sprawdzić, czy plik jest plikiem RAR lub ZIP. Przetestowałem to, tworząc szybką aplikację wiersza poleceń.
Zauważ, że nadal nie będzie to w 100% pewne, ale prawdopodobnie jest wystarczająco dobre.
Ale nawet WinRAR wykrywa pliki inne niż RAR jako archiwa SFX:
źródło
application/x-zip-compressed
zip
anirar
pliku. Według specyfikacji WC3 to będzie intrepreted jak: „Wolęapplication/zip
|application/x-rar-compressed
typ zawartości, ale jeśli nie można dostarczyć to jakoapplication/octet-stream
(strumień pliku) też jest w porządku”.multipart/x-zip
być ważny? To nie jest wieloczęściowe. Lista SitePoint zawiera wiele niedokładnych typów MIME i jest daleka od ukończenia. Oficjalny rejestr IANA Media Types nie jest (i prawdopodobnie nigdy nie będzie) kompletny w 100%.Do przesłania:
Oficjalną listę typów mime można znaleźć na stronie The Internet Assigned Numbers Authority (IANA) . Zgodnie z ich
Content-Type
nagłówkiem listy dlazip
isapplication/zip
.Typ mediów dla
rar
plików nie jest oficjalnie zarejestrowany w IANA, ale nieoficjalna powszechnie używana wartość typu MIME toapplication/x-rar-compressed
.application/octet-stream
znaczy tyle co: „Wysyłam Ci strumień plików, a zawartość tego strumienia nie jest określona” (więc prawdą jest, że może to być również plikzip
lubrar
). Serwer ma wykryć, jaka jest rzeczywista zawartość strumienia.Uwaga: przy przesyłaniu nie można polegać na typie MIME ustawionym w
Content-Type
nagłówku. Nagłówek jest ustawiany na kliencie i może mieć dowolną losową wartość. Zamiast tego możesz użyć funkcji informacji o pliku php, aby wykryć typ MIME pliku na serwerze.Do pobrania:
Jeśli chcesz pobrać
zip
plik i nic więcej, ustaw tylko jednąAccept
wartość nagłówka. Wszelkie dodatkowe ustawione wartości będą używane jako rezerwowe na wypadek, gdyby serwer nie mógł spełnićAccept
żądanego typu MIME w nagłówku.Zgodnie ze specyfikacją WC3 :
zostanie zinterpretowane jako: "Wolę
application/zip
typ MIME, ale jeśli nie możesz tego dostarczyć,application/octet-stream
(strumień plików) też jest w porządku".Więc tylko jeden:
Zagwarantuje Ci
zip
plik (lub406 - Not Acceptable
odpowiedź na wypadek, gdyby serwer nie mógł spełnić Twojego żądania).źródło
Nie powinieneś ufać
$_FILES['upfile']['mime']
, sam sprawdź typ MIME. W tym celu możesz użyćfileinfo
rozszerzenia , które jest domyślnie włączone od PHP 5.3.0.UWAGA: Nie zapomnij włączyć rozszerzenia w swoim
php.ini
i zrestartować serwer:źródło
W pytaniu połączonym jest kod Objective-C, aby pobrać typ MIME dla adresu URL pliku. Utworzyłem rozszerzenie Swift na podstawie tego kodu Objective-C, aby uzyskać typ MIME:
źródło
Ponieważ rozszerzenie może zawierać mniej więcej trzy znaki, poniższe testy sprawdzą rozszerzenie niezależnie od jego długości.
Spróbuj tego:
aby sprawdzić wszystkie znaki po ostatnim „.”
źródło