Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML validieren

Einklappen

Neue Werbung 2019

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

  • HTML validieren

    Hallo zusammen,

    ich suche nach einer Möglichkeit einen Text nach nicht erlaubten HTML-Tags zu durchsuchen. Harmlose Tags wie [b], <table> usw. sollen erlaubt sein, aber ohne "gefährliche" Attribute wie "onmousemove".

    Ausserdem sollte das HTML "wohl geformt" sein ... also jeder Tag sollte auch einen Schließenden haben und die Reihenfolge sollte auch stimmen (falsch: Text).

    Ich denke jeder kennt mein Problem ... ich möchte den Benutzer einer Website die Möglichkeit geben HTML-Code zu posten, ihnen aber nicht erlauben damit Unsinn zu treiben.

    Gestern habe ich den ganzen Tag vergeblich versucht eine (einfache/schnelle) Lösung für mein Problem zu finden ... deshalb frage ich hier nach, ob jemand von euch eine (gute) Implementierung dazu kennt.

    Meine bisheriger Ansatz: ich hab aus der W3C XHTML-DTD alle Tags und Attribute rausgenommen, die geradezu dazu einladen missbraucht zu werden. Den zu prüfenden HTML-Code lege ich in einem XML-Dokument ab und lasse es von einem XML-Parser validieren.

    Bei dem XML-Parser liegt mein Problem:

    Code:
    xml_parse($xml_parser, $xml_content, true)
    Prüft zwar auf wellformed aber nicht gegen eine DTD

    Und das domxml-Modul habe ich nicht installieren können (auf Win2000+IIS) ... bin ich vermutlich zu Dau dafür.

    Bevor ich jetzt noch ein Tag verschwende:

    - Ist der Ansatz gut? Oder kann man auch mittelschwere Katastrophen mit einem Attribut wie "href" auslösen? IMHO kann man doch auch in ein href-Attribut js-Code einbauen!

    - Hab ich Alternativen dazu (persönliches prüfen kommt vorerst nicht in Frage)? Es kommt nicht auf die Performance an - die Texte sind recht klein. Es wäre genial wenn es ohne PHP-"Extensions" gehen würde.

    Vielen Dank,
    Oliver

    P.S. bin auch bereit ein paar Stunden Online-PHP-Lektüre zu lesen ... sofern die Chance hoch ist das es mich weiterbringt ... also sind auch Links gerne gesehen :wink:

  • #2
    versuchs mal mit regualr expressions , da sagst dann einfach das lezte zeichen is /+erstes zeichen dann ahst schonmal html und /html und so kannst von den anfangs geöffneten tags die "zumach" tags selber generieren und musst dich nicht auf "hoffetlich richtige" usereingaben verlassen

    Kommentar


    • #3
      Hallo rio,

      Zitat von rio
      versuchs mal mit regualr expressions , da sagst dann einfach das lezte zeichen is /+erstes zeichen dann ahst schonmal html und /html und so kannst von den anfangs geöffneten tags die "zumach" tags selber generieren und musst dich nicht auf "hoffetlich richtige" usereingaben verlassen
      Den Text als HTML zu posten ist eine Option wie hier der BBCode (nur durch die Attribute wesentlich komplexer). Jeder der HTML verwendet sollte das entsprechende Wissen haben. Sollte die "hoffetlich richtige" Eingabe doch falsch sein, wird eben ein Fehler angezeigt und dem User die Möglichkeit gegeben seine Fehler zu verbessern.

      Der HTML und Body-Tag wird übrigens nicht erfordernlich sein (oder wird gefiltert). Der eingegebene HTML-Code soll dann in einem Template-System ausgegeben werden.

      Mit deiner Methode würde übrigens folgender Code "kaputt" gemacht (mit IE ansehen):
      Code:
      <table>
        <tr><td>Meine Zeile 1</td></tr>
        <tr><td>Meine Zeile 2</td></tr>
      </tble>
      Oben ist meine Tabelle

      Die Website ist übrigens http://staging.opencaching.de (Noch in Entwicklung - Betatester sind willkommen :wink: )

      Viele Grüße,
      Oliver

      Kommentar


      • #4
        Hallo,

        hab jetzt versucht die Sache mit den XML-Funktionen xml_parse usw. zu lösen.

        Dabei ist mir aufgefallen, das xml_parse Probleme mit folgender Konstruktion hat:
        ---
        Code:
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html>
          <head>
            <title>Where is the Bug?</title>
          </head>
          <body>
            <!--
              <?php
                for ($i = 0; $i < 10; $i++)
                {
                  echo 'a';
                }
              ?>
            -->
          </body>
        </html>
        ----

        PHP interpretiert den Code aber xml_parse gibt es an den default-Handler weiter und nicht an den Processing-Instructions-Handler ...

        Ist das so gewollt? Offensichtlich denkt xml_parse, dass innterhalb eines xml-Kommentars keine PI's sein können ... php selbst macht es aber so

        Beispiel:
        http://www.dietz.homeip.net/php/test/pi.php
        http://www.dietz.homeip.net/php/test/parse_pi.php

        Code:
        http://www.dietz.homeip.net/php/test/pi.txt
        http://www.dietz.homeip.net/php/test/parse_pi.txt

        Mach/Denk ich was falsch oder ist da ein kleiner Bug?

        Danke,
        Oliver

        Kommentar

        Lädt...
        X