mmofacts.com

Weiterleitung mit Timestamp

gepostet vor 18 Jahre, 10 Monate von Cays
Hallo ihr lieben Kollegen
Also ich habe ein kleines Problem mit meinem JS... Werde es einfach nie lernen -.-
Also ich habe hier einen kleinen Ladebalken. Wenn der voll ist, wird der benutzer auf eine andere Seite weitergeleitet... Bis dahin hat auch immer alles funktioniert.
Jetzt ist aber das Problem, dass der Bentuzer einfach die URL ändern kann. Deshalb habe ich versucht (Und hier bin ich auch gescheiter), timestamps als Variable an das Ende der URL zu hengen. Das Timestamp soll natürlich erst bestimmt werden, wenn der Ladebalken voll ist.
Allerdings bricht er das Script ab, da wo ich die Variable "jetzt" bestimme...

 



countUpP = 0;
function countUp()
{
//hier geht das Problem los
var jetzt = new date();
if(countUpP == 100)
{
//und an diese URL will ich die Zeit rangehengt haben ;)
window.location.href="http://h4cks3r.manuelt.de/hack2.php?uhrzeit=jetzt";
return;
}
progress(++countUpP);
window.setTimeout("countUp()", 1000);
}
countUp();



Allerdings weiß ich auch nicht genau wie ich da rangehen kann.
Könnt ihr mir helfen?
Wäre sehr nett.
MfG.Cays
gepostet vor 18 Jahre, 10 Monate von Chojin
kurze zwischenfrage, was soll den das "new" vor dem date?

reg4rds
chojin
gepostet vor 18 Jahre, 10 Monate von brainfrost
Ich versteh auch eine andere Sache nicht ganz. Wenn du verhindern willst das man URL's manipulierst, denn hilft es dir doch wenig wenn du noch mehr variablen per URL übermittelst.
Wenn jemand die URL manipuliert und vorher als erwünscht das Zielscript aufruft, dann prüfe doch dort (ich nehme an ziel ist ein PHP script) den korrekten Zeitwert und reagier entsprechend.

Clientseitige Werte können immer manipuliert werden, weßhalb du Prüfungen immer Serverseitig anlegen solltest.
gepostet vor 18 Jahre, 10 Monate von HSINC
das Date müsste grossgeschrieben werden

Original von Chojin

kurze zwischenfrage, was soll den das "new" vor dem date?


weil Date nen JS Object ist
gepostet vor 18 Jahre, 10 Monate von Fornax
var jetzt = new Date();

Genauer: Die Variable "jetzt" wird mit "var" initialisiert und wird durch "new" eine neue Instanz der Klasse "Date" (groß).

Warum willst du überhaupt das Laden? Hier werden ja keine Dateien vorgepuffert :roll:
gepostet vor 18 Jahre, 10 Monate von Cays
Original von Fornax

Warum willst du überhaupt das Laden? Hier werden ja keine Dateien vorgepuffert :roll:

Weil es für ein Browsergame ist ><
Original von brainfrost

Wenn jemand die URL manipuliert und vorher als erwünscht das Zielscript aufruft, dann prüfe doch dort (ich nehme an ziel ist ein PHP script) den korrekten Zeitwert und reagier entsprechend.
Wenn ich flasch bin entschuldige bitte... Aber tue ich das nicht? Auf der Seite, auf die ich weiterleite, wird natürlich gecheckt ob der Unterschied nicht höher als etwa 5 Sekunden zum DANN aktuelllem Timestamp ist...

Aber an sonsten vielen Dank für eure schnelle Hilfe! Werde es jetzt mal probieren...
MfG.Cays
///Edit
Ich habe gerade gemerkt, dass ich wohl etwas falsch kopiert habe. Jetzt steht in de Script auch wo hingeleitet werden soll
gepostet vor 18 Jahre, 10 Monate von Cays
window.location.href="http://h4cks3r.manuelt.de/hack2.php?uhrzeit=jetzt"; 

