[PHP] upload di file in cartella e sua sicurezza

  • Creatore Discussione Creatore Discussione VAik
  • Data di inizio Data di inizio
Ora ho fatto un'altra prova...
Ho preso un file in .php e ovviamente me lo ha rifiutato. Gli ho cambiato l'estensione in .jpg per creare un FAKE ed il risultato è stato questo:
Upload : test3.jpg
Type : image/jpeg
Size (kB) : 2.03515625
Stored in : /tmp/phpjlpbwo
target folder : models/
target file : models/test3.jpg
ERRORE : Lo spostamento del file nella destinazione non è riuscito

Lo spostamento non è avvenuto come negli altri casi, però non so se lo ha riconosciuto come un FAKE o se lo ha digerito così come proposto.
 
Ultima modifica:
Cosa indica questa parte di codice per lo spostamento del file dalla directory temporanea a quella di destinazione?
PHP:
unlink($file_temp);
 
ERRORE : Lo spostamento del file nella destinazione non è riuscito
"models/" è una sotto cartella della cartella dove si trova lo script php,
deve avere tutte le proprietà di lettura / scrittura attive
e (credo) le debbano avere anche tutte le cartelle soprastanti,
conviene quindi usare una cartella con un path specifico isolato dal resto

Il file non è del tipo corretto.
il tipo restituito é "application/octet-stream" che va aggiunto nella lista dei tipi accettati


unlink($file_temp);
cancella il file temporaneo di upload per non lasciare file inutili in giro
 
Ora ho fatto un'altra prova...
Ho preso un file in .php e ovviamente me lo ha rifiutato. Gli ho cambiato l'estensione in .jpg per creare un FAKE ed il risultato è stato questo:
Lo spostamento non è avvenuto come negli altri casi, però non so se lo ha riconosciuto come un FAKE o se lo ha digerito così come proposto.
ho fatto la tua stessa prova, ed è stato riconoscito per quello che è e rifiutato
Cattura.PNG
 
Allora, la cartella models ha i permessi 777, ed ho provato a darglieli anche alla www e pure alla var che sta sopra, il che mi sembra assurdo perché lascerei il server esposto a rischi, comunque, continua a dirmi che lo spostamento non riesce.

application/octet-stream
lo devo aggiungere in testa a $allowed_type=array ??
 
Allora, la cartella models ha i permessi 777, ed ho provato a darglieli anche alla www e pure alla var che sta sopra, il che mi sembra assurdo perché lascerei il server esposto a rischi, comunque, continua a dirmi che lo spostamento non riesce.
infatti ho scritto di usare una cartella specifica separata dagli script e dalla struttura www
(avevo scritto : conviene quindi usare una cartella con un path specifico isolato dal resto)

application/octet-stream
lo devo aggiungere in testa a $allowed_type=array ??
si
 
ho provato ad aggiungerlo ma un file .php cambiandogli estensione in .jpg , lo riconosce come Type : image/jpeg
dunque aggiungendo 'application/octet-stream',
nel $allowed_type=array
non è cambiato nulla.
Caosa sbaglio?
 
Il file php per l'upload (che ho chiamato test3.php) sta nella radice del webserver che è appunto /var/www e la directory dove intenderei spostare i file caricati (cioè models) sta sempre in /var/www.
Come potrei separarla dalla struttura WWW, non potrei farlo funzionare?
 
ho provato ad aggiungerlo ma un file .php cambiandogli estensione in .jpg , lo riconosce come Type : image/jpeg
vedi post #44 è il risultato, positivo, del caricamento di un file php con l'estensione modificata in jpg

dunque aggiungendo 'application/octet-stream',
nel $allowed_type=array
non è cambiato nulla.
Caosa sbaglio?
hai scritto male la definizione ....
hai modificato uno script e ne esegui uno diverso ....
 
Il file php per l'upload (che ho chiamato test3.php) sta nella radice del webserver che è appunto /var/www e la directory dove intenderei spostare i file caricati (cioè models) sta sempre in /var/www.
Come potrei separarla dalla struttura WWW, non potrei farlo funzionare?
non ho conoscenze di Linux/Unix,
ma separiamo i problemi,
penso tu possa creare una cartella nella root e darle i permessi, giusto per le prove di caricamento,
successivamente si ragionerà sulla cartella e permessi di accesso
 
