it-swarm.com.de

Wie kann ich feststellen, ob eine Datei mit der Erweiterung .png Code oder ein Bild enthält?

Ich hatte in den letzten Tagen Probleme, seit mein Webhost für POST in PHP Dateien gehackt wurde. Ich habe es mit Dateien mit der Erweiterung .png zu tun, die PHP Code enthalten. Ich kann nicht einmal versuchen, eine Datei nach der anderen zu bearbeiten, um zu prüfen, ob es sich um eine gültige .png -Datei handelt oder nicht.

Gibt es eine Möglichkeit, zu überprüfen, ob eine Datei mit einem .png echt oder falsch ist?

5
fiskolin

Ich hatte in den letzten Tagen Probleme, seit mein Webhost für POST in PHP Dateien gehackt wurde. Ich habe mich mit Dateien mit der Erweiterung .png befasst, die PHP Code enthalten.

Aus diesem Grund sollte die Fehlerprüfung in Ihrem Upload-Skript implementiert sein. Auf diese Weise können Sie die hochgeladene Datei testen, um sicherzustellen, dass die Daten gültig sind. Wenn die Daten ungültig sind, verwerfen Sie die Datei und zeigen Sie eine Fehlerwebseite an.

Ich kann nicht einmal versuchen, eine Datei nach der anderen zu bearbeiten, um zu prüfen, ob es sich um eine gültige PNG-Datei handelt. Gibt es eine Möglichkeit, zu überprüfen, ob eine Datei mit einer .png-Datei echt oder falsch ist?

Sie können ein Skript erstellen, das jede hochgeladene Datei öffnet, und die ersten Bytes überprüfen, um sicherzustellen, dass die Datei gültig ist. Dies ist jedoch in Zukunft ein unnötiger Schritt, wenn Sie Ihrem Upload-Skript die oben beschriebene Dateivalidierung hinzufügen möchten.

Machen Sie, wie in den Kommentaren angegeben, das Upload-Verzeichnis zu einem Verzeichnis, in dem das Ausführungsbit nicht gesetzt ist, um zumindest einen gewissen Schutz vor der Skriptausführung zu gewährleisten. Machen Sie den Ordner auch für die breite Öffentlichkeit nicht zugänglich, damit Sie die Dateien validieren können, und machen Sie sie für die Öffentlichkeit erst dann akzeptabel, wenn Sie sie validiert haben.

2
Mike

Gibt es eine Möglichkeit, zu überprüfen, ob eine Datei mit einer .png-Datei echt oder falsch ist?

Nein nicht wirklich.

Weil es in einer Antwort und in den Kommentaren vorgeschlagen wurde: Das Überprüfen der ersten X Bytes einer Datei ist keine richtige Methode, um festzustellen, ob sie PHP Code enthält oder nicht (was ist mit dem Inhalt nach dem ersten X?) Bytes?).

Darüber hinaus kann PHP Code in Metadaten oder IDAT-Chunks ausgeblendet werden. Dies bedeutet, dass Sie eine vollständig gültige Bilddatei haben können, die auch PHP Code enthält.

Es ist äußerst schwierig zu überprüfen Sie, ob ein Bild weitere schädliche Daten enthält oder nicht.

Was Sie also tun möchten, ist:

  • überprüfen Sie die Erweiterung. Wenn es sich um PNG handelt, wird es nicht ausgeführt (außer wenn Sie das Hochladen von HTAccess-Dateien zulassen oder eine LFI-Sicherheitslücke haben).
  • speichern Sie die Datei außerhalb des Webstamms (erneut kann sie nur über LFI ausgeführt werden).
  • verbiete die Ausführung in diesem Verzeichnis (kann wieder über LFI umgangen werden)
  • entferne alle Metadaten aus dem Bild (wodurch PHP Code aus den Metadaten entfernt wird)
  • transformiere das Bild in ein anderes Format (wodurch PHP Code in IDAT-Chunks oder ähnlichen Methoden zerstört wird)
  • wie @ mani sagte, können Sie die hochgeladene Datei nach öffnenden PHP Tags durchsuchen. Sie möchten auf jeden Fall nach <?php, <?= und <script suchen (Groß-/Kleinschreibung wird nicht berücksichtigt). Außerdem möchten Sie möglicherweise nach <? (sofern kurze Tags zulässig sind) und <% (sofern asp-Tags zulässig sind) suchen. Dies sollte sich um PHP Code kümmern, aber nicht um andere möglicherweise schädliche Inhalte.
2
tim

Heutzutage haben sie in den meisten Hosts aus Sicherheitsgründen die Kurztags "<?". deaktiviert.

Sie können also in der hochgeladenen Datei nach "<?php" grep/strstr suchen. Wenn eine Übereinstimmung gefunden wird, löschen Sie einfach die Datei.

Wir haben dies für eine lange Zeit verfolgt und es scheint sehr gut zu funktionieren.

2
Mani