Matthias Apsel: versehentliche /my/-Links

2 98

versehentliche /my/-Links

Matthias Apsel
  • zu diesem forum
  1. 0
    dedlfix
    1. 0
      Matthias Apsel
      1. 0
        Matthias Apsel
      2. 0
        dedlfix
        1. 0
          Jeena Paradies
          1. 0
            Matthias Apsel
          2. 0
            Fred Furunkelstein 2012
            1. 0
              Fred Furunkelstein 2012
              1. 0
                Matthias Apsel
                1. 0
                  dedlfix
                  1. 0
                    Matthias Apsel
    2. 0
      Fred Furunkelstein 2012
      1. 0

        Hoffentlich letzte Korrektur

        Fred Furunkelstein 2012
        1. 0
          Matthias Apsel
        2. 0

          Hoffentlich letzte Korrektur - leider nicht

          dedlfix
          1. 0
            Fred Furunkelstein 2012
            1. 0
              dedlfix
              1. 0
                Fred Furunkelstein 2012
                1. 0
                  dedlfix
              2. 0
                Fred Furunkelstein 2012
                1. 0
                  dedlfix
                  1. 0
                    Matthias Apsel
                    1. 0
                      Matthias Apsel
                    2. 0
                      dedlfix
                    3. 0
                      Fred Furunkelstein 2012
                      1. 0
                        Matthias Apsel
                  2. 0
                    Fred Furunkelstein 2012
                    1. 0
                      dedlfix
                      1. 0

                        "Pflichtenheft"

                        Fred Furunkelstein 2012
                        1. 0
                          Matthias Apsel
                          1. 0
                            Fred Furunkelstein 2012
                        2. 0
                          dedlfix
                          1. 0
                            Matthias Apsel
                            1. 3
                              Fred Furunkelstein 2012
                              1. 0
                                Fred Furunkelstein 2012
                        3. 0
                          niklaskamenisch
              3. 0
                Fred Furunkelstein 2012
                1. 0
                  Matthias Apsel
            2. 0
              Auge
              1. 0
                Auge
                1. 0
                  Christian Kruse
          2. 0
            Christian Kruse
            1. 0
              dedlfix
              1. 0
                Christian Kruse
                1. 0
                  dedlfix
                  1. 0
                    Christian Kruse
  2. 0
    niklaskamenisch
    1. 0
      Matthias Apsel
      1. 0
        Mitleser
        1. 0
          Auge
  3. 1

    Lösungsangebot

    Fred Furunkelstein 2012
    1. 1

      Fürs Copy & Paste

      Fred Furunkelstein 2012
      1. 0
        Jeena Paradies
        1. 0

          Diskussion der Lösung

          Fred Furunkelstein 2012
          1. 1
            Jeena Paradies
            1. 0
              Fred Furunkelstein 2012
              1. 0
                Jeena Paradies
                1. 0
                  Fred Furunkelstein 2012
                  1. 1
                    Jeena Paradies
                    1. 0

                      Kniefall vor Jenaa

                      Fred Furunkelstein 2012
                      1. 0
                        Schuer
                        1. 0

                          versehentliche /my/-Links

                          Matthias Apsel
                        2. 0
                          Fred Furunkelstein 2012
                      2. 2
                        Jeena Paradies
    2. 0
      dedlfix
      1. 0
        Fred Furunkelstein 2012
        1. 0

          Lösungsangebot, komplette "Fehlerseite"

          Fred Furunkelstein 2012
          1. 0

            Lösung zum Testen

            dedlfix
            1. 0
              Fred Furunkelstein 2012
              1. 0
                dedlfix
            2. 0
              Matthias Apsel
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                    1. 0
                      Matthias Apsel
                      1. 0
                        dedlfix
                        1. 0
                          Christian Kruse
                          1. 0
                            Fred Furunkelstein 2012
                            1. 0
                              Matthias Apsel
                            2. 0
                              Christian Kruse
                          2. 0
                            dedlfix
                            1. 0
                              dedlfix
                              1. 0
                                Matthias Apsel
                                1. 0
                                  dedlfix
                                  1. 0
                                    Matthias Apsel
                                    1. 0
                                      dedlfix
                                      1. 0
                                        Matthias Apsel
                                        1. 0
                                          Fred Furunkelstein 2012
                                      2. 0
                                        dedlfix
                                        1. 0
                                          Fred Furunkelstein 2012
                                        2. 0
                                          Matthias Apsel
              2. 0
                Fred Furunkelstein 2012
                1. 0
                  Lösung zum Testen mit Fragment via Javascript:
            3. 0
              MudGuard
              1. 0
                Matthias Apsel
                1. 0
                  MudGuard
                  1. 0
                    Matthias Apsel

Om nah hoo pez nyeetz, alle!

Lässt sich da etwas mit .htaccess-Mitteln tun?

<pseudocode>
Wenn [referrer enthält nicht "selfhtml.org"] und [angeforderte Adresse beginnt mit "forum.de.selfhtml.org/my/"], dann leite weiter auf ohne /my/
</pseudocode>

Matthias

