Portal > Foren > PHP > PHP-Programmierung > Problem beim Einsatz von Ajax
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 06.03.2006, 14:34 Nach oben    #1
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard Problem beim Einsatz von Ajax

Hiho,
bin nicht so ganz sicher ob es mit der Kategorie stimmt das es sowohl PHP als auch JS betrifft... aber doch eher PHP denk ich.

Und zwar habe ich eine HTML-Datei die per JS ein PHP-Script aufruft alla
Code:
setHttpObject();
    httpObject.open('GET', "ajax_save_pos.php?chara="+chara_id+"&px="+old_x+"&py="+old_y+"&map="+map_id);
    httpObject.onreadystatechange = responseOthers;
    httpObject.send(null);

in der datei ajax_save_pos.php wird dann der charakter mit der id char_id gespeichert, und zwar wird eben seine position auf der Karte gespeichert.

Nur gibt es dabei ein kleines Problem, jeder Idiot kann ja einfach den Quellcode anschauen und sich zusammenreimen wie das Script funktioniert.
Und dann einfach im Internet ajax_save_pos.php aufrufen mit den passenden Parametern und seinen Charakter durch die Welt teleportieren T_T

hat jemand eine Idee wie man das verhindern kann?
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.03.2006, 14:37 Nach oben    #2
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Arbeite mit Sessions. Dann brauchst du beim HTTP-Request nur die Session-ID anhängen und fertig

Link: Sessions mit PHP
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.03.2006, 15:00 Nach oben    #3
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

tut mir leid aber ich versteh nicht inwiefern das das Problem lösen soll.

Letztlich müsste die SessionID dann ja auch im JS offen auslesbar sein..
das request würde dann wohl etwa so aussehen:
ajax_save_pos.php?sid=1234567890&x=5&y=5&map=10

aber letztlich braucht doch der User auch da einfach dieses Ding aus dem JS rauszukopieren und tada...er teleportiert sich wieder einfach dorthin wie er will...

oder habe ich was falsch verstanden?
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.03.2006, 15:31 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 12.11.2005
Beiträge: 5
Standard

Warum überprüfst du serverseitig nicht, ob der Spieler überhaupt berechtigt oder in der Lage ist sich zu teleportieren? Du musst doch immer davon ausgehen, dass dein JS undicht ist!
b.pwned ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.03.2006, 15:56 Nach oben    #5
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

nur ist eben die frage wie bitte soll ich das denn überprüfen?

gibt es vielleicht eine Funktion die Prüft von wo das Request kam?
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.03.2006, 16:23 Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 159
Standard

Hallo,

vielleicht verstehe ich es ja falsch, aber ich versuche es mal.

Als erstes scheint es bei Dir ein konzeptionelles Problemchen zu geben. Eine SET-Funktion direkt vom Client aufzurufen mit den zugehörigen Parametern macht per se keinen wirklichen Sinn. Deshalb setze ich mal eine ajax_go2pos.php an. Weniger wegen der Funktion als vielmehr für das Verständnis.

und in dieser php-Datei musst Du jetzt den Weg von der aktuellen position (die im übrigen auf dem Server gespeichert sein sollte -> Session) zur neuen prüfen. D.h. gibt es einen Weg dahin? Wenn Ja, hat er Bedingungen, die erfüllt sind? Oder auch Ist die Schrittweite/Strecke zum zurücklegen zu groß? (Manipulationsverdacht).

Darüber hinaus dient die Session auch davor, dass ein fremder den Spieler beliebig woanders hinräumt. Aber auch hier gilt wieder, Manipulationen können mit Hilfe der Session zwar nicht zweifelsfrei ausgeräumt, aber in den meisten Fällen erkannt werden. D.h. auch dies sollte auf dem Server geprüft werden.

Gruß,
Jumper, the II.
JumperII ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2006, 11:58 Nach oben    #7
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

Zitat:
und in dieser php-Datei musst Du jetzt den Weg von der aktuellen position (die im übrigen auf dem Server gespeichert sein sollte -> Session) zur neuen prüfen. D.h. gibt es einen Weg dahin? Wenn Ja, hat er Bedingungen, die erfüllt sind? Oder auch Ist die Schrittweite/Strecke zum zurücklegen zu groß? (Manipulationsverdacht).
das ist eine gute idee... nachdem jeder nur je einen schritt machen darf kann ich einfach schaun ob die neue position nicht mehr als einen schritt vom aktuellen x oder vom aktuellen y entfernt ist.

Zitat:
Darüber hinaus dient die Session auch davor, dass ein fremder den Spieler beliebig woanders hinräumt. Aber auch hier gilt wieder, Manipulationen können mit Hilfe der Session zwar nicht zweifelsfrei ausgeräumt, aber in den meisten Fällen erkannt werden. D.h. auch dies sollte auf dem Server geprüft werden.
ja klar das war soweiso schon integriert...wär ja noch schöner...ausnahme nur für admins die das dürfen.


trotzdem: gibt es denn keine möglichkeit zu checken woher ein Request kommt? dann könnte man nämlich ganz einfach schaun "ok der request kommt von homepage.de/move.php das passt." "ne wo kommt der denn her....so nicht."

wäre allgemein eine praktische Sache. Nicht nur für diese Problemstellung
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2006, 12:20 Nach oben    #8
Benutzer
 
Registriert seit: 17.08.2005
Beiträge: 87
Standard

