Ankündigung

Einklappen
Keine Ankündigung bisher.

htmlspecialchars im HTML <head> funktioniert nicht?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • htmlspecialchars im HTML <head> funktioniert nicht?

    Hallo,
    es ist etwas seltsam, aber ich weiß nicht weiter. "htmlspecialchars()" funktioniert nicht, wenn es im HTML <head> verwendet wird, im <body> schon.

    Zuerst dachte ich, vielleicht liegt es nur an den Browsern, aber der W3 Validator bemängelt es auch.


    Code:
    <head>
    <title><?php echo (htmlspecialchars($mytitle)); ?></title>
    <title>Cat's and "Dogs"</title>
    
    <meta name="description" content="<?php echo substr(htmlspecialchars(strip_tags($mydesc)), 0, 100); ?> ..." />
    <meta name="description" content="Big Cat's and "Dogs" playing with little Cat's and "Dogs" in the ..." />
    </head>

    Mit var_dump wird der String korrekt angezeigt. Zudem wird die nächste Zeile dadurch auch beeinflußt, komischerweise, aber die übernächste schon nicht mehr.
    Code:
    <head>
    <title><?php var_dump(htmlspecialchars($mytitle)); ?></title>
    <title>string(xx) "Cat's and &quot;Dogs&quot;"</title>
    
    <meta name="description" content="<?php echo substr(htmlspecialchars(strip_tags($mydesc)), 0, 100); ?> ..." />
    <meta name="description" content="Big Cat's and &quot;Dogs&quot; playing with little Cat's and &quot;Dogs&quot; in the ..." />
    
    <meta property="og:title" content="<?php echo (htmlspecialchars($mytitle)); ?>" />
    <meta property="og:title" content="Cat's and "Dogs"" />
    </head>

    Im <body> wird es korrekt ausgegeben.
    Code:
    <body>
    <?php echo htmlspecialchars($mytitle); ?>
    Cat's and &quot;Dogs&quot;
    
    <?php echo htmlspecialchars(strip_tags($mydesc)); ?>
    Big Cat's and &quot;Dogs&quot; playing with little Cat&#039;s and &quot;Dogs&quot; in the Garden.
    </body>

  • #2
    Das Title-Element erfährt eine gewisse Sonderbehandlung. Erst einmal darf darin nur Text vorkommen, des weiteren sollte dieser auch nicht zu lang sein. Suchmaschinen akzeptieren Längen bis 64 Zeichen, soweit ich das in Erinnerung habe.
    Da der Titel ausser bei Suchmaschinen auch im Browser einen spezielle Funktion hat, sollte er aussagekräftig und einzigartig sein. Alle Seiten mit dem Titel Meine Superduperwebseite zu benennen, macht auch nicht wirklich Sinn, vergleichbar etwa mit einem Buchtitel.

    Da im Titel keine Tags vorkommen dürfen und auch nicht als solche behandelt werden, braucht man hier auch kein htmlspecialchars zu verwenden.
    Siehe auch https://www.w3.org/Provider/Style/TITLE.html

    Kommentar


    • #3
      protestix, schön und gut so ein sauberes Internet, das sich an alle Regeln hält, nur etwas praxisfremd und Offtopic. Zudem gilt es nicht nur für title, sondern auch description, weil same problem.
      Ich habe Quotation Marks in Titeln bei Markennamen. Das kann nicht falsch sein. W3 wünscht sich das vielleicht anders, aber ohne mir. Zudem sind es nur Hinweise, keine Gesetze.

      Zurück zum Topic!
      Die Frage spezifiziert:
      1.) Wieso funktioniert das nicht:
      Code:
      <head>
      <title><?php echo (htmlspecialchars($mytitle)); ?></title>
      </head>
      2.) Wieso funktioniert das:
      Code:
      <head>
      <title><?php echo preg_replace(array('/</','/>/','/"/'), array('&lt;','&gt;','&quot;'), $mytitle); ?></title>
      </head>
      Das liegt doch nicht an mir!?

      Kommentar


      • #4
        Noch einmal anders.
        &quot; ist eine HTML Entität. Der Browser übersetzt das dann, aber nur im Body nicht im Head, da dürfen Entitäten nicht vorkommen, bzw, werden dann halt als ihr Text ausgegeben.

        Kommentar


        • #5
          ... es ist nicht wahr... jetzt funktioniert es mit htmlspecialchars(), Entweder irgendein Troll wollte mich foppen, oder ich weiß auch nicht. Sehr seltsam.

          Kommentar


          • #6
            protestix, Offtopic hast du nicht ganz recht. Entitäten in <title> werden "übersetzt". Auch in metatags. So sehr das wohl eine Internet-Bibel-Inschrift ist, ich kann ihr nicht nachkommen, da ich Markennamen weiterhin quoten werde, bzw. diese nicht nicht verwenden werde.

            Kommentar


            • #7
              Ich glaube ich weiss nun worauf du hinaus willst.

              htmlspecialchars hat natürlich noch flags, steht aber auch im Handbuch.

              PHP-Code:
              <title><?= htmlspecialchars($textENT_QUOTES'UTF-8'); ?></title>
              funktioniert einwandfrei.

              Kommentar


              • #8
                protestix, die Flags habe ich mir durchgelesen und keines davon ist notwendig. Das default reicht.

                Warum es erst nicht funktionierte und dann doch ist mir ein Rätsel. Das Internet birgt so manche Geheimnisse.

                Kommentar


                • #9
                  Zitat von protestix Beitrag anzeigen
                  Da im Titel keine Tags vorkommen dürfen und auch nicht als solche behandelt werden, braucht man hier auch kein htmlspecialchars zu verwenden.
                  Natürlich muss hier htmlspecialchars() verwendet werden. Und warum sollten keine Tags im Titel vorkommen können? Auf dieser Seite kommt auch "<title>" im Seitentitel vor:

                  https://developer.mozilla.org/de/doc.../Element/title

                  Und wenn man sich den Source-Code ansieht, wurden sehr wohl die HTML-Steuerzeichen escaped:

                  HTML-Code:
                  <title>&lt;title&gt; - HTML | MDN</title>

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    Da im Titel keine Tags vorkommen dürfen und auch nicht als solche behandelt werden, braucht man hier auch kein htmlspecialchars zu verwenden.
                    Zusätzlich zu dem was hellbringer schrieb: Da hast Du wohl, als XSS behandelt wurde gefehlt?

                    Kommentar


                    • #11
                      Da steht "Der Titel kann nur Text enthalten - enthaltene Tags werden nicht interpretiert."
                      und genau so ist auch
                      HTML-Code:
                      <title><b>fett</b></title>

                      Kommentar


                      • #12
                        Zitat von protestix Beitrag anzeigen
                        Da steht "Der Titel kann nur Text enthalten - enthaltene Tags werden nicht interpretiert."
                        und genau so ist auch
                        HTML-Code:
                        <title><b>fett</b></title>
                        PHP-Code:
                        <?php

                        $evil_title 
                        "</title><script>alert('got you!')</script>";

                        ?><!DOCTYPE html>
                        <html>
                        <head>
                            <title><?= $evil_title ?></title>
                        </head>
                        <body>
                            <p>Content</p>
                        </body>
                        </html>

                        Kommentar


                        • #13
                          Gut, dann stimmt die Aussage dort eben nicht, wieder was dazu gelernt.

                          Kommentar


                          • #14
                            Zitat von protestix Beitrag anzeigen
                            Gut, dann stimmt die Aussage dort eben nicht, wieder was dazu gelernt.
                            Das Eine schließt hier aber nicht das Andere aus! Ist ja durchaus denkbar das diese Aussage von Mozilla zurifft. Die steht in keinem Konflikt zum gezeigten XSS und auch nicht zu den im Title enthaltenen Entities (Entity !== Tag/Element)

                            Kommentar


                            • #15
                              Habe jetzt noch mal die englische Version nachgelesen. Dort steht
                              ...and any tags contained within are ignored.
                              Für mich liest sich das eindeutig. Das Script Element ist nun mal ein tag.
                              Ich denkie hier hat man sich eine Sicherheitslücke eingefangen. Mit dem Scipt-Tag gab es ja in der Vergangenheit schon öfter Probleme, die dann behoben werden mussten.
                              Das Problem beim Script-Tag ist ja, dass es im Head eines Dokumentes vorkommen darf, was bei anderen HMTL-Elementen ja nicht der Fall ist. Hier hat man wohl die Problematik noch nicht erkannt.

                              Kommentar

                              Lädt...
                              X