Sto lavorando a un sito web - in questo momento è nelle prime fasi del test, non ancora lanciato e contiene solo dati di test - grazie a Dio.
Prima di tutto, un hacker ha scoperto la password per accedere alle pagine di "amministrazione" dei siti Web * . Penso che abbiano utilizzato un key logger sul computer di un amico che ha effettuato l'accesso al sito per darmi un feedback.
In secondo luogo, hanno utilizzato una casella di caricamento delle immagini per caricare un file PHP. Ho eseguito un controllo rigoroso in modo che vengano accettati solo i file .jpg e .png - tutto il resto avrebbe dovuto essere rifiutato. Sicuramente non c'è modo di caricare un file .jpg e quindi modificare l'estensione una volta che il file è stato memorizzato?
Per fortuna, quando mi viene inviato un file, generi anche nuovi nomi di file, quindi non credo sono stati in grado di individuare il file per eseguire il codice.
Non riesco proprio a capire come il sito web lasci passare un file PHP. Cosa c'è di sbagliato nella mia sicurezza? Il codice della funzione di convalida è di seguito:
function ValidateChange_Logo (theForm) {var regexp; if (theForm.FileUpload1.value == "") {alert ("Non hai scelto un nuovo file logo o il tuo file non è supportato."); theForm.FileUpload1.focus (); return false; } var extension = theForm.FileUpload1.value.substr (theForm.FileUpload1.value.lastIndexOf ('.')); if ((extension.toLowerCase ()! = ".jpg") && (extension.toLowerCase ()! = ".png")) {alert ("Non hai scelto un nuovo file logo o il tuo file non è supportato. "); theForm.FileUpload1.focus (); return false; } return true;}
Una volta che il file arriva al server, utilizzo il codice seguente per mantenere l'estensione e generare un nuovo nome casuale. È un po 'disordinato, ma funziona bene.
// Elabora e conserva l'estensione del file $ fileExt = $ _FILES [logo] [nome]; $ reversed = strrev ($ fileExt); $ extension0 = substr ($ reversed, 0, 1); $ extension1 = substr ($ reversed, 1, 1); $ extension2 = substr ($ reversed, 2, 1); $ fileExtension = ".". $ extension2. $ extension1 . $ extension0;
$ newName = rand (1000000, 9999999). $ fileExtension;
Ho appena testato con un nome come logo.php; .jpg
e sebbene l'immagine non possa essere aperta dal sito web, è corretta ha cambiato il nome in 123456.jpg
. Per quanto riguarda logo.php / .jpg
, Windows non consente tale nome di file.
* Pagine protette sul sito web che consentono semplici funzioni: come caricare un'immagine che poi diventa un nuovo logo per il sito web. I dettagli FTP sono completamente diversi dalla password utilizzata per accedere alle pagine protette del sito web. Così come le credenziali del database e del cPanel. Ho assicurato che le persone non possano nemmeno visualizzare la struttura delle cartelle e dei file del sito. Non riesco letteralmente a pensare di rinominare un'estensione .jpg o .png in .php su questo sito se non hai i dettagli FTP.