Simpel Upload Script (met EXSTENSIE controle XD)

Door Wouter DS, 13 jaar geleden, 12.521x bekeken

Veel beginnende php programmeurs hebben wel wat moeite met upload scripts, dit is voornamelijk omdat ze enctype="multipart/form-data" vergeten in hun form tag te plaatsen maar ook controles gaan meestal niet zo vlot in het begin. Zelf moet ik nu de gevolgen dragen van een fout van mij (van een aantal jaar geleden) in een upload script om niet op extensie's te checken, bij deze plaats ik hier nu een zelf gescripted veilig upload script met een duidelijke config met de opties voor maximale grootte en extensies en upload folder in te stellen. Ook heb ik zoveel mogelijk comments geplaatst zodat beginnende programmeurs goed kunnen zien wat ik doe.

Bij deze enjoy.

Vergeet niet de uploadmap te chmodden en laat aub de copyright in het script staan. Deze kan toch niet door het publiek bekeken worden.

Voorbeeld: http://paradox-productions.net/upload-project/upload.php

Gesponsorde koppelingen

PHP script bestanden

  1. simpel-upload-script-met-exstensie-controle-xd

 

Er zijn 25 reacties op 'Simpel upload script met exstensie controle xd'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Max S
Max S
13 jaar geleden
 
0 +1 -0 -1
Hé bedankt, ik zie dat het werkt!
Mooi script!
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
Héhé, np ^^!
Michael -
Michael -
13 jaar geleden
 
0 +1 -0 -1
Paradox, je script is nog steeds niet veilig.
Ik heb een text bestandje hernoemt naar jpg en hij upload 'm gewoon terwijl het geen plaatje is.
Je moet niet alleen controleren op extensie maar ook controleren op de headers. Zo kan ik dus alsnog een script uploaden met een jpg extensie.

http://paradox-productions.net/upload-project/uploads/e73fecc08ee9b0e1a876614ec3178bac.jpg
Dit is dus geen plaatje
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
@ Turmin; Who cares? Als je een php bestand een png extensie geeft kan je het niet meer laten uitvoeren hoor, je zal gewoon de waarschuwing krijgen in je browser dat er fouten in het plaatje zitten ofzo..
Timen kut
Timen kut
13 jaar geleden
 
0 +1 -0 -1
Was jou site niet gehacked door zulke onveilige situaties Paradox?

je moet de zooi echt wel controleren op z'n header...
een naam.txt.jpg krijgt dan geen toestemming als image.
Max S
Max S
13 jaar geleden
 
0 +1 -0 -1
@ Timen, krijgt ie dan wel toestemming als txt of krijgt ie gewoon helemaal geen toestemming?
Ik zou eigenlijk wel een tutorial of een ander script willen zien met die headers dan...
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
Das nu is echt de grootste zever die er is eh :s, niet mijn probleem als er plaatjes worden geupload die geen plaatjes zijn. Een php/cgi/asp bestand met als extensie .PNG kan onmogelijk schade toebrengen of eender welke manier, het plaatje zal gewoon niet laden aangezien het geen plaatje is.
Michael -
Michael -
13 jaar geleden
 
0 +1 -0 -1
Ga zo door Paradox.
Als je nou echt iets veiligs wilt maken, doe het dan ook goed. Controleer gewoon op het mime-type.
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
@ Turmin; dat is een png die met php geforced wordt tot download lijkt mij zo, wanneer ik de afbeelding edit krijg ik normale code van een png afbeelding zoals andere png afbeeldingen en wanneer ik de afbeelding open zie ik wat zwarte en blauwe cijfertjes

Upload jij maar eens een afbeelding via m'n upload script en doe eens iets wat "niet mag" zoals iets anders uit die dir verwijderen of wat dan ook.. Je kan er niets mee geef het gewoon toe =)!


EDIT
Ok heb wat gegoogled en wat rond gevraagd, sommige servers nemen enkel .php (bv blaat.php.gif) en dan zou dit idd een mogelijk risico vormen, op mijn server is dit niet het geval maar zal eens kijken naar controle op de headers =), goed?

EDIT2
Ga het met strstr() oplossen, zo gebeurd. Wanneer er php in de bestandsnaam gedetecteerd wordt zal het uploaden ook mislukken.

EDIT3
Ziezo, nu kan je op geen enkele manier op geen enkele server nog dingen uploaden die een mogelijk risico zouden kunnen vormen.
Aaa Trump
aaa Trump
13 jaar geleden
 
0 +1 -0 -1
Die random name ruikt naar poep.
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
Waarom XP? Zit er gewoon in omdat je dan nooit op de naam hoeft te checken :p, kan je er gemakkelijk uithalen als het je niet aan staat =)
Michael -
Michael -
13 jaar geleden
 
0 +1 -0 -1
Paradox, die afbeelding stond op een forum en je ziet dat er een alert in een gif wordt gezet (stond ook bij de topic). Waarom die cijfertjes weet ik ook niet. Waarom je dan naar weer gaat werken met strstr snap ik niet. Als je gewoon de headers controleert ipv alleen de extensie, is het opgelost en veiliger. Zeggen ze wel is dat je eigenwijs bent?