Jetzt liegt hier mein Problem... Also es lag an dem großem "Date".
aber jetzt werde ich halt weitergeleitet auf http://h4cks3r.manuelt.de/hack2.php?uhrzeit=jetzt Also "jetzt" wird nicht ersetzt...
Wie mache ich es, dass er das erkennt? ich habe gedacht, dass es vielleicht an den Anführungszeichen liegt... Habe auch ein bisschen rumprobiert, bin aber zu keinem Ergebnis gekommen
gepostet vor 18 Jahre, 10 Monate von MonkeyDRuffy
window.location.href="http://h4cks3r.manuelt.de/hack2.php?uhrzeit="+jetzt;


probiere das mal aus. Hoffe es hilft dir weiter.
gepostet vor 18 Jahre, 10 Monate von Cays
Vielen Dank... werde es ausprobieren!
gepostet vor 18 Jahre, 10 Monate von Cays
So... ich habe das jetzt doch etwas anders gelößt... trotzdem habt ihr mir sehr geholfen Das ganze sieht jetzt folgendermaßen aus:
 

zufall = (Math.random());
a = new Date(a.getTime() +1000*60*60*24*365);
document.cookie = "random="+zufall; "expires="+a.toGMTString()+";";
window.location.href="http://h4cks3r.manuelt.de/hack2.php?uhrzeit="+zufall;

Das ist auch etwas sicherer, da jetzt halt eine Zufallszahl gespeichert wird.
Das ganze wird dann halt auf der nächsten Seite geprüft und fertig

Danke für eure mithilfe!
MfG.Cays
gepostet vor 18 Jahre, 10 Monate von Chojin
Ok auch wenn das doof klingt, aber was ist der eigendliche sinn des ganzen? :roll:

Du willst also prüfen ob der cookie (Clientseite)
mit der URL-Variabel (auch Clientseite) übereinstimmt...

Ich versteh den tieferen sinn nicht ganz
Es würde vieleicht sinn machen die Variabel in der Session zu speichern, aber dafür müsste ich mal wissen wozu das ganze gut ist...

Reg4rds
chojin
gepostet vor 18 Jahre, 10 Monate von brainfrost
Original von Cays
Original von Fornax

Warum willst du überhaupt das Laden? Hier werden ja keine Dateien vorgepuffert :roll:

Weil es für ein Browsergame ist ><
Original von brainfrost

Wenn jemand die URL manipuliert und vorher als erwünscht das Zielscript aufruft, dann prüfe doch dort (ich nehme an ziel ist ein PHP script) den korrekten Zeitwert und reagier entsprechend.
Wenn ich flasch bin entschuldige bitte... Aber tue ich das nicht? Auf der Seite, auf die ich weiterleite, wird natürlich gecheckt ob der Unterschied nicht höher als etwa 5 Sekunden zum DANN aktuelllem Timestamp ist...


Also ich weis nicht warum du überhaupt (auch im neuen Code) überhaupt prüfcode im javascript einbaust um grafische Anzeigen abzusichern.
JS kann jeder halbwegs versierte Benutzer auslesen, verstehen und manipulieren. Einen cookie zur Sicherheit im JS anzulegen ist z.B. so sicher wie ein stimmengesteuerter Bankautomat in der Fussgängerzone dem man die geheimzahl zubrüllen muss.

Also bau doch ganz simpel deine Anzeige und anschließende Umleitung OHNE das mit JS abzusichern. Irgendwo hast du doch sicherlich einen zeitwert definiert den du Serverseitig kontrollieren kannst ?!
gepostet vor 18 Jahre, 10 Monate von Cays
Also das ganze hat folgenden Sinn...
Ich bin dabei ein kleines "Hackergame" zu schreiben, das fast ausschließlich über texteingaben funktionieren soll.
Wenn ich dann eine bestimmt Person hacken will, öffnet sich ein neues Fenster, wo dann z.B. steht "Hack wird initialisiert". Darunter ein Ladebalken, der sich schön füllt Wenn der fertig ist, wird man weitergeleitet auf die 2. Seite, wo dann da steht "Firewall wird gehackt".
Da die beiden seiten einfach nur "hack1" und "hack2" heißen, wäre es sehr einfach, einfach die beiden Schritte zu überspringen.
Deshalb, muss ich irgendwie überprüfen, ob der Benutzer wirklich komplett "fertig" gewesen ist...
Wenn ihr andere "bessere" Methoden habt immer her damit Habe aber das jetzige System für relativ sicher empfunden.
MfG
//EDIT
Original von brainfrost

