Door
Joeri de Man
op 08-02-2012 11:56
gewijzigd op 08-02-2012 12:13
3.465 views
Ik ben aan het leren om een veilig upload systeem te maken. 1 van de dingen die ik op internet gevonden heb is het voorkomen dat gevaarlijke scripts worden uitgevoerd.
Ik heb in de .htaccess de volgende code staan. Het .htaccess bestand heb ik in de parentfolder geplaats. Maar ook als ik het in dezelfde folder plaats werkt het niet.
EDIT: Ik zet er toch maar bij. Naast het voorkomen dat script bestanden worden geopend, is elke directe toegang tot bestanden ook niet toegestaan.
Ik weet het, ik kan een map buiten de publicmap aanmaken hiervoor, maar het is tenslotte een oefening.
Ik geloof niet dat php een php code op een andere server kan uitvoeren. Als dat zo zou zijn dan include je de database connectie gegevens op een andere server en je bent compleet binnen. Lijkt mij niet.
Dat is een beetje vertrouwen in je eigen kunde in veilig programmeren. Dat is natuurlijk goed te voorkomen.
Ik heb daar even over nagedacht. Alle bestanden worden hernoemd en de bestandslink in de database opgeslagen. Overschrijven is niet mogelijk.
Sowieso zijn de bestanden niet direct te benaderen van buitenaf.
Maar ik heb begrepen dat afbeeldingen php code kunnen bevatten, en dus zowel als afbeelding als phpscript geopend kunnen worden. Hoe voorkom je dit dan?
Het wordt echter niet uitgevoerd en ik weet niet zeker waarom. Ik zag ergens op het forum staan dat de readfile functie veiliger is, maar elders stond dat het niet uitmaakt.
[size=xsmall]Toevoeging op 10/02/2012 23:27:42:[/size]
Ik ben benieuwd, is het genoeg om de header zelf in te vullen.
Bijvoorbeeld ik accepteerd alleen jpg bestanden, dus ik vul ook de header in met 'image/jpg'. Kan een eventueel stukje script dan nog steeds geopend worden?
[size=xsmall]Toevoeging op 11/02/2012 00:20:18:[/size]
Ik heb nog het 1 en ander geprobeerd. Maar het "virus" lijkt alleen te openen als ik of het bestand de .php extensie geef (logisch) of als ik bij de readfile() functie geen header opgeef.
Begrijp ik het dan goed dat ik het volgende moet doen:
Mappenstructuur
Toegang weigeren voor iedereen via htaccess of map buiten de public gebruiken.
upload
1: mimetype controleren
2: Als de mime niet is toegestaan dan gelijk weigeren.
3: wel toegestaan: bestand uploaden
4: nieuwe bestandsnaam toevoegen in database met autoid, id gebruiken als bestandsnaam
5: bestand in juiste locatie opslaan, bestand hernoemen(autoid) met juiste extensie
tonen
1: in de pagina een get functie gebruiken die het juiste ID stuurt
2: in de getbestand.php voorkomen dat het binnengekomen ID, code is ipv een ID
3: in de database de juiste locatie ophalen
4: header ('Content-Type;*'); * is juiste mime type invoeren op basis van bestandsnaam
5: readfile(); gebruiken