Ben niet zoon crack met filehandeling.
Maar is dit oke ? of echt razend slecht ?
AndelhofsPHP Code:
<?php
function safe_foto($file) {
$mode = TRUE; // kan gehaald worden uit db-table
$mimetypes = array ("image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif");
$extensions = array(".jpg", ".jpeg", ".gif", ".png");
$max_bytes = (2 * (1024 * 1024)); //maal 1024 bytes, kb, mb, gb, tb, pb, ex
$map_upload = 'uploads/';
$ext = explode(".", $file['name']);
$extentie = $ext[1];
if($mode) {
if(in_array(strtolower($extentie), $extensies) OR in_array($file["type"], $mimetypes) {
if($file["size"] <= $max_bytes) {
if($file["error"]) {
$move = move_uploaded_file($file['tmp_name'], $map_upload . basename($file['name']));
if($move) {
$text = '100';
} else {
$text = '200';
}
} else { $text = '200'; }
} else { $text = '201'; }
} else { $text = '400'; }
} else { $text = '500'; }
return $text;
}
?>
- Verbetering FILE INPUT
-
25-01-2011, 22:23 #1Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
Verbetering FILE INPUT
Laatst aangepast door gast26686 : 26-01-2011 om 20:15
-
-
26-01-2011, 04:05 #2
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: Verbetering FILE INPUT
Het is niet slecht,
wat ik nog zou doen is standaard je extensie erachter zetten, aangezien je nu mimetype image/jpg gebruikt kun je dus zelf bepalen dat de extensie .jpg moet zijn. Er zijn een aantal trucjes om PHP files up te loaden terwijl de mimetypes zeggen dat het jpg/png/gif is bijvoorbeeld.
Zelf gebruik ik altijd een array met daarin de mimetypes als key en de extensies als value, dus:
PHP Code:$types = array(
'image/jpg' => 'jpg',
'image/png' => 'png',
'etc' => 'etc'
);
-
26-01-2011, 07:08 #3
- Berichten
- 751
- Lid sinds
- 15 Jaar
Re: Verbetering FILE INPUT
Hoop niet dat die image upload ook echt live gezet word beide onveilig. Je zou dan nog steeds de minetype van de image kunnen faken en zelfs waarschijnlijk een bestand zoals image.php.jpeg kunnen uploaden. En wanneer je er een null byte achter de .php zet dan zal wanneer move_uploaded_file functie vatbaar is door de null byte de .jpeg eraf halen waardoor je dus ineens een php bestand op de server hebt staan en dan nog mogelijheid twee image injection php tags dus in een image bestand zetten en daar gaat je server kun je net zo goed direct je ftp in dit topic zetten
-
26-01-2011, 12:24 #4Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
Re: Verbetering FILE INPUT
Het is niet slecht,
wat ik nog zou doen is standaard je extensie erachter zetten, aangezien je nu mimetype image/jpg gebruikt kun je dus zelf bepalen dat de extensie .jpg moet zijn. Er zijn een aantal trucjes om PHP files up te loaden terwijl de mimetypes zeggen dat het jpg/png/gif is bijvoorbeeld.
Zelf gebruik ik altijd een array met daarin de mimetypes als key en de extensies als value, dus:
PHP Code:$types = array(
'image/jpg' => 'jpg',
'image/png' => 'png',
'etc' => 'etc'
);
Maar nu krijg ik even bang van wat Mr. Nijland zegt.
Want deze code word natuurlijk nog uitgebreid maal 20.
Je ziet daar een mode staan.
Maar een $max_per_uur_user moet er eigelijk ook nog bij, hoe anders beveilig je hem ook tegen spam van 1 users ?
Maar Mr. Nijland kan u mij dan een voorbeeld geven hoe het volgens u wel moet ?
-
26-01-2011, 12:32 #5
- Berichten
- 730
- Lid sinds
- 17 Jaar
Re: Verbetering FILE INPUT
Controleer altijd de inhoudt en zorg zelf voor het toevoegen van een extensie! dat is mijn tip!
-
26-01-2011, 12:36 #6Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
Re: Verbetering FILE INPUT
Dankje voor je antwoord.
exstentie word geschekt.
Deze gaat naar de map uploads, deze is beveiligd voor inkijken.
Dan word de foto goedgekeurd en gaat hij naar andere map.
Is dat correct ?
-
26-01-2011, 13:15 #7Particulier
- Berichten
- 2.394
- Lid sinds
- 16 Jaar
Re: Verbetering FILE INPUT
Zucht. MIME-types zijn aan te passen door de gebruiker. Nooit op vertrouwen dus.
-
26-01-2011, 13:19 #8Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
-
26-01-2011, 13:45 #9Particulier
- Berichten
- 1.477
- Lid sinds
- 16 Jaar
Re: Verbetering FILE INPUT
PHP Code:$filename = $_FILES["photo"];
// extensie controleren
$extensions = array(".jpg", ".jpeg", ".gif", ".png");
if(!in_array(strtolower(strrchr($filename["name"], ".")), $extensions))
{
$errors[] = "Extensie is niet toegestaan";
}
// mimetype controleren
$mimetypes = array ("image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif");
if(!in_array($filename["type"], $mimetypes))
{
$errors[] = "Mimetype is niet toegestaan";
}
Laatst aangepast door RoyB : 26-01-2011 om 14:36
-
26-01-2011, 14:12 #10Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
Re: Verbetering FILE INPUT
PHP Code:$filename = $_FILES["photo"];
// extensie controleren
$extensions = array(".jpg", ".jpeg", ".gif", ".png");
if(!in_array(strtolower($filename["name"], "."), $extensies))
{
$errors[] = "Extensie is niet toegestaan";
}
// mimetype controleren
$mimetypes = array ("image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif");
if(!in_array($filename["type"], $mimetypes))
{
$errors[] = "Mimetype is niet toegestaan";
}
Nouja hartelijk bedankt allemaal.
-
26-01-2011, 14:14 #11Particulier
- Berichten
- 2.394
- Lid sinds
- 16 Jaar
Re: Verbetering FILE INPUT
http://nl.php.net/strtolower
Je bent nog een explode vergeten, strtolower heeft namelijk maar één parameter..
-
26-01-2011, 14:25 #12Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
Re: Verbetering FILE INPUT
http://nl.php.net/strtolower
Je bent nog een explode vergeten, strtolower heeft namelijk maar één parameter..
Ja ander gaat het niet lukken nee :D
hehe toch fijn dat er mensen zijn in de wereld die andere willen helpen :D
-
26-01-2011, 14:35 #13Particulier
- Berichten
- 1.477
- Lid sinds
- 16 Jaar
Re: Verbetering FILE INPUT
En als je het nog makkelijker wilt maken..
PHP Code:$filename = $_FILES["photo"];
// extensie controleren
$extensions = array(".jpg", ".jpeg", ".gif", ".png");
function check_extension($filename, $extensions)
{
if(!in_array(strtolower(strrchr($filename["name"], ".")), $extensions))
{
$errors[] = "Extensie is niet toegestaan";
return false;
}
return true;
}
// mimetype controleren
$mimetypes = array ("image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif");
function check_mimetype($filename, $mimetypes)
{
if(!in_array($filename["type"], $mimetypes))
{
$errors[] = "Mimetype is niet toegestaan";
return false;
}
return true;
}
Laatst aangepast door RoyB : 26-01-2011 om 14:46
-
26-01-2011, 14:51 #14
- Berichten
- 1.901
- Lid sinds
- 18 Jaar
Re: Verbetering FILE INPUT
Hoop niet dat die image upload ook echt live gezet word beide onveilig. Je zou dan nog steeds de minetype van de image kunnen faken en zelfs waarschijnlijk een bestand zoals image.php.jpeg kunnen uploaden. En wanneer je er een null byte achter de .php zet dan zal wanneer move_uploaded_file functie vatbaar is door de null byte de .jpeg eraf halen waardoor je dus ineens een php bestand op de server hebt staan en dan nog mogelijheid twee image injection php tags dus in een image bestand zetten en daar gaat je server kun je net zo goed direct je ftp in dit topic zetten
Als ik geen database gebruik herschrijf ik ze meestal om naar een timestamp en een random getal of tekenset erachter/ervoor. Maar komt nog maar zelden voor dat ik geen database gebruik voor de foto's.
-
26-01-2011, 14:58 #15Particulier
- Berichten
- 162
- Lid sinds
- 14 Jaar
Re: Verbetering FILE INPUT
Dat is ook weer een reden om zelf de bestandsnaam te veranderen. Ik laat zo nooit de originele benaming in de files staan, dan krijg je de grootste onzin in je mapje op de server. Liever iets herkenbaars, bij een website met een ledensysteem simpelweg ID_FOTOID_RAND(), zo blijft het in elk geval herkenbaar.
Als ik geen database gebruik herschrijf ik ze meestal om naar een timestamp en een random getal of tekenset erachter/ervoor. Maar komt nog maar zelden voor dat ik geen database gebruik voor de foto's.
foto word hernoemd naar [id]-[timestamp].[exstentie] eerst in map uploads dan andere map als ze goedgekeurd zijn.
Aanvullend bericht:
Update
Heb dat ding aangepast, beter zo ?Laatst aangepast door gast26686 : 26-01-2011 om 20:14 Reden: Automatisch samengevoegd.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic