[php]Image upload script

Pagina: 1
Acties:

  • itsme
  • Registratie: Februari 2000
  • Niet online
Ik heb een image upload script geschreven voor mijn website.
Het is de bedoeling dat dit een publiek toegankelijk middel is, er komt dus GEEN password beveiliging in.

Nu moet het script echter wel veilig zijn.

Het script staat nu op mijn server en volgens mij zijn de bugs er uit :)

Om nu toch een beetje beveiliging te doen heb ik het volgende gedaan:

1. Alleen jpg en gif bestanden kunnen worden geupload
2. De maximale bestandgrote is 300 KB
3. Deleten van files kan niet standaard (later daarover meer)
4. Bestanden kunnen niet worden overschreven.

Is dit voldoende of zie ik nu iets gigantisch over het hoofd?

Delete rechten krijg je als je achter index.php een vraagteken ( ? ) en dan t juiste commando met variable achter plakt. Welke dat is zeg ik dus niet ;)
Is dit een veilige methode?

Als t goed werkt zal ik t script ook ter download aanbieden ;)

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

't Is natuurlijk niet de bedoeling dat je mensen hier opdraagt jouw site te testen.
Dat valt gewoon onder het mom 'sitecheck' wat we weer niet willen.

Discussie puntjes is prima.
Ik zou trouwens ook png acccepteren en check dan niet alleen de extentie.

Die delete rechten zou ik toch even iets anders oplossen (met een login ofzo) want _als_ iemand die string weet te achterhalen...

  • itsme
  • Registratie: Februari 2000
  • Niet online
Goed ik verwijder de link ff, maar graag wel commentaar op de "beveiliging".

PNG ook zeg je, hmm ik zal er eens ff naar kijken, dat met niet al te moeilijk toe te voegen zijn :)

Maar wat wil je dan nog meer checken dan t file type? JPG en GIF kunnen in elk geval geen scripts triggeren op de server dat moet dan toch voldoende zijn?

Dat login is idd wel verstanding, moet ik even over nadenken hoe dat te realiseren, ik denk dat dat een andere pagina word voor de admin :)

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


Verwijderd

"Ik heb geheime zooi op mijn computer staan. Als ik weet dat de narcs op mijn pc aan het zoeken zijn naar zooi dan kan ik ergens anders vandaan op een bepaalde poort naar m'n PC connecten en dan ontploft ie. Welke poort dat is zeg ik lekker niet. Is dit een goede manier?" :)

Sorry voor mijn loze bijdrage :)

Simpelste manier, maak een form met daarin bijvoorbeeld
<INPUT TYPE="hidden" NAME="command" VALUE="delete">
zodat je weet wat je wilt doen
en nog een passwordfield ofzo
<INPUT TYPE="password" NAME="password">
zodat je weet dat je het mag doen

moet je alleen de file nog kunnen selecteren.

en dan doe je in je script
PHP:
1
<?if( $_POST['password'] ) == "bla" &amp;&amp; $_POST['command'] == "delete" ){   // boot that file..}?>

  • Stewie!
  • Registratie: September 2001
  • Laatst online: 11:56

Stewie!

Keen must die!

Op dinsdag 18 juni 2002 12:05 schreef its_me het volgende:
BLAdeBLA

Is dit voldoende of zie ik nu iets gigantisch over het hoofd?
Ja
Delete rechten krijg je als je achter index.php een vraagteken ( ? ) en dan t juiste commando met variable achter plakt. Welke dat is zeg ik dus niet ;)
Is dit een veilige methode?
nee, want als ik dan eenmaal iets heb verwijderd, dan weet ik precies hoe ik andere files ook kan verwijderen! Let er dan ook op dat mensen alleen iets kunnen verwijderen met een $_POST vanaf jouw server ofzo, werkt stukken beter. Anders krijg je van die mensen die met ../bla.bla ofzo gaan werken, en dat weil je nie hebben he :P


Strava: https://www.strava.com/athletes/149347154


  • itsme
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 18 juni 2002 12:25 schreef fladder het volgende:

Simpelste manier, maak een form met daarin bijvoorbeeld
<INPUT TYPE="hidden" NAME="command" VALUE="delete">
zodat je weet wat je wilt doen
en nog een passwordfield ofzo
<INPUT TYPE="password" NAME="password">
zodat je weet dat je het mag doen

moet je alleen de file nog kunnen selecteren.

en dan doe je in je script

...
Deleten gaat nu zo:
PHP:
1
<?if ($1337commando == "delete") { unlink($file); }?>
Op dinsdag 18 juni 2002 12:26 schreef DaMorpheus het volgende:

[..]

nee, want als ik dan eenmaal iets heb verwijderd, dan weet ik precies hoe ik andere files ook kan verwijderen! Let er dan ook op dat mensen alleen iets kunnen verwijderen met een $_POST vanaf jouw server ofzo, werkt stukken beter. Anders krijg je van die mensen die met ../bla.bla ofzo gaan werken, en dat weil je nie hebben he :P
Je kunt niet deleten, alleen iemand die de string weet kan dat, standaard heb je die functie NIET.

Om te kunnen deleten moet je dmv een ?adminstring de file openen, je ziet dan bij de files een prullenbakje :) als je daar op klikt verwijderd ie de file :)

Een directory omlaag gaan is idd niet de bedoeling, anders deleten ze mn index.php >:)

Hmm minder, dat werk nu dus idd.

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


  • Stewie!
  • Registratie: September 2001
  • Laatst online: 11:56

Stewie!

Keen must die!

Op dinsdag 18 juni 2002 12:30 schreef its_me het volgende:

