konrados
12.06.2008, 17:49:32
Witam,
W jednym z moich skryptów umożliwiam userom upload plików (jako załączniki do wiadomości). Ze względów bezpieczeństwa, na początku myślałem by zabronić im uploadowania plików typu .php, .js, .htm ale tak sobie myślę - może da się inaczej? Może niech mogą wrzucać pliki dowolnego rodzaju, a ja po stronie serwera zrobię tak by zawsze po ich kliknięciu włączało się "Ściągnij plik..." zamiast uruchamiania go?
To chyba da się zrobić za pomocą odpowiednich headers?
sczegóły:
pliki są przechowywane w katalogu "attachments". Listowanie jest wyłączone. Muszę zrobić co następuje:
1. gdy user wpisze w pasku adresu przeglądarki "attachments/jakis_plik.php" to mu się błąd wywali.
2. stworzyć plik np. "getfile.php" który bierze za parametr nazwę pliku i NIE wykonuje go nawet jak php, zamiast tego-każe przeglądarce go ściągnąć, jest więc "getfile.php?name=jakis_plik.php" i wysłanie odpowiednich headerów.
Da się tak? I czy to jest bezpieczne?
sniezny_wilk
12.06.2008, 17:53:45
Abstrahując już od samego czy da się czy nie (bo da się

) to pozwalanie na wgranie pliku php to już jest zły pomysł sam w sobie. Zobacz, ktoś wgrywa plik usuwający wszystkie dane z katalogu, katalogów wyżej itp, wcześniej wrzuca prawidłowy plik i patrzy skąd leci plik - pobiera adres, odpala swój skrypt przez wpisanie adresu i cieszy się swoim sukcesem
konrados
12.06.2008, 17:58:34
No tak... myślałem jednak, że za pomocą .htaccess mógłbym zabronić jakoś bezpośredniego dostępu do plików w katalogu "attachments". Ale dobra, zabronię userom uploadowania plików php - ale dalsze pytania są wciąż aktualne. Bo chciałbym jednak umożliwić jakoś upload plików typu .htm czy .js czy .txt - i teraz jakie headers mam wysłać by przeglądarka sugerowała ściągnięcie zamiast otwierania ich ?
pest
12.06.2008, 18:10:40
Tak jak robi to google w mailach.
Instrukcja jest w opisie samej funkcji
header" title="Zobacz w manualu PHP" target="_manual.
Dokładniej spróbuj pokombinować z tym:
<?php
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"'); ?>
Co do plików php... możesz im zmieniać rozszerzenia, albo zorientować się czy przez .htaccess możesz wyłączyć obsługę interpretera dla tego katalogu.