CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
30.12.2014, 19:08:55
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
Uploadscript für Bilder
Hallo,
hatte ja Probleme mit den Filemanagern der Webeditoren. Und nun auch festgestellt, dass mein bisheriges Uploadscript locker manipulierte Dateien bzw. Dateiendungen durchlässt.
Nun habe ich ein neues erstellt und möchte euch fragen, ob ihr das für sicher haltet. (Es liegt zwar im passwortgeschützten Bereich, aber das waren die anderen angreibaren auch.)
Schon mal danke für Kritik und Hinweise!
PHP-Code:
<h3>Bilder für Webseite hochladen</h3>
<?php
// Hier wird das Fomular (siehe ganz unten) verarbeitet
if ($_POST['los']) {
$uploaddir = _BILDPFAD_ABS;
$uploaddatei = basename($_FILES['userfile']['name']);
$uploadfile = $uploaddir . $uploaddatei;
$dateiendung = stristr ( $uploaddatei, '.' );
echo "Uploaddatei: ".$uploaddatei."<br />";
echo "Uploadfile: ".$uploadfile."<br />";
echo "Dateiendung: ".$dateiendung."<br />";
echo "Größe: ".$_FILES['userfile']['size']."<br />";
echo "MIMETYPE: ".$_FILES['userfile']['type']."<br />";
echo "<hr />";
if (exif_imagetype($_FILES['userfile']['tmp_name']) == false) {
echo "kein Bild!!!!!<br />";
exit;
}
if (substr_count ( $dateiendung, '.' ) > 1) {
echo "Wahrscheinlich doppelte Dateiendung<br />";
exit;
}
else {
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
}
else {
echo "Möglicherweise eine Dateiupload-Attacke!\n";
}
}
echo "<table border='1' width='80%'><tr><td>";
// $_SESSION['bilddatei'] = $uploaddatei;
echo "<h3>Ergebnis Bild hochladen:</h3>";
echo "<b>Gerade hoch geladenes Bild</b> ";
echo $uploaddatei."<br/>";
echo "<img src='"._BILDPFAD.$uploaddatei."'><br />";
echo "</td></tr></table>";
} // Ende if ($_POST['los']) {
?>
HTML-Code:
<!-- Die Encoding-Art enctyoe MUSS wie dargestellt angegeben werden -->
<form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<!-- MAX_FILE_SIZE muss vor dem Dateiupload Input Feld stehen -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<!-- Der Name des Input Felds bestimmt den Namen im $_FILES Array -->
Diese Datei hochladen:<br /> <input name="userfile" type="file" /><br />
<p> <input type="submit" name="los" value="Hochladen" /></p>
</form>
|
06.01.2015, 10:13:49
|
|
Anfänger
|
|
Registriert seit: Dec 2014
Alter: 36
Beiträge: 20
|
|
AW: Uploadscript für Bilder
Hallo Heinrich,
habe mir das Script mal geschnappt und damit rumprobiert.
Ich schildere dir hier meine Eindrücke:
- 0,477 MByte Bilder? zu klein für heutige Fotos zu groß für Avatare. Bin mir unsicher warum du die Größe gewählt hast.
- man kann mit leichtigkeit das Value im Editormodus jedes Explorers ändern / oder sogar anzeigen lassen und ändern (hidden --> text)
Sind keine schwerwiegenden Fehler nur hab ich dies festgestellt und mit dem Forum hier vergliechen...
Wenn ich hier im Forum Bilder hochlade die zu groß sind werden sie automatisch auf die passende größe gebracht
und ich erhalte keine fehlermeldung. Das passiert wohl nicht Clientseitig(wenn doch hab ich es nicht gesehen).
Wie man dies erreicht da habe ich leider keine Vorschläge.
Für mich als Anfänger sieht der Script aber soweit gut aus.
Lg BozzaCoon
|
06.01.2015, 10:42:28
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Uploadscript für Bilder
Zitat:
action="<?php $_SERVER['PHP_SELF'] ?>"
|
Zum Glück hast du hier das echo vergessen, denn sonst würde es vermutlich XSS Attacken erlauben.
|
06.01.2015, 11:21:31
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: Uploadscript für Bilder
@BozzaCoon
Danke für den Tipp. Die Form habe ich wohl schludrig aus dem Netz kopiert. Max_file_size wird von meinem Script überhaupt nicht verarbeitet. Das sollte ich dort noch selbst definieren (aus der Form kann das weg).
Die ganze Anwendung läuft sowieso nur im geschützten Redaktionsbereich eines CMS, also kein für jeden zugänglicher Upload.
@DokuLeseHemmung
Danke - ich habe erst vor kurzem gelesen, dass $_SERVER['PHP_SELF'] problematisch sei. Ist es das nur mit "echo" oder auch so, wie es bei mir steht? Oder sollte ich den konkreten Namen der aufzurufenden Datei nehmen.
Was sagst du zu der Prüfung des Uploads?
|
06.01.2015, 11:49:31
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Uploadscript für Bilder
Zitat:
Ist es das nur mit "echo" oder auch so, wie es bei mir steht?
|
So wie es bei dir steht, ist es komplett sinnfrei.
Zitat:
Was sagst du zu der Prüfung des Uploads?
|
Naja, ob du wirklich alle möglichen Image Typen unterstützen willst, kannst nur du wissen....
|
06.01.2015, 12:08:11
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: Uploadscript für Bilder
<?php $_SERVER['PHP_SELF'] ?> mag sinnfrei sein... jedenfalls funktioniert es...Dürfte es das nicht?
Mit den Mime-Typen hast du recht. Könnte ich noch auf jpg, gif und png eingrenzen.
|
06.01.2015, 12:55:38
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Uploadscript für Bilder
Hi,
was Doku meint ist: PHP_SELF ist immer Mist!
Was du da machst ist nichts denn ohne echo kannst du den Part auch löschen und solltest es auch, denn dein "action" ist LEER und nimmt dadurch die aufgerufene URL als Ziel.
Überprüfe deinen Quelltext!
Dein Uploadscript ist noch sehr ausbaufähig.
Ich würde nie den Namen der Datei übernehmen!
Bsp.: Gerade bei Digitalkameras gibt es IMG_XXX.jpg 1000mal und die überschreiben sich
dann?
Benutze eine Datenbank oder Textfile für die Orginalname / timestamp.
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
06.01.2015, 13:21:37
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Uploadscript für Bilder
Zitat:
Zitat von Heinrich
<?php $_SERVER['PHP_SELF'] ?> mag sinnfrei sein... jedenfalls funktioniert es...Dürfte es das nicht?
|
Ohne echo tut es nichts. Also sinnfrei.
Mit echo ist es eine Gefahr.
HTML vor 5 erwartet zwingend das action Attribut.
Es darf leer sein. Dann füllt der Browser es, wie er es für richtig erachtet.
In HTML5 darf das action Attribut fehlen, wenn es aber vorhanden ist, dann muss es auch (sinnvoll) gefüllt sein.
Zu: $_SERVER['PHP_SELF']
Meist ist $_SERVER['SCRIPT_NAME'] angemessener.
Aber auf manchen Systemen ermöglicht auch dieses XSS Attacken.
Prüfe das vor der Verwendung.
|
06.01.2015, 14:03:54
|
Member
|
|
Registriert seit: Feb 2006
Beiträge: 883
|
|
AW: Uploadscript für Bilder
Okay danke, das mit $_SERVER['PHP_SELF'] habe ich verstanden. Werde zukünftig $_SERVER['SCRIPT_NAME'] verwenden.
Wichtiger ist aber ja, dass ich das, was darüber (evt. manipuliert) reinkommt, kontrolliere. Mache ich bei Zahlen-Parametern mit
PHP-Code:
$id = intval($_GET['id']);
Bei sonstigem string mit Prüfung durch eine Whitelist bzw.
PHP-Code:
$string = strip_tags($_GET['string']);
Meint ihr, das ist sicher?
@Ckaos
Der Bildupload ist nur im geschützten CMS-Bereich; da habe ich die Übersicht über die Bildnamen. Aber du hast Recht - ich sollte das überschreiben noch ausschließen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 22:40:13 Uhr.
|