[..]

Je kunt niet deleten, alleen iemand die de string weet kan dat, standaard heb je die functie NIET.
maar als iemand er achter komt, ben je de zak :D


Strava: https://www.strava.com/athletes/149347154


  • itsme
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 18 juni 2002 12:40 schreef DaMorpheus het volgende:

[..]

maar als iemand er achter komt, ben je de zak :D
Dat valt wel mee, ik maak regelmatig en backup :)

Maar idd moet ik een elegantere oplossing maken. Ook hoef ik me dan niet druk te maken over een directory lager kunnen deleten (is overigens wel makkelijk te blokkeren, gewoon .. afvangen).

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


Verwijderd

Op dinsdag 18 juni 2002 12:42 schreef its_me het volgende:

[..]

Dat valt wel mee, ik maak regelmatig en backup :)
backups telkens terugzetten word je echt wel zat na een paar keer. :P
(is overigens wel makkelijk te blokkeren, gewoon .. afvangen).
en wat als $file nu iets is als: /usr/local/apache/conf/httpd.conf of /home/web/weetikveelikverzinookmaarwat...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Als je er trouwens voor zorgt dat de upgeloade bestanden altijd een gif, jpeg of png extensie hebben kunnen ze nog zoveel virus executables uploaden als ze willen, maar kunnen er geen schade mee aanrichten. Waneer iemand de url wil openen zal de webserver altijd een image content header meesturen waardoor er in het ergste geval een kruisje te zien is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Op dinsdag 18 juni 2002 12:30 schreef its_me het volgende:
Welke dat is zeg ik natuurlijk niet
[..]

Deleten gaat nu zo:
PHP:
1
<?if ($1337commando == "delete") { unlink($file); }?>

[..]
whoei, nu kunnen we alle files weggooien >:)

ik weet niet precies hoe je de files controleert op het gif, jpg of png zijn, maar ik zou het met de mime_type doen ($_FILE['userfile']['type']), dit lijkt me betrouwbaarder dan de extensie controleren...

just my 2 cents :)

  • itsme
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 18 juni 2002 13:30 schreef jurriebur het volgende:

[..]

whoei, nu kunnen we alle files weggooien >:)
Nee hoor, ik heb de stringetjes veranderd ;)
ik weet niet precies hoe je de files controleert op het gif, jpg of png zijn, maar ik zou het met de mime_type doen ($_FILE['userfile']['type']), dit lijkt me betrouwbaarder dan de extensie controleren...

just my 2 cents :)
Ah ik snap m ;)

Toevallig doe ik dat al :)
Was ik idd vergeten te vermelden, ik ging er vanuit dat dat ook werkte door te kijken naar de letters achter de .

substr($file, -3) doe ik alleen om te kijken of ik een thumbnail moet echo'en of niet (jpg files krijgen een thumbnail, gif niet :) )
PHP:
1
<?if ($downfiletype != $file_type &amp;&amp; $downfiletype2 != $file_type ){die("$downerrortype<p><A HREF='index.php' TARGET='_self'>Ok</A>");}?>

Ik moet dus een admin login php script maken (eitje :) )
en als in de unlink $file .. staat gewoon niet uitvoeren. Moet te doen zijn lijkt me :)

Ook is t idd beter om het unlink commando dan hidden mee te sturen, al is dat niet zo heel relevant meer :)

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


  • _.Luke._
  • Registratie: September 2001
  • Laatst online: 26-07-2021
Euh... GIF... dat kan toch niet meer ik dacht dat Compuserve daar een halt toe had geroepen..???

Trying is the first step towards faillure...


  • Cardinoz
  • Registratie: Juli 2001
  • Laatst online: 21-10-2017
Op dinsdag 18 juni 2002 15:16 schreef _.Luke._ het volgende:
Euh... GIF... dat kan toch niet meer ik dacht dat Compuserve daar een halt toe had geroepen..???
Het wordt anders nog wel gewoon gebruikt voor kleine knopjes op sites ofzo.

  • itsme
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 18 juni 2002 15:16 schreef _.Luke._ het volgende:
Euh... GIF... dat kan toch niet meer ik dacht dat Compuserve daar een halt toe had geroepen..???
Haal dat icon van jouw dan eens heel snel weg !!! >:) :+

Ik heb een probleem, login gaat fijn, is mooi beveiligd :)
Maar hoe controleer ik of iemand een file wil deleten die niet in de upload directory staat?

Als ik .. zie in de delete string dan moet er niets gebeuren, maar dan moet ik wel .. in de string kunnen vinden, ik heb alleen geen idee hoe :?

Dit heb ik gevonden:
PHP:
1
<?if (preg_match ("/../i", $string)) {     echo "string contains punten"; } else {    print "A match was not found.";}?>

Maar dat werkt dus niet :(

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Op dinsdag 18 juni 2002 15:44 schreef its_me het volgende:
[..]
Dit heb ik gevonden:
PHP:
1
<?if (preg_match ("/../i", $string)) {  echo "string contains punten";} else {  print "A match was not found.";}?>

Maar dat werkt dus niet :(
Deze regexp matcht ook precies 2 tekens.. AA zou goed zijn.. Wat je wil is preg_match("/\.\./i", $string)

[edit]Layout f*ckup[/edit]

  • itsme
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 18 juni 2002 15:48 schreef elviver het volgende:

[..]

Deze regexp matcht ook precies 2 tekens.. AA zou goed zijn.. Wat je wil is preg_match("/\.\./i", $string)

[edit]Layout f*ckup[/edit]
Woei!

Mijn dank is groot :* :)

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"

Pagina: 1