PHP Bilder Upload sicher überprüfen | PHP Tutorial

Поділитися
Вставка
  • Опубліковано 14 гру 2024
  • In vielen Fällen werden bei einem Upload einfach nur die $_FILES Variablen in PHP Abgefragt. Jedoch lässt sich diese Variable mit cURLFile manipulieren. In diesem Video zeige ich dir wie du die Bildgröße und Typ überprüfen kannst auf die sichere Art und Wiese.
    ** Links zum Video **
    $_FILES Variable: www.php.net/ma...
    copy: www.php.net/ma...
    unlink: www.php.net/ma...
    Files mit CURL Manipulieren: www.php.net/ma...
    finfo Funktionen: www.php.net/ma...
    Code zum Video:
    gist.github.co...
    Weitere Themenvorschläge und/oder Kooperationen in die Kommentare.
    #php #bildupload #curlfile
    Lad mich auf ein Kaffee ein: www.paypal.me/...

КОМЕНТАРІ • 47

  • @VitalijMik
    @VitalijMik  4 роки тому +2

    Kanntest du finfo?

  • @Mr.Mi.Mu.
    @Mr.Mi.Mu. 2 роки тому +1

    Richtig tolles Tutorial und das Thema Sicherheit kommt auch nicht zu kurz. Danke dafür! ^^ Übrigens, bei vielen Scripten die man zum Thema Fileupload findet, beinhalten genau diese Fehler, die zu erwähnt hattest. Leider wissen viele das nicht und kopieren sich dann diese unsicheren Scripte auf ihren Server.

    • @VitalijMik
      @VitalijMik  2 роки тому +1

      Dankeschön, ja ich habe leider selbst diese Fehler früher kopiert und wurde selbst gehackt. Deshalb kenne ich diese Sicherheitsprobleme. Vielleicht muss man in der Entwicklung erstmal auf die Nase Fallen und es muss richtig wehtun damit man sich mit dem Thema auseinandersetzt

    • @Mr.Mi.Mu.
      @Mr.Mi.Mu. 2 роки тому +1

      @@VitalijMik Hauptsache ist ja, man hat daraus gelernt. Dein Code sieht auch sauber aus, also soweit ich das beurteilen kann. Code ist auch ein stück weit Poesie ^^

  • @heinrichschiller4673
    @heinrichschiller4673 4 роки тому +2

    Du gibst dir sehr viel Mühe und wirst belohnt. Absolut verdient :)

  • @roadrunner9937
    @roadrunner9937 3 роки тому +2

    Super Video gut erklärt, den Punkt mit der Sicherheitslücke wird selten angesprochen --> weiter so :) - ein Video mit einer Processbar würde mich auch interessieren

    • @VitalijMik
      @VitalijMik  3 роки тому

      Dankeschön, Progressbar könnte man mit der Technik die ich im PHP Chat erwähnt habe, umsetzen,

  • @cinarbatmaz
    @cinarbatmaz Місяць тому

    hallo ein guter Video
    ich würde gern mit php oder HTML einen bild upload und Bild delete erstellen da ich auf meinem seite einen bilder galerie einfügen möchte .
    würde das dann auf die seite includen
    wenn ich ein bild eingefügt habe müsste ich auch diesen bild löschen können .
    danke

  • @colind2486
    @colind2486 3 роки тому +1

    Moin moin, ich hab da so ein Problem😅 Und zwar verstehe ich nicht, warum bei mir auch ein leer abgesendetes Form durch folgendes if-statement durchgeht:
    $hasFiles = isset($_FILES['datei']) && count($_FILES['datei']) > 0;
    if($hasFiles){......}
    Mein Array sieht dann auch leer aus aber ich verstehe nicht warum es trotzdem durchgeht. Mein Array, wenn ich es mit print_r ausgeben lasse ohne datei im Form falls es dir irgendwas bringt: Array ( [name] => Array ( [0] => ) [type] => Array ( [0] => ) [tmp_name] => Array ( [0] => ) [error] => Array ( [0] => 4 ) [size] => Array ( [0] => 0 ))
    Schon mal danke im voraus😄

    • @VitalijMik
      @VitalijMik  3 роки тому +1

      Moin, mir ist da wohl ein Fehler unterlaufen, ich habe den Code in der Beschreibung aktualisiert und habe da die Abfrage angepasst. Danke fürs Melden

    • @colind2486
      @colind2486 3 роки тому

      @@VitalijMik und was ich auch noch sagen wollte, dass bei mir bei der typenfilterung nicht image/jpg sondern image/jpeg funktioniert. Sieht man nämlich wenn man den Array ausgeben lässt auch noch mal.

    • @VitalijMik
      @VitalijMik  3 роки тому +1

      Das liegt am Bild selbst und deren Endung. Es gibt sowohl JPEG als auch JPG

    • @colind2486
      @colind2486 3 роки тому

      @@VitalijMik wäre schön wenn es denn stimmen würde, denn ich konnte mit jpg im filter gar keine hochladen, weder jpg, noch jpeg. Mit imge/jpeg kann ich nun aber beide hochladen. Jpeg und jpg. Verstehe es zwar selber nicht ganz, warum es so ist, aber so funktionierts bei mir jetzt. Habe immer mit beiden getestet, jpeg und jpg.😉 Trotzdem wie immer danke für die Antwort👍🏻 bist mit Abstand der beste youtuber wenns ums kommentare beantworten geht und auch so😄

    • @VitalijMik
      @VitalijMik  3 роки тому +1

      Der mime Type ist nicht NUR von der Endung abhängig sondern von den Header information im Bild. Oder vielleicht nur von den Header information? Auf jeden Fall reicht es nicht Dateiendung zu ändern

  • @ShadowByte666
    @ShadowByte666 4 роки тому +3

    Wo wir gerade beim Upload sind. Wäre es möglich das du mal ein Tutorial machst wo ein Upload mit einer Processbar machen? Also eine Anzeige mit 0% bis 100% hochgeladen. Oder mit einer Anzeige Datei 1 wurde hogleaden; Datei 2 wurde hochgeladen usw.

    • @VitalijMik
      @VitalijMik  4 роки тому

      Kann ich machen, das wird aber ein reines JavaScript tutorial dann

    • @ShadowByte666
      @ShadowByte666 4 роки тому

      @@VitalijMik OK? Gibt's da nichts in Verbindung mit PHP?

    • @VitalijMik
      @VitalijMik  4 роки тому

      Nein weil PHP Seitig zeigst du ja alles dann an wenn der Upload schon zu 100% durchgelaufen ist. Damit du so eine Anzeige hast, musst du Javascript Seitig deine Datei in Einzelteile zerlegen und einzelen Bytes hochladen

    • @ShadowByte666
      @ShadowByte666 4 роки тому

      @@VitalijMik
      Es gibt doch seit einiger Zeit PECL :: uploadprogress und seit PHP 5.4
      session.upload-progress...
      www.php.net/manual/de/session.upload-progress.php
      In Verbindung mit JavaScript/Ajax ist eine Progressbar möglich. Selbst umgesetzt habe ich es damit noch nicht.

    • @VitalijMik
      @VitalijMik  4 роки тому

      @@ShadowByte666 ja genau, aber du brauchst ja da javascript und du musst die Datei in einzelne Blobs aufteilen. PHP Seitig wird sich da nichts ändern, auf dem Server bleib alles gleich, du hast halt in parallel ein Ajax request der aus der Session ausliest wieviele Bytes hochgeladen sind.

  • @webnerd1058
    @webnerd1058 3 роки тому +1

    Hallo Vitalij, happy friday :) ich wollte mal fragen wie viele Websiten du schon erstellt hast und ob manche von denen dir ein Einkommen bescheren :)
    Liebe Grüße :)

    • @VitalijMik
      @VitalijMik  3 роки тому +1

      Viele aber als Aufträge bei der Arbeit und die haben mir eben als Job Einkommen beschert. Sowas wie passives Einkommen Seiten habe ich nicht

    • @webnerd1058
      @webnerd1058 3 роки тому

      @@VitalijMik Interessant :) Schade, dabei hast du so viel Erfahrung im Programmieren :)

    • @VitalijMik
      @VitalijMik  3 роки тому

      @@webnerd1058 ja aber ich mache das nicht wegen Geld :D

    • @webnerd1058
      @webnerd1058 3 роки тому

      @@VitalijMik 🙃

    • @VitalijMik
      @VitalijMik  3 роки тому

      @@webnerd1058 und übrigens wirft YT auch schon eine nette Summe ab ;) dazu hatte ich ein video gemacht

  • @Der_Nevio
    @Der_Nevio 4 роки тому

    Wie macht man Famtmails ? Das geht doch nur ab 1000 Abos bei mir ?

    • @VitalijMik
      @VitalijMik  4 роки тому

      was ist "Famtmails" ?

    • @Der_Nevio
      @Der_Nevio 4 роки тому

      @@VitalijMik wie geht das ? diese bilder

  • @retro-stuff-rocks
    @retro-stuff-rocks 4 роки тому +1

    Nach einer Umleitung per header() sollte immer ein exit; folgen!

    • @VitalijMik
      @VitalijMik  4 роки тому

      Stimmt, mache ich normalerweise auch ;)

  • @EinLinuus
    @EinLinuus 4 роки тому

    5:29 Zeile 7: Müsste es nicht
    if(!$isPost || !$hasFiles)
    sein, statt einem &&?
    Weil so wie es im Video ist würde man ja nur weitergeleitet werden, wenn es keine Postrequest ist UND keine Dateien dabei sind. Aber man soll ja auch weitergeleitet werden, wenn es ein Postrequest aber keine Dateien dabei sind, oder?

    • @VitalijMik
      @VitalijMik  4 роки тому +1

      Probier es aus und berichte mir das Ergebnis ;) Vielleicht hast du ein Fehler entdeckt, vielleicht aber auch nicht

  • @misternether8602
    @misternether8602 4 роки тому +1

    Könntest du auch das Video machen, wo es ein Box gibt, wo man mehrere Bilder auf einmal reinschmeißen kann und sie werden dann hochgeladen

    • @VitalijMik
      @VitalijMik  4 роки тому +2

      Mach auf jeden fall noch

    • @Der_Nevio
      @Der_Nevio 4 роки тому

      Vitalij Mik jaaa sowas ähnliches wie UA-cam ? Ich kapier aber nicht das login System Von UA-cam ?? Und wie machen die das mit den Kanehlen ?

    • @JuniasFenske91
      @JuniasFenske91 4 роки тому +1

      Vitalij Mik kannst du bei der Gelegenheit noch eine Funktion einbauen, die Bilder mehrfach in vordefinierten Bildgrössen abspeichern, damit man responsive dann ein anderes Bildformate anzeigen lassen kann? Wäre mega cool 🤙🏻

  • @weblio4861
    @weblio4861 4 роки тому

    4:54 Zeile 5: Warum so umständlich und nicht auf isset($_POST) prüfen?

    • @VitalijMik
      @VitalijMik  4 роки тому

      Weil mich ja interessiert ob ein POST request verschickt wurde und nicht ob es Post variablen gibt. Wäre es nicht richtiger request method zu überprüfen?

    • @weblio4861
      @weblio4861 4 роки тому

      ​@@VitalijMik durch das isset() wird ja nicht nur geprüft ob die $_POST gesetzt ist, sondern ob diese auch nicht null ist.
      Und dieser Fall kann ja folglich nur eintreten, wenn wir ein $_POST Request erhalten haben.

    • @VitalijMik
      @VitalijMik  4 роки тому

      @Weblio ich bin mir nicht sicher, ich glaube das $_POST wird nur dann befüllt wenn ich das Formular mit einem Submit button abschicke. Ich meine ich hatte mal Probleme weil ich mit Guzzle ein Request auf mein Script abgechickt habe der als POST request gesendet wurde aber nur Query Parameters gesetzt waren. Seit dem mache ich das so, dass ich mich nicht auf $_POST und $_GET verlasse sondern auf die Request method schaue