Jump to content

PHP: Mit Sessions zu viele Zugriffe verhindern?


MWojt

Empfohlene Beiträge

Hi Leute,

ich habe mal wieder ein Problem beim Schreiben meiner Seite. Ich habe das untenstehende Script in PHP geschrieben und verstehe einfach nicht, was daran falsch ist. Dieses Script soll verhindern, dass man zu schnell mit dem Server agiert.


<?php

	function session () {

		session_start();

		if (!isset ($_SESSION['stop'])) {

			$_SESSION['stop'] = time();

			return true;

		}

		$time = time() + 2;

		$stop = $_SESSION['stop'];

		if ($stop < $time) {

			echo("<script type='text/javascript'>

			alert('Warte!');

			</script>");

			return false;

		} else {

			$_SESSION['stop'] = time();

			return true;

		}

	}

?>

Dieses Script gibt nicht nur dann false zurück, wenn man vor einer gewissen Zeit noch mit dem Server agiert hat, sondern immer.

Sieht von euch vlt jmd den Fehler?

Danke im Vorraus,

MWojt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Heyho,

da hast du einen kleinen Logikfehler drin.

Du musst die Stoppzeit (in der Session) time()+2 setzen, und die aktuelle Zeit ($time) auf time(). Sonst wird die Condition $stop < $time _immer_ true. $stop wird _immer_ in der Vergangenheit liegen und somit _immer_ kleiner sein als die aktuelle Zeit+2 ;)


<?php

	function session () {

		session_start();

		if (!isset ($_SESSION['stop'])) {

			$_SESSION['stop'] = time() + 2;

			return true;

		}

		$time = time();

		$stop = $_SESSION['stop'];

		if ($stop < $time) {

			echo("<script type='text/javascript'>

			alert('Warte!');

			</script>");

			return false;

		} else {

			$_SESSION['stop'] = time() + 2;

			return true;

		}

	}

?> 

Eine kleinere Implementierung wäre übrigens


<?php

function session() {

  session_start();

  if(!isset($_SESSION['stop']) || $_SESSION['stop'] < time()) {

    $_SESSION['stop'] = time()+2;

    return true;

  } else {

    echo("<script type='text/javascript'>alert('Warte!');</script>");

    return false;

  }

}

?>

(untested btw)

:)

LG

bearbeitet von kiwi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Heyho :),

hab ich vergessen zu schreiben:

Sessionbasierendes Ratelimiting schützt jetzt nicht wirklich vor Angreifern, sondern nur vor F5-Drückern, da das Wiederaufbauen einer bereits vorhandenen Session von dem Sessioncookie abhängig ist, den der Client mitsenden muss. Wenn er das nicht tut, hat er die ganze Zeit freie Bahn.

Tendenziell gehst du damit also eher normalen Usern auf den Sack, lässt Angreifer aber trotzdem weiter passieren.

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Heyho :),

hab ich vergessen zu schreiben:

Sessionbasierendes Ratelimiting schützt jetzt nicht wirklich vor Angreifern, sondern nur vor F5-Drückern, da das Wiederaufbauen einer bereits vorhandenen Session von dem Sessioncookie abhängig ist, den der Client mitsenden muss. Wenn er das nicht tut, hat er die ganze Zeit freie Bahn.

Tendenziell gehst du damit also eher normalen Usern auf den Sack, lässt Angreifer aber trotzdem weiter passieren.

LG

Was schlägst du vor, um gegen Angreifer vorzugehen? (Ich dachte mir schon, dass diese Methode nichts bringt, vorher hatte ich das gleiche mit Cookies, was noch einfacher zu umgehen war)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B