Beiträge vom August, 2009

Eingeloggt bleiben – Eine Funktion und ihre Tücken

Sunday, 16. August 2009 19:31

Sobald man irgendwo auf eine Seite mit Registrierung gelangt und man diese Seite öfer besucht, merkt man schnell, wie nervig es ist, selbst mit Firefox-Passwortmanager, ständig sich einzuloggen.
Als Programmeirer stellt sich schnell die Frage ob man eine Funktion ala “Eingeloggt bleiben” anbietet. Wie OWASP in ihren Top 10 empfehlen sollte jeder Entwickler auf diese aus Sicherheitsgründen verzichten.
Meiner Meinung nach sollte man jedoch gerade bei solch wichtigen Funktion usability vor Security stellen. Nun nicht falsch verstehen, natürlich sollte man auf Sicherheit achten. Aber gerade bei einem Login ist es wichtig, dass die Leute sich gerne wieder einloggen um Neuigkeiten zu erfahren. Ist der Login umständlich, so meldet man sich ungern noch einmal an, weil es eine geühlte Ewigkeit dauert.

Um troz einer Funktion “Eingeloggt bleiben” genug Sicherheit zu haben um auch das Cookie-Riding zu verhindern verweise ich also gerne auf diesen Eintrag.

Improved Persistent Login Cookie Best Practice

Thema: PHP | Kommentare (0) | Autor: Simon

Doppelposting vermeiden

Thursday, 13. August 2009 17:00

Das aktualisieren der Seite wird oftmals von Besuchern auch nach einem Forumular benutzt. Damit jedoch kein Doppelposting entsteht erkläre ich kurz eine Funktion.

Hierzu muss bereits am Anfang der php-Datei eine Session mit session_start(); gestartet werden.
Zusätzlich muss in das Formular ein zusätzliches Feld hinzugefügt werden. Der name kann natürlich Frei gewählt werden.

echo "<input name='rft' type='hidden' value='".random_form_token()."' />";

Bei der Verarbeitung des Formulars muss nun nurnoch vor dem Speichern dies hier abgeprüft werden.

if(random_form_token($_POST['rft'])){
  // Schreiben
}
else{
  // Doppelposting erkannt
}

Und nun hier noch die Funktion selbst.

function random_form_token($value=NULL){
	if($value == NULL){
		$token = hash("sha256","tanzmal".microtime());
		$_SESSION['random_form_token'] = $token;
		return $token;
	}
	else{
		if($value == $_SESSION['random_form_token']){
			unset($_SESSION['random_form_token']);
			return true;
 
		}
		else
			return false;
	}
}

Thema: PHP | Kommentare (0) | Autor: Simon