Christian Tank: ist eval() (Javascript/AJAX) hier ein Sicherheitsrisiko

Hallo, ich habe meine Seite mit PHP/Javascript/AJAX programmiert: Für meine AJAX-Funktionen habe ich eine zweite PHP-Seite im Hintergrund, die alle Ergebnisse per JAVA-Script-Code an die für den User sichtbare Seite zurückgibt. Diese Seite führt den Code dann per eval() aus.

Ist das ein Sicherheitsrisiko? EIgentlich kann ja nur mein eigener JS-Code und kein externer Code ausgeführt werden. Ich poste hier keinen Quellotext, da es sich um eine grundsätzliche Frage der Programmiertechnik handelt...

Danke Christian

  1. Tach!

    ich habe meine Seite mit PHP/Javascript/AJAX programmiert: Für meine AJAX-Funktionen habe ich eine zweite PHP-Seite im Hintergrund, die alle Ergebnisse per JAVA-Script-Code an die für den User sichtbare Seite zurückgibt. Diese Seite führt den Code dann per eval() aus.

    Ist das ein Sicherheitsrisiko?

    Die Frage lässt sich nicht eindeutig beantworten, weil nicht klar ist, ob man nicht auch in den generierten Code eigenen Code einschmuggeln kann. Wenn allerdings durchgehend beim Einfügen von Werten (deren Herkunft ist egal - es spielt keine Rolle ob es Nutzereingaben sind oder sie aus einer anderen Quelle kommen) die Kontextbedingungen beachtet werden, ist das nicht unsicherer als wenn du nur die Daten zum Client schickst und sie dort kontextgerecht einbindest. Andererseits besteht das Risiko auch ohne eval(), wenn du mit der eben genannten Nur-Daten-Methode beim Einfügen auf der Clientseite Fehler machst.

    dedlfix.

  2. Moin,

    ich habe meine Seite mit PHP/Javascript/AJAX programmiert: Für meine AJAX-Funktionen habe ich eine zweite PHP-Seite im Hintergrund, die alle Ergebnisse per JAVA-Script-Code an die für den User sichtbare Seite zurückgibt. Diese Seite führt den Code dann per eval() aus.

    hört sich irgendwie umständlich an.

    Ist das ein Sicherheitsrisiko? EIgentlich kann ja nur mein eigener JS-Code und kein externer Code ausgeführt werden. Ich poste hier keinen Quellotext, da es sich um eine grundsätzliche Frage der Programmiertechnik handelt...

    Ja, genau. Die grundsätzliche Frage ist: Warum tauschen die zwei Software-Komponenten Code untereinander aus, und nicht einfach nur Daten? Ich kann dein Szenario nicht konkret einschätzen, weil du es nicht verraten willt. Okay. Aber normalerweise würde ich den Javascript-Code, der da ausgeführt werden soll, direkt als Funktion(en) im clientseitigen JS-Modul vorhalten, die sich nur noch die jeweils aktuell benötigten Daten vom Server abruft, z.B. als JSON.

    Das Sicherheitsproblem, das du ansprichst, sehe ich jedoch in deinem Fall auch nicht, solange du genau unter Kontrolle hast, welcher Code da ausgetauscht und ausgeführt wird. Solange also niemand deinem Server fremde Daten unterschieben kann ... aber dann hättest du noch ganz andere Probleme als ausgerechnet eval(). ;-)

    So long,
     Martin