Ich arbeite an einer Website - im Moment befindet sie sich in einem frühen Teststadium, ist noch nicht gestartet und enthält nur Testdaten - Gott sei Dank.
Zunächst hat ein Hacker das Passwort für herausgefunden Melden Sie sich auf den Verwaltungsseiten der Websites * sup> an. Ich glaube, sie haben einen Key Logger auf dem Computer eines Freundes verwendet, der sich auf der Website angemeldet hat, um mir Feedback zu geben.
Zweitens haben sie ein Bild-Upload-Feld verwendet, um eine PHP-Datei hochzuladen. Ich habe streng geprüft, dass nur JPG- und PNG-Dateien akzeptiert werden - alles andere hätte abgelehnt werden sollen. Sicherlich gibt es keine Möglichkeit, eine JPG-Datei hochzuladen und dann die Erweiterung zu ändern, sobald die Datei gespeichert ist.
Zum Glück generiere ich auch neue Dateinamen, wenn eine Datei an mich gesendet wird, also denke ich nicht Sie konnten die Datei finden, um den Code auszuführen.
Ich kann einfach nicht herausfinden, wie die Website eine PHP-Datei durchgelassen hat. Was ist los mit meiner Sicherheit? Der Validierungsfunktionscode lautet wie folgt:
Funktion ValidateChange_Logo (theForm) {var regexp; if (theForm.FileUpload1.value == "") {alert ("Sie haben keine neue Logodatei ausgewählt oder Ihre Datei wird nicht unterstützt."); theForm.FileUpload1.focus (); falsch zurückgeben; } var extension = theForm.FileUpload1.value.substr (theForm.FileUpload1.value.lastIndexOf ('.')); if ((extension.toLowerCase ()! = ".jpg") && (extension.toLowerCase ()! = ".png")) {alert ("Sie haben keine neue Logodatei ausgewählt oder Ihre Datei wird nicht unterstützt. "); theForm.FileUpload1.focus (); falsch zurückgeben; } return true;}
Sobald die Datei auf dem Server angekommen ist, verwende ich den folgenden Code, um die Erweiterung beizubehalten und einen neuen zufälligen Namen zu generieren. Es ist etwas chaotisch, aber es funktioniert gut.
// Dateierweiterung verarbeiten und beibehalten $ fileExt = $ _FILES [logo] [name]; $ reverse = strrev ($ fileExt); $ extension0 = substr ($ umgekehrt, 0, 1); $ extension1 = substr ($ umgekehrt, 1, 1); $ extension2 = substr ($ umgekehrt, 2, 1); $ fileExtension = ".". $ extension2. $ extension1 . $ extension0;
$ newName = rand (1000000, 9999999). $ fileExtension;
Ich habe gerade mit einem Namen wie logo.php; .jpg
getestet und obwohl das Bild nicht von der Website geöffnet werden kann, ist es korrekt Der Name wurde in 123456.jpg
geändert. Für logo.php / .jpg
lässt Windows einen solchen Dateinamen nicht zu.
* Geschützte Seiten auf der Website, die einfache Funktionen ermöglichen: B. ein Bild hochladen, das dann zu einem neuen Logo für die Website wird. Die FTP-Details unterscheiden sich vollständig von dem Kennwort, mit dem Sie sich auf den geschützten Seiten der Website anmelden. Ebenso wie Datenbank- und cPanel-Anmeldeinformationen. Ich habe sichergestellt, dass die Benutzer nicht einmal die Ordner- und Dateistruktur der Site anzeigen können. Es gibt buchstäblich keine Möglichkeit, eine .jpg- oder .png-Erweiterung in .php auf dieser Site umzubenennen, wenn Sie keine FTP-Details haben. Sup>