Jump to content

PHP: Mit Sessions zu viele Zugriffe verhindern?


MWojt
 Share

Recommended Posts

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 to comment
Share on other sites

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

Edited by kiwi
Link to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B