Maik-HP: Frage zum Wiki-Artikel ‚Loginsystem‘

problematische Seite

Das "Hashen" eines Passwortes bzw. das Anlegen eines neuen Users gelingt mir nicht.

Den Username trage ich einfach in die .htpasswd ein, aber ich bekomme kein Passwort zu diesem User generiert.

mein Server hat PHP V5.3

Frage 1: Gibt es einen Generator womit ich für dieses Skript konforme Passwörter generieren kann? Wenn nicht, wie kann ich Passwörter selber erstellen?

Frage 2: Kann ich die Benutzerdaten auch in eine mySql DB Speichern und abfragen mit diesem Skript?

Ansonsten funktioniert alles bestens!!

LG

https://wiki.selfhtml.org/wiki/PHP/Anwendung_und_Praxis/Loginsystem

  1. problematische Seite

    Tach,

    Das "Hashen" eines Passwortes bzw. das Anlegen eines neuen Users gelingt mir nicht.

    Den Username trage ich einfach in die .htpasswd ein, aber ich bekomme kein Passwort zu diesem User generiert.

    mein Server hat PHP V5.3

    Frage 1: Gibt es einen Generator womit ich für dieses Skript konforme Passwörter generieren kann? Wenn nicht, wie kann ich Passwörter selber erstellen?

    das Script sieht dazu die Funktion password_hash vor.

    Frage 2: Kann ich die Benutzerdaten auch in eine mySql DB Speichern und abfragen mit diesem Skript?

    Mit diesem nein; Passwörter, die mit diesen Methoden erzeugt wurden, ja.

    mfg
    Woodfighter

  2. problematische Seite

    Moin!

    Das "Hashen" eines Passwortes bzw. das Anlegen eines neuen Users gelingt mir nicht.

    Den Username trage ich einfach in die .htpasswd ein, aber ich bekomme kein Passwort zu diesem User generiert.

    mein Server hat PHP V5.3

    Updaten! Unbedingt. Eigentlich willst du so schnell wie möglich PHP 7 benutzen - es ist doppelt so schnell. Vermutlich wird dein PHP 5.3-Code aber noch ein paar Stolperfallen enthalten bezüglich längst abgekündigter Funktionen, die in 7 endlich entfernt wurden - es könnte also nicht ganz so pflegeleicht sein. Trotzdem ist die Benutzung von PHP 5.3 unverantwortlich geworden - und angesichts der bei späteren Versionen immer noch vorhandenen Geschwindigkeitsgewinne und neuer Features hat PHP 5.3 in meinen Augen so langsam den Status eines Internet Explorers 6 - den will auch keiner mehr berücksichtigen, weil er Dinge komplizierter und ekliger macht.

    Ich hab mir die Wiki-Seite mal angeschaut, und ich war jetzt nicht so vom Hocker gehauen.

    Zunächst mal war die abenteuerliche Freihand-Implementierung der Password-API auffällig: Es gibt dafür ein Paket vom Autor der Password-API, wie sie in PHP 5.5 implementiert wurde, und es gibt keinen Grund, die nicht zu verwenden. Einfach einbinden - fertig.

    Zweitens ist in dem Skript zum Ausliefern von Nicht-PHP-Ressourcen eine fette Sicherheitslücke, die es erlauben würde, sämtliche auf dem Server befindliche Dateien, die der PHP-Prozess lesen darf, abzufragen. Ich hab das Skript erstmal gelöscht und eine Bemerkung hinterlassen, bevor das noch irgendwo weiter zum Einsatz kommt.

    Unter diesem Eindruck würde ich jetzt sagen:

    Frage 1: Gibt es einen Generator womit ich für dieses Skript konforme Passwörter generieren kann? Wenn nicht, wie kann ich Passwörter selber erstellen?

    Frage 2: Kann ich die Benutzerdaten auch in eine mySql DB Speichern und abfragen mit diesem Skript?

    Ansonsten funktioniert alles bestens!!

    Wie kannst du behaupten, dass alles bestens funktioniert, wenn die wichtigste Funktion, nämlich das Einloggen mit einem gültigen Account, bislang von dir nicht getestet werden konnte, weil du kein gehashtes Passwort eintragen konntest? Das Skript könnte komplett kaputt sein und immer nur mit Status 403 antworten.

    IP-Pinning ist auch ohne weiteren Kommentar drin - da sollte man sich ganz genau überlegen, ob der Wechsel der IP eines Users einen Logout bewirken soll, oder nicht. Ich denke da zwar immer noch an Load-Balancer-Zwangsproxyfarmen mit mehrern IPs (gerüchteweise gab es die bei AOL - und im Zweifel auch bei den wichtigsten Firmenkunden), aber viel mehr noch denke ich an mobile Anwendungen mit Zwangs-NAT und dem beliebigen Wechsel der Funkzellen und der daraus eventuell folgenden IP-Wechsel, sowie auch an IPv6, bei dem der Wechsel der IP sogar ein Feature zum Schutz der Privatsphäre darstellt, und ein Rechner grundsätzlich mit mehr als einer IP gleichzeitig auf einem Netzwerk-Device arbeitet.

    Ich hab mir mehr noch nicht angeschaut, aber ich bin einigermaßen sicher, dass in dem Beispielcode noch ein oder zwei weitere Überraschungen drinstecken, die man wissen und bedenken sollte.

    Insofern nimm das Skript bitte als Demonstration eines Prinzips, aber nicht als kopierbaren und bei dir einsetzbaren Code. Du bist immer noch selbst verantwortlich für die Sicherheit deines Systems - und es ist tatsächlich schlauer, du machst deine eigenen kreativen Sicherheitslücken rein, die deswegen keiner findet, weil sie nur mit Kenntnis des Codes auffindbar sind, anstatt dass du öffentlich einsehbaren Code kopierst, bei dem die Lücken sich auf den ersten Schlag offenbaren.

    Noch schlauer wäre es natürlich, solche Dinge von existierendem, gut auf blöde Sicherheitslücken untersuchten Code durchführen zu lassen. Wie gut sind deine PHP-Kenntnisse wirklich? Schon mit Composer gearbeitet? OOP? Es gibt zahlreiche Bibliotheken, die zum Thema Authentifizierung existieren (alle nutzen die PHP-Password-API, die im Wiki-Artikel auch benutzt wird), und für Sessions ebenfalls.

    https://wiki.selfhtml.org/wiki/PHP/Anwendung_und_Praxis/Loginsystem

    Grüße Sven

    1. problematische Seite

      Zweitens ist in dem Skript zum Ausliefern von Nicht-PHP-Ressourcen eine fette Sicherheitslücke, die es erlauben würde, sämtliche auf dem Server befindliche Dateien, die der PHP-Prozess lesen darf, abzufragen. Ich hab das Skript erstmal gelöscht und eine Bemerkung hinterlassen, bevor das noch irgendwo weiter zum Einsatz kommt.

      Im von Dir entfernten Abschnitt steht aber:

      if ( isset($_GET['file']) && $_GET['file'] ) {
         $_GET['file'] = './' . $_GET['file'];
         $forbidden=array('../', '/..', '/.ht');
         $_GET['file'] = str_replace($forbidden, '', $_GET['file']);
      

      Danach beginnt der Inhalt von $_GET['file'] auf jeden Fall mit './' (dem aktuellen Verzeichnis) und ist um alle Zeichenfolgen bereinigt, mit denen auf ein tieferes Verzeichnis und die im Apache gesperrten '.ht-Dateien' zugegriffen werden kann.

      Wie soll denn da eine Traversal-Lücke entstehen?

      1. problematische Seite

        Hallo Regina,

        if ( isset($_GET['file']) && $_GET['file'] ) {
           $_GET['file'] = './' . $_GET['file'];
           $forbidden=array('../', '/..', '/.ht');
           $_GET['file'] = str_replace($forbidden, '', $_GET['file']);
        

        Danach beginnt der Inhalt von $_GET auf jeden Fall mit './' (dem aktuellen Verzeichnis) und ist um alle Zeichenfolgen bereinigt, mit denen auf ein tieferes Verzeichnis und die im Apache gesperrten '.ht-Dateien' zugegriffen werden kann.

        Eben nicht.

        <?php
        $f = '....///......//etc/passwd';
        
        $f = './' . $f;
        $forbidden=array('../', '/..', '/.ht');
        $f = str_replace($forbidden, '', $f);
        echo $f;
        

        Gibt ./../etc/passwd. Durch weiteres einfügen von ///...... kann man auch weiter den Baum herauf. Ist mir aber auch erst nach Svens Posting aufgefallen.

        LG,
        CK

        1. problematische Seite

          Hallo Regina,

          if ( isset($_GET['file']) && $_GET['file'] ) {
             $_GET['file'] = './' . $_GET['file'];
             $forbidden=array('../', '/..', '/.ht');
             $_GET['file'] = str_replace($forbidden, '', $_GET['file']);
          

          Danach beginnt der Inhalt von $_GET auf jeden Fall mit './' (dem aktuellen Verzeichnis) und ist um alle Zeichenfolgen bereinigt, mit denen auf ein tieferes Verzeichnis und die im Apache gesperrten '.ht-Dateien' zugegriffen werden kann.

          Eben nicht.

          <?php
          $f = '....///......//etc/passwd';
          
          $f = './' . $f;
          $forbidden=array('../', '/..', '/.ht');
          $f = str_replace($forbidden, '', $f);
          echo $f;
          

          Gibt ./../etc/passwd. Durch weiteres einfügen von ///...... kann man auch weiter den Baum herauf. Ist mir aber auch erst nach Svens Posting aufgefallen.

          Tatsächlich. Jemand möge Dir ein Plus geben.

          Wäre diesem Angriffsvector denn dann durch

          $forbidden=array('//', '../', '/..', '/.ht');
          

          zu begegnen?

          1. problematische Seite

            Hallo Regina,

            Tatsächlich. Jemand möge Dir ein Plus geben.

            Lieber dem Sven, der hats gesehen.

            Wäre diesem Angriffsvector denn dann durch

            $forbidden=array('//', '../', '/..', '/.ht');
            

            zu begegnen?

            Ich würde hier lieber auf Nummer sicher gehen und die relativen Elemente auflösen und dann erst prüfen, ob der Pfad erlaubt ist. Stichwort realpath.

            LG,
            CK

          2. problematische Seite

            Moin!

            Wäre diesem Angriffsvector denn dann durch

            $forbidden=array('//', '../', '/..', '/.ht');
            

            zu begegnen?

            Ich würde da kein Geld drauf verwetten. Die Idee krankt grundsätzlich an der Tatsache, dass reale Verzeichnispfade "nur" mit Stringoperationen bearbeitet werden.

            Relative Pfade sind immer problematisch. Man weiß nie so genau, auf welcher Basis die aufsetzen - einmal in PHP ein passendes chdir() aufgerufen, und schon sind die ganzen Pfade relativ zu diesem gesetzten Verzeichnis, und nicht mehr zum Skript selbst.

            Die korrekte Vorgehensweise wäre, mit realpath() das Dateisystem zu befragen, auf welchem absoluten Pfad man mit der relativen (oder auch absoluten) Angabe man landet, und danach zu prüfen, ob dieses Ergebnis den Präfix des auszuliefernden Verzeichnisses hat (beispielsweise innerhalb von DOCUMENT_ROOT liegt) - andernfalls nichts ausliefern.

            Grüße Sven

            1. problematische Seite

              Moin!Moin!

              Wäre diesem Angriffsvector denn dann durch

              $forbidden=array('//', '../', '/..', '/.ht');
              

              zu begegnen?

              Ich würde da kein Geld drauf verwetten. Die Idee krankt grundsätzlich an der Tatsache, dass reale Verzeichnispfade "nur" mit Stringoperationen bearbeitet werden.

              Man gut, dass ich es nicht getan habe:

              $_GET['file'] = './.ht././.ht././.ht././.ht./.ht/./.ht./.ht/./.ht./.ht/.ht/etc/passwd';

              Ergebnis: string(30) "./../../../../../../etc/passwd"

              Grüße Sven

            2. Hallo Sven, @Matthias Scharwies

              Die Idee krankt grundsätzlich an der Tatsache, dass reale Verzeichnispfade "nur" mit Stringoperationen bearbeitet werden.

              Die korrekte Vorgehensweise wäre, mit realpath() das Dateisystem zu befragen, auf welchem absoluten Pfad man mit der relativen (oder auch absoluten) Angabe man landet, und danach zu prüfen, ob dieses Ergebnis den Präfix des auszuliefernden Verzeichnisses hat (beispielsweise innerhalb von DOCUMENT_ROOT liegt) - andernfalls nichts ausliefern.

              Dann müsste man – je nach Webserver – immer noch auf die .hta-Dateien achten, außerdem erlaubt nicht jeder Hoster Verzeichnisse außerhalb des Document-Roots.

              M. M. n. wäre das ein Fall für einen Artikel(-teil) im Wiki, z. B. unter dem Begriff Sicherheit von Webapllikationen.

              Gruß
              Julius

              1. Lieber Julius,

                Dann müsste man – je nach Webserver – immer noch auf die .hta-Dateien achten, außerdem erlaubt nicht jeder Hoster Verzeichnisse außerhalb des Document-Roots.

                in solchen Fällen ist ein Dialog mit dem Serverbetreiber ohnehin unerlässlich, da dieser das Sicherheitskonzept zu verantworten hat. Das lässt sich nicht durch einen Wiki-Artikel hier ersetzen.

                Liebe Grüße,

                Felix Riesterer.

                1. Hallo Felix,

                  Dann müsste man – je nach Webserver – immer noch auf die .hta-Dateien achten, außerdem erlaubt nicht jeder Hoster Verzeichnisse außerhalb des Document-Roots.

                  in solchen Fällen ist ein Dialog mit dem Serverbetreiber ohnehin unerlässlich, da dieser das Sicherheitskonzept zu verantworten hat. Das lässt sich nicht durch einen Wiki-Artikel hier ersetzen.

                  Oh, ich sehe gerade, dass ich beim letzten Post Mist gebaut habe: Ich wollte eigentlich ausdrücken, dass ich die Traversal-Lücke im Wiki mit ein paar Beispiellösungen und deren Problemen bzw. Stolperstricken (u. a. ob im Webroot schützenswerte Dokumente liegen, wie eben .hta und php-Dateien mit Datenbankzugangsdaten) behandeln, bzw. dafür sensibilisieren wollte und keinesfalls erschöpfend, wie man die realpath-Lösung richtig implementiert.

                  Gruß
                  Julius

          3. problematische Seite

            Liebe Regina,

            Wäre diesem Angriffsvector denn dann durch

            $forbidden=array('//', '../', '/..', '/.ht');
            

            nein, aber durch diesen:

            while (substr_count('../', $path)) {
                $path = str_replace('../', '', $path);
            }
            

            Liebe Grüße,

            Felix Riesterer.

            1. problematische Seite

              Tach,

              nein, aber durch diesen:

              while (substr_count('../', $path)) {
                  $path = str_replace('../', '', $path);
              }
              

              bevor ich Gefahr laufen würde, durch einen Symlink, der auf ein anderes Verzeichnis zeigt oder durch Escaping (bin mir nicht sicher, ob nicht „../“ dafür schon wieder ausreicht), Character-Sequences o.ä., hier eine Sicherheitslücke einzubauen, würde ich immer mit dem mehrfach erwähnten realpath prüfen, ob ich am richtigen Ort bin; die Wahrscheinlichkeit, dass man alle denkbaren Fälle mit einer Blacklist abdeckt ist einfach nicht hoch genug. Hinzu kommt, dass ich nicht verstehe, warum ich an der Stelle versuchen sollte den Pfad überhaupt zu korrigieren, wenn hier eine solche Manipulation festgestellt wird, wäre es sinnvoller direkt mit einem HTTP 403 zu antworten.

              mfg
              Woodfighter

      2. problematische Seite

        Moin!

        Im von Dir entfernten Abschnitt steht aber:

        if ( isset($_GET['file']) && $_GET['file'] ) {
           $_GET['file'] = './' . $_GET['file'];
           $forbidden=array('../', '/..', '/.ht');
           $_GET['file'] = str_replace($forbidden, '', $_GET['file']);
        

        Danach beginnt der Inhalt von $_GET['file'] auf jeden Fall mit './' (dem aktuellen Verzeichnis) und ist um alle Zeichenfolgen bereinigt, mit denen auf ein tieferes Verzeichnis und die im Apache gesperrten '.ht-Dateien' zugegriffen werden kann.

        Wie soll denn da eine Traversal-Lücke entstehen?

        Wie ja schon experimentell bestätigt wurde, ist der Trick hier die Eigenschaft von str_replace, nicht rekursiv zu ersetzen. Sofern irgendwo die Zeichenkette "../" gefunden wird, wird sie durch einen Leerstring ersetzt. Danach geht es bei den rechts daneben befindlichen Zeichen weiter. Wenn durch die Ersetzung von links und rechts Zeichen, die vorher nicht findbar waren, zu einer "bösen" Zeichenkette zusammenwachsen, werden sie nicht noch einmal ersetzt.

        Sprich: Im String nur "../" durch "" zu ersetzen kann umgangen werden durch "....//" - das mittlere "../" wird durch Leerstring ersetzt, der Rest davor (nur zwei Punkte "..") und danach (nur ein "/") passt nicht auf das Suchmuster. Das Resultat ist "../" und wird nicht weiter angetastet von der Ersetzung.

        Wenn man, wie hier, mehrere Suchstrings hat, wird str_replace() diese nacheinander suchen und beim Finden ersetzen. Das bedeutet, ich muss meinen Zielstring rückwärts so um die entfernten Ersetzungsmuster anreichern, dass diese, von hinten nach vorn durch das Array gehend, mit Fake-Fundstellen aufgesplittet werden.

        Grüße Sven

  3. problematische Seite

    Frage 1: Gibt es einen Generator womit ich für dieses Skript konforme Passwörter generieren kann? Wenn nicht, wie kann ich Passwörter selber erstellen?

    Auf der problematische Seite steht unter "Umsetzung, Test und Download" in FETTSCHRIFT:

    Bitte beachten Sie: Das System wird hier des Umfangs wegen nur in den Grundzügen beschrieben. Testen können Sie das System hier.

    Melde ich als "adm" an, dann kannst Du auch die Verwaltung testen. Weiter dort:

    Es gibt dort auch einen Download mit einer Online-Verwaltung für Benutzer und Gruppen. Diese Software ist derzeit im BETA-Test.

    Das steht da also. Dick und fett. Das sagt mir aber, dass Du nicht mal die hervorgehobenen Teile gelesen hast. Das sollte man aber stets tun!

    Da wir gerade dabei sind: Hat eigentlich jemand den Autor gewarnt?

    Schau also nach ob im Download die Traversal-Lücke in der getFile.php behoben wurde. Im Wiki ist das offenbar geschehen. Offenbar hat zwar nicht der BETA-Test aber "open-souce" funktioniert.

    Frage 2: Kann ich die Benutzerdaten auch in eine mySql DB Speichern und abfragen mit diesem Skript?

    Ja. Aber da musst Du einiges umschreiben oder umschreiben lassen. Für das Login die Funktionen "getHashedPassword" und "getGroups". In der Online-Verwaltung dann natürlich auch. Ob sich das lohnt korreliert mit der Antwort auf die Frage wie viele Benutzer Du denn verwalten willst.

    1. problematische Seite

      Tach,

      Da wir gerade dabei sind: Hat eigentlich jemand den Autor gewarnt?

      entweder das oder er scheint hier noch mitzulesen: Die Version im Zip-File entspricht der neuen Version im Wiki.

      mfg
      Woodfighter

      1. problematische Seite

        Hallo woodfighter,

        er scheint sogar mit zuschreiben, ich sage nur „Königin“ ;-)

        Gruß
        Julius

        1. problematische Seite

          Hallo,

          er scheint sogar mit zuschreiben, ich sage nur „Königin“ ;-)

          den Eindruck hatte ich auch schon mal, aber es war mehr eine schwache Ahnung als ein solider Verdacht.

          So long,
           Martin

        2. problematische Seite

          Hallo Julius,

          er scheint sogar mit zuschreiben, ich sage nur „Königin“ ;-)

          Hm. Warum sehe ich da keinen Zusammenhang?

          Bis demnächst
          Matthias

          --
          Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
          1. Hallo Matthias,

            er scheint sogar mit zuschreiben, ich sage nur „Königin“ ;-)

            Hm. Warum sehe ich da keinen Zusammenhang?

            Wahrscheinlich, weil du dich nie mit Latein auseinandersetzen musstest.

            Gruß
            Julius

            1. Hallo Julius,

              Hm. Warum sehe ich da keinen Zusammenhang?

              Wahrscheinlich, weil du dich nie mit Latein auseinandersetzen musstest.

              ah: Regina. Inzwischen habe ich auch das „l“ entdeckt. Früher habe ich immer Schauklug gelesen.

              Bis demnächst
              Matthias

              --
              Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
              1. Hallo Matthias,

                Hm. Warum sehe ich da keinen Zusammenhang?

                Wahrscheinlich, weil du dich nie mit Latein auseinandersetzen musstest.

                Inzwischen habe ich auch das „l“ entdeckt. Früher habe ich immer Schauklug gelesen.

                ... was ja nicht unbedingt weniger Sinn macht als „Schlauklug“ – ein Freud’scher Verleser also...

                Gruß
                Julius

              2. Hallo Matthias,

                ah: Regina.

                ja, die weibliche Form von rex. Wobei mich schon immer gewundert hat, warum da noch ein in mit reinrutscht, obwohl der Wortstamm AFAIK nur reg- ist. Es ist erstaunlich, wo das in heutigen Sprachen noch überall wieder auftaucht; auch das Regieren leitet sich wahrscheinlich davon ab.

                Nur was das Regal für eine königliche Abstammung hat, kann ich mir nicht erklären.

                Inzwischen habe ich auch das „l“ entdeckt. Früher habe ich immer Schauklug gelesen.

                Das finde ich interessant! Ging mir nämlich auch lange Zeit so.

                So long,
                 Martin

                --
                Bei der Umsetzung von guten Ideen hapert es meist viel mehr an der Wolle als an der Könne.
                1. Servus!

                  Nur was das Regal für eine königliche Abstammung hat, kann ich mir nicht erklären.

                  Nichts, ist ein Homonym. Wörter, die nur zufällig den gleichen Namen haben:

                  http://www.wissen.de/wortherkunft/regal

                  Inzwischen habe ich auch das „l“ entdeckt. Früher habe ich immer Schauklug gelesen.

                  Herzliche Grüße

                  Matthias Scharwies

                  --
                  Es gibt viel zu tun - packen wir's an: ToDo-Liste gewünschte Seiten
                2. Hallo Der Martin,

                  Nur was das Regal für eine königliche Abstammung hat, kann ich mir nicht erklären.

                  Venna schrieb: Keine

                  Inzwischen habe ich auch das „l“ entdeckt. Früher habe ich immer Schauklug gelesen.

                  Das finde ich interessant! Ging mir nämlich auch lange Zeit so.

                  Das finde ich nun wirklich beachtenswert.

                  Offenbar erblickte Regina am 17.3.2015 das Licht der Welt und zwar immer schon als „Schlauklug“. Es hätte ja auch sein können, dass sich tatsächlich ein „Schauklug“ eingeschlichen hatte.

                  Bis demnächst
                  Matthias

                  --
                  Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
                3. Hi,

                  ja, die weibliche Form von rex. Wobei mich schon immer gewundert hat, warum da noch ein in mit reinrutscht, obwohl der Wortstamm AFAIK nur reg- ist.

                  Vielleicht als Verkleinerungsform? So wie bei Viola (Bratsche) und Violina (Geige). Oder pane (Brot) und panino (Brötchen)

                  Als Gegenstück die Vergrößerung mit "on": Tromba = Trompete, Trombona = Posaune (Posaune ist tiefer, weil das Rohr deutlich länger ist), oder polpetta = Fleischpflanzerl, polpettone = Hackbraten.

                  cu,
                  Andreas a/k/a MudGuard

                  1. Moin,

                    ja, die weibliche Form von rex. Wobei mich schon immer gewundert hat, warum da noch ein in mit reinrutscht, obwohl der Wortstamm AFAIK nur reg- ist.

                    Vielleicht als Verkleinerungsform?

                    daran hatte ich auch schon gedacht, aber a) müsste einem dann trotzdem die Wortform ohne Diminutiv rega schon mal begegnet sein, wenn es sie gibt, und b) ist im Lateinischen AFAIK ul die Silbe, die beim Diminutiv eingeschoben wird (ursa -> ursula, rex -> regulus). Mein Wissen in dem Bereich ist allerdings Stückwerk; ich habe nicht einmal das kleine Latrinum.

                    So wie bei Viola (Bratsche) und Violina (Geige). Oder pane (Brot) und panino (Brötchen)

                    Im Italienischen, ja. Sogar bei Eigennamen: il nostro Tomasino, unser kleiner Thomas.

                    Als Gegenstück die Vergrößerung mit "on": Tromba = Trompete, Trombona = Posaune (Posaune ist tiefer, weil das Rohr deutlich länger ist), oder polpetta = Fleischpflanzerl, polpettone = Hackbraten.

                    Das ist mir noch nicht bewusst aufgefallen, interessant.

                    So long,
                     Martin

                    --
                    Bei der Umsetzung von guten Ideen hapert es meist viel mehr an der Wolle als an der Könne.
                    1. Tach,

                      daran hatte ich auch schon gedacht, aber a) müsste einem dann trotzdem die Wortform ohne Diminutiv rega schon mal begegnet sein, wenn es sie gibt, und b)

                      ich würde vermuten, dass die Ableitung schon in der Vorgängersprache passiert ist und deswegen nicht der lateinischen Regel entspricht; rex ist nämlich vermutlich älter als die lateinische Sprache: https://en.wiktionary.org/wiki/rex#Latin.

                      ist im Lateinischen AFAIK ul die Silbe, die beim Diminutiv eingeschoben wird (ursa -> ursula, rex -> regulus).

                      Da gibt's noch ein paar mehr: https://de.wikipedia.org/wiki/Diminutivaffix#Latein; aber ich würde auch behaupten, dass die ul-Variante die bekannteste ist, s.a. Caligula.

                      mfg
                      Woodfighter

            2. Hallo,

              er scheint sogar mit zuschreiben, ich sage nur „Königin“ ;-)

              Hm. Warum sehe ich da keinen Zusammenhang?

              Wahrscheinlich, weil du dich nie mit Latein auseinandersetzen musstest.

              oder Italienisch. Funktioniert ebensogut. :-)

              Arrivederci,
               Martin

              --
              Bei der Umsetzung von guten Ideen hapert es meist viel mehr an der Wolle als an der Könne.