Und das reicht dir …? Sind ja ganz schön niedrige Qualitätsansprüche.
Auf solche Fehler, die u.U. auch mal unabsichtlich passieren könnten, sollte der Nutzer entsprechend hingewiesen werden, und ihm die Möglichkeit gegeben werden, ein neues Bild hochzuladen.[/quote]
Ähm…
Welche Leute laden denn solche „Script-Bilder“ hoch? Hacker! Soll ich Hackern jetzt auch ncoh sagen, dass sie es mit einem anderen Weg versuchen soll? Oder freundlich darum bitten?
Der Standard-User (sogar DAUs) laden normale Bilder hoch. Und wenn Endung mit Mime-Type nicht zusammenpasst, kann man ja die Meldung geben. Und wenn beides normale Bilddateien sind, dann passt das Bild immer, solange es nicht von einem Hacker kommt. Und einem Hacker sage ich sicher nicht. „Upload fehlgeschlagen! Bitte versuchen Sie es erneut.“
Was hat das mit Security by obscurity zu tun? Ich muss den Hacker nur nicht darum bitten, es mit einem anderen Bild zu versuchen, oder? Der sieht doch so und so, dass das nicht geklappt hat. Das hat nichts mit SbO zu tun.
[quote=„asshare“]Was glaubts du warum man einen topic erstellt?
Wenn du nicht mit dem besten Lösungsweg einverstanden bist dann solltest du mal sagen was dein script besser kann (auser den ram besser zu belasten )?
[/quote]
Ich warte…
Deine Lösung ist solange gut, bis ich dir ein ZIP-Archiv mit dem Content-Type image/jpeg sende.
Noch besser ist es, eine PHP-Datei mit dem Content-Type “image/jpeg” zu senden. Die rufe ich dann auf deinem Server auf und hab sofort Vollzugriff auf alles, was ich per PHP erreichen kann.
Das geht sogar mit dem Firefox mit nem kleinen Plugin…
[quote=„der_dodo“]Ich sehe keinen nachteil.[/quote]Nachteil Groß und ansonsten haben wir diesen schon öfters genannt. Die Daten sind unzuverlässig. Selbst wenn man dadurch keinen Schaden anrichten könnte, so hast du dadurch Daten müll auf der Platte.
Ich werde jetzt kleinlich aber du hast es verdient
@michi7x7
glaube das hab ich wie jeder vernünftige Webseiten Entwickler
Kann sowas auch passieren, wenn man die Endung einer Datei checkt? Also z.b. boese_datei.txt, text-dateien sind erlaubt, in wirklichkeit befindet sich aber php in der datei, kann der code aber nicht ausgeführt werden, right?
Soweit ich weiß wars net C++ sondern C^^ Ist aber auch egal da es so oder so direkt ausgeführt werden kann. Nur was man selber in PHP Schreibt muss wie bei jeder Script-Sprache erst in Bytecode umgewandelt werden. Und es wird eben nur von PHP Interpretiert anstatt das es selber direkt den Prozessor anspricht. Darum sind Script-Sprachen auch langsamer. Wobei C++ auch schon teils nen Mix aus Script-Sprache und Hochsprache ist^^ C# sogar noch viel viel mehr.
getimagesize hat mit Sicherheit mit Abstand mehr Code… dazu kommt das es auf die Datei zugreifen muss um den Dateityp lesen zu können. Nur da es nativer Code ist, kann es mitunter letzten endes immer noch schneller sein als viel weniger in einer Script-Sprache. Aber wie gesagt… ich kanns nicht beurteilen. Einfachster weg wäre das ganze in ner Loop ca. 1000x auszuführen und zu gucken was schneller ist
Punkto Sicherheit:
Wenn man die Dateiendung überprüft und den Mime-Type kann man sich sicher sein, dass dieser boshafte Code NICHT ausgeführt wird. Der Webserver öffnet auch nicht jede Datei und überprüft zuerst wie was wann wo, sondern, er sieht sich genau diese Dinge an. Die sind leicht aus den Dateien rauszulesen. Sonst gäbe es ein riesiges Performance-Problem.
Das ZIP-Archiv kann auch keinen Schaden anrichten, da es einfach nicht gespeichert wird, weil es kein Bild ist. Mittels imageCreateFromJPEG wird das Ganze ja sowieso überprüft. Und ohne die Funktion macht es auch keinen Sinn, den Mime-Type überhaupt auszulesen.
Punkto Performance:
Hast du schon mal hardwarenahe programmiert? Ich spreche von Microprozessoren. Da kommt es Befehl für Befehl darauf an. Und mir wird denke ich jeder zustimmen, wenn ich sage: getimagesize macht noch viel mehr als diese “simple überprüfung”. Das heißt (es werden auf hardwarenahe Ebene (Da von man nur bit und Byte verändern kann) mehr Befehle ausgeführt --> Höherer Arbeitsaufwand. Und glaub mir. Ich kann das beurteilen. Ich weiß, wie Microchips arbeiten. Ich bin in einer Schule für Elektrotechnik mit Microelektronik. Ich kenne das Von-Neumann-Prinzip, weiß wie die Transistoren zusammengeschalten werden müssen und weiß, wie die HEX-Code-Befehle ausgeführt werden.
Punkto Prozessor:
PHP basiert zwar auf C(++) und ist mit C(++) programmiert. Aber er wird trotzdem nur von einem C(++)-Programm ausgeführt. Dieses Programm wird von dem Betriebssystem ausgeführt. Das ist grundstzlich in Assembler geschreben (Microprozessoren können ncihts anders) Assembler bietet sozusagen den “Interpreter” von Programmen.
PHP -> C(++) -> Assembler -> HEX-Codes -> Ausführung
Punkto Datenmüll:
Wie viele Leute schicken in dieser weise schadhaft manipulierte Daten? Nur Hacker. Und das ist die Minderheit. Und wenn der Hacker nicht aufräumt, hab ich immerhin nen anhaltspunkt, dass er es versucht hat. Also ist dieser “Müll” nicht schlimm. Der Speicher-Verbrauch ist gleich, weil beides abgespeichert wird, wenn es durch die “Schleuse” kommt.
Und bevor man nach einem “closed” ruft, lässt man andere sich zuerst noch verteidigen…
Falsch, der Linux-Kernel kann MIME-Typen je nach Inhalt erkennen. Wenn <?php als Indikator für PHP registiert ist, bekommit die Datei den MIME-Typ application/php zugewiesen und wird vom Server geparst.
Das ist aber normalerweise (auch aus Sicherheitsgründen) nicht der Fall.
Du hast behauptet, dass dein Script schneller ist… Ich hab dir nur gesagt, dass es das definitiv nicht ist.
Ich habe auch nie gesagt dass meine Lösung besser ist. Aber es ist AUCH eine Lösung.
Und das tolle am programmieren ist doch, dass man seine Probleme auf verschiedene Weisen lösen kann. Man muss nicht immer nur einen Weg gehen, nur weil 5 Leute meinen, er wäre besser.
Wenn es eine bessere Lösung gibt die zudem ‚newbie‘ freundlich ist sollte man diese auch empfehlen
Bis jetzt stand in den letzen 20 Post nur kram der eigentlich schon geklärt sein sollte wenn eine Person seinen ‚schlechteren oder gleichguten‘ Lösungsvorschlag nicht verteidigen würde.
Es ist der Lösungsansatz, den du gewählt hast, oder?
Diese ‚Anführungszeichen‘ sind unnötig.
Naja… wenn du nicht meine Lösungsansätze nicht ‚niederflamen‘ würdest, dann müsste ich mich nicht verteidigen. Ich lass meine Programmier-Fähigkeiten (ja, spar dir dein Kommentar) nicht einfach so von irgendjemandem, der noch nichts von mir gesehen hat nicht fertig machen.
du hast mir aber noch immer nicht begründet, warum mein Lösungsansatz ‚schlechter‘ sein sollte. Er funktioniert genau so. Bis jetzt hast du jeden meiner Fakten einfach ignoriert.
Ich habe nie gesagt, dass ein Ansatz besser wäre, als ein anderer. Er ist anders.
Und etwas Rhetorik und politische Korrektheit solltest du dir vielleicht auch angewöhnen, wenn du schon nicht mit deinen technischen Fähigkeiten glänzt. Der einzige konstruktive Beitrag deiner Seite war bis jetzt nur, das Wort getimagesize in den Raum zu werfen.