Edit:

Ik het even na gevraagd en het is inderdaad niet zomaar mogelijk om scripts uit te voeren, alleen door het gebruik van bugs. Alsnog moet je gewoon op het mime-type controleren voor alle veiligheid en niet moeilijk doen met strstr en allerlei extra's.
Is toch jammer dat je scripts plaats, maar niets wilt doen om het helemaal veilig te maken.
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
LOL!
Die kerel heeft waarschijnlijk gewoon iets in die aard gedaan
<img src="blablabla.png" onmouseover="alert('idioot')" />

Als ik van nog minimum 2 mensen hoor dat extensiecheck niet goed is zal ik misschien eens overwegen maar jouw mening alleen voldoet niet voor mij en web developers met 20 jaar ervaring in php/js zeggen ook dat een extensie check goed genoeg is dus waarom zou ik speciaal voor jou omdat jij dit niet goed vindt een check op de headers gaan inbouwen die 10x zo veel werk vraagt en geen meerwaarde aan het script levert


Edit
Jullie hebben gelijk, mijn excuses.
TJVB tvb
TJVB tvb
13 jaar geleden
 
0 +1 -0 -1
Paradox, het uploaden van "foute" bestanden via dit soort script kan vaak een hulpmiddel zijn voor het gebruiken van andere lekken.
Bijvoorbeeld een include script wat te ge/misbruiken is om de zogenaamde afbeeldingen uit te voeren. Een include(' nietechtplaatje.png'); werkt namelijk gewoon.
Dat is dan ook een reden om wel op mimetype te checken

En om het nu belachelijk te maken wat andere voor op en aanmerkingen hebben over de veiligheid vindt ik niet echt gepast.

Maar om het simpel te houden, het is 1 van de vragen die we krijgen bij een security audit. Als het geheel niet belangrijk was zouden ze het ook niet vragen (en bij de automatische testen krijgen we er ook wel wat pogingen van)
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
Edit
Jullie hebben gelijk, mijn excuses.
TJVB tvb
TJVB tvb
13 jaar geleden
 
0 +1 -0 -1
Ik zeg niet dat het nutteloos is, maar als je het verkondigd dat het veilig is en er dan nog een mogelijkheid voor misbruik inzit moet je dat kunnen hebben. Had je dat niet gezegd dan was er verder geen probleem.
Het is verder geen slecht script, alleen niet 100% veilig (al krijg je niks 100% veilig)
Thijs X
Thijs X
13 jaar geleden
 
0 +1 -0 -1
@Paradox,

Wat is dat voor kinderachtige reactie?
Je krijgt feedback op een script dat je hier plaatst over hoe je het kan verbeteren..
Om op alleen een extensie te controleren is gewoon niet veilig, je kan simpel weg gewoon het MIME type achterhalen van het bestand.
Iltar van der berg
iltar van der berg
13 jaar geleden
 
0 +1 -0 -1
* stemt voor bepaalde eisen aan scripts die gepost word *
SXForce
SXForce
13 jaar geleden
 
0 +1 -0 -1
Hmm,

Dat controleren is bij dit script misschien wel handig, maar niet 100% nodig. Als je echt beveiliging wilt, bouw dat dan zelf in... Ik heb op mijn website ook geen check op headers (wel op extensie) maar het voordeel van mijn website is dat je NOOIT weet waar het bestand nou eigenlijk heen wordt geupload. :P

De link ziet er zo uit:
http://www.glorb.nl/downloads/getfile.php?f=mijnbestand.ext

Ook kan het bestand nooit worden uitgevoerd omdat hij via die link meteen een force-download doet.

Miss is dat een idee als je beveiliging wilt, een force-download. ;)
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
Hier weet je dat ook niet perse, je moet maar 1 regel verwijderen? Heb er gewoon bij gezet voor de duidelijkheid om te tonen dat het werkt..
FireFlame
FireFlame
13 jaar geleden
 
0 +1 -0 -1
Wanneer ik een bestand upload krijg ik het volgende probleem.

/lol/. http://nanana/lol/uploads/

Nu wil ik weten waarom krijg ik /lol/. voor mijn url?
Verwijder Account
Verwijder Account
13 jaar geleden
 
0 +1 -0 -1
Je heb in comments:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
!! DON'T FORGET TO CHMOD THE UPLOAD FOLDER TO 0777


maaruh je kan CHModden: http://nl2.php.net/manual/en/function.chmod.php
Wouter DS
Wouter DS
13 jaar geleden
 
0 +1 -0 -1
@ Fire, staat je script in de map lol?
Karl Karl
Karl Karl
13 jaar geleden
 
0 +1 -0 -1
if(!strstr(strtolower($fname), "php")) {
Das wel kut, nu kan je ook geen bestand uploaden met de naam "php server status.png" ofzo.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jesper Diovo
Jesper Diovo
13 jaar geleden
 
0 +1 -0 -1
Overigens is php niet de enige taal waar je iets mee kan aanrichten op jouw webserver door een onveilig upload script ;-).

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. simpel-upload-script-met-exstensie-controle-xd

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.