Seitenaufruf vermeiden ?!

Asteria

Mitglied
Hallo zusammen ! :)

Ich war ehrlich gesagt nicht sicher, wohin eigentlich genau
mit diesem Thema, ihr könnt das also durchaus noch verschieben :)

Unzwar geht es um Folgendes.
Ich bastel seit einer Weile an einem Browsergame
und einige meiner Testuser haben inzwischen festgestellt,
dass wenn sie die URL untereinander teilen,
sie bestimmte Bereiche erreichen, die eigentlich noch
nicht da sein sollten.
Anders gesagt.. ein User ist bereits weiter im Spiel,
schickt einem Bekannten eine URL per ICQ,
dieser gibt sie bei sich ein und ruft damit eine Seite
auf, die er eigentlich zu diesem Zeitpunkt noch gar nciht sehen sollte.

Tjaja.. nun meine Frage: Kann ich es irgendwie
vermeiden, dass solche URLs funktionieren ?!
Den Aufruf irgendwie verhindern? Oder stattdessen eine
Fehlermeldung aufrufen ?!

Die URL einfach zu verstecken (Frameset) ist in diesem Fall
leider keine Lösung.. wenn dann hätt ich gerne eine Andere ! :)
Danke schonmals und beste Grüße ! :)
 
Hi

warum hast du den Spielstand überhaupt von Anfang an von der URI abhängig gemacht?
Sowas gehört in die DB. Und per Benutzername/Kennwort die User identifizieren.

Ich verschiebs mal zu PHP, dort passt es eher.
 
Du bist ja ganz schön umtriebig... ;)

Dein Problem ist schon nicht ganz ohne. Wenn du die User-Verwaltung mit einer Datenbank realisierst, dann könntest du den "Fortschritt" des jeweiligen Users da abspeichern.

Ich vermute aber mal, dass du das nicht mit einer Datenbank machst. :)

Wenn du nur reines HTML benutzt und die User sich im Spiel quasi immer eine Seite weiterklicken, wirst du das nicht verhindern können.

Ansonsten findest du in einem anderen Thread hier im Forum Anhaltspunkte, wie du z.B. die URL "verschleiern" könntest.
Ob es in deinem Fall letztendlich verhindert, dass man die korrekte Adresse weitergeben kann, kann ich dir leider nicht sagen. Dafür müsste man sich wahrscheinlich etwas in dein Projekt einarbeiten.

Gruß Eric
 
So genau ist das nicht gemeint.
Die User loggen sich schon ein, und Punkte usw sind
auch in der Datenbank gespeichert.

Allerdings entdeckt man in dem Spiel neue Dinge:
neue Rohstoffe, neue Gebäude usw.
..wenn man Expeditionen gemacht hat.

Wenn allerdings jemand die URL kopiert,
die er erhält, wenn er den Bau eines Gebäudes
anfordert, und diese URL jemandem schickt,
der das Gebäude eigentlich noch gar nicht sieht,
kann er damit das Gebäude trotzdem schon sehen :(
 
Session und Server-seitig auf validität prüfen ...
Es kommt schließlich darauf an was der Server dem Browser sendet ... und darauf das der Server prüf ob das was er vom Browser bekommt auch gültig ist.
Heißt : du hast einen schweren Design-Fehler drin ...

In der Regel wird sowas eh dynamisch innerhalb einer Seite gemacht ...
Man sieht immer die selbe URL : http://example.com/page/overview und der Server *bzw das Script* entscheided dann anhand der Daten der DB was er dem User anzeigt und was nicht ...
Das von den Parametern die der Browser dem Server schickt abhängig zu machen ist schon der falsche Grundgedanke ...
 
Kannst ja bei solchen seiten einfach ne Fallunterscheidung reinklatschen, ich denk ma du bist in deinem Game ja auch Regestriert und hast deine user_id.
PHP:
if($_SESSION['user_id'] != deine id){
echo "Soooo nicht";  
die();
}

also so würde ich es in deinem Fall lösen ^^
 
Also wirklich weitergebracht haben mich eure Antworten irgendwie nicht..
Unhöflichkeiten sind sowieso immer sone Sache...
Also ich versuch jetzt mal ein konkretes Beispiel zu nennen,
damit ihr mein Problem versteht:

Es gibt ein Postsystem in dem Spiel. Wenn jemand eine Nachricht verschickt,
wird in der Datenbank diese Nachricht gespeichert und bekommt eine pid zugewiesen,
per Auto_Increment. Wenn jetzt eine Nachricht aufgerufen wird im Spiel,
wird ein Select nach der pid ausgeführt und die Nachricht wird ausgelesen.
Selbes Spiel auch beim Löschen der Nachricht.
Wenn der User jetzt aber aus Spass und Langeweile in der URL die übergebene
pid ändert, wird eine andere Nachricht gelöscht, die vielleicht jemand anderes
noch gar nciht gelesen hat.. sehr sehr unglücklich.

Und das ist nur ein Beispiel für dieses Problem.
Deshalb bitte ich um ernsthafte Vorschläge..
Alle Links in Formulare zu ändern ist.... absurd.
Die URL zu verschleiern, bedeutet nicht, dass die User sie nicht trotzdem finden.
So schwer ist das ja eigentlich nicht. Also.. jemand Ideen? *hoffnungsvoll dreinblickt*
 
Du musst einfach auf dem Server prüfen, ob der Nutzer die Nachricht überhaupt löschen darf. Das würde dann aber noch nicht verhindern, dass jemand via CSRF alle Nachrichten eines anderen löscht. Dazu musst du den Link mit einem einmal-Token versehen.

Vorher
delete_message.php?pid=1337
Nachher
delete_message.php?pid=1337&token=d59c9068251638ea7e15c814de4e8f58

Dieser token wird nach dem Löschen ungültig. Oder ein anderer Ansatz wäre es, die Session ID als token zu nehmen. Denn die kennt auch kein Außen stehender und du musst dich nicht um das generieren kümmern.

Aber das Prüfen der Berechtigung musst du trotzdem bei jedem Seitenaufruf machen.


Alle Links in Formulare zu ändern ist.... absurd.*

Und hat mit deinem Problem nichts zu tun.
 
Ok. Danke.
Die Tokenidee finde ich sehr gut.
Das werde ich umsetzen.

Die Sache mit dem Links in Formulare ändern,
hat finde ich durchaus etwas mit meinem Problem zu tun.
Wenn ich alle Daten, wie id und pid per "method=post"
übergebe, kann auch keiner die mal so eben ändern,
wenn er nicht gerade selbst die Seite nachscriptet :o

Trotzdem besten Dank.
Das bringt mich weiter.
 
Die Sache mit dem Links in Formulare ändern,
hat finde ich durchaus etwas mit meinem Problem zu tun.
Wenn ich alle Daten, wie id und pid per "method=post"
übergebe, kann auch keiner die mal so eben ändern,
wenn er nicht gerade selbst die Seite nachscriptet :o

An dem von mir angesprochenen CSRF Angriff ändert das gar nichts. Es verhindert nur, dass jemand den Link einfach weiter schickt, aber man nennt das "security through obscurity".

Relying on a potential attacker's lack of knowledge as a means of security.
http://en.wiktionary.org/wiki/security_through_obscurity

Also nur weil der Großteil der Leute nicht die erforderlichen Kenntnisse hat, ändert das an der Lücke nichts. Es reicht ja, wenn einer die Kenntnisse hat. Wenn es sich um ein Browserspiel handelt, könnte der einfach eine Seite anbieten, die die Lücke ausnutzt.
 
Zurück