... Irgendwo hast du doch sicherlich einen zeitwert definiert den du Serverseitig kontrollieren kannst ?! Nein :roll:
gepostet vor 18 Jahre, 10 Monate von TheUndeadable
Naja, gib einem cheatwilligen Spieler etwa 15 Minuten und er hat die Stelle gefunden.
Du MUSST es serverseitig kontrollieren. Traue NIEMALS den Eingaben aus dem Browser.
gepostet vor 18 Jahre, 10 Monate von Chojin
Ach was. Ich fänd das sehr geil wenn man in einem Hackerspiel auch kontrolliert die Browsereingaben hacken könnte. Sozusagen als teil des spiels wär das mal wirklich was neues. Der spieler denkt sozusagen er ist so klug und hat einen bug gefunden in wirklichkeit ist es aber teil des spiels... darf nur nicht zuviele vorteile bringen

Cays, aber es ist definitiv falsch was du da machst. Speicher deinen Timestamp als Sessionvariabel und mach die Prüfung im PHP dann hast du nix zu verlieren. :roll:

Reg4rds
chojin

PS : Bezüglich browserinteraktion siehe hier. Wer weiter als level 8 kommt ist gut.
gepostet vor 18 Jahre, 10 Monate von brainfrost
... Irgendwo hast du doch sicherlich einen zeitwert definiert den du Serverseitig kontrollieren kannst ?!

Nein

denn mach das doch

 

$time_to _go = 600; // sec zum hacking ....
$min_zeit= gmmktime()+$time_to_go; // frühester zeitpunkt

$min_zeit sicherst du dann in hack1.php so das es dem user zugeordnet ist. Ich nehm mal an du hast eine usertabelle. Da könnest du diesen Zeitwert gleich ein extrafeld verpassen wenn der User z.B. immer nur eine Aktion durchführen kann oder wie auch immer....

In hack2.php musst du diesen Zeitwert denn nur noch auslesen und mit der aktuellen zeit vergleichen.

$min_zeit = ....  // wie auch immer du deine daten holst 

if (gmmktime()>$min_zeit)
{
.... // hier das was wohl jetzt einfach so abläuft
} else echo "doofer hacker du !";

Das ganze mal eben so dahergeschrieben als eine "Denkanstosslösung". Soll also mehr verdeutliche wie man es machen kann. Hängt ja sehr davon ab wie dein code auschaut und wie du deine Daten verwaltest.
gepostet vor 18 Jahre, 10 Monate von Cays
Original von Chojin

...
Cays, aber es ist definitiv falsch was du da machst. Speicher deinen Timestamp als Sessionvariabel und mach die Prüfung im PHP dann hast du nix zu verlieren. :roll:
...

Hmmm... Also du meinst ich sollte statt einem Cookie eine Session nutzen? (Das ist ja schnell gemacht )
Achja... hänge in lvl 5 -.- ^^
MfG! Und vielen Dank für eure Geduld
/////EDIT 12
gepostet vor 18 Jahre, 10 Monate von Cays
Original von brainfrost
... Irgendwo hast du doch sicherlich einen zeitwert definiert den du Serverseitig kontrollieren kannst ?!

Nein

denn mach das doch

 

$time_to _go = 600; // sec zum hacking ....
$min_zeit= gmmktime()+$time_to_go; // frühester zeitpunkt

$min_zeit sicherst du dann in hack1.php so das es dem user zugeordnet ist. Ich nehm mal an du hast eine usertabelle. Da könnest du diesen Zeitwert gleich ein extrafeld verpassen wenn der User z.B. immer nur eine Aktion durchführen kann oder wie auch immer....

In hack2.php musst du diesen Zeitwert denn nur noch auslesen und mit der aktuellen zeit vergleichen.

$min_zeit = ....  // wie auch immer du deine daten holst 

if (gmmktime()>$min_zeit)
{
.... // hier das was wohl jetzt einfach so abläuft
} else echo "doofer hacker du !";

Das ganze mal eben so dahergeschrieben als eine "Denkanstosslösung". Soll also mehr verdeutliche wie man es machen kann. Hängt ja sehr davon ab wie dein code auschaut und wie du deine Daten verwaltest.
Ich weiß zwar noch nicht wie ich es genau nutzen soll, werde es aber ganz sicher nicht vergessen

Auf diese Diskussion antworten