domanda riguardante la sicurezza del modulo di caricamento php

1

Ho letto qui link e la domanda è correlata con il testo vicino

However, if the attacker is able to upload files, even outside the web root, and he knows the name and location of the uploaded file, by including his uploaded file he can run arbitrary code on the server.

The solution for that is to prevent the attacker from knowing the name of the file. This can be done by randomly generating file names and keeping track of them in a database.

Non comprendo completamente i rischi per la sicurezza. Come ho capito

  1. l'utente malintenzionato carica file dannoso
  2. Al momento il mio codice php converte il nome del file in qualcosa di casuale e con quel nome casuale memorizza in una particolare directory. Ma l'utente malintenzionato può vedere quel nome casuale, ad esempio con il tasto destro del mouse Copy location e vedere https://domain.com/images/2014-05-16/339442/VH4AGExjRlw=/something_random.jpg . Quindi la creazione di un nome casuale non aiuta?
  3. Come capire in mysql è necessario registrare il vero nome del file e il nome che l'utente può vedere in url?

Impossibile capire completamente. Lo scopo è prevenire la situazione in cui l'utente carica il file e quindi conoscendo il nome del file, può accedere al file?

    
posta Andris 30.11.2014 - 15:47
fonte

1 risposta

2

Hai ragione. Se l'obiettivo finale è elaborare il file sul server, quindi rinominarlo fornisce un livello di protezione. Tuttavia, se si intende visualizzare nuovamente il file, non è stato possibile ridenominarlo; l'autore dell'attacco utilizza solo il meccanismo di rivisualizzazione fornito dal sito.

Supponiamo che i tuoi utenti web possano caricare le immagini che vengono poi visualizzate sul sito. Come dice l'articolo del tuo link, un utente malintenzionato può caricare un'immagine contenente PHP (o JavaScript o altro) nei commenti incorporati. Se il programma del server web fosse in qualche modo (errato) configurato per inviare file con estensione .jpg al processore PHP, l'utente malintenzionato potrebbe eseguire codice PHP arbitrario sul computer con i privilegi del processo del server web.

Ciò significa che lo sviluppatore web deve disinfettare attentamente i file prima di consentire loro di essere nuovamente visualizzati. Quindi, avresti:

  1. caricare su un nome di file casuale e tenere traccia del nome
  2. elabora il file per sanitizzarlo; come disinfettare dipende dal tipo di file
  3. rinomina in un nome "interno"; probabilmente non vuoi usare comunque il nome del file del caricatore a causa di conflitti di nome.
  4. Posiziona il file sterilizzato in una directory all'interno o sotto la radice Web o in un database e impostalo per la visualizzazione.

Per i file immagine, è possibile utilizzare ImageMagick per eliminare i commenti. C'è una discussione sull'uso del comando -SET per eliminare i commenti qui: link È interessante notare che c'è anche un link ad un'immagine, kitten.jpg, che contiene PHP incorporato. Potresti usarlo per sperimentare.

Modificato il 2014-12-02 per aggiungere: Come Gumbo ha sottolineato, un tale attacco può essere montato attraverso una vulnerabilità di inclusione dei file. In PHP, tutti i file inclusi iniziano in modalità copia, quindi il processore PHP non vede mai i dati binari dell'immagine, esegue semplicemente la scansione dell'istruzione di elaborazione XML <?php (o di uno qualsiasi degli altri introduttori validi). Questo cambia il processore PHP interpretare la modalità e il codice PHP incorporato viene eseguito. Quando viene rilevato ?> , il processore torna in modalità copia e copia solo di più il file binario.

    
risposta data 30.11.2014 - 16:54
fonte

Leggi altre domande sui tag