--
1/z ist kein Blatt Papier.

  1. Tach!

    Lässt sich da etwas mit .htaccess-Mitteln tun?
    <pseudocode>
    Wenn [referrer enthält nicht "selfhtml.org"] und [angeforderte Adresse beginnt mit "forum.de.selfhtml.org/my/"], dann leite weiter auf ohne /my/
    </pseudocode>

    Vielleicht. Aber sinnvoll wäre das nicht (in dieser Form). Mit selfhtml.org als Referrer können sowohl angemeldete als auch unangemeldete Nutzer kommen. Daran musst du sie unterscheiden. Aber wie will sich dann ein unangemeldeter anmelden, wenn er beim my-Versuch ent-my-t wird?

    dedlfix.

    1. Om nah hoo pez nyeetz, dedlfix!

      Vielleicht. Aber sinnvoll wäre das nicht (in dieser Form). Mit selfhtml.org als Referrer können sowohl angemeldete als auch unangemeldete Nutzer kommen. Daran musst du sie unterscheiden. Aber wie will sich dann ein unangemeldeter anmelden, wenn er beim my-Versuch ent-my-t wird?

      Für den unangemeldeten ändert sich ja nichts. Er kommt ohne /my/ und geht ohne /my/. Und er meldet sich durch die exakte(!) URL "forum.de.selfhtml.org/my/"

      Matthias

      --
      1/z ist kein Blatt Papier.

      1. Om nah hoo pez nyeetz, Matthias Apsel!

        er meldet sich _an_

        Matthias

        --
        1/z ist kein Blatt Papier.

      2. Tach!

        Für welchen Anwendungsfall sucht du eigentlich die Lösung? Das Forum selbst ist intelligent genug programmiert, dass es nur angemeldeten Nutzern my-Links präsentiert und den anderen ohne-my. Es ist eigentlich immer nur auswärts ein Problem, wenn jemand irgendwo einen my-Link postet. Hmm, vermutlich ist das dein Fall. Von auswärts kommt der Unangemeldete mit einem Referrer ohne forum und soll nach ohne-my weitergeleitet werden. Nur darf der Browser diese Weiterleitung nicht cachen, sonst kommt man dann nicht mehr zum Anmelden.

        dedlfix.

        1. Hallo,

          Für welchen Anwendungsfall sucht du eigentlich die Lösung?

          Es ist uns die als @SELFHTML twittern schon ca. eine million mal passiert dass wir einen Link zum Forum gepostet haben der /my/ drin hatte und die Leute sich gewundert haben warum wir Links posten die hinter einem Passwort sind das sie nicht kennen.

          Jeena

          1. Om nah hoo pez nyeetz, Jeena Paradies!

            Für welchen Anwendungsfall sucht du eigentlich die Lösung?
            Es ist uns die als @SELFHTML twittern schon ca. eine million mal passiert dass wir einen Link zum Forum gepostet haben der /my/ drin hatte und die Leute sich gewundert haben warum wir Links posten die hinter einem Passwort sind das sie nicht kennen.

            Zusätzlich sind es auch manuelle /my/-Links, die als Link in aktuellen (d.h. nicht archivierten) Postings stehen.

            Matthias

            --
            1/z ist kein Blatt Papier.

          2. Moin

            Für welchen Anwendungsfall sucht du eigentlich die Lösung?
            Es ist uns die als @SELFHTML twittern schon ca. eine million mal passiert dass wir einen Link zum Forum gepostet haben der /my/ drin hatte und die Leute sich gewundert haben warum wir Links posten die hinter einem Passwort sind das sie nicht kennen.

            Auf Grund der möglichen Nebenwirkungen würde ich fast dazu neigen, das Realm um den Hinweis zu ergänzen, dass man auch abbrechen kann und dann auf der 401er Seite einen gut lesbaren Link zu der Seite ohne Passwort legen.

            Oder die Umleitung in dem Skript, welches die 401-er Seite darstellt, automatisieren. (wenn GET-Parameter t und/oder m nicht leer sind, zur aufgerufenen URL ohne '/my/' weiterleiten.)

            Die Ausgangsfrage:

            Wenn [referrer enthält nicht "selfhtml.org"] und [angeforderte Adresse beginnt mit "forum.de.selfhtml.org/my/"], dann leite weiter auf ohne /my/

            Ist denn der Ordner /my/ auch real vorhanden? Dann könnte auf das 'und [angeforderte Adresse beginnt mit "forum.de.selfhtml.org/my/"]' verzichtet werden und als RewriteCond bliebe in der .htaccess im Ordner /my/ etwas wie:

            RewriteCond %{HTTP_REFERER} !selfhtml.org/my/
            RewriteRule ^/my/(.*) /$1 [L,R]

              1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

                Fortsetzung...

                Hier ist zum Beispiel so ein /my/-Link.

                Matthias

                --
                1/z ist kein Blatt Papier.

                1. Tach!

                  Fortsetzung...
                  Hier ist zum Beispiel so ein /my/-Link.

                  Nein. Das ist nur dann ein my-Link, wenn du in my (also angemeldet) bist. Unangemeldete sehen einen Link ohne my. Das ist das, was ich mit der Intelligenz des Forums gemeint habe. Das präsentiert Links auf sich selbst je nach Kontext. Ich schrieb den Link eben als /?t=210649&m=1436512. Und was siehst du? Kommt drauf an.

                  dedlfix.

                  1. Om nah hoo pez nyeetz, dedlfix!

                    Nein. Das ist nur dann ein my-Link, wenn du in my (also angemeldet) bist. Unangemeldete sehen einen Link ohne my. Das ist das, was ich mit der Intelligenz des Forums gemeint habe. Das präsentiert Links auf sich selbst je nach Kontext. Ich schrieb den Link eben als /?t=210649&m=1436512. Und was siehst du? Kommt drauf an.

                    Stimmt, also sind tatsächlich nur externe Links zu berücksichtigen.

                    Matthias

                    --
                    1/z ist kein Blatt Papier.

    2. Moin!

      Daran musst du sie unterscheiden. Aber wie will sich dann ein unangemeldeter anmelden, wenn er beim my-Versuch ent-my-t wird?

      Das ist eines der Nebenprobleme. Liese sich eventuell lösen, wenn man in der
      RewriteCond noch auf den QUERY_STRING prüft.

      RewriteCond %{HTTP_REFERER} !-strmatch 'forum.de/selfhtml.org/my/' [AND] %{QUERY_STRING} -strmatch '*t=*'
      RewriteRule ^/my/(.*) /$1 [L,R]

      Muss sich der unangemeldete Besucher, der sich durchaus anmelden _könnte_, eben nach dem Aufruf der Seite für die Anmeldung entscheiden, wie er es sonst tun - oder lassen - kann, wenn der externe Link nicht auf /my/ verweist.

      Fred

      1. wenn ich http://httpd.apache.org/docs/current/mod/mod_rewrite.htmlrichtig verstanden habe sind MINDESTENS folgende Korrekturen nötig:

        RewriteCond  expr "! %{HTTP_REFERER} -strmatch 'forum.de/selfhtml.org/my/'" [AND] expr "! %{QUERY_STRING} -strmatch 't='"
        RewriteRule ^/my/(.*) /$1 [L,R]

        Nur als Anregung. Ich habe hier keine Testumgebung.

        1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

          RewriteCond  expr "! %{HTTP_REFERER} -strmatch 'forum.de/selfhtml.org/my/'" [AND] expr "! %{QUERY_STRING} -strmatch 't='"
          RewriteRule ^/my/(.*) /$1 [L,R]

          Das ist doch schon mal ein Anfang. In der Vergangenheit haben sich hier mehrere als modrewrite-Experten erwiesen.

          Vielleicht könnte dies ja ohne großen Aufwand umgesetzt werden. Der Vorteil einer solchen Lösung ist, dass kein Eingriff in die Installation oder Programmierung der Forumsssoftware erfolgen braucht.

          Matthias

          --
          1/z ist kein Blatt Papier.

        2. Tach!

          wenn ich http://httpd.apache.org/docs/current/mod/mod_rewrite.htmlrichtig verstanden habe sind MINDESTENS folgende Korrekturen nötig:
          RewriteCond  expr "! %{HTTP_REFERER} -strmatch 'forum.de/selfhtml.org/my/'" [AND] expr "! %{QUERY_STRING} -strmatch 't='"
          RewriteRule ^/my/(.*) /$1 [L,R]

          Wir haben keinen 2.4-er Apachen. Die Lösung muss auf einem 2.2er laufen. Und sie muss nicht nur den Referrer/Querystring berücksichtigen sondern auch, ob der Nutzer mit Credentials kommt. In dem Fall muss er den my-Link bekommen und nicht rausgeworfen werden, also die Regel ignoriert werden. Und /my/ ist nur ein Location-Eintrag, kein Verzeichnis.

          dedlfix.

          1. Wir haben keinen 2.4-er Apachen. Die Lösung muss auf einem 2.2er laufen.

            Was ist den inkompatibel?

            Und sie muss nicht nur den Referrer/Querystring berücksichtigen sondern auch, ob der Nutzer mit Credentials kommt. In dem Fall muss er den my-Link bekommen und nicht rausgeworfen werden, also die Regel ignoriert werden.

            Und /my/ ist nur ein Location-Eintrag, kein Verzeichnis.

            Oha! Dann also gäbe es die Möglichkeit die selben Regeln dort zu setzen, wo der Location-Eintrag definiert wurde. Allerdings würde es sich besser machen das im CGI-Script (oder was auch immer da läuft) zu bewerkstelligen.

            Einfach mal %ENV auswerten. Doch halt! Es ist ja gar kein Perl-Skript mehr - nicht wahr? Aber die Umgebung wird sich auch in jeder anderen Sprache auswerten lassen, was Perl als CGI über %ENV erfährt, das erfährt auch jedes andere CGI-Programm auf diese Weise.

            Wo gibt es denn das Forum im Quelltext? War da nicht mal was?

            Fred

            1. Tach!

              Wir haben keinen 2.4-er Apachen. Die Lösung muss auf einem 2.2er laufen.
              Was ist den inkompatibel?

              Die RewriteCond. Das expr gibt es erst ab 2.4.

              Und /my/ ist nur ein Location-Eintrag, kein Verzeichnis.
              Oha! Dann also gäbe es die Möglichkeit die selben Regeln dort zu setzen, wo der Location-Eintrag definiert wurde.

              Ja, da liegen schon ein paar andere rum.

              dedlfix.

              1. Wir haben keinen 2.4-er Apachen. Die Lösung muss auf einem 2.2er laufen.
                Was ist den inkompatibel?
                Die RewriteCond. Das expr gibt es erst ab 2.4.

                Hehe, bitte keinen Kindergarten. Du weißt genau, dass ich frage warum das Forum nicht auf einem 2.4er Server gefahren werden kann.

                Fred

                1. Tach!

                  Wir haben keinen 2.4-er Apachen. Die Lösung muss auf einem 2.2er laufen.
                  Was ist den inkompatibel?
                  Die RewriteCond. Das expr gibt es erst ab 2.4.

                  Hehe, bitte keinen Kindergarten. Du weißt genau, dass ich frage warum das Forum nicht auf einem 2.4er Server gefahren werden kann.

                  Nein, wusste ich nicht. Ich bezog das inkompatibel auf deine RewriteRule/-Cond, denn dazu hat die Frage auch hervorragend gepasst.

                  Der Apache wird auf den alten Servern nicht hochgehoben werden und auf den neuen wird es so wenig wie möglich Installationen außerhalb der offiziellen Paket-Linie geben, weil einfach nicht genügend Ressourcen da sind, das zu pflegen. Also geh bitte davon aus, dass 2.4 nicht zur Verfügung steht.

                  dedlfix.

              2. Ja, da liegen schon ein paar andere rum.

                Ich habe nachgedacht. Das Verzeichnis ist virtuell. Da kann man wie folgt vorgehen:

                1.) Das Realm wird nur mittelbar vom Server, genauer vom Skript, welches die Header erzeugt, gesendet.

                2.) Die Auswertung von Referer und angeforderter URI erfolgt vorher.

                3.) Bleibt die Frage, wie man angemeldete Besucher ohne ein weiteres Cookie erkennen kann. Und in dem Punkt sehe ich schwarz:

                siehe:
                http://de.wikipedia.org/wiki/HTTP-Authentifizierung#Basic_Authentication

                Sende ich nämlich das Realm, bekommt der nicht angemeldete Benutzer die Passwortabfrage angezeigt. Sende ich das Realm aber nicht wird sich der Browser eines angemeldeten Benutzers einen Dreck drum scheren, das ich wissen will, ob er angemeldet ist. Damit wird das Problem unlösbar.

                Es bleibt:
                1)
                Extra-Cookie oder eine andere Art der Authentifizierung. (Selbst Gefummel mit Javascript dürfte zur Anzeige des Login-Fensters führen.)
                2)
                Oder darauf zu verzichten, angemeldete Benutzer zu erkennen, die über Links von dritten Seiten kommen.

                1. Tach!

                  1.) Das Realm wird nur mittelbar vom Server, genauer vom Skript, welches die Header erzeugt, gesendet.

                  Nein, da steht ein <Location "/my"> mit Auth-Zeugs drin. Und ein DirectoryIndex. Mehr nicht.

                  2.) Die Auswertung von Referer und angeforderter URI erfolgt vorher.

                  Der DirectoryIndex für / und /my/ zeigt auf die C-Programme, die das Forum ausmachen. Die URL-Auswertung findet also innerhalb der Forum-Software statt.

                  3.) Bleibt die Frage, wie man angemeldete Besucher ohne ein weiteres Cookie erkennen kann. Und in dem Punkt sehe ich schwarz:

                  Wenn die RewriteCond das nicht kann, gehts nicht. Allerdings gibts da AUTH_TYPE, von dem ich nicht weiß, womit das gefüllt ist.

                  Sende ich nämlich das Realm, bekommt der nicht angemeldete Benutzer die Passwortabfrage angezeigt. Sende ich das Realm aber nicht wird sich der Browser eines angemeldeten Benutzers einen Dreck drum scheren, das ich wissen will, ob er angemeldet ist. Damit wird das Problem unlösbar.

                  Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?

                  dedlfix.

                  1. Om nah hoo pez nyeetz, dedlfix!

                    Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?

                    Ja, die großen 5 und auch der IE6. IE7 und 8 werden es dann wohl auch tun IE10 hab ich nicht getestet. Ob da vielleicht zwischendurch noch Kommunikation stattfindet, d.h. die Zugangsdaten erst auf ANfrage gesendet werden, weiß ich nicht, ist für das Ergebnis aber unwichtig.

                    Matthias

                    --
                    1/z ist kein Blatt Papier.

                    1. Om nah hoo pez nyeetz, Matthias Apsel!

                      Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?

                      Ja, die großen 5 und auch der IE6. IE7 und 8 werden es dann wohl auch tun IE10 hab ich nicht getestet. Ob da vielleicht zwischendurch noch Kommunikation stattfindet, d.h. die Zugangsdaten erst auf ANfrage gesendet werden, weiß ich nicht, ist für das Ergebnis aber unwichtig.

                      Peinlich, peinlich: "Ja" auf eine oder-Frage. Zahlen Sie bar oder mit Karte?

                      Angemeldete Nutzer werden nicht ent/my/t.

                      Matthias

                      --
                      1/z ist kein Blatt Papier.

                    2. Tach!

                      Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?
                      Ja, die großen 5 und auch der IE6. IE7 und 8 werden es dann wohl auch tun IE10 hab ich nicht getestet. Ob da vielleicht zwischendurch noch Kommunikation stattfindet, d.h. die Zugangsdaten erst auf ANfrage gesendet werden, weiß ich nicht, ist für das Ergebnis aber unwichtig.

                      Oh doch, das ist ja der Knackpunkt. Wenn die Zugangsdaten beim Kommen von anderswoher erst auf Anfrage geschickt werden, dann kann man nicht schon beim Erstrequest testen, ob der Nutzer angemeldet ist, sondern schickt alle nach ohne-my. Wenn du also die Frage zu beantworten versuchst, musst du bei den Testkandidaten den HTTP-Header-Verkehr anschauen.

                      dedlfix.

                    3. Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?

                      Ja, die großen 5 und auch der IE6. IE7 und 8 werden es dann wohl auch tun IE10 hab ich nicht getestet.

                      Wie hast Du das getestet?

                      Ich werfe mal wireshark an, weil ich mit wget ein ganz anderes Ergebnis hatte...

                      Und siehe da: Du hast recht. Firefox und Opera senden das die Authentifizierung tatsächlich freiwillig also ohne Aufforderung. Sogar wenn der erste Request auf eine Grafik im Verzeichnis zeigt bei jedem weiteren Aufruf einer Ressource aus dem Verzeichnis. Orientieren sich spekulativ (das Senden/Empfangen zweier Requests/Answers gilt wohl als "teuer") am Verzeichnis und senden die Daten dann ohne weitere Aufforderung.

                      Jetzt müsste man rausfinden, ob eine Norm/RFC das vorsieht ... dann kann man es in Programmen auch verwenden.

                      1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

                        Wie hast Du das getestet?

                        Ich habe nur die Ergebnisse betrachtet ohne den Netzwerkverkehr.

                        Matthias

                        --
                        1/z ist kein Blatt Papier.

                  2. Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?

                    Wenn ich das richtig verstehe, dann erfahren die Browser ja gar nicht, ob das realm für eine bestimmte Ressource gilt (z.b. http://server/my/index.cgi) oder für alle Ressourcen server/my/*

                    Deshalb wird die Authentifizierungsanforderung wohl jedesmal gesendet und beantwortet.

                    Das kann ich aber testen :)

                    fred@host:~> wget -d --spider http://fred:hallo@localhost/privat/

                    Schritt 1:
                    // GET sendet TROTZ bekannten Benutzernamen und Passwortes davon nichts, lässt sich also bitten:

                    ---request begin---
                    HEAD /privat/ HTTP/1.1
                    User-Agent: Wget/ (linux-gnu)
                    Accept: */*
                    Host: localhost
                    Connection: Keep-Alive
                    Accept-Language: de
                    ---request end---

                    // Es folgt die Bitte

                    ---response begin---
                    HTTP/1.1 401 Authorization Required
                    Date: Sun, 05 Aug 2012 16:35:11 GMT
                    Server: Apache/2.2.21 (Linux/SUSE)
                    WWW-Authenticate: Basic realm="private area"
                    Vary: accept-language,accept-charset
                    Accept-Ranges: bytes
                    Keep-Alive: timeout=15, max=100
                    Connection: Keep-Alive
                    Content-Type: text/html; charset=iso-8859-1
                    Content-Language: de

                    ---response end---

                    // Erneuter Request mit Benutzername und Passwort (kodiert, nicht verschlüsselt!)

                    ---request begin---
                    HEAD /privat/ HTTP/1.1
                    User-Agent: Wget/ (linux-gnu)
                    Accept: */*
                    Host: localhost
                    Connection: Keep-Alive
                    Accept-Language: de
                    Authorization: Basic xxxxxxxxxxxxxx
                    ---request end---

                    //  Es folgt der Header und Payload

                    HTTP-Anforderung gesendet, warte auf Antwort...
                    ---response begin---
                    HTTP/1.1 200 OK
                    Date: Sun, 05 Aug 2012 16:35:11 GMT
                    Server: Apache/2.2.21 (Linux/SUSE)
                    Keep-Alive: timeout=15, max=100
                    Connection: Keep-Alive
                    Content-Type: text/html;charset=ISO-8859-1

                    ---response end---

                    Fred

                    1. Tach!

                      Die Frage ist, senden die Browser von selbst die Auth-Daten mit, wenn sie bereits die Zugangsdaten kennen, auch wenn sie von außerhalb auf das /my geschickt werden oder lassen sie sich erstmal bitten?

                      Wenn ich das richtig verstehe, dann erfahren die Browser ja gar nicht, ob das realm für eine bestimmte Ressource gilt (z.b. http://server/my/index.cgi) oder für alle Ressourcen server/my/*
                      Deshalb wird die Authentifizierungsanforderung wohl jedesmal gesendet und beantwortet.

                      Ich denke, nicht. Wir haben ja hier nur den einen Pfad /my/ und der Rest ist Querystring. Bei Basic Auth wird nicht immer neu angefodert. Mein Test mit dem aktuelle FF brachte auch von außerhalb sofort einen Request inklusive Credentials. Ich denke mal, die Frage können wir ad acta legen und stattdessen zu beantworten versuchen, ob man mit mod_rewrite einen Request mit Credentials von einem ohne unterscheiden kann. Wenn das mal jemand prüfen und dann die Rewrite-Regeln vollständig ausarbeiten und im Labor testen kann, dann kann ich sie auch mal live testen.

                      fred@host:~> wget -d --spider http://fred:hallo@localhost/privat/
                      // GET sendet TROTZ bekannten Benutzernamen und Passwortes davon nichts, lässt sich also bitten:

                      wget zählt nicht, das ist ein frisch gestartetes Programm und kein durchlaufender Browser.

                      dedlfix.

                      1. und dann die Rewrite-Regeln vollständig ausarbeiten

                        Ok.
                        <code>

                        Wenn der Besucher einen
                           Referer        != de.forum.selfhtml.org  (hat)
                        && Ressourse mit  /my/                      (beginnt)
                        && Get-String mit t=                        (beginnt)
                        && Authorization  = (leer/unset)            (ist)
                              dann
                                  leite um zu de.forum.selfhtml.org/?Get-String
                        </code>

                        Frage: Ist das jetzt korrekt?

                        1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

                          Frage: Ist das jetzt korrekt?

                          MMn ja.

                          Matthias

                          --
                          1/z ist kein Blatt Papier.

                          1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

                            Frage: Ist das jetzt korrekt?

                            MMn ja.

                            Matthias

                            Dann fang ich mal an.

                        2. Tach!

                          und dann die Rewrite-Regeln vollständig ausarbeiten
                          Frage: Ist das jetzt korrekt?

                          Ich meinte Copy'n'Paste-fähig. Ich hab noch genügend andere SELFHTML-spezifische ToDos rumliegen, deswegen wollte ich wenigstens das als TuDu delegieren.

                          dedlfix.

                          1. Om nah hoo pez nyeetz, dedlfix!

                            Ich meinte Copy'n'Paste-fähig. Ich hab noch genügend andere SELFHTML-spezifische ToDos rumliegen, deswegen wollte ich wenigstens das als TuDu delegieren.

                            Ja. Aber ein Anfang als Pseudocode ist sinnvoll. Ich bin sicher, dass auch Furunkelstein das nur als Anfang sieht.

                            Matthias

                            --
                            1/z ist kein Blatt Papier.

                            1. Ja. Aber ein Anfang als Pseudocode ist sinnvoll. Ich bin sicher, dass auch Furunkelstein das nur als Anfang sieht.

                              So ist es. Das Erstellen der Regeln ist das geringste.

                              Bevor ich aber eine Testumgebung einrichte und das durchteste (das genau ist der größte Teil der Arbeit) will ich wissen ob die Regeln stimmen. Deshalb hab ich den Titel in Pflichtenheft geändert und die Quotas drum gesetzt, weil "Heft" ja wirklich übertrieben ist.

                              Ansonsten bin ich dankbar für die Aufgabe - schon weil ich heute beim Nachdenken, Nachschauen und Testen wieder was neues gelernt habe. Über die Authentifizierung.

                              dedlfix bekommt also seinen getesteten Code, sobald die Regeln verbindlich sind. Da soll jetzt bitte noch mal jemand nachschauen.

                              Fred

                              1. Auch wenn es nicht so ging wie angedacht: Hier habe ich den Lösungsvorschlag gepostet. Und hier die Version für Copy & Paste.

                                Fred

                        3. hi,

                          und dann die Rewrite-Regeln vollständig ausarbeiten

                          Ok.
                          <code>

                          Wenn der Besucher einen
                             Referer        != de.forum.selfhtml.org  (hat)
                          && Ressourse mit  /my/                      (beginnt)
                          && Get-String mit t=                        (beginnt)
                          && Authorization  = (leer/unset)            (ist)
                                dann
                                    leite um zu de.forum.selfhtml.org/?Get-String
                          </code>

                          Frage: Ist das jetzt korrekt?

                          sieht gut aus. Viel Spaß beim testen =)

                          Gruß Niklas

                          --
                          Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
              3. Wir haben keinen 2.4-er Apachen. Die Lösung muss auf einem 2.2er laufen.
                Was ist den inkompatibel?
                Die RewriteCond. Das expr gibt es erst ab 2.4.

                Ok. 2. Versuch.

                RewriteCond  %{HTTP_REFERER} ^forum.de.selfhtml.org/my/ [AND] {QUERY_STRING} ^t=
                RewriteRule ^/my/(.*) /$1 [L,R]

                Bleibt das unlösbare Problem mit der Erkennung der bereits angemeldeten Benutzer, die von Facebook ins Forum kommen. Ist das denn wesentlich?

                1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

                  Bleibt das unlösbare Problem mit der Erkennung der bereits angemeldeten Benutzer, die von Facebook ins Forum kommen. Ist das denn wesentlich?

                  Das halte ich nicht für wesentlich. Angemeldete Benutzer brauchen ohne weitere Passworteingabe nur auf "Benutzerdefinierte Ansicht" klicken, falls sie ent/my/t worden sind.

                  Matthias

                  --
                  1/z ist kein Blatt Papier.

            2. Hallo

              Wo gibt es denn das Forum im Quelltext? War da nicht mal was?

              Den neuesten Stand gibt es auf Github. Ob das Repository die jetzt hier installierte Version beinhaltet oder nur die Neuimplementation in Ruby, weiß ich allerdings nicht.

              Die "alte" Version ist, soweit ich mich erinnere, in C und Perl implementiert.

              Tschö, Auge

              --
              Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
              Terry Pratchett, "Wachen! Wachen!"
              ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
              Veranstaltungsdatenbank Vdb 0.3
              1. Hallo

                Hallo

                Wo gibt es denn das Forum im Quelltext? War da nicht mal was?

                Den neuesten Stand gibt es auf Github. Ob das Repository die jetzt hier installierte Version beinhaltet oder nur die Neuimplementation in Ruby, weiß ich allerdings nicht.

                Nach dem Rumstöbern: Christian hat auf Github mehrere Repos, die das CForum betreffen. Ich vermute (ohne Kenntnis der Innereien) mal, dass es dieses ist, es gibt aber, wohl aus historischen Gründen, auch noch ein weiteres: CForum up to 3.4.

                Tschö, Auge

                --
                Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                Terry Pratchett, "Wachen! Wachen!"
                ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
                Veranstaltungsdatenbank Vdb 0.3
                1. Moin Auge,

                  Nach dem Rumstöbern: Christian hat auf Github mehrere Repos, die das CForum betreffen. Ich vermute (ohne Kenntnis der Innereien) mal, dass es dieses ist, es gibt aber, wohl aus historischen Gründen, auch noch ein weiteres: CForum up to 3.4.

                  CForum up to 3.4 ist das hier laufende Forum. CForum CPP ist der Ansatz, das Forum in C++ neu zu schreiben, inkl. selbst geschriebenem Framework und allem drum und dran. Nach dem Server-Absturz habe ich als Kompromiss angefangen, das Forum in Rails mit PostgreSQL als Backend neu zu bauen, das ist jetzt das hier.

                  LG,
                   CK

          2. Moin dedlfix,

            Und /my/ ist nur ein Location-Eintrag, kein Verzeichnis.

            Nö.

              
            ckruse@odin ~ $ ls -d /srv/www/forum.de.selfhtml.org/dokumente/my/  
            /srv/www/forum.de.selfhtml.org/dokumente/my/  
            ckruse@odin ~ $  
            
            

            LG,
             CK

            1. Tach!

              Und /my/ ist nur ein Location-Eintrag, kein Verzeichnis.
              Nö.
              /srv/www/forum.de.selfhtml.org/dokumente/my/

              Hmm, da hab ich nicht geschaut, weil Location ja ein virtuelles Verzeichnis beschreibt. Aber dann ist das ja quasi ein Konfigurationsfehler und man hätte gleich <Directory> nehmen können, oder?

              dedlfix.

              1. Moin dedlfix,

                Hmm, da hab ich nicht geschaut, weil Location ja ein virtuelles Verzeichnis beschreibt.

                Nein. <Location> beschreibt einen URL path. Ob das „virtuell” ist oder nicht ist irrelevant.

                Aber dann ist das ja quasi ein Konfigurationsfehler und man hätte gleich <Directory> nehmen können, oder?

                Das ist kein Konfigurations-Fehler, aber man hätte auch <Directory> nehmen können, ja.

                LG,
                 CK

                1. Tach!

                  Hmm, da hab ich nicht geschaut, weil Location ja ein virtuelles Verzeichnis beschreibt.
                  Nein. <Location> beschreibt einen URL path. Ob das „virtuell” ist oder nicht ist irrelevant.

                  Warum nimmt man es dann (zum Beispiel in diesem Fall) statt <Directory>, wenn es ein echtes Verzeichnis gibt? Weil es relativ zum DocumentRoot zu notieren geht und damit kürzer als ein vollständiger Verzeichnisname ist?

                  Aber dann ist das ja quasi ein Konfigurationsfehler und man hätte gleich <Directory> nehmen können, oder?
                  Das ist kein Konfigurations-Fehler, aber man hätte auch <Directory> nehmen können, ja.

                  Ok, meine Aussage/Frage entstand nach Lesen der Handbuchseite zur <Location> Directive, die <Directory> und <Files> zumindest nahelegt, wenn ein Verzeichnis vorhanden ist.

                  dedlfix.

                  1. Moin dedlfix,

                    Nein. <Location> beschreibt einen URL path. Ob das „virtuell” ist oder nicht ist irrelevant.

                    Warum nimmt man es dann (zum Beispiel in diesem Fall) statt <Directory>, wenn es ein echtes Verzeichnis gibt? Weil es relativ zum DocumentRoot zu notieren geht und damit kürzer als ein vollständiger Verzeichnisname ist?

                    Weil hier unterhalb von /my/ verschiedene Auth-Konfigurationen für Unterverzeichnisse sind. Ich finde leider gerad die Dokumentation nicht, kann auch sein dass das inzwischen geändert wurde, aber als ich seinerzeit das im Developer-Bereich aufgesetzt hab, funktionierte das aufgrund der Auswertungs-Reihenfolge nur mit <Location> bzw. <LocationMatch>. Bei <Directory> wurde die spezifischere Konfiguration in den Unterverzeichnissen überschrieben durch das darüberliegende Verzeichnis.

                    LG,
                     CK

  2. hi,

    das my einfach abschaffen und die benutzerdefinierte Ansicht eben generell machen, wenn sich wer eingeloggt hat! bzw. über die Session mitnehmen, was der User eigentlich möchte ...

    Umständlich und keine Lösung für bisheriges.

    Wie wäre es in der Programmierung, bei falschem Passwort einfach auf das nicht my umzuleiten?

    Gruß Niklas

    --
    Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
    1. Om nah hoo pez nyeetz, niklaskamenisch!

      Wie wäre es in der Programmierung, bei falschem Passwort einfach auf das nicht my umzuleiten?

      Mir geht es eigentlich darum, diese Unzulänglichkeit _schnell_ zu eliminieren.

      Matthias

      --
      1/z ist kein Blatt Papier.

      1. Mir geht es eigentlich darum, diese Unzulänglichkeit _schnell_ zu eliminieren.

        Trivialcookie bei Login setzen, per JS auslesen und in die relevanten Links das /my/ reinklatschen. Ja, das ist schmutzig, wäre aber sehr schnell umsetzbar und funktional.

        1. Hallo

          Mir geht es eigentlich darum, diese Unzulänglichkeit _schnell_ zu eliminieren.

          Trivialcookie bei Login setzen, per JS auslesen und in die relevanten Links das /my/ reinklatschen. Ja, das ist schmutzig, wäre aber sehr schnell umsetzbar und funktional.

          Da die "Anmeldung" per .htaccess realisiert ist, sendet der Browser eines angemeldeten Benutzers den dazugehörigen Wert bei jedem Aufruf einer Seite des Forums mit. Ist der Benutzer nicht angemeldet, geschieht das nicht. Das Verhalten ist an dieser Stelle analog zu einem "Ich bin angemeldet"-Cookie. Alle notwendigen Daten sind also schon verfügbar, so dass das Setzen eines solchen Kekses überflüssig ist.

          Tschö, Auge

          --
          Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
          Terry Pratchett, "Wachen! Wachen!"
          ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
          Veranstaltungsdatenbank Vdb 0.3
  3. So. Ich hatte weiter unten angeboten, dass ich die Lösung liefere.

    Also... wie vorgesehen nur mit htacccess und mod rewirte klappt das nicht.

    Grund: Die Zugriffregeln arbeitet der Apache stets VOR den Umleitungen ab. Das bedeutet, ich bekomme das Realm nicht weg.

    Neuer, getesteter Lösungsansatz:

    #A
    in der Realm einen Hinweis auf den Abbruch hinterlegen
    #B
    ein Error-Dokument eingerichten
    #C dieses leitet dann im Falle des Abbruches zu http://forum.de.selfhtml.org/?foo=bar (oder was immer im Query-String stand) um.

    Zu meiner Freude sind die Änderungen simpel.

    Dateien:

    1. /my/.htaccess:
    ##########################################################

    #A ändern in  
    AuthName "Sie koennen die Authentifizierung abbrechen"  
      
    #B einfügen oder ändern in  
    ErrorDocument 401 /leit.pl
    

    ##########################################################

    2. /leit.pl
    ##########################################################

    #!/usr/bin/perl  
    print "Status: 301 FOUND\nLocation: http://localhost/index.php?", $ENV{'REDIRECT_QUERY_STRING'}, "\n\n";
    

    ##########################################################

    1. Dateien:

      1. /my/.htaccess:
      ##########################################################
      #A ändern in
      AuthName "Sie koennen die Authentifizierung abbrechen"

      #B einfügen oder ändern in
      ErrorDocument 401 /leit.pl
      ##########################################################

      2. /leit.pl
      ##########################################################
      #!/usr/bin/perl
      print "Status: 301 FOUND\nLocation: http://forum.de.selfhtml.org/?", $ENV{'REDIRECT_QUERY_STRING'}, "\n\n";
      ##########################################################

      1. Hallo,

        print "Status: 301 FOUND\nLocation: http://forum.de.selfhtml.org/?", $ENV{'REDIRECT_QUERY_STRING'}, "\n\n";

        So weit ich mich erinnere sieht HTTP als ende vom Head \r\n\r\n vor und nicht nur \n\n

        Jeena

        1. So weit ich mich erinnere sieht HTTP als ende vom Head \r\n\r\n vor und nicht nur \n\n

          Ist mir als Praktiker neu.

          In http://de.selfhtml.org/perl/sprache/cginotwendig.htm wird übrigens nach dem einzeiligen mini-header auch nur "\n\n" gesendet. Wenn Deine Anagbe stimmen sollte, dann müsste da einige angepasst werden.

          Ich habe aber in http://www.w3.org/Protocols/rfc2616/rfc2616.html auch CRLF als Zeilenende gefunden, was Deiner Angabe entspricht.

          Im Appendix ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.3 ) steht dann aber:

          "The line terminator for message-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR."

          "\n\n" Passt also.

          fred

          1. Hallo,

            Im Appendix ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.3 ) steht dann aber:
            "The line terminator for message-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR."
            "\n\n" Passt also.

            Naja, es geht halt darum dass man wenn man selbst was sendet dann sollte man schon so strikt wie möglich sein, wenn man was empfängt dann sollte man so lax wie möglich sein damit falls jemand auf der anderen Seite wie du jetzt hier einen Fehler macht und statt \r\n\r\n nur \n\n schickt dass es dann halt doch noch funktioniert.

            Wenn man es aber weiß dass der RFC \r\n\r\n als Ende definiert dann sollte man das auch so Implementieren falls möglich und sich nicht darauf verlassen dass das andere Ende eine fehlertollerante Implementation im Einsatz hat.

            Jeena

            1. Wenn man es aber weiß dass der RFC \r\n\r\n als Ende definiert dann sollte man das auch so Implementieren falls möglich und sich nicht darauf verlassen dass das andere Ende eine fehlertollerante Implementation im Einsatz hat.

              "das andere Ende" ist hier nicht etwa direkt der Browser sondern zunächst der Apache, der die Daten weiter gibt, also verarbeitet. Der ergänzt ja auch die header. Also verarbeitet dieser die Daten. Und hält sich an die Empfehlung.

              Weiter:

              "However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR"

              "Allerdings empfehlen wir..."

              Was bedeutet gleich RFC? Richtig "Request for Comments". Eine so dringende "Empfehlung" im Appendix einer RFC hat aus meiner Sicht durchaus normative Wirkung.

              Im Übrigen ist ja jedem unbelassen das CRLFCRLF ("\r\n\r\n") statt LFLF ("\n\n") zu senden. Warum wohl setzte ich die erste Überschrift auf "Lösungsangebot"?

              Fred

              1. Hallo,

                Im Übrigen ist ja jedem unbelassen das CRLFCRLF ("\r\n\r\n") statt LFLF ("\n\n") zu senden. Warum wohl setzte ich die erste Überschrift auf "Lösungsangebot"?

                Jo klar, du kannst machen was du willst, ich wollte nur noch zum Lösungsangebot anmerken dass da ein kleiner Teil falsch ist (auch wenn den Server-Programmierern empfohlen wird dass sie diese falsche Lösung auffangen sollen) und wie man es richtig machen kann.

                Jeena

                1. (auch wenn den Server-Programmierern empfohlen wird dass sie diese falsche Lösung auffangen sollen)

                  Jeena! So wirst Du bitte nicht mir diskutieren. Die Empfehlung lautet, beim parsen das LF ("\n") als Zeilenende zu werten und das führende CR ("\r") zu ignorieren:

                  "However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR"

                  Das ist etwas ganz anderes als "die falsche Lösung aufzufangen". Gänge es darum ein fehlerhaftes Verhalten einer CGI-Anwendung oder eines Modules aufzufangen, dann hätte man dafür sicherlich eine _ganz_andere_ Formulierung verwendet.

                  Vergiss bitte nicht, dass die RFC ohnehin nur "Aufforderungen zum Kommentieren" sind. Wenn man diese als Norm wertet, dann muss das auch für die darin ausgesprochenen Empfehlungen gelten. Da bedeutet, dass diese Empfehlung "recognize a single LF as a line terminator and ignore the leading CR" ebenso Norm ist wie der gesamte Rest der RFC. Ohne diese Empfehlung einzuhalten ist die Anwendung nicht vollständig RFC-konform.

                  Und vergiss bitte nicht, dass es in der Unix-Welt eine jahrzehnte alte Übung ist, die Zeilen (außer beim Drucken!) durch LF ("\n") zu trennen.

                  Fred

                  1. Hallo,

                    Das ist etwas ganz anderes als "die falsche Lösung aufzufangen". Gänge es darum ein fehlerhaftes Verhalten einer CGI-Anwendung oder eines Modules aufzufangen, dann hätte man dafür sicherlich eine _ganz_andere_ Formulierung verwendet.

                    Nein, wenn man gewollte hätte dass jeder das so implementieren soll hätten man SHALL oder REQUIRED verwendet:

                    "MUST   This word, or the terms "REQUIRED" or "SHALL", mean that the
                       definition is an absolute requirement of the specification."

                    Hier hat man das Wort RECOMMENDED verwendet:

                    "SHOULD   This word, or the adjective "RECOMMENDED", mean that there
                       may exist valid reasons in particular circumstances to ignore a
                       particular item, but the full implications must be understood and
                       carefully weighed before choosing a different course."

                    Wenn einer also einen Guten Grund hat nur \r\n\r\n zu erkennen dann ist durchaus in Ordnung das zu tun. Bei den meisten Servern wird \n\n funktionieren aber man sollte sich dessen bewusst sein dass es nicht bei allen funktioniert. Ändert man einfach sein eigenes Verhalten und nutzt immer \r\n\r\n dann ist man auf jeden Fall auf der sicheren Seite ohne irgendwelche Nachteile dadurch zu erfahren.

                    Ich verstehe ehrlich gesagt nicht so richtig warum wir da so lange drüber diskutieren, die Welt geht ja davon nicht unter wenn man \r\n\r\n statt \n\n benutzt.

                    Jeena

                    1. Vorliegend ist der Server ein Apache 2.2, und ich erinnere Dich nochmal dran, ich habe mich an die http://de.selfhtml.org/perl/sprache/cginotwendig.htm@title=SELFHTML-Anleitung gehalten.

                      Ich verstehe ehrlich gesagt nicht so richtig warum wir da so lange drüber diskutieren, die Welt geht ja davon nicht unter wenn man \r\n\r\n statt \n\n benutzt.

                      Im Übrigen ist ja jedem unbelassen das CRLFCRLF ("\r\n\r\n") statt LFLF ("\n\n") zu senden. Warum wohl setzte ich die erste Überschrift auf "Lösungsangebot"?

                      Hatte ich das nicht schon längst so ausgeführt? Was erwartest Du? Einen Kniefall?

                      Komm her hier ist er:

                      Oh Jenaa!

                      Ich knie vor Dir und lobe Deine Größe, Deine Pracht, Deine Herrlichkeit!
                      Du bist der wahre und einzige Gott des Zeilenumbruchs. Nur Du hast immer Recht. Es soll neben Dir keinen anderen geben.

                      Und natürlich habe ich volles Verständnis dafür, dass Du Dich voll reinkniest um Fehler zu finden, die keinerlei Auswirkungen haben und, weil Du hier so überaus engagiert theoretische Aspekte abhandelst, zur Lösung des eigentlichen Problems gar nichts beitragen kannst.

                      Der dumme Fred

                      1. Oh Jenaa!

                        Ich knie vor Dir und lobe Deine Größe, Deine Pracht, Deine Herrlichkeit!
                        Du bist der wahre und einzige Gott des Zeilenumbruchs.

                        Nicht nur das, er spielt auch ziemlich wuchtig Bass.

                        … weil Du hier so überaus engagiert theoretische Aspekte abhandelst, zur Lösung des eigentlichen Problems gar nichts beitragen kannst.

                        Manchmal hilft es bei der Problemlösung, wenn ein Cowboy daneben steht und die Ruhe bewahrt.
                        Flipp also ruhig aus, das Team kann damit umgehen.

                        Viele Grüße
                        _Dirk

                        1. Om nah hoo pez nyeetz,

                          Schade, dass dies hier so eskaliert. Ich möchte ausdrücklich für die geleistete Arbeit danke sagen und zwar an beide. Dem einen, weil er sich die Mühe gemacht hat und dem anderen, weil er kritisch draufgeschaut hat.

                          Matthias

                          --
                          1/z ist kein Blatt Papier.

                        2. Manchmal hilft es bei der Problemlösung, wenn ein Cowboy daneben steht und die Ruhe bewahrt.

                          Dann hat sicherlich ein, die Ruhe bewahrender Cowboy auch bemerkt, dass es bei

                          print "Content-Type:text/html\n\n";

                          gar nicht um den tatsächlichen HTTP-Header geht, sondern um die Kommunikation Apache <=> Skript, sei es als CGI oder Modul. Und die unterliegt noch nicht den Regeln des  HTTP-Protokolls, sondern der Apache-API. Das habe ich bereits begründet, denn der Apache ergänzt die Header noch.

                          https://www.google.de/search?q=site:perl.com+perl+print+content+type

                          Da findet sich auf Perl.com (!)

                          weit überwiegend:
                          print "Content-type: text/plain\n\n";

                          und nur gelegentlich auch:
                          print "Content-type: text/plain\r\n\r\n";

                          Wollen mir die, die Ruhe bewahrenden Cowboys einreden, ich mache FALSCH, was in SelfHTML UND auf Perl.com GENAU so steht, wie ich es gemacht habe?

                          Was, bitte, soll das denn werden? Das ist keine Kritik mehr, es wird den Umständen nach berechtigt als reines Gemecker empfunden. (Und diese notorische Rechthaberei ist einer der Gründe, warum ich nie zu dem Team "die Ruhe bewahrender Cowboys" gehören werde.)

                          Der dumme Fred.

                      2. Hallo,

                        Mein Anliegen war eigentlich nur einen kleinen Hinweis nebenbei zu geben dass das unter Umständen Probleme geben könnte. In keinsterweise wollte ich dich irgendwie heruntermachen oder ähnliches. Falls das geschehen ist dann war das keine Absicht und ich entschuldige mich dafür.

                        Ich werde in Zukunft versuchen eine weichere Form des Hinweises/Kritik zu üben. Ich glaube der eher trockene Ton kam von daher dass du hier technisch sehr kompetent rüberkamst was mich dazu verleitete mit dir so zu diskutieren wie ich es mit CK oder dedlfix tun würde.

                        Jeena

    2. Tach!

      Neuer, getesteter Lösungsansatz:

      #A
      in der Realm einen Hinweis auf den Abbruch hinterlegen
      #B
      ein Error-Dokument eingerichten
      #C dieses leitet dann im Falle des Abbruches zu http://forum.de.selfhtml.org/?foo=bar (oder was immer im Query-String stand) um.

      Bist du sicher, dass das funktioniert? Ich habe das mal eingebaut (vorsichtshalber unter /myphp/) und sehe, dass es nicht geht. Das ErrorDocument wird ja nicht erst im Falle eines Abbruchs angefordert sondern ist Teil der Response.

      Das ist der Inhalt des 401er-ErrorDocuments:

      <?php  
      header('Location: http://' . $_SERVER['SERVER_NAME'] . '/?' . (empty($_SERVER['REDIRECT_QUERY_STRING']) ? '' : $_SERVER['REDIRECT_QUERY_STRING']));
      

      Mein 401er ErrorDocument wird aufgerufen. Das sehe ich, wenn ich statt Weiterleitung einen Text einbaue und die Anmeldung abbreche. Aber wenn ich die Weiterleitung drin habe, wird kein Anmelde-Dialog angezeigt sondern sofort weitergeleitet. Der Grund ist, dass der Location-Header PHP veranlasst, einen 302 als Statuscode zu senden (also fast wie bei dir, nur mit der richtigen Zahl). Dieser überschreibt natürlich den 401 - was soll er auch sonst tun? Und damit bekommt der Browser keine 401 als Antwort, zeigt keinen Anmelde-Dialog und macht gleich einen Redirect.

      Und nun das ganze auch noch mit Perl unter /mypl/ - Resultat ist daselbe (auch mit deiner 301).

      Bei meinem Test habe ich keine Zugangsdaten eingegeben, mein Browser hatte also zu keinem Zeitpunkt welche für myphp oder mypl, er konnte also nicht bereits welche mitsenden. Das ist genau das Szenario, was in freier Wildbahn anzutreffen ist. Insofern sieht es zunächst erfolgreich aus, wenn man auf ohne-my geleitet wird. Aber nun kann man sich nicht mehr anmelden, weil man beim Versuch auf myphp/mypl zu kommen ja auch ohne Eingabedialog weggeschubst wird.

      print "Status: 301 FOUND\nLocation: http://localhost/index.php?", $ENV{'REDIRECT_QUERY_STRING'}, "\n\n";

      301 ist Moved Permanently und 302 ist Found.

      dedlfix.

      1. Bist du sicher, dass das funktioniert? Ich habe das mal eingebaut (vorsichtshalber unter /myphp/) und sehe, dass es nicht geht.

        Stand von eben:

        Also bei mir ging es. Definitiv. Ich habe es auch mit Perl gemacht - nicht mit PHP- Möglicherweise gibt es auch große Unterschiede zwischen der Ausführung als CGI und als Modul.

        [...]

        Stand von jetzt:

        Volle Kraft zurück. Geht nicht. Es lauft auch mit Perl als CGI so ab, wie Du es beschreibst. Mich hat wohl der Cache getäuscht. Laut wirshark/tcpdump wird tatsächlich die Auforderung zur Authentifizierung und die weiterleitung gesendet.

        Es wird aber dabei bleiben, dass ein Umleitung über ein Skript erfolgen muss. Das sieht allerdings nach einer größere Operation aus.

        Wie wäre es denn, wenn also das Realm gesetzt wird wie von mir gezeigt (also mit dem Hinweis auf den Abbruch) und die bisherige Antwortseite statt der sonstigen Links oder zusätzlich zu den sonstigen Links einen zu dem gesuchten Beitrag erhält? Das wäre die kleinste Operation

        1.) /my/.htaccess
        ---------------------------
        ErrorDocument 401  /401.pl
        ---------------------------

        2.) /401.pl
        ---------------------------

        #!/usr/bin/perl  
        print 'Content-Type:text/html  
          
        <html>  
        <head>  
           <title>Weiter...</title>  
        </head>  
        <body>  
        <h1>Weiter....</h1>  
        <p><a href="http://forum.de.selfhtml.org/?', $ENV{'REDIRECT_QUERY_STRING'}, '">Hier geht es zu dem gew&uuml;nschten Beitrag</a>.</p>  
           </body>  
        </html>';
        

        ---------------------------

        1. So. Ich habe mir die Frechheit erlaubt, die Seite anzupassen, welche den Hinweis ausgibt, wenn das Login abgebrochen wird: (/401.pl)

          Läuft jetzt auch mit use strict, das wird CK freuen. Zudem habe ich noch eine kleine Anpassungen vorgenommen.

          #!/usr/bin/perl  
          use strict;  
            
            
          print 'Content-Type:text/html; charset=UTF-8  
            
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
          <html xmlns="http://www.w3.org/1999/xhtml">  
          <head>  
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
            <title>Passwort benötigt</title>  
            <link rel="stylesheet" href="//src.selfhtml.org/selfhtml-fehler-2008-06-06.css" type="text/css" />  
            <link rel="shortcut icon" type="image/x-icon" href="//src.selfhtml.org/favicon.ico" />  
          </head>  
          <body id="fehler-template" class="fehler-inhalt">  
            <div class="fehler-rahmen">  
              <img src="//src.selfhtml.org/logo.gif" width="106" height="109" alt="" class="selfhtml-logo" />  
              <div class="teaser">Ein Fehler ist aufgetreten:</div>  
              <div class="errorcode">401</div>  
              <h1>Benutzerbereich</h1>  
              <div class="hilfe">  
                <p class="message">Der Benutzerbereich ist nicht öffentlich zugänglich. Bitte geben Sie ein korrektes Passwort ein, um fortzufahren.</p>  
                <p>Sie haben folgende Möglichkeiten:</p>  
                <form accept-charset="utf-8" action="http://suche.de.selfhtml.org/cgi-bin/such.pl" method="get">  
                  <ul>  
          ';  
          if (defined($ENV{'REDIRECT_QUERY_STRING'})) {  
          print '  
            
                    <li>  
                      <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="http://forum.de.selfhtml.org/?', $ENV{'REDIRECT_QUERY_STRING'}, '">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>  
                    </li>  
          ';  
          }  
          print'  
                    <li>  
                      <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="" onclick="javascript:location.reload (); return false;">Laden Sie diese Seite neu</a>, um das Passwort erneut eingeben zu können.</a>  
                    </li>  
                    <li>  
                      <input type="hidden" name="feld" value="alle" />  
                      <input type="hidden" name="hits" value="100" />  
                      <input type="hidden" name="case" value="on" />  
                      <input type="hidden" name="index_1" value="on" />  
                      <input type="hidden" name="index_2" value="on" />  
                      <input type="hidden" name="index_3" value="on" />  
                      <input type="hidden" name="index_4" value="on" />  
                      <label for="suche_suchausdruck">Das SELFHTML-Webangebot durchsuchen: </label><input type="text" size="25" maxlength="255" name="suchausdruck" id="suche_suchausdruck" /> <input type="submit" value="Suche" />  
                    </li>  
                    <li>  
                      Die Navigation von folgenen Hauptseiten aus nutzen:  
                      <ul class="linklist">  
                        <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://de.selfhtml.org/">SELFHTML</a></li>  
                        <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://aktuell.de.selfhtml.org/">SELFHTML aktuell</a></li>  
                        <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://selfhtml.org/">Startseite zu SELFHTML</a></li>  
                        <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://forum.de.selfhtml.org/">SELFHTML Forum</a></li>  
                        <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://community.de.selfhtml.org/">SELFHTML Community</a></li>  
                      </ul>  
                    </li>  
                  </ul>  
                </form>  
              </div>  
              <p class="impressum">&copy; 2008 <img src="//src.selfhtml.org/serverdok.gif" width="15" height="10" alt="bereichsübergreifende Seite" />&nbsp;<a href="http://www.selfhtml.org/de.impressum.html">Impressum</a></p>  
            </div>  
          </body>  
          </html>  
          ';  
          
          
          1. Tach!

            So. Ich habe mir die Frechheit erlaubt, die Seite anzupassen, welche den Hinweis ausgibt, wenn das Login abgebrochen wird: (/401.pl)

            Und ich hab mir die Frechheit erlaubt, sie nicht einfach so zu übernehmen, sondern eine bereits für das alte Forum vorhandene PHP-Version angepasst zu haben. Die beiden Versuche mit /myphp/ und /mypl/ habe ich wieder gelöscht. Zum Probieren habe ich nun neu /mytest/ aufgesetzt. Wenn man sich erfolgreich anmeldet bekommt man einen 404. Das ist nicht weiter tragisch, denn der Fall soll ja nicht getestet werden. Also Anmeldung abbrechen und dann das Ergebnis betrachten. Nichts besonderes feststellbar? Ja, das kommt ja auch erst, wenn ?t=... hintendran hängt. Dazu einen my-Link kopieren, zu mytest umschreiben und abschicken.

            Und nun noch eine kleine Suchaufgabe. Was fehlt in den nachfolgenden Zeilen?

            print '  
            ...  
            <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="http://forum.de.selfhtml.org/?', $ENV{'REDIRECT_QUERY_STRING'}, '">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>  
            ...  
            ';
            

            dedlfix.

            1. Und nun noch eine kleine Suchaufgabe. Was fehlt in den nachfolgenden Zeilen?

              print '

              ...
              <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="http://forum.de.selfhtml.org/?', $ENV{'REDIRECT_QUERY_STRING'}, '">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>
              ...
              ';

                
                
              PHP kennt kein $ENV{'REDIRECT\_QUERY\_STRING'}. PHP war zwar mal aber sowas, aber ist eben gerade nicht mehr ein auf Perl basierendes Templatesystem.  
                
              Anmerkung: htmlentities sollte hier "tun" - nicht dass jemand Skripte oder CSS einfügt. Bei einer Änderung des Forums könnte aber eine "etwas feinfühligere" Bearbeitung des Query-Strings nötig werden:  
                
                
              ~~~php
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
              <html xmlns="http://www.w3.org/1999/xhtml">  
              <head>  
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
                <title>Passwort benötigt</title>  
                <link rel="stylesheet" href="//src.selfhtml.org/selfhtml-fehler-2008-06-06.css" type="text/css" />  
                <link rel="shortcut icon" type="image/x-icon" href="//src.selfhtml.org/favicon.ico" />  
              </head>  
              <body id="fehler-template" class="fehler-inhalt">  
                <div class="fehler-rahmen">  
                  <img src="//src.selfhtml.org/logo.gif" width="106" height="109" alt="" class="selfhtml-logo" />  
                  <div class="teaser">Ein Fehler ist aufgetreten:</div>  
                  <div class="errorcode">401</div>  
                  <h1>Benutzerbereich</h1>  
                  <div class="hilfe">  
                    <p class="message">Der Benutzerbereich ist nicht öffentlich zugänglich. Bitte geben Sie ein korrektes Passwort ein, um fortzufahren.</p>  
                    <p>Sie haben folgende Möglichkeiten:</p>  
                    <form accept-charset="utf-8" action="http://suche.de.selfhtml.org/cgi-bin/such.pl" method="get">  
                      <ul>  
              <?php  
              if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {  
                 print '  
                        <li>  
                          <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="http://forum.de.selfhtml.org/?'.htmlentities($_SERVER['REDIRECT_QUERY_STRING']).'">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>  
                        </li>  
              ';  
              }  
              ?>  
                        <li>  
                          <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="" onclick="javascript:location.reload (); return false;">Laden Sie diese Seite neu</a>, um das Passwort erneut eingeben zu können.</a>  
                        </li>  
                        <li>  
                          <input type="hidden" name="feld" value="alle" />  
                          <input type="hidden" name="hits" value="100" />  
                          <input type="hidden" name="case" value="on" />  
                          <input type="hidden" name="index_1" value="on" />  
                          <input type="hidden" name="index_2" value="on" />  
                          <input type="hidden" name="index_3" value="on" />  
                          <input type="hidden" name="index_4" value="on" />  
                          <label for="suche_suchausdruck">Das SELFHTML-Webangebot durchsuchen: </label><input type="text" size="25" maxlength="255" name="suchausdruck" id="suche_suchausdruck" /> <input type="submit" value="Suche" />  
                        </li>  
                        <li>  
                          Die Navigation von folgenen Hauptseiten aus nutzen:  
                          <ul class="linklist">  
                            <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://de.selfhtml.org/">SELFHTML</a></li>  
                            <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://aktuell.de.selfhtml.org/">SELFHTML aktuell</a></li>  
                            <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://selfhtml.org/">Startseite zu SELFHTML</a></li>  
                            <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://forum.de.selfhtml.org/">SELFHTML Forum</a></li>  
                            <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://community.de.selfhtml.org/">SELFHTML Community</a></li>  
                          </ul>  
                        </li>  
                      </ul>  
                    </form>  
                  </div>  
                  <p class="impressum">&copy; 2008 <img src="//src.selfhtml.org/serverdok.gif" width="15" height="10" alt="bereichsübergreifende Seite" />&nbsp;<a href="http://www.selfhtml.org/de.impressum.html">Impressum</a></p>  
                </div>  
              </body>  
              </html>
              
              1. Tach!

                Und nun noch eine kleine Suchaufgabe. Was fehlt in den nachfolgenden Zeilen?

                print '

                ...
                <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="http://forum.de.selfhtml.org/?', $ENV{'REDIRECT_QUERY_STRING'}, '">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>
                ...
                ';

                
                >   
                > PHP kennt kein $ENV{'REDIRECT\_QUERY\_STRING'}. PHP war zwar mal aber sowas, aber ist eben gerade nicht mehr ein auf Perl basierendes Templatesystem.  
                  
                Und? Das war/ist ja auch Perl-Code.  
                  
                
                > Anmerkung: htmlentities sollte hier "tun" - nicht dass jemand Skripte oder CSS einfügt.  
                  
                Warum denn mehr Zeichen als <>&" berücksichtigen? Das ist bei UTF-8 unnötig. htmlspecialchars() ist völlig ausreichend.  
                  
                
                > Bei einer Änderung des Forums könnte aber eine "etwas feinfühligere" Bearbeitung des Query-Strings nötig werden:  
                  
                An was dachtest du da? Die Auswertung macht die Forumssoftware. An dieser Stelle noch mehr zu prüfen, sehe ich nicht als notwendig an. Wenn die Links andere wären als nur mit und ohne my, dann vielleicht ...  
                  
                  
                dedlfix.
                
            2. Om nah hoo pez nyeetz, dedlfix!

              Und ich hab mir die Frechheit erlaubt, sie nicht einfach so zu übernehmen, sondern eine bereits für das alte Forum vorhandene PHP-Version angepasst zu haben. Die beiden Versuche mit /myphp/ und /mypl/ habe ich wieder gelöscht. Zum Probieren habe ich nun neu /mytest/ aufgesetzt. Wenn man sich erfolgreich anmeldet bekommt man einen 404. Das ist nicht weiter tragisch, denn der Fall soll ja nicht getestet werden. Also Anmeldung abbrechen und dann das Ergebnis betrachten. Nichts besonderes feststellbar? Ja, das kommt ja auch erst, wenn ?t=... hintendran hängt. Dazu einen my-Link kopieren, zu mytest umschreiben und abschicken.

              Es fehlt noch das Fragment.

              Matthias

              --
              1/z ist kein Blatt Papier.

              1. Tach!

                Es fehlt noch das Fragment.

                Ein Fragment ist serverseitig nicht auswertbar.

                dedlfix.

                1. Moin dedlfix,

                  Es fehlt noch das Fragment.

                  Ein Fragment ist serverseitig nicht auswertbar.

                  Aber via JavaScript.

                  LG,
                   CK

                  1. Tach!

                    Es fehlt noch das Fragment.
                    Ein Fragment ist serverseitig nicht auswertbar.
                    Aber via JavaScript.

                    Okay, aber was haben wir denn für Fragmente, die beim Kopieren mitkommen und für unangemeldete Nutzer von Bedeutung sind?

                    dedlfix.

                    1. Om nah hoo pez nyeetz, dedlfix!

                      Okay, aber was haben wir denn für Fragmente, die beim Kopieren mitkommen und für unangemeldete Nutzer von Bedeutung sind?

                      Na, dass ggf. gleich zum richtigen Posting gesprungen wird. Wenn ich das richtig sehe, ist eine Auswertung nicht notwendig:

                      URL:          http://forum.de.selfhtml.org/my/?t=210649&m=1437005#m1437005
                      Queriestring:                                  t=210649&m=1437005
                      Fragment:                                                         m1437005

                      sondern nur ein Anhängen von '#m' . $_GET['m'].

                      Matthias

                      --
                      1/z ist kein Blatt Papier.

                      1. Tach!

                        Okay, aber was haben wir denn für Fragmente, die beim Kopieren mitkommen und für unangemeldete Nutzer von Bedeutung sind?

                        Ich frage deshalb, weil ich die Frames-Ansicht nutze und keine Fragmente außer #nachricht-lesen zu sehen bekomme. Deswegen ist mir nicht bekannt, wann sie anderweitig bedeutungstragend auftauchen.

                        Na, dass ggf. gleich zum richtigen Posting gesprungen wird. Wenn ich das richtig sehe, ist eine Auswertung nicht notwendig:
                        URL:          http://forum.de.selfhtml.org/my/?t=210649&m=1437005#m1437005
                        Queriestring:                                  t=210649&m=1437005
                        Fragment:                                                         m1437005

                        Wenn t und m vorhanden sind, dann kommt man doch gleich zur Einzelansicht des Postings, oder? Soweit ich das sehe, kommt der Anker nur ohne m= und dann hab ich keins zum Verarbeiten.

                        dedlfix.

                        1. Moin dedlfix,

                          Wenn t und m vorhanden sind, dann kommt man doch gleich zur Einzelansicht des Postings, oder?

                          Nicht, wenn man die Listen- oder Nested-Ansicht benutzt. Da ist der Anker wichtig, um an die richtige Stelle zu gelangen im Dokument.

                          LG,
                           CK

                          1. Nicht, wenn man die Listen- oder Nested-Ansicht benutzt. Da ist der Anker wichtig, um an die richtige Stelle zu gelangen im Dokument.

                            Nicht vergessen: Wer nicht angemeldet hat auch keine Ansicht gewählt.

                            Hab schon was gemacht; ?t=210649&m=1437023

                            Fred

                            1. Om nah hoo pez nyeetz, Fred Furunkelstein 2012!

                              Nicht, wenn man die Listen- oder Nested-Ansicht benutzt. Da ist der Anker wichtig, um an die richtige Stelle zu gelangen im Dokument.

                              Nicht vergessen: Wer nicht angemeldet hat auch keine Ansicht gewählt.

                              Wer kann schon wissen, welches künftige default-Einstellungen sind ;-)

                              Matthias

                              --
                              1/z ist kein Blatt Papier.

                            2. Moin Fred,

                              Nicht, wenn man die Listen- oder Nested-Ansicht benutzt. Da ist der Anker wichtig, um an die richtige Stelle zu gelangen im Dokument.

                              Nicht vergessen: Wer nicht angemeldet hat auch keine Ansicht gewählt.

                              Das ist mir schon bewusst. Aber wenn die Default-Einstellung geändert wird, dann weiss ich jetzt schon, dass das Script vergessen wird anzupassen. Deshalb lieber eine Lösung, die alle Fälle berücksichtigt.

                              LG,
                               CK

                          2. Tach!

                            Wenn t und m vorhanden sind, dann kommt man doch gleich zur Einzelansicht des Postings, oder?
                            Nicht, wenn man die Listen- oder Nested-Ansicht benutzt. Da ist der Anker wichtig, um an die richtige Stelle zu gelangen im Dokument.

                            Wenn ich das jetzt richtig mit CK im Chat ausklamüsert habe, dann kann vorkommen:

                            • /my/?irgendwas
                            • /my/?irgendwas#nochwas
                            • /my/archiv/noch/mehr/pfad#nochwas

                            Letzteres nur in speziellen Spezialfällen. Jedenfalls kann der Server das /my entfernen und mit Javascript wird noch das Fragment ermittelt und angehängt.

                            dedlfix.

                            1. Tach!

                              • /my/?irgendwas
                              • /my/?irgendwas#nochwas
                              • /my/archiv/noch/mehr/pfad#nochwas
                                Jedenfalls kann der Server das /my entfernen und mit Javascript wird noch das Fragment ermittelt und angehängt.

                              Eingearbeitet. Aber immer noch mit /mytest/. Wenn keine Einwände kommen, bau ich das morgen bei /my/ ein.

                              dedlfix.

                              1. Om nah hoo pez nyeetz, dedlfix!

                                Eingearbeitet. Aber immer noch mit /mytest/. Wenn keine Einwände kommen, bau ich das morgen bei /my/ ein.

                                Jetzt passiert genau das, was nicht passieren darf: Man kann sich nicht anmelden. Der URL

                                http://forum.de.selfhtml.org/mytest/

                                muss aus der Betrachtung rausgenommen werden, da das der Link für die benutzerspezifische Ansicht ist.

                                Matthias

                                --
                                1/z ist kein Blatt Papier.

                                1. Tach!

                                  Jetzt passiert genau das, was nicht passieren darf: Man kann sich nicht anmelden.

                                  Meinst du den 404er, der nach der Anmeldung kommt? Der kommt, weil hinter /mytest/ weder ein Verzeichnis steht noch ein Durchreichen an die Forumssoftware konfiguriert wurde. "Wenn man sich erfolgreich anmeldet bekommt man einen 404."

                                  Der URL http://forum.de.selfhtml.org/mytest/ muss aus der Betrachtung rausgenommen werden, da das der Link für die benutzerspezifische Ansicht ist.

                                  Die bearbeitete Fehlerseite kommt nur bei 401. Sie wird zum Client gesendet, wenn dieser keine Auth-Daten mitsendet. Bei erfolgreicher Anmeldung fragt der Browser die ihm bereits bekannte URL nochmal an, ohne den Inhalt vom Fehlerdokument weiter anzuschauen. Diesmal kommen Auth-Daten mit und es gibt keinen Grund für einen 401. - Bei erfolgreicher Anmeldung wird die 401er Seite genau einmal mitgesendet aber nicht ausgewertet. In dem Fall ist also egal, was drinsteht. Wichtig ist nur, was beim Abbruch in welcher Situation zu sehen ist.

                                  dedlfix.

                                  1. Om nah hoo pez nyeetz, dedlfix!

                                    Jetzt passiert genau das, was nicht passieren darf: Man kann sich nicht anmelden.

                                    Meinst du den 404er, der nach der Anmeldung kommt? Der kommt, weil hinter /mytest/ weder ein Verzeichnis steht noch ein Durchreichen an die Forumssoftware konfiguriert wurde. "Wenn man sich erfolgreich anmeldet bekommt man einen 404."

                                    Nein, ich habe mich missverständlich ausgedrückt: Wenn ich auf Benutzerspezifische Ansicht klicke, gelange ich zu forum.de.selfhtml.org/my(test)/. Dort sollte imho nicht stehen: "SELFHTML Forum - Ohne Anmeldedaten bitte die Anmeldung einfach abbrechen." sondern nur wie bisher "SELFHTML-Forum".

                                    Diese Ausgabe hatte mich verwirrt, weil ich der Meinung bin, das neue Script sollte auf den URL "http://forum.de.selfhtml.org/my/" nicht reagieren.

                                    Formulierungstechnisch würde ich noch ein wenig ändern:

                                    * notwendig statt nötig

                                    Die 3 bzw. 4 Listenpunkte sollten alle gleich formuliert sein, mMn mit einem Verb beginnen, also

                                    * Durchsuchen Sie das SELFHTML-Webangebot
                                    * Navigieren Sie zu einer der Hauptseiten

                                    ** kein Link nach selfhtml.org, den find ich redundand zu de.selfhtml.org und kann die geäußerte Kritik an der Übersichtlichkeit auch teilweise nachvollziehen

                                    ** Link ins Wiki

                                    Matthias

                                    --
                                    1/z ist kein Blatt Papier.

                                    1. Tach!

                                      Nein, ich habe mich missverständlich ausgedrückt: Wenn ich auf Benutzerspezifische Ansicht klicke, gelange ich zu forum.de.selfhtml.org/my(test)/. Dort sollte imho nicht stehen: "SELFHTML Forum - Ohne Anmeldedaten bitte die Anmeldung einfach abbrechen." sondern nur wie bisher "SELFHTML-Forum".

                                      Soweit ich weiß, kann man im Apachen nicht auf den Querystring reagieren (außer in RewriteCond). Ich kann für /my(test)/ nur die Authentisierung konfigurieren oder nicht. Daraufhin hat es einen Realm oder keinen. Es kann nicht mal den und mal den haben.

                                      Diese Ausgabe hatte mich verwirrt, weil ich der Meinung bin, das neue Script sollte auf den URL "http://forum.de.selfhtml.org/my/" nicht reagieren.

                                      Allerdings ist der Inhalt vom ErrorDocument anpassbar. Bei /my(test)/ bekommt man einen anderen Text als bei /my(test)/?irgendwas.

                                      Formulierungstechnisch würde ich noch ein wenig ändern:

                                      Habs schon eingearbeitet, wird aber erst nach dem Hochladen der endgültigen Version zu sehen sein.
                                      Generell müssten auch mal die anderen Fehlerseiten angepasst werden. Aber das macht derzeit einen Haufen Arbeit, weil die pro Subdomain einzeln ins SVN kopiert worden sind. Die müssen beim Umzug mal gesymlinkt werden (git kann Symlinks verwalten, SVN eigentlich auch - so las ich).

                                      dedlfix.

                                      1. Om nah hoo pez nyeetz, dedlfix!

                                        Soweit ich weiß, kann man im Apachen nicht auf den Querystring reagieren (außer in RewriteCond). Ich kann für /my(test)/ nur die Authentisierung konfigurieren oder nicht.

                                        aha.

                                        Allerdings ist der Inhalt vom ErrorDocument anpassbar. Bei /my(test)/ bekommt man einen anderen Text als bei /my(test)/?irgendwas.

                                        Das habe ich schon gesehen und finde ich sehr gut.

                                        Matthias

                                        --
                                        1/z ist kein Blatt Papier.

                                        1. Ok, wie ich sehe seid Ihr schon bei rein administrativen Fragen.

                                          Das ...

                                          <script type="text/javascript">if (location.hash.length > 0) var a = document.getElementById('redir').href += location.hash;</script>

                                          ... finde ich übrigens genial.

                                          Wieder was gelernt.

                                          Fred

                                      2. Tach!

                                        Habs schon eingearbeitet, wird aber erst nach dem Hochladen der endgültigen Version zu sehen sein.

                                        Das ist so gegen 14:45 passiert.

                                        Wenn ich auf Benutzerspezifische Ansicht klicke, gelange ich zu forum.de.selfhtml.org/my(test)/. Dort sollte imho nicht stehen: "SELFHTML Forum - Ohne Anmeldedaten bitte die Anmeldung einfach abbrechen." sondern nur wie bisher "SELFHTML-Forum".

                                        Steht jetzt auch wieder so drin, weil ich grad festgestellt habe, dass durch den anderen Realm die gespeicherten Daten im Browser nutzlos werden. Soviel will ich dann doch nicht kaputt machen, nur wegen der /my/-Linkerei.

                                        dedlfix.

                                        1. Steht jetzt auch wieder so drin, weil ich grad festgestellt habe, dass durch den anderen Realm die gespeicherten Daten im Browser nutzlos werden. Soviel will ich dann doch nicht kaputt machen, nur wegen der /my/-Linkerei.

                                          Das ist aber auch verwirrend - weil niemand weiß, dass er nach dem Abbruch zum öffentlichen Bereich weitergeleitet wird.

                                          In der Konsequenz werden das wohl einige unwissende Benutzer für eine Sicherheitslücke halten.

                                          Klar hält das Forum das aus :)

                                          Fredt

                                        2. Om nah hoo pez nyeetz, dedlfix!

                                          Steht jetzt auch wieder so drin, weil ich grad festgestellt habe, dass durch den anderen Realm die gespeicherten Daten im Browser nutzlos werden. Soviel will ich dann doch nicht kaputt machen, nur wegen der /my/-Linkerei.

                                          Was hat das zur Folge?
                                          * Aus meiner Sicht sind nur die gespeicherten Passwörter neu einzugeben. Das betrifft jeden _angemeldeten_ Nutzer, der den Browser zum Speichern des Passwortes verwendet, genau n mal (n ≤ Anzahl der verwendeten Browser)
                                          * Wahrscheinlich werden gerade aktive angemeldete Nutzer "rausgeschmissen". Das ist aber ggf. gestern schon passiert.

                                          In jedem Fall trifft es aber nur Nutzer, die im Forum angemeldet sind und richtig drüber stolpern werden nur die regelmäßigen Besucher. Und die haben diesen Thread verfolgt.

                                          Was kann man tun?
                                          * Man könnte die angemeldeten Forumsnutzer per E-Mail darüber informieren (die Benutzeregistrierung zeigt, dass es diese Möglichkeit offensichtlich gibt.)
                                          * Man könnte im Kopf der Forumshauptdatei einen Hinweis unterbringen.
                                          * Möglicherweise lässt sich ein no-answer-thread fixieren.

                                          Matthias

                                          --
                                          1/z ist kein Blatt Papier.

              2. Om nah hoo pez nyeetz, dedlfix!

                Es fehlt noch das Fragment.

                Machbar. Please waiting 4.

                1. Lösung zum testen mit Fragment via Javascript:

                  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
                  <html xmlns="http://www.w3.org/1999/xhtml">  
                  <head>
                  
                    <script type="text/javascript">  
                        function setUriFragment() {  
                  	  var ar=document.location.href.split('#',2);  
                  	  if (1==ar.length) {  
                  	      return false;  
                  	  } else {  
                  	      var l=document.getElementById("fremdLink")  
                  	      l.href=l.href+"#"+ar[1];  
                                return true;  
                  	  }  
                        }  
                    </script>
                  

                  ~~~html <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    <title>Passwort benötigt</title>
                    <link rel="stylesheet" href="//src.selfhtml.org/selfhtml-fehler-2008-06-06.css" type="text/css" />
                    <link rel="shortcut icon" type="image/x-icon" href="//src.selfhtml.org/favicon.ico" />
                  </head>
                  <body id="fehler-template" class="fehler-inhalt" onLoad=setUriFragment();>
                    <div class="fehler-rahmen">
                      <img src="//src.selfhtml.org/logo.gif" width="106" height="109" alt="" class="selfhtml-logo" />
                      <div class="teaser">Ein Fehler ist aufgetreten:</div>
                      <div class="errorcode">401</div>
                      <h1>Benutzerbereich</h1>
                      <div class="hilfe">
                        <p class="message">Der Benutzerbereich ist nicht öffentlich zugänglich. Bitte geben Sie ein korrektes Passwort ein, um fortzufahren.</p>
                        <p>Sie haben folgende Möglichkeiten:</p>
                        <form accept-charset="utf-8" action="http://suche.de.selfhtml.org/cgi-bin/such.pl" method="get">
                          <ul>

                  <?php  
                  ~~~php
                  if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {  
                     print '
                  
                            <li>  
                              <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a id="fremdLink" href="http://forum.de.selfhtml.org/?'.htmlentities($_SERVER['REDIRECT_QUERY_STRING']).'">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>  
                            </li>
                  
                  ';  
                  }  
                  ?>
                  
                    
                            <li>  
                              <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="" onclick="javascript:location.reload (); return false;">Laden Sie diese Seite neu</a>, um das Passwort erneut eingeben zu können.</a>  
                            </li>  
                            <li>  
                              <input type="hidden" name="feld" value="alle" />  
                              <input type="hidden" name="hits" value="100" />  
                              <input type="hidden" name="case" value="on" />  
                              <input type="hidden" name="index_1" value="on" />  
                              <input type="hidden" name="index_2" value="on" />  
                              <input type="hidden" name="index_3" value="on" />  
                              <input type="hidden" name="index_4" value="on" />  
                              <label for="suche_suchausdruck">Das SELFHTML-Webangebot durchsuchen: </label><input type="text" size="25" maxlength="255" name="suchausdruck" id="suche_suchausdruck" /> <input type="submit" value="Suche" />  
                            </li>  
                            <li>  
                              Die Navigation von folgenen Hauptseiten aus nutzen:  
                              <ul class="linklist">  
                                <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://de.selfhtml.org/">SELFHTML</a></li>  
                                <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://aktuell.de.selfhtml.org/">SELFHTML aktuell</a></li>  
                                <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://selfhtml.org/">Startseite zu SELFHTML</a></li>  
                                <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://forum.de.selfhtml.org/">SELFHTML Forum</a></li>  
                                <li><img src="//src.selfhtml.org/kap.gif" width="15" height="13" alt="Kapitel" />&nbsp;<a href="http://community.de.selfhtml.org/">SELFHTML Community</a></li>  
                              </ul>  
                            </li>  
                          </ul>  
                        </form>  
                      </div>  
                      <p class="impressum">&copy; 2008 <img src="//src.selfhtml.org/serverdok.gif" width="15" height="10" alt="bereichsübergreifende Seite" />&nbsp;<a href="http://www.selfhtml.org/de.impressum.html">Impressum</a></p>  
                    </div>  
                  </body>  
                  </html>
                  
            3. Hi,

              Und nun noch eine kleine Suchaufgabe. Was fehlt in den nachfolgenden Zeilen?

              print '

              ...
              <img src="//src.selfhtml.org/dok.gif" width="15" height="10" alt="Seite" />&nbsp;<a href="http://forum.de.selfhtml.org/?', $ENV{'REDIRECT_QUERY_STRING'}, '">Wechseln Sie in den allgemeinen Bereich um den verlinkten Artikel zu lesen.</a>
              ...
              ';

                
              Ganz eindeutig fehlt hier das Komma vor dem 'um'.  
                
              cu,  
              Andreas
              
              -- 
              [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
              [O o ostern ...](http://ostereier.andreas-waechter.de/)  
                
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
              
              
              1. Om nah hoo pez nyeetz, MudGuard!

                Ganz eindeutig fehlt hier das Komma vor dem 'um'.

                Welches inzwischen einen gewissen Hang zur Optionalität hat.

                Matthias

                --
                1/z ist kein Blatt Papier.

                1. Hi,

                  Ganz eindeutig fehlt hier das Komma vor dem 'um'.
                  Welches inzwischen einen gewissen Hang zur Optionalität hat.

                  Ich sehe wenig Optionalität für das Komma vor dem 'um' (ich zitiere aus der von Dir verlinkten Seite):

                  "Wenn die Infinitivgruppe mit „um“, „ohne“, „statt“, „anstatt“, „außer“ oder „als“ beginnt, muss das Komma gesetzt werden. (§75 (1))"

                  Das "muß" klingt für mich nicht wirklich nach "optional".

                  cu,
                  Andreas

                  --
                  Warum nennt sich Andreas hier MudGuard?
                  O o ostern ...
                  Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
                  1. Om nah hoo pez nyeetz, MudGuard!

                    Das "muß" klingt für mich nicht wirklich nach "optional".

                    Ja, du hast recht, obwohl es für mich trotzdem ein Widerspruch bleibt.
                    (1) Wenn keine Missverständnisse auftreten, kann es weggelassen werden
                    (2) bei der Verwendung von "um" hat (1) nicht vorzukommen.

                    In der amtlichen Regelung ist die Reihenfolge der Festlegungen besser: http://www.canoo.net/services/GermanSpelling/Amtlich/Interpunktion/pgf71-79.html#pgf75

                    Matthias

                    --
                    1/z ist kein Blatt Papier.