Momenteel ben ik bezig met een nieuwe upload script voor afbeeldingen, waarbij het ook de bedoeling is dat er een watermerk of te wel het logo van de site reacht in de hoek word getoont bij de afbeelding.

Uploaden werkt wel, alleen op de ene wordt het watermerk niet getoond (wup.ni) en krijg ik diverse errors en bij de andere website gaat dit wel gewoon goed (NK). Graag zou ik willen vragen of iemand weet waar het probleem aan kan liggen, hieronder staan diverse links met daarop de scripts en het phpinfo file.

WuP.nu:
http://www.wup.nu/avatar2.php
http://www.wup.nu/avatar2.rar
http://www.wup.nu/info.php


NK:
http://www.nightking.nl/avatar2.php
Ik heb een file geupload genaamd lol.php.jpg, ik krijg een heeeeeeeeleboel fouten, controleren op MIMEtype dus en niet alleen op extensie.
Hey Jurgen, dank voor het kijken. maar die mimetype is toch meer voor als je het wilt beperken tot een bepaald bestand. in het vorige script stond tie er wel in dus er in zetten zou niet zo moeilijk moeten zijn. maar dit is meer voor de veiligheid lijkt me. Want als voor het testen een gewone afbeelding gebruikt bijvoobeeld een JPG dan slaat hij deze wel op en kan ik hem ook gewoon openen. (het bestandje van jou lol.php.jpg die kan ik niet openen).
Dat komt omdat het geen JPG was, en dat is gevaarlijk.

De inhoud van lol.php.jpg was

<?php

echo phpinfo();

?>

maar ik kon er ook in zetten

<?php

exec('kill all'); //geen idee of dit goed werkt, ligt er aan of je Linux of Windows gebruikt

?>

Met andere woorden, je server wordt afgesloten, en dat vinden ze niet leuk bij je host, als dit eventueel mogelijk is. Ook is het via dit soort geintjes mogelijk om jou gehele /home/(username) map te wissen(jou root map dus)
Aj jah dat zou inderdaad een heel slecht teken zijn zal gelijk ook ff die MIMEtype er in zetten
ik heb die MIMEtypoe toegevoegd op regel 145, maar als ik dat doet kan ik niet eens een jopg meer uploaden... waarschijnlijk doe ik iets verkeerd...


Dit is wat ik er wachteraan voor me afsluitende haakje hevt toegevoed

&& $_FILES['upload']['type'] == "image/jpeg" || $_FILES['upload']['type'] == "image/pjpeg" || $_FILES['upload']['type'] == "image/gif" || $_FILES['upload']['type'] == "image/bmp" || $_FILES['upload']['type'] == "image/gif")

totale if functie is nu:

if(isset($_POST['submit']) && $_FILES['userfile']['size'] <= $maxkb &&
!file_exists($path . $_FILES['userfile']['name']) &&
$_FILES['userfile']['size'] &&
is_uploaded_file($_FILES['userfile']['tmp_name']) &&
(strtolower(substr($_FILES['userfile']['name'], -3)) == "jpg" || strtolower(substr($_FILES['userfile']['name'], -4)) == "jpeg") && $_FILES['upload']['type'] == "image/jpeg" || $_FILES['upload']['type'] == "image/pjpeg" || $_FILES['upload']['type'] == "image/gif" || $_FILES['upload']['type'] == "image/bmp" || $_FILES['upload']['type'] == "image/gif")
{
Het beste is om de 1e zoveel bytes van een file te checken, dit zijn de file headers, als die niet overeenkomen met bijv jpg of gif, niet accepteren, er staat op deze site ook een tutorial van ergens.
Achjah:
Php.net
$_FILES['userfile']['type']

The mime type of the file, if the browser provided this information. An example would be "image/gif". This mime type is however not checked on the PHP side and therefore don't take its value for granted.

Zie en zie.
Ja, dat is wat ik bedoelde, enige veilige manier is denk ik bytes checken.
hmm hier moet ik nog eventjes voor zitten, want dit zijn functies waar ik normaal nooit echt mee speel of ik moet ze in me scripts hebben staan.

Reageren