Nein, diese Möglichkeit gibt es nicht. Alles, was Du dem Benutzer in die Hand drückst, kann mit mehr oder weniger Aufwand nachgebaut und gefälscht werden. Authorisierung, Beschränkungen und Prüfungen müssen immer dort stattfinden, wo der evtl. unberechtigte Benutzer keinen Zugriff hat. In diesem Fall also auf dem Server.
VolkerK ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2006, 12:27 Nach oben    #9
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

Zitat:
Alles, was Du dem Benutzer in die Hand drückst, kann mit mehr oder weniger Aufwand nachgebaut und gefälscht werden. Authorisierung, Beschränkungen und Prüfungen müssen immer dort stattfinden, wo der evtl. unberechtigte Benutzer keinen Zugriff hat. In diesem Fall also auf dem Server.
wenn sicherheit eine Rolle spielt hast du recht.
das schließt aber nicht aus das es trotzdem eine möglichkeit gibt. bist du sicher das es keine gibt? oder findest du nur das es egal ist ob es eine gibt oder nicht?
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.03.2006, 13:22 Nach oben    #10
Benutzer
 
Registriert seit: 17.08.2005
Beiträge: 87
Standard

Es gibt keine vertrauenswürdige Möglichkeit.
Der Client stellt die Anfrage "aus eigener KRaft" an den Server und sämtliche Daten, die mitgesendet werden, können wie auch immer zustande kommen. Dazu muss vorher keine andere Seite "besucht" worden sein o.ä.
Der Client _kann_ über http-referer die vorher besuchte Seite übergeben ...oder irgendwas ganz anderes ...oder nichts, je nach Lust und Laune.

Geändert von VolkerK (08.03.2006 um 13:51 Uhr)
VolkerK ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.03.2006, 01:02 Nach oben    #11
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 159
Standard

Hallo Skinwalker,

vor wem willst Du Dich eigentlich schützen? Unabhängig vom Client, mit etwas Kenntnis von HTTP bzw. englischkenntnissen und der passenden RfC baue ich Dir jederzeit die Anfrage 100% erlaubt zusammen.

Wenn es für die Admins ist, wäre es z.B. sinnvoll, für Sprünge eine temporäre Authentifikation mitzugeben, unabhängig von der Session. Da Admins typischerweise auch nicht aller 5 Sekunden Springen, ist es handelbar.

Gruß,
Jumper, the II.
JumperII ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2006, 12:33 Nach oben    #12
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

die sache ist einfach das. da ist eine zb eine karte mit was weiß ich 100 Feldern und der Spieler soll von anfang bis ende selbst durchgehen.

nun wird seine position aber bei jedem Schritt gespeichert, und wenn er kein idiot ist hätte er (jetzt nicht mehr) einfach das php_script in einem separaten Fenster aufrufen können mit den fraglichen GET-Angaben und sich ans andere Ende der Karte "speichern" können... das sollte vermieden werden. was ja nun gemacht wurde indem einfach überprüft wird ob die Schirttlänge nicht zu groß ist.

auf die Art kann der User immer noch das Script einzeln aufrufen aber das macht mehr arbeit als das er selbst über die Karte latscht.

Somit ist das Problem eigentlich gelöst

aber was ist eine RfC?
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2006, 12:40 Nach oben    #13
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Ähm. Sorry, falls ich jetzt etwas übersehe, aber warum speicherst Du die Daten dann nicht in einer Session? Bin jetzt nicht so der AJAX-Experte , demnach sorry, falls ich da irgendwas übersehen sollte.

Ich meine halt, warum GET-Parameter verwenden, wenn die Gefahr einer Manipulation vorhanden ist (jaja, ist zumeist da, aber ich beziehe das auf diesen Fall hier).

Klär mich auf, falls ich falsch liege.
Grüße, Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2006, 15:48 Nach oben    #14
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

Javascript kann Daten in einer Session speichern? das wär mir neu.
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2006, 15:54 Nach oben    #15
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Ah, ups. Ich war ca. so gut, wie Lars
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2006, 15:58 Nach oben    #16
Benutzer
 
Benutzerbild von Skinwalker
 
Registriert seit: 24.01.2006
Beiträge: 66
Standard

kein Ding passiert schon mal XD inzwischen ist das Problem ja eh gelöst.
Skinwalker ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.03.2006, 20:04 Nach oben    #17
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 159
Standard

Hallo,

RFC = Request for Comments
Z.B. für das HTTP gibt es die RfC 2616: http://www.faqs.org/rfcs/rfc2616.html

@Ben: Ist doch eigentlich egal, ob die Daten per GET, POST oder Cookie hoch zum Server kommen. Manipulieren kann man sie immer auf der Client-Seite. Daher sind entsprechende Schutzmechanismen serverseitig zu implementieren. Diese Schutzmechanismen sollten aber angemessen sein, d.h. dem notwendigen Schutzbedarf sichern. In einigen Firmen gibt es zur Ermittlung des Bedarfs mehrseitige Templates (bis zu 6 Seiten sind mir bekannt), die in einen Audit ausgefüllt werden.

Gruß,
Jumper, the II.
JumperII ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[AJAX] Eine Einführung in AJAX und XMLHttpRequest Jay Tutorials 1 08.12.2006 16:21
Logisches Problem beim einsatz von Ereignissen Prophet Allgemeine Java-Programmierung 19 05.06.2006 22:08
Problem mit Cookie und Reloads... Bookworm PHP-Programmierung 10 13.04.2006 12:09
AJAX Theme Engine für Wordpress PaterNoster Plauderecke 0 17.11.2005 21:48
OSX + Eclipse 3.1 Problem bacarni Eclipse 3 29.07.2005 21:19


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45