Ankündigung

Einklappen
Keine Ankündigung bisher.

Apache -> NodeJS kommunikation/sicherheit

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

  • Apache -> NodeJS kommunikation/sicherheit

    Hallo leute,

    ich versuche gerade ein vorhandenen PHP Script mit NodeJS und Sockets.IO zu erweitern für Realtime aktualisierungen. Dabei verwende ich das Node Modul NowJS (wegen einfacher Implementierung). Alles funktioniert soweit, nur hat NowJS einige sicherheitslücken, die ich jetzt zumachen muss.

    Zunächst Mal ist es möglich in NowJS/Socket.IO durch das Einbinden des Serverscriptes in die Eigene Seite, zusätzliche informationen in die Hauptseite einzuschleusen.

    Als Beispiel könnt ihr http://nowjs.com/examples/map im Firefox öffnen, und paralel auf eurem Localen Apache Server eine test.html erstellen mit Folgenden Quellcode: http://pastebin.com/duStSVQF. Die Test.html in einem Anderen Browser öffnen, und euer "Actor" wird auf nowjs.com angezeigt der von localhost/test.html kommt.

    Wenn ihr also ein Chat habt, könnten dort Spambots ohne Probleme reinkommen.

    Nun zu meinem Problem: Ich habe auch eine Multiplayer Karte. Zur sieht der Workflow so aus:

    1) map.php wird aufgerufen
    2) map.php Holt informationen aus der Datenbank
    3) map.php gibt die daten aus etwa in der Form
    PHP-Code:
    <script type="text/javascript">
    var my = {
    name : '<?= $name ?>',
    x : '<?= $x ?>',
    y : '<?= $y ?>',
    }
    </script>
    4) DOM wird ausgegeben, jquery .ready function wird aufgerufen.
    5) now.ready wird aufgerufen und my variable wird an NodeServer übergeben.
    6) NodeServer leitet die my variable an Clients, die gerade verbunden sind weiter und triggered die update funktion der Clients
    7) Andere benutzer sehen dass sich auf der Karte was aktualisiert.

    Soweit so gut. Nun ist es aber Möglich, den Script zu bearbeiten mit Firebug und my.x auf zb 100 setzen und my.y auf 200 und plötzlich hat man sich wegteleportiert. Also müssen die x/y koordinaten nicht von map.php ausgegeben werden, sondern mein NodeJS server muss diese sich irgendwie anders holen.

    Mein Gedanke war zunächst, NodeJS macht ein Ajax Request auf apache server um die Daten zu holen.

    Nun kommt aber das Problem der Authentifizierung. Ich muss im ajax request des NodeServers irgendwas dem Apache server mitgeben damit der Apache weis, dass der Request NUR von meinem Server kommen kann.

    Und da ist der Hacken, habt ihr irgendwelche Vorschläge wie der Node Server meinem Apache Server nach daten abfragen kann, die wirklich nur den einen User was angehen?

    Das Problem ist,dass mein Apache + MySQL server nicht auf dem Gleichen Hoster läuft.
    Sonst hätte ich einfach mit nodejs auf mysql zugegriffen, leider geht das nicht. Also muss Node sich die sachen von Apache holen.

    2 Ansätze habe ich, jedoch weis ich nicht ob die sicher wären.

    1) die ajax_data.php so einrichten dass die nur dann Daten anzeigt, wenn $_SERVER['REMOTE_ADDR'] bestimmte IP hat.

    2) einen extra Node User anlegen in der mysql datenbank und dann über ajax
    einloggen. etwa so
    ajax_data.php?user=Node&password=klartextpw&user_i d=1

    die user_id würde dann vom Client zu node gelangen und man könnte diese dann bestimmt auch manipulieren..

    Ich weis es nicht, vielleicht habt ihr weitere ansätze?

    MFG
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp


  • #2
    Initialisiere eine Session in nodejs: http://senchalabs.github.com/connect...e-session.html
    => Ohne session keine Antwort.

    Um eine Manipulation zu erschweren, kannst du x und y vom viewport als private Eigenschaften deklarieren.
    I like cooking my family and my pets.
    Use commas. Don't be a psycho.
    Blog - CoverflowJS

    Kommentar


    • #3
      die session muss aber dann an apache übergeben werden, und er kann mit der session nichts anfangen.

      eigenlicht müsste ich sowas wie ein AuthToken generieren, den an Node übergeben, node holt sich mit dem Authtoken informationen von Apache.

      Ich glaube ich könnte nach dem login ein Authtoken generieren , in datenbank speichern an node übergeben und node holt sich dann die informationen mit dem token und löscht den token wieder aus derdatenbank..

      das müsste klappen.. werde es mal antesten
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

      Kommentar

      Lädt...
      X