PHP / unzip / auf PWD prüfen

  • Huhu,


    kann ich irgendwie vorab prüfen, ob ein geziptes Archive passwortgeschützt ist oder muss ich versuchen es zu entzippen und mir den Rückgabewert anschauen?
    Ich würde gerne nicht geschützte Archive verbieten...


    Aktuell verwende ich:


    PHP
    1. exec("unzip -P $pwd $source -d $des", $ret_val);


    das funktioniert aber scheinbar auch wenn $source nicht geschützt ist.


    VG
    Olz.

  • Wenn du den Passwort-Parameter wegnimmst sollte er dir nen Fehler ausspucken, wenn das Archiv geschützt ist. Aber damit kannst du dir böse viren auf deinen Server holen, das würd ich lassen.


    Aber vielleicht hilt dir das hier weiter: http://www.pkware.com/documents/casestudies/APPNOTE.TXT
    dann kannst du selbst mit sicherheit prüfen, ob die Datei verschlüsselt ist.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.


    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Danke für die Antwort.


    In die APPNOTE.TXT habe ich bisher nur mal kurz reingeschaut...


    Mein einzige Idee ist nach wie vor erst mal das Upload ohne PWD zu entzippen und dann, falls es funktioniert hat, alles wieder zu löschen und dann abbrechen. Wenn es nicht funktioniert würde ich dann mit PWD weitermachen.


    Vielleicht gehts ja aber auch einfacher. Falls mir da keiner einen weiteren Tipp zu geben kann, muss ich wohl nochmal deine Datei genauer studieren. Ich kann das unzip leider lokal bei mir nicht testen - deshalb ist es etwas umständlich für mich da was zu probieren.


    Gruß
    Olz.

  • Was das testen angeht kann ich dir etwas helfen:


    Das einzige, was dir der Befehl vllt hilft, ist: wenn du unzip -t datei.zip mit einem Verschüsselten Archiv machst wird nach dem Passwort gefragt.



    Es gibt aber auch eine ZIP-Extension für PHP, die sollte Passwörter auch erkennen können.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.


    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • die ZipArchive extension erkennt leider keine Passwörter. Da es dir aber ja scheinbar darum geht, ungeschützte Archive zu verbieten könntest du doch die Extension verwenden, etwa so:



    Das braucht natürlich noch etwas feinere Überprüfungen, aber sollte mal als Anstoss reichen.

  • Kann es sein, dass der if-Fall:


    PHP
    1. if ( $zip->open($source); )


    auch bei geschützten Verzeichnissen ausgeführt wird? Wurde mir zumindest eben so berichtet.
    Ich kann leider nach wie vor selbst schlecht testen.


    PHP
    1. $res = $zip->open($source);
    2. if ($res === TRUE) {


    wird auch nicht viel nützen, oder?


    edit: nützt auch nix.


    Kann es sein, dass der open-Befehl auch bei geschützten Verzeichnissen noch ausgeführt wird und nur das öffnen der Dateiinhalte im Verzeichnis dann verweigert wird?


    VG
    Olz.


  • Kann es sein, dass der open-Befehl auch bei geschützten Verzeicnissen noch ausgeführt wird und nur das öffnene der Dateiinhalte im Verzeichnis dann verweigert wird?


    Die Zip-Bibliothek von PHP unterstützt keine Passwortfunktionen. Was genau passiert kann ich aber nicht sagen, da ich es nie angewandt habe.

  • sod. folgendes würde zwar funktionieren - gefällt mir aber (noch) nicht gut genug ums tatsächlich einzubauen (ist irgendwie mit try & error zusammengefummelt):


  • Da liest du aber das gesammte archiv, es würde aber ein einziger Byte reichen:

    PHP
    1. $buf = zip_entry_read($zip_entry, 1);


    An sonsten ist das wohl das beste, was man hinbekommt. Nicht viel anders sähe das in höheren Programmiersprachen aus (nur dass die möglicherweise eine Funktion haben, die auf ein Passwort prüft und/oder Exceptions werfen, wenn ein Passwort gesetzt ist).

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.


    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!