Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy powinienem walidować nazwę pliku przy wgrywaniu na serwer ?
Forum PHP.pl > Forum > PHP
JAWS
Czy powinienem walidować nazwę pliku graficznego przy wgrywaniu na serwer ?


Bo chce zapamiętywać nazwę pliku w bazie danych, czyli to:

$_FILES['plik']['name']
lukasz91
Moim zdaniem tak. W nazwie pliku także mogą występować znaku typu: ', *
więc toeretycznie możliwy jest atak sql injection
piotr94
poza tym waliduj, czy ktoś Ci nie wysyła pliku php (czyli *.php, *.php3, *.php5, lub ogólnie *.php*)
Raz taką lukę miało forum przema i można było przez nie dostać się na serwer i edytować wszystkie pliki
Pilsener
Zasada powinna być prosta: co nie jest dozwolone jest zabronione, więc absolutnie niedopuszczalne jest, by ktoś mógł wrzucać pliki o dowolnej nazwie - nazwa pliku powinna zawierać określony zestaw znaków, nie być za długa i mieć odpowiednie rozszerzenie. Ktoś kto używa znaków specjalnych w nazwach plików raczej czystych intencji nie ma, a nawet jeśli to nazwę pliku przecież łatwo zmienić.
jajcarzd1
Najlepiej zamieniaj wszystkie znaki kóre są spoza jakiegoś określone zakresu np. [a-zA-Z0-9_.] na np. "_" albo kropkę a do tego sprawdzaj "type" pliku z tablicy $_FILES i po kłopocie
blooregard
A dla pełnego bezpieczeństwa jeszcze możesz zrobić whitelist'ę z dopuszczalnymi typami MIME i z góry odrzucać te, któe mają inny, niż dopuszczalny.
Plus kontrola wielkości pliku z ograniczeniem do np. max 1MB, zapominając o tym, możesz dopuścić do ataku DoS/DDoS na serwer, jeśli z wielu lokacji zacznie Ci ktoś ładowac pliki po kilkaset MB
JAWS
Dzięki za odpowiedzi, mam jeszcze jedno pytanie, chce wyłączyć wyświetlanie błędów w skrypcie i stosuje coś takiego:

  1. ini_set('display_errors', 'off');


tylko jak zrobię jakiś błąd np.

  1. echo "aaaaaa"


to mi pokazuje ten błąd jakby nic się nie zmieniło. Czy można jakoś to wyłączyć z poziomu samego kodu ?
Lejto
zainteresuj się http://php.net/manual/pl/function.error-reporting.php
JAWS
  1. ini_set('display_errors', 'off');


mam i przy

  1. echo ''


ciągle pokazuje błąd.
Crozin
No bo
  1. echo ''
To błąd składni - czyli kod PHP się w ogóle nie wykona - czyli instrukcje ini_set..., error_reporting... też nie zostaną wykonane. Musiałbyś w php.ini (czy to bezpośrednio, czy np. przez .htaccess) wyłączyć raportowanie błędów.
jajcarzd1
Zainteresuj się może funkcją register_shutdown_function()
darko
A ja jeszcze dodam, że warto walidować nazwę i wywalać wszystkie znaki typowe dla polskiego alfabetu (ą, ć ę, ź itd.), niemieckiego alfabetu (umlauty itd.) i norweskiego (te o z kreską itp.) (i cały: rosyjski, arabski i grecki ?) gdyż czasami mogą pojawić się problemy. Miałem kiedyś problemy z wyświetlaniem miniatur obrazków zawierających polskie znaki. W skrócie: zostawiamy tylko alfabet łaciński.
thek
Żeby tylko problem z wyświetleniem winksmiley.jpg Czasem taki plik jest trudny do jakiejkolwiek operacji z usunięciem z serwera włącznie dry.gif
darko
Racja ~thek - ciekawe czy da radę zapchać całą wolną przestrzeń na serwerze takimi plikami nie do usunięcia? blinksmiley.gif
typ ataku: multi-lang-filenames-diacritics-freespace-overflow winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.