• Hallo leute stehe gerade vor ein riesen Problem !

    schreibe gerade einen chat und alle einträge macht ein PHP script,
    erst wollte ich den chat direkt mit Ajax auf die XML Datei zugreifen lassen aber weil ich vor der ausgabe bestimmte header senden muss wegen Catch Control usw. gebe ich die XML Datei mit PHP aus ohne iregend was zu rendern das script senden nur die benötigten header !

    leider mußte ich dann festellen, das wenn jemand ein html element in den chat eingibt die ich natürlich vor dem speichern in die xml datei escape werden die element wohl wegen Ajax trotzdem auf dem display angezeigt, obwohl die vor dem eintragen escaped wurden, jetzt weiß ich nicht wie ich diesen groben Fehler beseitigen soll ?

    ich brauch dabei unbedingt Hilfe !

    das escapen usw. macht meine PHP Klasse automatischen sobald eine Kind Klasse abgerufen wird !

    hier:

    die Codescnipsel der die einträge in die Xml Datei macht sieht so aus:

    Ich versteh absolute nicht wieso, also die daten stehen so in der XML Datei

    HTML
    <a href=\\"\\">huhu</a>

    dieses Element wird nach den abruf über Ajax als Link dargestellt !

    Danke, schon einmal !

  • Machs doch so, speicher in eine geschützte Datei in die erste zeile den Autor und in die zweite den geschriebenen Text. Wenn jetzt ein Client über AJAX den neusten Chat-Stand abfragt, liest du mit einer eigenen PHP-Datei das beides aus und gibts dann z.B. sowas zurück:

    XML
    <?xml version="1.0">
    <root>
     <author>Tobse</author>
     <text>Test</text>
    </root>


    Sp kannst du auch verhindern, dass nur eingeloggte member den Chat mitverfolgen können. Das mit dem &lt; ung &gt; kommt aus htmlspechialchars();.
    Mein Tipp ist aber, den Usern mit htmlentities(); das HTML-Schreiben zu verbieten, kann über <script>-Tags böse enden.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Hi, ich verbiete ja HTML, das Problem ist das auch wenn ich html escaped habe es trotzdem auf dem Bildschirm angezeigt wird, genau das soll es ja nicht, wie oben schon beschrieben ist jedes html element escaped worden bevor es in der XML datei gespeichert wurde weil ich eben html verbiete.

    Aber wenn jetzt ein Client mit ajax darauf zugreift zeigt der browser das html element das eigentlich escaped ist trotzdem als html an, das soll es ja nicht.

    Meine frage ist jetzt wie verhindere ich das ??

    Das was du geschrieben hast ist mir ja klar, und genau so mache ich das ja.

    Aber meine Frage war leider eine andere !

    Trotzdem Danke.

  • Hi,

    sorry hier der Code der die Ausgabe macht (Javascript):

    die neuen einträge fügt das Script nach und nach auf dem Bilschirm ein !

    Die Abfrage geschieht über Ajax das BasisScript :

    Danke, schon einmal !

    P.S. Da ich bestimmte header brauch auch wenn die abfrage per ajax geschieht, läuft die abfrage nicht direkt auf das xml dokument sonder über php hier der schnippsel :

    3 Mal editiert, zuletzt von webcoolcity (10. Januar 2010 um 15:45)

  • Das mein ich, ohne PHP könnte man ja einfah die Datei anschaun. Wenn du anstatt die Usereingabe zu escapen einfach htmlentities(); darauf anwendest, hat sich dein HTML-Problem.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Das mein ich, ohne PHP könnte man ja einfah die Datei anschaun. Wenn du anstatt die Usereingabe zu escapen einfach htmlentities(); darauf anwendest, hat sich dein HTML-Problem.


    so ein quatsch, du verstehst gar nicht worum es hier geht !

    zum 3. mal, warum sollte ich die zeichen die ich gefiltert habe wieder in html umwandeln wenn ich das doch verbiete ! :evil:, wenn du das meinst alles andere ist identisch mit htmlspecialchars(); die anführungszeichen escaped doch get_magic_quotes_gpc() voll automatisch !

    Lies doch mal -> http://php.net/manual/de/function.htmlentities.php


    Frage an die anderen könnte es sein wenn ich den zeichensatzt ändere in utf-8 anstatt iso-blabla das es dass Problem behebt ?

    4 Mal editiert, zuletzt von webcoolcity (10. Januar 2010 um 16:26)

  • Tut mir leid, aber in dem PHP Buch das ich gelesen habe steht, das htmlentities(); alle HTML-Elemente entfernt. Nimm strip_tags();

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Er entfernt die ja nicht er wandelt die sgml tags in steuerzeichen um so das die elemente vom browser nicht interpretiert sondern nur angezeigt werden.

    striptags entfernt anführungszeichen ! mein problem hat damit (serverseitig) nichts zu tuhen sondern der XML Parser vom Browser interpretiert den Zeichnsatz falsch !

    Du solltest dich noch einmal mit escape,zeichensatz und steuerzeichen auseinnandersetzen !

  • Was fürn Witz! hier, das hab ich lokal getestet:

    PHP
    <?php
    $string="Das ist kein HTML.\n<a>Das ist HTML</a>";
    echo strip_tags($string);
    ?>

    und das Hat der Browser angezeigt:

    Zitat von Mozilla Firefox


    Das ist kein HTML. Das ist HTML


    und das Stand im Quellcode:

    Zitat von Quellcode


    Das ist kein HTML.
    Das ist HTML


    Löst das jetzt dein Problem? Wenn nicht dann bin ich draußen.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Nein, tut es nicht !

    du verstehst immer noch nicht das es mit dem Server immer noch nichts zu tuhen hat !

    ich wende htmlspecialchars ja an !

    und die sgml elemente wurden ja au gefiltert und au so in dem xml dokument gespeichert und jetzt kommt mein problem, da das xml document in ein DOM Objekt gepackt wird durch javascript um die antwort vom server (xml) zu verarbeiten um es auf dem bildschirm anzuzeigen, werden die steuerzeichen die durch htmlspecialchars aus dem html zeichen generiert wurden ignoriert und trotzdem als html element dargestellt, der Browser zeigt die angabe :

    <a href="bla">bla</a>

    als Link an

    obwohl dieser string mit htmlspecialchars in steuerzeichen umgewandelt wurde:

    &lt;a href=\\"\\"&gt;huhu&lt;/a&gt;

    jetzt klar ?

    Das Problem muß ich mit Javascript beheben in dem ich das nochmal filtern werde mit PCRE

    Steuerzeichen sind zeichen um die Anzeige zu steuern z.b. \r \n usw. der Browser ob xml parser oder javascript (Objekte) benutzen den Falschen zeichensatz ISO-bla bla und ich werde ihn jetzt zu utf-8 ändern und dann filtern per Js

    Einmal editiert, zuletzt von webcoolcity (10. Januar 2010 um 19:30)

  • Gut, wenn dus nicht verstehen willst. Wenn du strip_tags(); anwendest, musst du dich mit JS n scheiss da drum kümmern.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • so wie ich das sehe, wirst du tatsächlich mit javascript gezielt den Text filtern müssen.
    Über einen regulären Ausdruck sollte das aber nicht allzu problematisch sein.
    Was Anderes fällt mir dazu nicht ein.

    Tobse: Wenn er den original-input behalten will, bringt ihm strip_tags nix.

    webcoolcity: ich würds an deiner Stelle drauf scheißen und es trotzdem nutzen ;)
    Evtl. setzt du noch nen Parser dazwischen, der bei Links und/oder Bildern die Quellen (in den beiden fällen also "href" und "src") dazu behält, damit gehen den Nutzern keine Infos flöten.

    @euch beide: lasst das Geflame! Sonst mach ich hier dicht!