PDA

Bekijk Volledige Versie : [PHP] Veilig upload script



Piet Hein
17/03/04, 21:25
Ik ben bezig met een upload-script voor een website waar je drukwerk kunt
bestellen. Klanten kunnen daar bestanden uploaden. Omdat het om drukwerk
gaat, zijn GIF, JPG en PNG niet voldoende, maar moet ook PDF, EPS, PDS etc.
ge-upload kunnen worden.

De webserver draait Linux, Apache en PHP 4.3.4

Mijn vragen:
- Kan ik het uploaden veilig maken door bepaalde bestandstypes uit te
sluiten? Zo kan ik bedenken .pl, .php, .inc, .php3.
Of moet ik werken met een lijst die WEL mag?
- Uploaden vanaf een Mac geeft wel eens bestanden zonder extensie, hoe los
ik dat dan op?

Verder wilde ik de directorie met .htaccess onbereikbaar maken van buitenaf,
goed idee?

Alvast bedankt voor het meedenken,

groet Piet Hein

Daniel Tryba
17/03/04, 22:15
Piet Hein <piethein@phavorite.nl> wrote:
> Mijn vragen:
> - Kan ik het uploaden veilig maken door bepaalde bestandstypes uit te
> sluiten? Zo kan ik bedenken .pl, .php, .inc, .php3.

Goed idee.

> Of moet ik werken met een lijst die WEL mag?

Whitelisten is beter controleerbaar. Echter staar je niet blind op de
extensie, zorg ervoor dat je kan controleren of een file inderdaad ook
de data bevat die je verwacht... zo kan je controleren of het een valide
image is met getimagesize(). Voor ps/pdf/whatever zijn vast wel scripts
te vinden (of een system("file ...")).

> - Uploaden vanaf een Mac geeft wel eens bestanden zonder extensie, hoe los
> ik dat dan op?

Gebruikers opvoeden!

> Verder wilde ik de directorie met .htaccess onbereikbaar maken van buitenaf,
> goed idee?

Files die door gebruikers kunnen worden geupload dienen _nooit_
rechtstreeks bereikbaar te zijn.

--

Daniel Tryba

Erik Hensema
17/03/04, 22:45
Piet Hein (piethein@phavorite.nl) wrote:
> Ik ben bezig met een upload-script voor een website waar je drukwerk kunt
> bestellen. Klanten kunnen daar bestanden uploaden. Omdat het om drukwerk
> gaat, zijn GIF, JPG en PNG niet voldoende, maar moet ook PDF, EPS, PDS etc.
> ge-upload kunnen worden.
>
> De webserver draait Linux, Apache en PHP 4.3.4
>
> Mijn vragen:
> - Kan ik het uploaden veilig maken door bepaalde bestandstypes uit te
> sluiten? Zo kan ik bedenken .pl, .php, .inc, .php3.
> Of moet ik werken met een lijst die WEL mag?

MOET je uploaden naar een directory die binnen je docroot ligt?
Dat is namelijk gewoonlijk een slecht idee. Maak liever een
directory buiten je docroot waar de uploads naartoe gaan. Dan kom
je er onmogelijk met een browser bij.

> - Uploaden vanaf een Mac geeft wel eens bestanden zonder extensie, hoe los
> ik dat dan op?
>
> Verder wilde ik de directorie met .htaccess onbereikbaar maken van buitenaf,
> goed idee?

Absoluut. En dan 100% onbereikbaar, ook voor jezelf. Bestanden
downloaden met een content-type die ervoor zorgt dat je browser
er geen gekke dingen mee doet, maar gewoon opslaat.

Het werken met een 'zwarte lijst' van extensies kan wel, zolang
je er maar geen vals gevoel van veiligheid van krijgt. Een
whitelist is wat dat betreft handiger dan.

Bestanden zonder extensie 'doen' niks, en zijn in principe
onschadelijk.
--
Erik Hensema (erik@hensema.net) ICQ# 8280101
Please note that my From: field is spamtrapped.