piet: Apache Passwortlänge

0 39

Apache Passwortlänge

piet
  • apache
  • perl
  • sicherheit
  1. 0
    dedlfix
  2. 0
    Google weiß alles
  3. 2

    Eine ganz generelle Bitte

    Google weiß alles
    1. 0
      piet
      1. 0
        MudGuard
        1. 0
          piet
          1. 0
            MudGuard
            1. 0
              piet
              1. 1

                Boah (Whiskey Tango Foxtrott)

                Google weiß alles
                • sicherheit
              2. 0
                dedlfix
      2. 0
        woodfighter
        1. 0
          piet
          1. 0
            woodfighter
            1. 0

              htpasswd

              Google weiß alles
          2. 0

            https

            Google weiß alles
            • apache
            • sicherheit
      3. 0

        Ein Lösungsweg

        Google weiß alles
        • apache
        1. 0
          Google weiß alles
          1. 0

            Vorsicht: Injection-Lücke

            woodfighter
            • apache
            • sicherheit
            1. 0
              dedlfix
              • menschelei
              • sicherheit
          2. 0
            Christian Kruse
            1. 0
              Google weiß alles
              1. 0
                woodfighter
                • apache
                • perl
                1. 0
                  Google weiß alles
                  1. 0
                    woodfighter
                    1. 0

                      Perl 5 und UTF-8 ...

                      Google weiß alles
                      1. 0
                        woodfighter
                        • perl
                        1. 0
                          Matthias Apsel
                          • menschelei
                          1. 0
                            woodfighter
                            1. 0
                              Matthias Apsel
                              1. 0
                                woodfighter
                                1. 0
                                  Matthias Apsel
                        2. 0
                          Google weiß alles
                  2. 0

                    Warum bei Perl bleiben?

                    Mitleser
                    • apache
                    • meinung
                    • perl
              2. 0
                woodfighter
                1. 0
                  Google weiß alles
            2. -1
              pl
              • apache
              • perl
              1. 0
                Mitleser
                1. 0
                  Thars

Hallo,

mit entsetzen habe ich festgestellt, das es beim login am Apache Webserver zu Problemen mit Passworten gibt ... lange Passworte werden auch teilweise akzeptiert.

die genaue Länge habe ich noch nicht herausgefunden.

d.h. kurze Passworte z.B. 6 Zeichen müssen komplett richtig sein (Normal) lange Passworte ca. ab 15 Zeichen werden schon nach 12 Zeichen akzeptiert. Das Passwort muss nicht komplett eingegeben werden.