la definizione l'ho inserita in questo modo...
te l posto per intero:
PHP:
function GestisciUpload()
{
    $target_dir = "models/"; // terminato con la barra !

    $allowed_type=array(
   'application/octet-stream',
        'x-world/x-3dmf',
        'application/sla',
        'application/vnd.ms-pki.stl',
        'application/x-navistyle',
        'application/iges',
        'model/iges',
        'application/dxf',
        'application/acad',
        'image/vnd.dwg',
        'image/x-dwg',
        'image/png',
        'image/gif',
        'image/jpeg',
        'image/pjpeg'
    );
lo script che vado ad eseguire è il "test3.php"
dunque in locale l'indirizzo che richiamo per fare i test è il seguente:
non ne ho altri.
 
non ho conoscenze di Linux/Unix,
ma separiamo i problemi,
penso tu possa creare una cartella nella root e darle i permessi, giusto per le prove di caricamento,
successivamente si ragionerà sulla cartella e permessi di accesso
Si certo, posso creare cartelle dove voglio, ma la "root" del webserver è "/var/www" mentre la root del sistema operativo (Linux) è semplicemente "/".
Io posso creare tranquillamente una directory anche in / (root) e dargli i permessi che voglio, ma copiargli poi dentro un file proveniente da un upload sul server web, non credo che possa funzionare.
Comunque stasera o domani pomeriggio provo. Ora devo lasciare per andare al lavoro.
 
Niente da fare! Ho provato di tutto ma non c'è verso di far copiare alcun file in nessuna directory, nemmeno con il percorso assoluto.
Non riesco veramente a comprendere per quale ragione a te funziona e a me no!
 
credo ci siano limitazioni per php ad accedere alle cartelle,
ho trovato informazioni ricercando "Linux folder permissions for php upload"
leggi i primi articoli che escono, riportano informazioni sulla configurazione per Linux-php
segui i passi e vedi se riesci a trovare la giusta configurazione
 
prova anche ad aprire una nuova discussione nell'area Linux,
chiedendo se qualche persona conosce la configurazione specifica per l'upload con php
 
per cortesia, segui questi passi,
- sostituisci nello script la cartella "models/" con la cartella "/tmp/" ( attento alle barre )
- apri la pagina di upload
- seleziona il file da inviare ( possibilmente "giusto" ) senza "submit"
- identifica nella cartella /tmp/ il file temporaneo che è stato inviato al server ( esempio, /tmp/phpjlpbwo o /tmp/phproQuTd )
- clicca "submit" e controlla che il risultato sia positivo, in particolare deve esistere, in "/tmp/" il file con il nome "giusto" ed il file temporaneo cancellato
fai sapere grazie
 
Domanda...
Se elimino questa riga:
PHP:
    unlink($file_temp);
In teoria dovrei trovare il file nella tmp?
 
no non devi modificare lo script,

descrivo il funzionamento con Windows,
scelgo il file nella pagina html,
il file viene già trasferito al server prima del "submit" quindi si trova nella "/tmp/"
clicco "submit",
viene attivato lo script php che lo gestisce, ovvero come ti ho suggerito,
il file verrà scritto nella "/tmp/" e verrà cancellato il temporaneo
vero ?
 
Ieri sera ho provato ad eliminare la riga citata nel post precedente, ma nella /tmp nessuna traccia dei file uplodati. Allora ho cambiato i permessi della tmp da 777 a 755 e lo script restituisce ERRORE: 6 che sta ad indicare appunto che la tmp non è accessibile o non esiste.
Dunque significa che nemmeno in tmp si scrive il file, perciò non può copiarsi nella directory di destinazione.
Ora mi viene un dubbio...
Sto usando PHP7 ed ho letto che rispetto alle versioni precedenti hanno fatto molte modifiche sul lato della sicurezza.
Secondo voi potrebbe essere questo il problema?
 
Ultima modifica:

Discussioni simili