Mehrfaches escaping beim speichern und lesen aus Config-Datei

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Michael M.
    LoxBus Spammer
    • 23.03.2016
    • 237

    #1

    Mehrfaches escaping beim speichern und lesen aus Config-Datei

    Hallo,

    ich habe damit begonnen ein PlugIn für die NetAtmo Wetterstationen zu schreiben. Bin nun kurz vor Fertig und stehe jetzt mit meinen bescheidenen Perl Kenntnissen da:
    Ich lasse die Werte aus meiner PlugIn Config Datei auslesen und in der HTML Datei einfügen - so wie ihr das auch in allen anderen PlugIns macht (ich habe mir viel von dem Fritz-PlugIn abgeschaut.)
    Allerdings ist es so, dass z.B. eine E-Mail Adresse aus der Konfig-Datei immer mit einem Backslash "" escapt wird:

    aus test@welt.com wird in dem Formular dann test\@welt\.com

    Sobald ich nun nochmals meine Werte in die Konfigurationsdatei schreibe (save) wird:

    aus test\@welt\.com -> test\\@welt\\.com

    Und so werden es bei jedem mal speichern mehr Backslashes... Bin am verzweifeln.


    Bin für jede Hilfe dankbar. Ich hab die index.cgi mal angehängt...

    Grüße

    Michael M.
    Angehängte Dateien
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11249

    #2
    Das Encoding ist fies!

    Schau mal hier:
    https://github.com/christianTF/LoxBe...mport.cgi#L566
    Zum Encoden von Werten im Formular (encode_entities)

    Dann solltest du die Formulardaten richtig in die Speicher-Routine zurückbekommen.

    lg, Christian

    PS: Zum Debuggen einfach alles mit print STDERR ausgeben und im /opt/loxberry/log/system/apache/error.log mitschauen.
    Code:
    print STDERR "Meine Variable: $variable\n";
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • Michael M.
      LoxBus Spammer
      • 23.03.2016
      • 237

      #3
      Hallo Christian,

      danke für den Hinweis, aber leider krieg ich es trotzdem nicht hin. Hab mal den ausschnitt aus dem Code dazugepackt.

      In der Config-Datei steht (ohne escaping):

      [NETATMO]
      USERNAME=max.mustermann@mail.com

      Im Formular wird der wert auch ohne encoding_entities korrekt angezeigt. Ändere ich jetzt den Wert im Formular, ist die Variable $username escaped und wird auch so in die Config Datei geschrieben:

      [NETATMO]
      USERNAME=max\.mustermann\@mail\.com

      Bei erneuten auslesen / aktualisieren des Web-Formulars wird dann der Wert mit den Backslashes angezeigt. Danach kommt bei jedem Speicher ein weitere Backslash hinzu.

      Ich brauch langsam für dieses Problem fast genausolang wie für den gesamten Rest des PlugIns :-(

      Grüße

      Michael

      Kommentar

      • Prof.Mobilux
        Supermoderator
        • 25.08.2015
        • 4986

        #4
        An der Stelle, wo Du in Perl die Werte aus dem Formular einliest (vermutlich ziemlich am Anfang) wird der Username mit "quotemeta()" behandelt. Das fügt Dir die Backslashes hinzu. Dann speicherst Du ab und die Backslashes werden mit abgespeichert.

        Du hast jetzt folgende Möglichkeiten:

        Entweder Du lässt beim Einlesen der Formulardaten "quotemeta()" weg (könnte ein Sicherheitsleck sein, wenn jemand "rm -rf /etc/passwd" in Dein Formular eingibt) oder Du benutzt, wenn Du in die Config-Datei abspeicherst, den Befehl "unquotemeta()" aus dem Modul "String::Escape", z. B. so:

        Code:
        use String::Escape qw( unquotemeta );
        $conf->param('NETATMO.USERNAME', unquotemeta($username) );
        🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


        LoxBerry - Beyond the Limits

        Kommentar

        • svethi
          Lebende Foren Legende
          • 25.08.2015
          • 6342

          #5
          Michael M. guck Dir mal mein Fritz.Lox richtig an .. aus diesem Grund nehme ich das quotemeta meistens gar nicht erst. Das die "gequotet" in der Config stehen ist schon "blöd" :-)
          Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

          Kommentar


          • svethi
            svethi kommentierte
            Kommentar bearbeiten
            eigentlich hast Du natürlich Recht :-) War froh das Perl ans Laufen zu bekommen :-)
            Okay, also wenn jemand in seinem Loxberry rm -rf / ins Formular eingibt, dann isser selber Schuld wenn er viel Platz auf der SD-Karte hat :-)

          • Christian Fenzl
            Christian Fenzl kommentierte
            Kommentar bearbeiten
            Prof.Mobilux In den Codeschnipsel, die ich beim Squeezelite anfangs zusammengetragen hab, hat quotemeta gar nicht funktioniert (weiß aber nicht mehr, woher ich das hatte).
            Als ich mir das dann mal angesehen und korrigiert hatte, war alles kaputt ("escaped to death").
            Wenn sich der angemeldete LoxBerry-Benutzer seine SD formatieren möchte: Bitte, bei mir kein Problem. Ich verzichte auf quotemeta :-)

          • Christian Fenzl
            Christian Fenzl kommentierte
            Kommentar bearbeiten
            @Prof.Mobilux: Der Code war übrigens von dir ;-)
            z.B. webfrontend/cgi/system/miniserver.cgi
            PHP-Code:
            # Start
            # 1. Miniserver
            $miniserverip                      = $cfg->param("MINISERVER1.IPADDRESS");
            $miniserverport                    = $cfg->param("MINISERVER1.PORT");
            $miniserveruser                    = $cfg->param("MINISERVER1.ADMIN");
            $miniserverkennwort                = $cfg->param("MINISERVER1.PASS");
            ...
            
            quotemeta($miniserverip);
            quotemeta($miniserverport);
            quotemeta($miniserveruser);
            quotemeta($miniserverkennwort);
            ... 
            
            Das quotemeta ist obsolet, weil's die Variable nicht ändert ;-)
        • Michael M.
          LoxBus Spammer
          • 23.03.2016
          • 237

          #6
          Mit unquotemeta funktioniert es so wie es soll! Super - vielen Dank. Hab natürlich gleich noch libstring-escape-perl in die apt Datei gepackt, damit das Modul auch dabei ist.

          Kommentar

          Lädt...