veiligheid van upload

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arnold C

Arnold C

19/10/2009 12:39:00
Quote Anchor link
Hallo mensen,

Is dit onderstaande scriptje veilig? (of veilig genoeg). Ik kan het eigenlijk onvoldoende beoordelen.

Ik wil de inhoud van een csv -bestandje in een array stoppen. Daarna kan ik met die array aan de slag.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
function upload() {
        
            $sFout = '';
            $sFilename = $_FILES['file']['name'];
            $sExt = substr($sFilename, strpos($sFilename, '.'), strlen($sFilename) - 1);
            
            if ($_FILES["file"]["type"] <> "text/plain") {
                $sFout .= 'Het bestand is geen text-bestand.';
            }

            if ($_FILES["file"]["size"] > 20000) {
                $sFout .= 'Het bestand mag niet groter zijn dan 20kb.';
            }

            if ($_FILES["file"]["error"] > 0) {
                $sFout .= 'Het systeem meldt foutcode: "' . $_FILES["file"]["error"]. '"';
            }

            if ($sExt == "csv" || $sExt == "txt") {
                $sFout .= 'Het bestand mag geen andere betandsextensie hebben dan .csv of .txt.';
            }

            if ($sFout <> "") {
                echo '<br/>Er is iets foutgegegaan.<br/>' . $sFout;
            }
else {
                echo 'Upload: ' . $_FILES["file"]["name"]. '<br />';
                echo 'Type: ' . $_FILES["file"]["type"]. '<br />';
                echo 'Size: ' . ($_FILES["file"]["size"] / 1024) . ' Kb<br />';
                echo 'Stored in: ' . $_FILES["file"]["tmp_name"] . '<br/>';
                
                $handle = fopen($_FILES["file"]["tmp_name"], "r");
                while (($aData = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    if (!(current($aData) == "" && count(array_unique($aData)) == 1)) {
                        while (end($aData) == "") {
                            array_pop($aData);
                        }

                        $aArray[] = $aData;
                    }
                }

                fclose($handle);
                tabel(1,$aArray);
            }
        }

?>
Gewijzigd op 01/01/1970 01:00:00 door Arnold C
 
PHP hulp

PHP hulp

21/11/2024 19:58:04
 
Arnold C

Arnold C

20/10/2009 23:25:00
Quote Anchor link
Hallo luitjes,

Ik doe ff een bump: ik wil heel graag weten hoe jullie de veiligheid van zo'n upload beoordelen........
 
Arnold C

Arnold C

23/10/2009 15:32:00
Quote Anchor link
Iemand?
 
Jelmer -

Jelmer -

23/10/2009 16:16:00
Quote Anchor link
Je checkt niet op het laatste stukje extensie. Bijvoorbeeld, test.txt.php zou door jouw extensie-controle heenkomen.

Mimetype kan je vervalsen, omdat dat door de browser bedacht wordt. Het is een goeie check om ervoor te zorgen dat iemand niet per ongeluk een plaatje upload, maar het is geen beveiliging :)

Resultaat: Ik zou een PHP-script kunnen uploaden.

Maar je slaat dat wat ik upload niet direct op. Dus ervan uitgaande dat je $aArray veilig verwerkt maakt het niet uit wat er geüpload wordt, het is geen beveiligingslek.
 
Mark L

Mark L

23/10/2009 16:23:00
Quote Anchor link
Kijk ook eens naar de reacties op dit recente topic:
Klikje();
 
Michael -

Michael -

23/10/2009 18:57:00
Quote Anchor link
Ik wil hier even op reageren. Ben even een controle aan 't proberen met breedte en hoogte voor 't uploaden van afbeeldingen. Als het echt een afbeelding is moet het natuurlijk ook een breedte en hoogte hebben. Maar het volgende werkt niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$size
= getimagesize($ftemp);
$width = $size[0];
$height = $size[1];
?>


want als het dan geen afbeelding is, maar een tekst bestand met jpg als extensie krijg je deze melding:
Notice: getimagesize() [function.getimagesize]: Read error!
Hoe kan je deze melding opvangen?
 
Eddy E

Eddy E

23/10/2009 19:06:00
Quote Anchor link
Probeer dit eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if(getimagesize($ftemp))
 {

 list($width, $height) = getimagesize($ftemp);
 }

?>
 
Michael -

Michael -

23/10/2009 19:16:00
Quote Anchor link
@Eddy bedankt voor je reactie. Ook dit levert gewoon de notice Read Error.
Edit: En nog gefeli met je 1000e post ;-)
Gewijzigd op 01/01/1970 01:00:00 door Michael -
 
Arnold C

Arnold C

23/10/2009 20:26:00
Quote Anchor link
@Miloan: dank, die had ik inderdaad meegelezen. Ik ga die finfo_file inbouwen.

@Jelmer & @Miloan: dat zou dan toch ook test.txt.php 'tegen moeten houden'?

@Jelmer: helemaal nog niet aangedacht......natuurlijk $aArray goed controleren. Dank!
 
Emmanuel Delay

Emmanuel Delay

23/10/2009 22:58:00
Quote Anchor link
Dit is handig om extensies te controleren
pathinfo

list( $dirname, $basename, $extension, $filename ) = pathinfo($file);
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
Arnold C

Arnold C

08/11/2009 12:55:00
Quote Anchor link
Zoals hierboven aangegeven wil ik graag finfo_file gebruiken. Ik krijg het maar niet aan de praat. Het voorbeeld hieronder heb ik gekopieerd van php.net:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$finfo
= finfo_open(FILEINFO_MIME, "test.csv"); // return mime type ala mimetype extension

if (!$finfo) {
    echo "Opening fileinfo database failed";
    exit();
}


/* get mime-type for a specific file */
$filename = "/usr/local/something.txt";
echo finfo_file($finfo, $filename);

/* close connection */
finfo_close($finfo);
?>


Ik krijg echter de foutmelding dat ik een undefined function aanroep: Call to undefined function finfo_open() in .....

iemand een idee waar het misgaat?
 
Jelmer -

Jelmer -

08/11/2009 13:06:00
Quote Anchor link
Fileinfo zit pas standaard in PHP sinds 5.3, en ik denk niet dat jouw webserver al 5.3 draait. (Het zit ook wel in PECL, maar dan moet je het handmatig installeren, en bij shared hosting is dat zelden mogelijk)
 
- Ariën  -
Beheerder

- Ariën -

08/11/2009 13:06:00
Quote Anchor link
De PECL extentie is niet geladen, of je hebt nog geen PHP 5.3.0. of >
 
Arnold C

Arnold C

08/11/2009 13:16:00
Quote Anchor link
Das balen! Want mijn huidige MAMP heeft 5.2.6 en de meest recente versie die je bij MAMP kan downloaden is 5.2.10.....

Iemand bekend met een pakket dat net zo eenvoudig is te installeren als MAMP en toch de PHP 5.3.0 draait?
 



Overzicht Reageren

 
 

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.