Za co odpowiada funkcja check_form_key() w phpbb3

0

Witam. Piszę program który łączy się z forum phpbb3.
Wszystko jest ok dopóki nie próbuję wysłać posta.
Dostaje błąd: Wysłany formularz był nieprawidłowy. Spróbuj wysłać ponownie.

Pogrzebałem w pliku posting.php i znalazłem skrawek kodu:

	// check form
	if (($submit || $preview) && !check_form_key('posting'))
	{
		$error[] = $user->lang['FORM_INVALID'];
	}

Usunąłem z warunku ! i wysyłanie postu się powiodło. Jednak to nie rozwiązuje mojego problemu ponieważ skoro tam jest ! to widocznie musi tam być.
Wie ktoś dlaczego spełniam ten warunek i pokazuje mi się błąd?

Funkcja check_form_key() z pliku includes/functions.php

function check_form_key($form_name, $timespan = false, $return_page = '', $trigger = false)
{
	global $config, $user;

	if ($timespan === false)
	{
		// we enforce a minimum value of half a minute here.
		$timespan = ($config['form_token_lifetime'] == -1) ? -1 : max(30, $config['form_token_lifetime']);
	}

	if (isset($_POST['creation_time']) && isset($_POST['form_token']))
	{
		$creation_time	= abs(request_var('creation_time', 0));
		$token = request_var('form_token', '');

		$diff = time() - $creation_time;

		// If creation_time and the time() now is zero we can assume it was not a human doing this (the check for if ($diff)...
		if ($diff && ($diff <= $timespan || $timespan === -1))
		{
			$token_sid = ($user->data['user_id'] == ANONYMOUS && !empty($config['form_token_sid_guests'])) ? $user->session_id : '';
			$key = sha1($creation_time . $user->data['user_form_salt'] . $form_name . $token_sid);

			if ($key === $token)
			{
				return true;
			}
		}
	}

	if ($trigger)
	{
		trigger_error($user->lang['FORM_INVALID'] . $return_page);
	}

	return false;
}

Podejrzewam że nie spełniam tego warunku:

if ($key === $token)
{
	return true;
}

ale o co w nim chodzi?

1

<ironia>Rozumiem, że naturalnym odruchem przed zadaniem pytania na forum wpisałeś w Google check_form_key i przeczytałeś pierwszą stronę? To dobrze.</ironia>

https://wiki.phpbb.com/Function.check_form_key

PS. phpBB to tragiczny skrypt forum

0

Oczywiście wpisywałem, czytałem lecz nic mi to nie mówiło. Ogólnie programuję w C++/Qt dlatego PHP jest dla mnie trochę magią (choć mówią że jest podobne do C++). Planuję naukę PHP w późniejszym terminie dlatego teraz musiałem założyć ten temat ponieważ niewiele wiem o PHP.

Jakie wartości przyjmują $key i $token i od czego są zależne?

1 użytkowników online, w tym zalogowanych: 0, gości: 1