JAWS
26.01.2010, 17:10:53
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
26.01.2010, 17:23:22
Moim zdaniem tak. W nazwie pliku także mogą występować znaku typu: ', *
więc toeretycznie możliwy jest atak sql injection
piotr94
27.01.2010, 09:31:15
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
27.01.2010, 09:48:32
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
27.01.2010, 15:10:00
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
27.01.2010, 15:21:41
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
27.01.2010, 22:34:25
Dzięki za odpowiedzi, mam jeszcze jedno pytanie, chce wyłączyć wyświetlanie błędów w skrypcie i stosuje coś takiego:
tylko jak zrobię jakiś błąd np.
to mi pokazuje ten błąd jakby nic się nie zmieniło. Czy można jakoś to wyłączyć z poziomu samego kodu ?
Lejto
27.01.2010, 22:53:20
JAWS
27.01.2010, 23:24:19
mam i przy
ciągle pokazuje błąd.
Crozin
27.01.2010, 23:47:10
No bo
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
29.01.2010, 12:13:07
Zainteresuj się może funkcją register_shutdown_function()
darko
29.01.2010, 13:19:40
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
29.01.2010, 13:55:43
Żeby tylko problem z wyświetleniem

Czasem taki plik jest trudny do jakiejkolwiek operacji z usunięciem z serwera włącznie
darko
29.01.2010, 14:00:25
Racja
~thek - ciekawe czy da radę zapchać całą wolną przestrzeń na serwerze takimi plikami nie do usunięcia?

typ ataku: multi-lang-filenames-diacritics-freespace-overflow
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.