Hi,
ich hielte es für sinnvoll, dass du über die Sicherheitsimplikationen dieser Zeile berichtest.
Also, wenn das sendende Skript, das auf dem selben Server liegt wie die Ressource in der das Javascript verwendet wird, dann hat derjenige, dessen Server hier Mist sendet, ganz gewiss kein Problem mit dem Javascript, sondern damit, dass ein böswilliger Dritter dort überhaupt Dateien oder Daten (Hier: In der Datenbank) verändern kann.
Mithin: Kann der das sendende PHP-Skript ändern, so kann er sehr wahrscheinlich auch die Datei ändern, die den xmlHttp-Request auslöst. Ergo auch das Javascript selbst.
Du kannst ja mal versuchen, einen Angriff zu beschreiben, bei dem er das nicht müsste. Bedenke dabei, dass der Inhalt der Datentabelle nicht "User-Generated-Content" ist.
Ich könnte mich einfach auf den Standpunkt zurückziehen, dass der OP eben nicht beschrieben hat, woher die Daten kommen. Aber das wäre mir zu kurz gesprungen.
Mir ist es wichtig, dass klar ist, dass zwischen Server- und Clientseite eine Schnittstelle gebaut wird. Das Interessante dabei ist, dass es einfach möglich sein sollte, Server- und Clientseite "beliebig" austauschen zu können, d.h. lose zu koppeln (auch wenn der Begriff für etwas anderes verwendet wird). Dies erreicht man am Einfachsten, wenn man beim Entwickeln einer Komponente nur noch das Interface, mit dem man kommuniziert, und nicht die konkrete Implementierung vorstellt.
In diesem Fall würde man serverseitig darauf achten, es so zu implementieren, dass unnötige Beschränkungen vermieden werden. Ich habe bereits dass jQuery/Content-Type-Beispiel gebracht, also brauche ich es nicht zu wiederholen. Ein falscher Content-Type ist eine unnötige Beschränkung.
Clientseitig würde ich es so implementieren wollen, dass ich bei einem HTTP-GET-Request auf eine bestimmte URL einen String zurückbekomme, den ich als JSON parsen könnte. Es muss ja nicht der eigene Dienst sein, den man anspricht. Und sobald man diese Einsicht hat, sieht man, dass das, was als JSON erwartet wird, nicht mehr unbedingt JSON sein muss ... "user generated content" hin oder her.
BTW hat es weniger mit user generated content zu tun… Wenn die Serverseite mit json_encode die Daten kodiert, habe ich danach auf jeden Fall gültiges JSON, den ich auch ohne Sicherheitslücke durch eval schicken darf. Man bräuchte zum Ausnutzen des eval-Konstrukts also eingebettetes JavaScript ("user generated") und eine nicht kontext-gerechte Maskierung (kein json_encode).
Zu Deiner anderen Ausführung: Wenn ich jQuery gar nicht erst benutze - also gar nicht erst lade - warum sollte ich dann berücksichtigen, dass jQery dieses oder jenes mit den Daten aus xmlHttp.responceHeaders (kennt der aktuelle Firefox nicht mal) versucht?
Weil die Serverseite unabhängig von der Clientseite ist. Im wesentlichen beschreibt die Serverseite einen Webservice: den "GibMirEinenZufallsText"-Service. Und den willst du vielleicht nicht nur alleine nutzen.
Apopros Wiederverwendbarkeit des Codes:
Mehr als 99% aller Websites beinhalten nur wenige Funktionen, die sich wie vorliegend mit nativen Java-Skript leicht und performant erledigen lassen. Aus der Frage kann ich sehr bestimmt vermuten, dass diese Seite dazu gehören wird. Diese Webseiten haben (im wesentlichen) oft auch 5 bis 10 Jahre Bestand. Wieso sollte, wenn es sehr viel einfacher und sehr viel billiger geht, denn ein Wahnsinns-Aufwand getrieben werden, etliche - nicht selbst beherrschbare Fehlerquellen (Bugs in den Bibliotheken) - "nachgerüstet" werden, um irgendwelchen schönen Theorien zu genügen, z.B. den Code "wiederverwendbar" zu machen - wenn bis dahin womöglich der Stand der Technik ein ganz anderer ist?
Zum Einen wird die Wahrscheinlichkeit, selber einen Bug zu produzieren, höher sein, als einen in einem Framework zu finden. "Einfacher" und "Billiger" ist selbst geschriebener Code nun auch nicht.
$.get('meineUrl', function(meinGeparstesObjekt) { });
erscheint mir schon sehr kompakt und kann man hinschreiben, ohne lang nach der korrekten Schreibweise von XmlHttpRequest zu suchen. CDNs bewirken, dass User auch jQuery nicht noch groß laden müssen, und man hat automatisch Bugfixes zu seiner gewählten Version.
Wiederverwendbarkeit bezieht sich aber auch nicht nur auf einen selber... vielleicht findet sich ja jemand anderes, der deinen Service nutzen will. Wir befinden uns ja schließlich im World Wide Web, da ist das "einfach so" möglich. Und selbst wenn man es nur ganz alleine nutzt... irgendwann will der OP vielleicht seinen Client-Code umorganisieren, und dann hilft es, sich möglichst früh Gedanken gemacht zu haben, wie es vernünftig funktionieren kann.
Schreibst Du Deine Skripte denn mit einer Textverabeitung, weil Du die dann so schön als PDF exportieren kannst - die nachträglich gezippt schließlich auch nur wenig Platz auf der Platte brauchen?
Die Analogie verstehe ich nicht.
Bis die Tage,
Matti