Wo finde ich in der Apachekonfiguration, die Länge der Passworte die überprüft werden.

 Gruß
   piet
  1. Tach!

    Wo finde ich in der Apachekonfiguration, die Länge der Passworte die überprüft werden.

    Die Dokumentation ist immer ein guter Anlaufpunkt: htpasswd - Manage user files for basic authentication. Das kommt auch (bei mir) als erstes Ergebnis beim Suchen nach "apache password length"

    dedlfix.

  2. Wo finde ich in der Apachekonfiguration die Länge der Passworte, die überprüft werden.

    Die Frage ist, wie denn die Passwort-Hashes erstellt werden. Offenbar wird htpasswd -d verwendet, wofür das Manual eine maximale Länge von 8 Zeichen angibt. Der Rest wird vor dem Hashen mit crypt (sha1) abgeschnitten, was zu dem von Dir beschriebenen Verhalten passt.

    Das dieses Verfahren unsicher ist sagt das Handbuch explizit aus.

  3. Eine Bitte noch:

    Es ist eine gute Idee bei Fragen zu Software stets folgendes anzugeben:

    • Betriebssystem (mit Version)
    • Version der betroffenen Software
    • In Deinem Fall: Spezielle Packungen, z.B. dieses leidige XAMPP
    • Weitere bekannte und unter Umständen relevante Umstände, z.B. den Quelltext bzw. Programmcode. Hier die genaue Vorgehensweise, wie Du das gehashte Passwort erzeugst.

    Kann ja gut sein, dass Du unter Windows irgendwelchen XAMPP-Mist von einer Zeitschriften-CD aus dem Jahr 2001 laufen hast...

    Obige Angaben sparen Rückfragen und damit auch Deine Zeit.

    1. Hallo,

      nochmals mehr Infos

      SUSE 13.2 Apache 2.4.6

      basic authentication

      Das Passwort wird mittels Perl über die Funktion crypt erstellt.

      Aktuell weiß ich gar nicht, in welchem Konfigurationfile des Apache steht, welche Verschlüsselung ich benutze (auf jedenfall nur 8 Zeichen)

      Auch bin ich durch diese Suche auf "basic authentication" gestossen (das ich ebenfalls benutze), das mir das Passwort unverschlüsselt überträgt. Ich nutze kein https bzw. vpn oder so. Was haltet Ihr von "basic digest" ? Wenn ich schon mal beim ändern bin.

      Nochmals ... es ist nichts lebensnotwendiges am Server, trotzdem möchte ich den login optimal gestalten, trotz "greenhorn" ;-)

      Bitte kurze Hinweise/Tips, nicht nur auf die Beschreibung hinweisen. Das war meine erste Anlaufstelle, nur man muss erst mal wissen nach was man suchen muß/soll.

      Danke
      
      1. Hi

        Aktuell weiß ich gar nicht, in welchem Konfigurationfile des Apache steht, welche Verschlüsselung ich benutze (auf jedenfall nur 8 Zeichen)

        IIRC ergibt sich das aus dem verschlüsselten Passwort. Da wird am Anfang ein Erkennungsstring drangeklebt.

        cu,
        Andreas a/k/a MudGuard

        1. Hallo,

          Hi

          Aktuell weiß ich gar nicht, in welchem Konfigurationfile des Apache steht, welche Verschlüsselung ich benutze (auf jedenfall nur 8 Zeichen)

          IIRC ergibt sich das aus dem verschlüsselten Passwort. Da wird am Anfang ein Erkennungsstring drangeklebt.

          cu,
          Andreas a/k/a MudGuard

          d.h. wenn ich mein Passwort mit md5 verschlüssele weiß apache wie er das passwort bearbeiten/abfragen soll .... ist das so richtig ?

          das heißt auch, ich könnte zum testen einfach ein passwort so und ein anderes anders verschlüsseln ... ??

          ... und was sollte ich bevorzugt verwenden, zum verschlüsseln ?

          Danke
          
          1. Hi,

            d.h. wenn ich mein Passwort mit md5 verschlüssele

            Das scheitert schon daran, daß md5 keine Verschlüsselung ist, sondern ein Hash.

            cu,
            Andreas a/k/a MudGuard

            1. Hallo,

              Hi,

              d.h. wenn ich mein Passwort mit md5 verschlüssele

              Das scheitert schon daran, daß md5 keine Verschlüsselung ist, sondern ein Hash.

              cu,
              Andreas a/k/a MudGuard

              ... sorry ... ich dummerchen ... Linkbeschreibung steht hier als Verschlüsselung. Man kann keinen vertrauen.

              .... könnte nicht jemand anders als Andreas a/k/a MudGuard antworten. Ich würde gerne weiter kommen und nicht nur arrogant korrigiert werden.

              Danke

              1. ... sorry ... ich dummerchen ... Linkbeschreibung steht hier als Verschlüsselung.

                1. Das (htpasswdgenerator.de) ist <s>inzwischen</s> war und bleibt (s. 2.) Schrott.
                2. Das Passwort einer fremden Webseite spendieren... ich glaube mein Schwein spielt fröhlich den Kriminal-Tango auf der Geige.
                3. man htpasswd und das manual ist hilfreich.
              2. Tach!

                .... könnte nicht jemand anders als Andreas a/k/a MudGuard antworten. Ich würde gerne weiter kommen und nicht nur arrogant korrigiert werden.

                Den Link zum Handbuch habe ich schon vor zwei Tagen gepostet. Da stehen alle Möglichkeiten der Passworterzeugung drin.

                Es ist empfehlenswert, die vom System selbst bereitgestellten Mittel zu verwenden und nur wenn man die kennt, Hilfssysteme von Dritten dafür einzusetzen, damit man deren Ergebnisse mit dem Original vergleichen kann.

                dedlfix.

      2. Tach,

        SUSE 13.2 Apache 2.4.6

        Das Passwort wird mittels Perl über die Funktion crypt erstellt.

        Aktuell weiß ich gar nicht, in welchem Konfigurationfile des Apache steht, welche Verschlüsselung ich benutze (auf jedenfall nur 8 Zeichen)

        das ist ein Hash und keine Verschlüsselung und der, den du nutzt, heißt crypt und ist eher veraltet. Dein Apache unterstützt bcrypt als momentan empfehlenswerteste Variante.

        Auch bin ich durch diese Suche auf "basic authentication" gestossen (das ich ebenfalls benutze), das mir das Passwort unverschlüsselt überträgt. Ich nutze kein https bzw. vpn oder so. Was haltet Ihr von "basic digest" ? Wenn ich schon mal beim ändern bin.

        Ich halte nicht viel davon unverschlüsselte Dienste anzubieten (bei Basic Digest wird zwar das Passwort nicht im Klartext übertragen, aber alles andere schon), TLS ist keine nennenswerte Last für den Server und die Zertifikate sind auch kostenlos zu haben: https://wiki.selfhtml.org/wiki/TLS#Certificate_Authorities

        mfg
        Woodfighter

        1. Tach, das ist ein Hash und keine Verschlüsselung und der, den du nutzt, heißt crypt und ist eher veraltet. Dein Apache unterstützt bcrypt als momentan empfehlenswerteste Variante.

          ... das ist doch mal ne Aussage mit der man was anfangen kann. zwei Fragen

          1. Wie stelle ich auf bcrypt um
          2. Wie verschlüssele ich für bcrypt mein Passwort

          Auch bin ich durch diese Suche auf "basic authentication" gestossen (das ich ebenfalls benutze), das mir das Passwort unverschlüsselt überträgt. Ich nutze kein https bzw. vpn oder so. Was haltet Ihr von "basic digest" ? Wenn ich schon mal beim ändern bin.

          Ich halte nicht viel davon unverschlüsselte Dienste anzubieten (bei Basic Digest wird zwar das Passwort nicht im Klartext übertragen, aber alles andere schon), TLS ist keine nennenswerte Last für den Server und die Zertifikate sind auch kostenlos zu haben: https://wiki.selfhtml.org/wiki/TLS#Certificate_Authorities

          mfg
          Woodfighter

          https ... bin ich aktuell dabei, mit den Zertifikaten habe ich Probleme, da ich Sie selbst erstelle und die Browser dann maulen.

          vielen Dank

          1. Tach,

            1. Wie stelle ich auf bcrypt um

            du tauscht die Passwörter in das vom Apache für bcrypt erwartete Format aus: https://httpd.apache.org/docs/2.4/misc/password_encryptions.html

            1. Wie verschlüssele ich für bcrypt mein Passwort

            Gar nicht, du hashst höchstens mit bcrypt. Ich würde htpasswd -B verwenden, das kümmert sich auch gleich um Salt und den Rest; ich vermute mal für bcrypt in Perl wird es etwas auf CPAN geben.

            Ich halte nicht viel davon unverschlüsselte Dienste anzubieten (bei Basic Digest wird zwar das Passwort nicht im Klartext übertragen, aber alles andere schon), TLS ist keine nennenswerte Last für den Server und die Zertifikate sind auch kostenlos zu haben: https://wiki.selfhtml.org/wiki/TLS#Certificate_Authorities

            https ... bin ich aktuell dabei, mit den Zertifikaten habe ich Probleme, da ich Sie selbst erstelle und die Browser dann maulen.

            Dann solltest du wohl mal dem gegebenen Link folgen und den Text lesen.

            mfg
            Woodfighter

            1. ich vermute mal für bcrypt in Perl wird es etwas auf CPAN geben.

              Ja. Aber wie in Perl üblich ist die Benutzung cryptisch und das Handbuch trotz vieler Worte über die Theorie praktisch sehr schweigsam...

              Deshalb schlage ich vor einen Wrapper für htpasswd zu benutzen

          2. https ... bin ich aktuell dabei, mit den Zertifikaten habe ich Probleme, da ich Sie selbst erstelle und die Browser dann maulen.

            Ist das ein aus dem Internet über eine weltweit gültige Adresse erreichbarer Host?

            letsencrypt

            Einfacher geht es gar nicht. Der Browser meckert dann auch nicht...

      3. Das Passwort wird mittels Perl über die Funktion crypt erstellt.

        Ja. Und genau das ist der Fehler. crypt benutzt sha1 ohne Salt welches sogar unsicherer als die Apache-eigene, schwache und schwach gesalzene Implementation von MD5 ist.

        Sowas könnte Abhilfe schaffen, wird aber nicht jedem gefallen:

        sub htpasswd_wrapper {
            ## return a fin hashed password for Apache 2.4 oder 2.2
            ## usage htpasswd_wrapper($passwd_clear, '2.4') or usage htpasswd_wrapper($passwd_clear, '2.2')
        
             my $passwd_clear = shift;
             $passwd_clear =~ s/\"/\\\"/g;
             $passwd_clear =~ s/\`/\\\`/g;
             my $version = shift;
        
            my $sys; my $passwd_hash;
        
            if ( $version eq "2.2" ) {
                $sys = "echo \"$passwd_clear\" | /usr/bin/htpasswd -i -n \"USER\";";
                print $sys;
            } elsif ( $version eq "2.4" ) {
                $sys = "echo \"$passwd_clear\" | /usr/bin/htpasswd -i -n -B \"USER\";";
                print $sys;
            } else {
                $sys=false;
            }
        
            if ($sys) {
                $passwd_hash = `$sys`;
                $passwd_hash =~ s/^USER://;
                return $passwd_hash;
            } else {
                return false;
            }
        }
        $passwd_hash = htpasswd_wrapper("ha'llo", '2.4');
        print $passwd_hash . "\n";
        $passwd_hash = htpasswd_wrapper('ha"llo', '2.4');
        print $passwd_hash . "\n";
        $passwd_hash = htpasswd_wrapper('ha`ll`o', '2.4');
        print $passwd_hash . "\n";
        
        1. Ein paar Fehler der Fingerübung (überflüssige/falsche Zeilenumbrüche im Ergebnis) entfernt, strict hinzugefügt, mehr Tests. Verschönert.

          #!/usr/bin/perl
          use strict;
          
          sub htpasswd_wrapper {
              ## return a fine hashed password for Apache 2.4 oder 2.2
              ## usage htpasswd_wrapper($passwd_clear, '2.4')
              ## or htpasswd_wrapper($passwd_clear, '2.2')
          
              my $passwd_clear = shift;
              my $version      = shift;
              my $sys          = '';
              my $passwd_hash  = '';
              $passwd_clear    =~ s/\"/\\\"/g;
              $passwd_clear    =~ s/\`/\\\`/g;
          
              if      ( $version eq "2.2" ) {
                  $sys = "echo \"$passwd_clear\" | /usr/bin/htpasswd -in \"USER\";";
              } elsif ( $version eq "2.4" ) {
                  $sys = "echo \"$passwd_clear\" | /usr/bin/htpasswd -Bin \"USER\";";
              }
          
              if ($sys) {
                  $passwd_hash = `$sys`;
                  $passwd_hash =~ s/\s+$//;
                  $passwd_hash =~ s/^USER://;
                  return $passwd_hash;
              } else {
                  return '';
              }
          }
          
          ## Tests:
          my $passwd_hash;
          $passwd_hash = htpasswd_wrapper("hallo", '2.4');
          print $passwd_hash . "\n";
          $passwd_hash = htpasswd_wrapper("hallo", '2.4');
          print $passwd_hash . "\n";
          print '-' x 60 . "\n";
          $passwd_hash = htpasswd_wrapper("ha'llo", '2.4');
          print $passwd_hash . "\n";
          $passwd_hash = htpasswd_wrapper('ha"llo', '2.4');
          print $passwd_hash . "\n";
          $passwd_hash = htpasswd_wrapper('ha`ll`o', '2.4');
          print $passwd_hash . "\n";
          $passwd_hash = htpasswd_wrapper('ha` | less`o', '2.4');
          print $passwd_hash . "\n";
          
          1. Tach,

            Ein paar Fehler der Fingerübung (überflüssige/falsche Zeilenumbrüche im Ergebnis) entfernt, strict hinzugefügt, mehr Tests. Verschönert.

            #!/usr/bin/perl
            use strict;
            
            sub htpasswd_wrapper {
                ## return a fine hashed password for Apache 2.4 oder 2.2
                ## usage htpasswd_wrapper($passwd_clear, '2.4')
                ## or htpasswd_wrapper($passwd_clear, '2.2')
            
                my $passwd_clear = shift;
                my $version      = shift;
                my $sys          = '';
                my $passwd_hash  = '';
                $passwd_clear    =~ s/\"/\\\"/g;
                $passwd_clear    =~ s/\`/\\\`/g;
            
                if      ( $version eq "2.2" ) {
                    $sys = "echo \"$passwd_clear\" | /usr/bin/htpasswd -in \"USER\";";
                } elsif ( $version eq "2.4" ) {
                    $sys = "echo \"$passwd_clear\" | /usr/bin/htpasswd -Bin \"USER\";";
                }
            
                if ($sys) {
                    $passwd_hash = `$sys`;
                    $passwd_hash =~ s/\s+$//;
                    $passwd_hash =~ s/^USER://;
                    return $passwd_hash;
                } else {
                    return '';
                }
            }
            
            ## Tests:
            my $passwd_hash;
            $passwd_hash = htpasswd_wrapper("hallo", '2.4');
            print $passwd_hash . "\n";
            $passwd_hash = htpasswd_wrapper("hallo", '2.4');
            print $passwd_hash . "\n";
            print '-' x 60 . "\n";
            $passwd_hash = htpasswd_wrapper("ha'llo", '2.4');
            print $passwd_hash . "\n";
            $passwd_hash = htpasswd_wrapper('ha"llo', '2.4');
            print $passwd_hash . "\n";
            $passwd_hash = htpasswd_wrapper('ha`ll`o', '2.4');
            print $passwd_hash . "\n";
            $passwd_hash = htpasswd_wrapper('ha` | less`o', '2.4');
            print $passwd_hash . "\n";
            

            zu versuchen, escaping selber zu machen, ist eine sehr blöde Idee; ohne es gerade testen zu können dürfte hier ein PW in der Form $(/bin/evil) ausreichen.

            mfg
            Woodfighter

            1. Tach!

              Ein paar Fehler der Fingerübung [...]

              zu versuchen, escaping selber zu machen, ist eine sehr blöde Idee;

              Dabei hab ich ihm (selbst als er noch anders hieß) schon so oft gesagt, dass eine schnelle Fingerübung ebenfalls keine besonders gute Idee ist. Der Code wird ohne Nachzudenken kopiert, auch wenn man tausend Mal dranschreibt, dass das keine garantierte Lösung darstellt. Und dann war's das Selfhtml-Forum, das die Sicherheitslücke ins System gebracht hat.

              dedlfix.

          2. Hallo Google,

                $passwd_clear    =~ s/\"/\\\"/g;
                $passwd_clear    =~ s/\`/\\\`/g;
            

            Dafür gibt es quotemeta. Noch besser: nicht backpipes benutzen, sondern system, das eine Liste von Parametern erwartet, die nicht escaped sein müssen:

            system($command, @arguments);
            

            LG,
            CK

            1. Hm.

              quotemedia ist leider auch nicht der Weisheit letzter Schluss:

              #!/usr/bin/perl
              use strict;
              use utf8;         #if needed
              print quotemeta('#Ä') . "\n";
              print quotemeta('#ÄÄ') . "\n";
              print quotemeta('#öö') . "\n";
              print quotemeta('ha\'llo') . "\n";
              

              Output:

              \#�
              \#��
              \#��
              ha\'llo
              
              

              Also Mist. Utf-8? Geht es ohne?

              #!/usr/bin/perl
              use strict;
              #use utf8;         #if needed
              print quotemeta('#Ä') . "\n";
              print quotemeta('#ÄÄ') . "\n";
              print quotemeta('#öö') . "\n";
              print quotemeta('ha\'llo') . "\n";
              

              Ergebnis:

              \#\�\�
              \#\�\�\�\�
              \#\�\�\�\�
              ha\'llo
              

              Will auch keiner.

              Nächster Test:

              #!/usr/bin/perl
              use strict;
              #use utf8;         #if needed
              system ('echo', '#Ä') . "\n";
              system ('echo', '#ÄÄ') . "\n";
              system ('echo', '#öö') . "\n";
              system ('echo', '´$(ls -l);#!#öö\'" ') . "\n";
              system ('echo', 'ha\'llo') . "\n"
              

              Output:

              #Ä
              #ÄÄ
              #öö
              ´$(ls -l);#!#öö'" 
              ha'llo
              

              Ok. Geht. Ich bin belehrt:

              Ich brauche aber die Rückgaben! Also ist system() kein Weg. "Escape" ich doch wieder selbst … und mach es mir noch einfacher:

              #!/usr/bin/perl
              use strict;
              use autodie qw(:all);
              
              sub my_escape {
                  # gibt String in Hochkomma zurück, entwertet Hochkommas in String
                  ## ha'llo' -> 'ha'"'"'llo'
                  ## ha''llo' -> 'ha'"'"''"'"'llo'
                  my $s=shift;
                  $s =~ s/\'/\'\"\'\"\'/g;
                  return "'" . $s . "'";
              }
              
              sub htpasswd_wrapper {
                  ## return a fine hashed password for Apache 2.4 oder 2.2
                  ## usage htpasswd_wrapper($passwd_clear, '2.4')
                  ## or htpasswd_wrapper($passwd_clear, '2.2')
              
                  my $passwd_clear = shift;
                  my $version      = shift;
                  my $cmd='';
                  my $passwd_hash='';
              
                  if      ( $version eq "2.2" ) {
                      $cmd = '/usr/bin/htpasswd -bn \'USER\' ' . my_escape($passwd_clear);
                  } elsif ( $version eq "2.4" ) {
                      $cmd = '/usr/bin/htpasswd -bnB \'USER\' ' . my_escape($passwd_clear);
                  }
              
                  if ($cmd) {
                      $passwd_hash = `$cmd`;
                      $passwd_hash =~ s/\s+$//;
                      $passwd_hash =~ s/^USER://;
                      print "cmd = " . $cmd . "\n";    # Debug, löschen
                      print "echo-Test: ";             # Debug, löschen
                      my $test='echo ' .  my_escape($passwd_clear); # Debug, löschen
                      $test=`$test`;                   # Debug, löschen
                      print $test;                     # Debug, löschen
                      print $passwd_hash . "\n";       # Debug, löschen
                      print '-' x 60 . "\n";           # Debug, löschen
                      return $passwd_hash;
                  } else {
                      return '';
                  }
              }
              
              ## Tests/Usage:
              my $passwd_hash;
              $passwd_hash = htpasswd_wrapper("hallo", '2.4');
              $passwd_hash = htpasswd_wrapper("hallo", '2.4');
              
              print '-' x 60 . "\n";
              
              $passwd_hash = htpasswd_wrapper("ha'llo", '2.4');
              $passwd_hash = htpasswd_wrapper('ha"llo', '2.4');
              $passwd_hash = htpasswd_wrapper('ha`ll`o', '2.4');
              $passwd_hash = htpasswd_wrapper('ha` | less`o', '2.4');
              $passwd_hash = htpasswd_wrapper('!ÖÖööÄÄääüü\/\/', '2.4');
              $passwd_hash = htpasswd_wrapper('${cat /etc/passwd}', '2.4');
              $passwd_hash = htpasswd_wrapper('echo foo | ls -l', '2.4');
              $passwd_hash = htpasswd_wrapper('echo "foo" > /etc/htpasswd', '2.4');
              

              Stellt sich die Frage, warum man das in Perl tun sollte. Mit password_hash() in PHP erzeugte Hashs schluckt der Apache 2.4 nämlich.

              1. Tach,

                Ok. Geht. Ich bin belehrt:

                Ich brauche aber die Rückgaben! Also ist system() kein Weg. "Escape" ich doch wieder selbst … und mach es mir noch einfacher:

                quotemeta mit Backticks war dir zu sicher?

                mfg
                Woodfighter

                1. quotemeta mit Backticks war dir zu sicher?

                  Ich bin bezüglich "quotemeta mit Backticks" etwas desorientiert. Mir selbst sagt ein funktionsfähiges Beispiel (wo nicht, wie in der bei Perl-"Dokumenatation", 70% des zur Funktion führenden Quelltextes erraten werden muss) mehr als "tausend Worte".

                  Ich hatte doch gezeigt, dass quotemeta() bei Umlauten nicht das erwartete ausgab. Zwar habe ich mir die Hexcodes nicht ausgeben lassen, aber daraus einen Passwort-Hash zu erzeugen ist (gelinde gesagt) "todesmutig" ...

                  Nun ja. Perl und UTF-8 soll sich ja mit Perl 6 verbessern. Bin gespannt wie viele Entwickler dann auf Perl zurückgreifen ...

                  1. Tach,

                    Ich hatte doch gezeigt, dass quotemeta() bei Umlauten nicht das erwartete ausgab.

                    nein, nur, dass du nicht weißt, wie man UTF-8 mit PHP ausgibt (tat ich auch nicht, aber 5 Minuten suchen half):

                    use utf8;
                    my $a = quotemeta('ä');
                    print `echo $a`;
                    binmode(STDOUT, ":utf8");
                    print 'ä';
                    

                    mfg
                    Woodfighter

                    1. nein, nur, dass du nicht weißt, wie man UTF-8 mit PHP ausgibt (tat ich auch nicht, aber 5 Minuten suchen half):

                      Aha. In PHP habe ich keine Probleme. Dein Skript mal leicht abgewandelt und getestet:

                      Terminal:

                      $ echo $LANG
                      de_DE.UTF-8
                      

                      Skript:

                      #!/usr/bin/perl
                      ## file:///tmp/test4.pl
                      use strict;
                      
                      my $s;
                      my $a;
                      my $useUTF8 = shift;
                      
                      if ($useUTF8 eq 'u') {
                          print "benutze UTF-8\n";
                          use utf8;
                      }
                      
                      $s = 'äÄüÜöÖß';
                      $a = quotemeta($s);
                      
                      print "-"x14 , ' Start ', "-"x14, "\n";
                      print $a . "\n";
                      print `echo $a`;
                      print "-"x5 , 'binmode(STDOUT, ":utf8");', "-"x5, "\n";
                      
                      binmode(STDOUT, ":utf8");
                      
                      $s = 'äÄüÜöÖß';
                      $a = quotemeta($s);
                      print $a . "\n";
                      print `echo $a`;
                      print "="x36 , "\n\n";
                      

                      Output 1:

                      /tmp$ perl test4.pl u
                      benutze UTF-8
                      -------------- Start --------------
                      \�\�\�\�\�\�\�\�\�\�\�\�\�\�
                      äÄüÜöÖß
                      -----binmode(STDOUT, ":utf8");-----
                      \Ã\¤\Ã\\Ã\¼\Ã\\Ã\¶\Ã\\Ã\
                      äÃüÃöÃÃ
                      ====================================
                      

                      Output 2:

                      /tmp$ perl test4.pl
                      -------------- Start --------------
                      \�\�\�\�\�\�\�\�\�\�\�\�\�\�
                      äÄüÜöÖß
                      -----binmode(STDOUT, ":utf8");-----
                      \Ã\¤\Ã\\Ã\¼\Ã\\Ã\¶\Ã\\Ã\
                      äÃüÃöÃÃ
                      ====================================
                      

                      Brauchbar geht irgendwie anders ...

                      1. Tach,

                        nein, nur, dass du nicht weißt, wie man UTF-8 mit PHP ausgibt (tat ich auch nicht, aber 5 Minuten suchen half):

                        Aha. In PHP habe ich keine Probleme.

                        ah, Fipptehler.

                        Dein Skript mal leicht abgewandelt und getestet:

                        Aber nicht verstanden: der Wechsel von use utf8 zeigt schon, dass du nicht weißt, was es tut: Es ermöglicht, die Verwendung von UTF-8 als Kodierung für das Perl-Script selber; in welcher Kodierung hast du dein Script also abgespeichert?

                        Mein Script als UTF-8 kodierte Datei gibt bei mir zwei ä aus. Spielt man etwas mit Binmode herum, stellt man fest, dass es für Ausgaben von Rückgabewerten von qx() (und damit Backticks) nicht auf UTF-8 gesetzt werden darf.

                        mfg
                        Woodfighter

                        P.S. Könnte mir mal bitte jemand erklären, warum ich hier regelmäßig in Perl-Threads auftauche?

                        1. Hallo woodfighter,

                          P.S. Könnte mir mal bitte jemand erklären, warum ich hier regelmäßig in Perl-Threads auftauche?

                          Weil du eine Perle bist?

                          Bis demnächst
                          Matthias

                          --
                          Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                          1. Tach,

                            P.S. Könnte mir mal bitte jemand erklären, warum ich hier regelmäßig in Perl-Threads auftauche?

                            Weil du eine Perle bist?

                            der Bach, der durch Perleberg fließt?

                            mfg
                            Woodfighter

                            1. Hallo woodfighter,

                              der Bach, der durch Perleberg fließt?

                              Nö, nö. Das ist die Stepenitz, ich wohn da in der Nähe.

                              Bis demnächst
                              Matthias

                              --
                              Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                              1. Tach,

                                der Bach, der durch Perleberg fließt?

                                Nö, nö. Das ist die Stepenitz,

                                https://www.google.de/maps/place/53°05'27.0"N+11°52'16.0"E/@53.0910134,11.8701239,15z/data=!4m5!3m4!1s0x0:0x0!8m2!3d53.090833!4d11.871111, in OSM scheint er zu fehlen

                                ich wohn da in der Nähe.

                                Irgendwas muss ja um Berlin drum rum sein…

                                mfg
                                Woodfighter

                                1. Hallo woodfighter,

                                  https://www.google.de/maps/place/53°05'27.0"N+11°52'16.0"E/@53.0910134,11.8701239,15z/data=!4m5!3m4!1s0x0:0x0!8m2!3d53.090833!4d11.871111, in OSM scheint er zu fehlen

                                  war mir bis dato unbekannt. Aber die Wikipedia kennt ihn auch.

                                  Bis demnächst
                                  Matthias

                                  --
                                  Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                        2. Es [use utf8;] ermöglicht, die Verwendung von UTF-8 als Kodierung für das Perl-Script selber; in welcher Kodierung hast du dein Script also abgespeichert?

                          UTF-8 natürlich. Das steht nicht grundlos in $LANG mit drin.

                          Spielt man etwas mit Binmode herum, stellt man fest, dass es für Ausgaben von Rückgabewerten von qx() (und damit Backticks) nicht auf UTF-8 gesetzt werden darf.

                          echo '<strong>Sowas nervt gewaltig!</strong>';
                          
                  2. [...] Bin gespannt wie viele Entwickler dann auf Perl zurückgreifen ... [...]

                    Für Neuentwicklungen "from the scratch" bestimmt nur Exokten und Perverse. Aber es gibt eine ganze Menge an produktivem Code in Perl, in freier wie auch kommerzieller Software.

                    Bzggl. "Perl 6" bin ich mittlerweile auch sehr skeptisch geworden, aber "Perl 5" wird uns sicher noch eine ganze Weile begleiten.

              2. Tach,

                Ich brauche aber die Rückgaben! Also ist system() kein Weg.

                wozu brauchst du die Rückgaben? Es geht schließlich darum Passworte in Dateien zu schreiben, das macht htpasswd für dich.

                mfg
                Woodfighter

                1. wozu brauchst du die Rückgaben?

                  Ich selbst eigentlich gar nicht :-)

                  Es geht schließlich darum Passworte in Dateien zu schreiben, das macht htpasswd für dich.

                  Naja, der piet wäre gut beraten sich nach einem moderneren Tool für die Passwortverwaltung umzusehen statt an dem alten rumzumurksen. Wer weiß was da noch kaputt ist.

            2. use Shell qw(htpasswd);

              damit hat mich mal vor gefühlten 17 Jahren ein Praktikant überrascht, d.h., die Überraschung bestand für mich darin, dass er's benutzt hat und auch von selbst darauf gekommen ist.

              PS: Dass das hier keiner weiter kennt, überrascht mich nicht sonderlich.

              Und dann wäre noch CPAN mit erstklassigen Modulen für den Zugriff auf die Apache-Passwort-Datei bzw. Apache-Crypt-Algorithm.

              1. use Shell qw(htpasswd);

                Kannte ich auch nicht! Kurze Recherche ergab: kein Core-Modul! Sondern:

                https://metacpan.org/pod/Shell

                Zitat: "This package is included as a show case, illustrating a few Perl features. It shouldn't be used for production programs."

                PS: Dass das hier keiner weiter kennt, überrascht mich nicht sonderlich.

                Mich auch nicht, ist ja offensichtlich auch ziemlich nutzlos.

                1. Moin

                  Bildbeschreibung

                  Autsch :-)