Hallo,
also Cross-Side-Scripting ist noch relativ harmlos, was viel schlimmer ist, wenn er dir PHP-Code unterschiebt, und dieser dann ausgeführt wird.
Dies kann passieren, wenn per URL/Eingabe angegeben wird, welche Datei per include geladen wird.
SQL-Injection sind auch sehr gefährlich, auch wenn PHP schon die besten Sicherheitspackete dort mitbringt.
Aber zurück zu XSS:
Also XSS ist wenn man HTML Code einschleust. Ein Beispiel wäre, wenn du ungefiltert den Benutzernamen ausgibst.
Wenn jmd. z.B. <h1>Name</h1> eingibt, dann wird dieser sehr groß Angezeigt.
Darum sollte man jede Eingabe, egal welche, mit htmlentities() "behandeln".
Was kann passieren, wenn dies nicht passiert:
-Meta-Refresh auf eine fremde Seite
-Leichte Verunstaltung der Seite durch den einen Eintrag
oder, jetzt das gefährliche:
Per JavaScript liest er dir deine Cookies (für die deine Seite) aus und sendet den Inhalt an sich selber.
Sofern du vorher irgendwie im Admin CP warst, ist in dem Cookie normalerweise noch die Session ID gespeichert.
Mit dieser kommt er dann in das Admin CP.
Oder:
Irgendwo auf der Gästebuchseite ist ein Loginformular. Dieses lässt er dann durch sein eigenes "überschreiben", also er lässt ein 2. Fenster über dem Loginfenster anzeigen.
Wenn jmd. sich einloggen möchte, so füllt er das Formular vom Angreifer aus und sendet dann die Daten an den Angreifer.
Damit wäre es auch möglich Loginlinks zu überschreiben, die dann auf die Seite des Angreifers führen.
Oder er baut ein Meta-Refresh ein und sendet dann die Leute auf die eigene Seite, die genau aussieht wie deine, bloß dass er dann die Logindaten sammelt.
Oder:
Er speichert einen JavaScript Virus und dieser Virus installiert dann unerwünschte Software auf den Computern der Gästebuchbetrachter.
Also, wie gesagt eingeschleuster+ausgeführter PHP Code oder SQL Injection sind schlimmer, aber sofern auf der Seite weitere sensible Daten sind, kann man damit auch einigen Schaden anrichten.
Außerdem sollte man auch Werte die per URL übergeben werden nicht einfach so ausgeben.
Und wenn du einen bestimmten Wert erwartest, z.B. eine Zahl, dann solltest du überprüfen ob es eine ist.
Dies geht z.B. per is_numeric().
Sonst kann man soetwas mit regulären Ausdrücken überprüfen.
P.S. PHP Code aus einer DB auszuführen ist recht kompilziert und wird auch nicht empfohlen.
Aber mit echo $row->text; geht dies _nicht_.
Grüße