• Home
  • Forum
  • Fare Web
  • PHP

[PHP] upload di file in cartella e sua sicurezza

  • Creatore Discussione Creatore Discussione VAik
  • Data di inizio Data di inizio 27 Set 2016
Prec.
  • 1
  • …
  • 4
  • 5
  • 6
  • 7
Succ.
Primo Prec. 6 di 7 Succ. Ultimo

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #101
Eccomi...

Prove effettuate su 3 internet browser differenti "Firefox", "Chromium" e "Opera" tutti aggiornati all'ultima versione disponibile.

Le prove le ho effettuate su 11 test (nello stesso ordine) incrociando alcuni file e le proprie estensioni tra reali e FAKE.

Il risultato è che ci sono alcune differenze tra i vari browser anche se poche a dir la verità ma, secondo me importanti dati i risultati ottenuti.

Vi posto la tabella riassuntiva.
(click sull'immagine per ingrandirla).

 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #102
Mi sa che se non sarà risolvibile, opterò per una soluzione più semplice, accettando solo jpg, png, stl e igs e magari con due script differenti e isolati richiamati da due pulsanti separati, uno per gli sketch (jpg, png) e l'altro per i file 3D (.stl, igs). Peccato però per i 3dm
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 15 Dic 2016
  • #103
ciao
vedo dalla tabella che hai fatto che in funzione del browser i vari finfo possono essere diversi
dai un occhio qui
http://php.net/manual/en/function.get-browser.php
e in funzione del bw fai un array diverso
qui l'esempio citato nel manuale
PHP:
<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";
$browser = get_browser(null, true);
print_r($browser);
?>
quindi (schematizzo)
PHP:
switch($browser){
    case "MOZZILLA": $allowed_type = array( adatti a mozzilla);
    break;
    case: "IE":  $allowed_type = array( adatti a ie);
    break;
    //ec...
    default: echo "browser sconosciuto";
    brea;
}
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #104
Ho usato l'ultima funzione che ha passato Marino51.
Ora guardo e cerco di capire quello che hai appena postato tu.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 15 Dic 2016
  • #105
ciao
scusa volevo indicare quello che hai nella colonna browser dove es per il primo cubo.stl hai esempio per
firefox = application/vista
e per
cromiunu =application/octet-stream
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #106
Dunque dovrei inserire la pare di codice schematizzata e inserire tutti i browser (almeno i più utilizzati)?
Quindi:
Firefox
Chrome
IE Explorer
Opera
e
Safari
almeno per coprire buona parte degli utenti, che tra l'altro molti usano Mac per la grafica, quindi quasi sempre Safari (che io non ho).
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 15 Dic 2016
  • #107
ciao
mi sa che si anche se il lavoro è certo una bibbia perche evidentemente ogni bw può darti per lo stesso file una risposta diversa
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #108
Allora forse è meglio limitare alle 4 estensioni che citavo prima in due sezioni separate per limitare rischi.
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #109
l'obiettivo è la sicurezza, non la si ottiene certo usando le informazioni che provengono dal browser perché facilmente camuffabili,
ci sono articoli in quantità sull'argomento
la via migliore è sicuramente utilizzare le analisi di php che identificano i contenuti,
dalla tabella pubblicata, nelle relative colonne, l'informazione è totalmente assente,
ciò mi fa pensare che per php 7 sia necessario approfondire il funzionamento di finfo, probabile che sia cambiato qualcosa rispetto alle versioni precedenti, per esempio alla riga 4, un file jpg, non viene riconosciuto, assurdo
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #110
Si infatti come dicevo qualche post fa, con la versione 7.0 di php sembra abbiano lavorato molto sul versante della sicurezza, ma sinceramente non sono così esperto da capire cosa abbiano modificato.
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #111
per cortesia, sostituisci queste righe, senza altre modifiche e riprova 1 solo "assurdo"
PHP:
    $file_name = $_FILES["fileToUpload"]["name"];             // nome originale del file
    $file_type = strtolower($_FILES['fileToUpload']['type']); // tipo
    $file_size = $_FILES['fileToUpload']['size'] / 1024;      // dimensione in kB
    $file_temp = $_FILES['fileToUpload']['tmp_name'];         // file temporaneo, path e nome assegnato dall'upload
    $file      = $file_path.$file_name;                       // path di destinazione e nome originale del file
may be ....
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #112
Posso provare domattina, ora sono al lavoro
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #113
ok attendo con ansia, ma il neurone ancora attivo mi ha ricordato gli unix trascorsi, dove i nomi dei file con maiuscole avevano un senso, a differenza di Windows, quindi niente di più deleterio di uno string to lower !
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #114
E non solo, anche gli spazi nei nomi dei file non esistevano e ancora oggi danno alcune noie
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #115
ebbene si (aggiungeremo un controllo per evitarli ....)
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #116
ho eliminato i controlli non necessari, aggiunto il controllo sugli spazi (che volendo si potrà disattivare)
meglio fare i nuovi test con,
PHP:
function GestisciUpload($file_path = "models/")
{
    $allowed_type = array
    (
        'application/acad',
        'application/dxf',
        'application/iges',
        'application/sla',
        'application/vnd.ms-pki.stl',
        'application/x-navistyle',
        'image/gif',
        'image/jpeg',
        'image/pjpeg',
        'image/png',
        'image/vnd.dwg',
        'image/x-dwg',
        'model/iges',
        'x-world/x-3dmf',
    );

    $UploadErrors = array
    (
        'There is no error, the file uploaded with success',
        'The uploaded file exceeds the upload_max_filesize directive in php.ini',
        'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
        'The uploaded file was only partially uploaded',
        'No file was uploaded',
        'Missing a temporary folder',
        'Failed to write file to disk',
        'A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help',
    );

    $err = $_FILES['fileToUpload']['error'];
    if ($err > 0 )
    {
        echo "ERRORE : ".( $err < 8 ? $UploadErrors[$err] : $err )."<br /><br />";
        return false;
    }

    // controllo se esiste la cartella di destinazione
    if ( !is_dir($file_path) )
    {
        echo "ERRORE : La cartella di destinazione non esiste<br /><br />";
        return false;
    }

    $file_name = $_FILES["fileToUpload"]["name"];             // nome originale del file ( Linux Unix : attenzione maiuscole e minuscole )
    $file_type = strtolower($_FILES['fileToUpload']['type']); // mime type dal browser
    $file_size = $_FILES['fileToUpload']['size'] / 1024;      // dimensione in kB
    $file_temp = $_FILES['fileToUpload']['tmp_name'];         // file temporaneo, path e nome assegnato dall'upload
    $file      = $file_path.$file_name;                       // path di destinazione e nome originale del file

    // visualizzazioni da eliminare (commentare) in produzione
    echo "Upload : "        .$file_name."<br />";
    echo "Type : "          .$file_type."<br />";
    echo "Size (kB) : "     .$file_size."<br />";
    echo "Stored in : "     .$file_temp."<br />";
    echo "target folder : " .$file_path."<br />";
    echo "target file : "   .$file     ."<br />";

    // evito nomi di files con spazi intercalati
    if ( substr_count($file_name, ' ') )
    {
        echo "ERRORE : Il nome del file intercalato da spazi non &egrave; accettato. Rinomina il tuo file!<br /><br />";
        return false;
    }

    // controllo se posso ottenere "mime_type"
    if ( class_exists('finfo') )
    {
        $mime_type = ( new finfo(FILEINFO_MIME_TYPE) )->buffer( file_get_contents($file_temp) );
    }
    else if ( function_exists('mime_content_type') )
    {
        $mime_type = mime_content_type($file_temp);
    }
    else
    {
        echo "ERRORE : non posso ottenere 'mime_type' mancano gli strumenti php<br /><br />";
        return false;
    }
    $mime_type = strtolower($mime_type);     // per avere facilità nella gestione dell'array "allowed_type" ammesso ci siano maiuscole
    echo "MIME TYPE : ".$mime_type."<br />";

    // controllo se è accettabile
    if ( !in_array($mime_type, $allowed_type) )
    {
        echo "ERRORE : Il file non &egrave; del tipo corretto.<br /><br />";
        return false;
    }

    // controllo la dimensione
    if ($file_size == 0)
    {
        echo "ERRORE : Il file &egrave; vuoto.<br /><br />";
        return false;
    }
    if ($file_size > 5000)
    {
        echo "ERRORE : Il file ha una dimensione troppo grande. Carica un file che non superi i 5 Mb.<br /><br />";
        return false;
    }

    // controllo se esiste lo stesso nome
    if ( file_exists($file) )
    {
        echo "ERRORE : Il nome scelto per il file esiste gi&agrave;. Rinomina il tuo file!<br /><br />";
        return false;
    }

    // sposto il file nella destinazione
    if ( !move_uploaded_file($file_temp, $file) )
    {
        echo "ERRORE : Lo spostamento del file nella destinazione non &egrave; riuscito"."<br /><br />";
        return false;
    }

    // controllo se il file é arrivato a destinazione
    if (!file_exists($file))
    {
        echo "ERRORE : Il file non &egrave; arrivato a destinazione<br /><br />";
        return false;
    }

    // non ho altro da fare
    echo "Il file -- ".$file_name." -- &egrave; stato caricato correttamente.";
    return true;
}
 

xnotar

Utente Attivo
3 Apr 2012
65
0
6
  • 15 Dic 2016
  • #117
Ok, ma provo solo il jpg che non si upload per assurdo o con tutti?
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #118
non devi più aggiornare la tabella, che è servita per capire ...
prova qualche immagine e vedi che il mime type ricavato da php sia corretto
nell'ultima versione, solo lui determina il caricamento

poi con tempo e pazienza ti conviene fare altre prove, per essere certo del funzionamento

rimane aperto (jpg.txt)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 15 Dic 2016
  • #119
ciao
un'osservazione, ho provato in locale a caricare un file dwg (autocad) e usando
PHP:
$mime_type_tmp = mime_content_type($_FILES["fileToUpload"]["tmp_name"]);
il var_dump restituisce
string(13) "image/vnd.dwg"
con i tre bw che ho (fire,ie e chrome) e non application/acad
quindi ribadisco sarebbero da fare diverse prove per vedere quale è l'effettiva risposta e che questa non cambi col tipo di bw
inoltre forse sarebbe da controllare contemporaneamente sia il mime che l'estenzione con
PHP:
    $mime=array('image/vnd.dwg','image/png');//e tutti quelli necessari
    $tipo=array('dwg','png');
    if(in_array($mime_type_tmp, $mime) && in_array($est, $tipo)){
        echo "$nome_file tipo consentito<br>";
    }else{
        echo "$nome_file tipo NON consentito<br>";
    }
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 15 Dic 2016
  • #120
quindi ribadisco sarebbero da fare diverse prove per vedere quale è l'effettiva risposta e che questa non cambi col tipo di bw, inoltre forse sarebbe da controllare contemporaneamente sia il mime che l'estenzione con
Clicca per allargare...
le informazioni provenienti dal browser sono facilmente camuffabili,
l'obiettivo è di non usarle, ma di ottenere la stessa valutazione dalle funzioni php
PHP:
        $mime_type = ( new finfo(FILEINFO_MIME_TYPE) )->buffer( file_get_contents($file_temp) );

        $mime_type = mime_content_type($file_temp);

come detto, lavorando su un sistema Linux, occorre tenere in considerazione i nomi dei path e files con maiuscole e minuscole che hanno un senso a differenza di Windows (da qui i campi vuoti riportati in tabella)

aspettiamo la prova, per vedere se le funzioni php restituiscono il valore "atteso", se ciò fosse, il problema dovrebbe essere risolto con informazioni "interne" e non "esterne"

un riassunto
http://www.acunetix.com/websitesecurity/upload-forms-threat/
 
Ultima modifica: 15 Dic 2016
Prec.
  • 1
  • …
  • 4
  • 5
  • 6
  • 7
Succ.
Primo Prec. 6 di 7 Succ. Ultimo
Devi accedere o registrarti per poter rispondere.

Discussioni simili

S
[PHP] Upload stesso file
  • solari77
  • 24 Giu 2019
  • PHP
Risposte
14
Visite
3K
PHP 5 Lug 2019
mr.x
M
G
[PHP] upload file in server: percorso cartella
  • giacomo9783
  • 30 Dic 2018
  • PHP
Risposte
2
Visite
2K
PHP 31 Dic 2018
giacomo9783
G
M
Upload 4 file php
  • Maxi_007
  • 29 Ott 2018
  • PHP
Risposte
11
Visite
3K
PHP 9 Nov 2018
macus_adi
M
[PHP] Nome file, upload e rinominare
  • Marco Candian
  • 20 Lug 2018
  • PHP
Risposte
2
Visite
3K
PHP 20 Lug 2018
Marco Candian
M
M
[PHP] upload di un file esistente overwrite
  • Marchese M
  • 22 Feb 2018
  • PHP
Risposte
1
Visite
2K
PHP 22 Feb 2018
macus_adi
N
[PHP] Test per l'upload di file attraverso un bot Telegram
  • nino2018
  • 14 Feb 2018
  • PHP
Risposte
2
Visite
2K
PHP 15 Feb 2018
nino2018
N
C
[PHP] Problema upload file (multiplo)
  • ciccioroky
  • 3 Lug 2017
  • PHP
Risposte
1
Visite
2K
PHP 3 Lug 2017
borgo italia
S
[PHP] Upload file...
  • stefanoxjx
  • 24 Feb 2017
  • PHP
Risposte
6
Visite
2K
PHP 9 Mar 2017
stefanoxjx
S
[PHP] Aggiornare DB tramite UPLOAD file .csv
  • giancadeejay
  • 1 Dic 2016
  • PHP
  • 2
Risposte
39
Visite
6K
PHP 6 Dic 2016
borgo italia
V
File upload.php della guida, ma ha un errore
  • VAik
  • 20 Apr 2016
  • PHP
Risposte
8
Visite
2K
PHP 29 Apr 2016
Messiah84
M
[Problema] esecuzione script Upload file in php
  • francesco7
  • 31 Ago 2014
  • PHP
Risposte
0
Visite
1K
PHP 31 Ago 2014
francesco7
I
upload file php / javascript / mysql
  • Ivano Cardassi
  • 12 Ago 2014
  • PHP
Risposte
0
Visite
1K
PHP 12 Ago 2014
Ivano Cardassi
I
R
upload file php
  • rickypictures
  • 6 Giu 2014
  • PHP
Risposte
5
Visite
2K
PHP 10 Giu 2014
marino51
L
[PHP e FTP upload] controllo file allegato
  • luigi777
  • 19 Giu 2012
  • PHP
Risposte
6
Visite
3K
PHP 20 Giu 2012
luigi777
L
PHP upload file
  • novello88
  • 6 Mar 2012
  • PHP
Risposte
1
Visite
2K
PHP 7 Mar 2012
maxbossi
B
[PHP - MySQL] Upload di un File
  • B-enemy
  • 17 Set 2009
  • PHP
Risposte
6
Visite
3K
PHP 19 Set 2009
B-enemy
B
M
UPLOAD File in PhP
  • moscacieca
  • 28 Gen 2009
  • PHP
Risposte
3
Visite
3K
PHP 30 Gen 2009
moscacieca
M
S
Upload File in Php
  • superciccio14
  • 31 Mag 2006
  • PHP
Risposte
7
Visite
2K
PHP 31 Mag 2006
superciccio14
S
[help] upload file con php!!!
  • nicocade
  • 2 Feb 2006
  • PHP
Risposte
1
Visite
1K
PHP 16 Feb 2006
metalgemini
L
Upload di un'immagine all'interno di un database usando php
  • lollo_x
  • 9 Giu 2020
  • PHP
Risposte
6
Visite
2K
PHP 12 Giu 2020
MarcoGrazia
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?