Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Опять связь авторизации сайт+форум

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Опять связь авторизации сайт+форум

Сообщение ogen »

Заранее извиняюсь, что опять поднимаю этот вопрос. Прошелся по сообщениям при помощи поиска, но все равно много чего не понял. Вот просьба ув. guru разжевать все для "полных чайников".

Задача такая: выводить на сайт форму авторизации и выполнить ее средствами сайта.

Насколько я понял, по пунктам:
  • 1 - поместить в начало страницы

    Код: Выделить всё

    <?php
    define('IN_PHPBB', true);
    $phpbb_root_path = './forum/';
    include($phpbb_root_path . 'extension.inc');
    include($phpbb_root_path . 'common.'.$phpEx);
    
    //
    // Start session management
    //
    $userdata = session_pagestart($user_ip, PAGE_INDEX);
    init_userprefs($userdata);
    2 - прочитать $_POST['username']/['password'] и записать в куку "phpbb2mysql_sid" и "phpbb2mysql_data"

    3 - добавить запись в таблицу phpbb_sessions (а нужно ли оно вообще?)
Все ли здесь правильно и что писать в phpbb2mysql_data и в таблицу phpbb_sessions ??

*************************
Есть конечно вариант ставить на обработку формы "login.php" форума и передать ему redirect (то же самое при logout), но если ввести логин несуществующего пользователя - выкинет на страничку форума. Можно было бы передать адрес странички с которой логинятся и кинуть проверку, но я не знаю в какой файл и куда кидать.
*************************

Заранее кланяюсь.

Добавлено спустя 5 часов 30 минут 2 секунды:

Ладно - вот код:

Код: Выделить всё

<?php require_once('Connections/localhost.php');?>
<?php 
function encode_ip($dotquad_ip)
{
   $ip_sep = explode('.', $dotquad_ip);
   return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]);
}

//==============================Выбираем пользователя
if ((isset($_POST['MM_insert'])) && ($_POST['MM_insert'] == "form"))
{
$sql1 = sprintf("SELECT * FROM phpbb_users WHERE username='%s'", $_POST['user']);
$sql2 = mysql_query($sql1);
$sql3 = mysql_fetch_assoc($sql2); 
$num_rows = mysql_num_rows($sql2);

if($num_rows != 0){

//==============================записываем куки 
$user_ip = encode_ip($_SERVER['REMOTE_ADDR']); 
$session_id = md5(uniqid($user_ip));
$current_time=time(); 
setcookie("phpbb2mysql_sid", $session_id, $current_time + 31536000, "/", "", "0"); 

$sesssiondata = array(); 
$sessiondata['autologinid'] = $sql3['user_pass']; 
setcookie("phpbb2mysql_data", serialize($sessiondata), $current_time + 31536000, "/", "", "0"); 

//==============================записываем в базу
$insertSQL = sprintf("INSERT INTO phpbb_sessions (session_id, session_user_id, session_start, session_time, session_ip, session_logged_in) 
             VALUES ('%s', '%s', '%s', '%s', '%s', 1)",
	     $session_id,
             $sql3['user_id'],
             $current_time,
             $current_time,
             $user_ip
             );
  mysql_select_db($database_localhost, $localhost);
  $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());   

/*endif*/}          
}
?>

<html>
  ...

<body>
<form name="form1" method="post" action="">
<input name="user" type="text" id="user">
<input name="pass" type="text" id="pass">
<input type="submit" name="Submit" value="Submit">
<input name="MM_insert" type="hidden" value="form">
</form>

</body>
</html>
Какие при этом баги в безопасности ? Подскажите, пожалуйста.
Пользую phpBB-2.0.22

Ессно нет проверки на autologin, но главное первое.
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

ogen
первый и главный баг - это sql injection в каждом запросе.

Юзайте лучше login.php :)
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Сообщение ogen »

Почитал википедию но толком не понял. Я ведь подключаю

Код: Выделить всё

<?php require_once('Connections/localhost.php');?>

где содержится логин/пароль для пользования базой.

Возвращаясь ко второму варианту остается вопрос - если пользователя не существует выкидывает на страничку форума. Есть варианты исправить?
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

ogen писал(а):если пользователя не существует выкидывает на страничку форума.
Не понял. Вроде как при неверном логине/пароле ему должна повторно показываться форма авторизации?..
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Сообщение ogen »

Я имею ввиду есть страницы сайта, есть страницы форума. При неправильном логине/пароле выкидывает на страницу форума (на форму авторизации). Получается, заполняешь в одном месте, а оказываешься совсем в другом.

Вот, вроде наклацал:

Код: Выделить всё

$message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

				message_die(GENERAL_MESSAGE, $message);
			}
		}
		else
		{
//*******************************************
if (isset($_POST['failed'])){ 
	header('Location: '.$_POST['failed'].'?log=f');
} else {
//*******************************************
			$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "";
			$redirect = str_replace("?", "&", $redirect);

			if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url'))
			{
				message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
			}
Теперь можно вставить в форму скрытое поле "failed" с адресом. В случае неудачи выкинет куда нужно.

Имхо примитивно, но пока работает.
А у Вас есть план?
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

ogen
ну почему, нормально. Только если фильтрацию по этому полю сделать, чтобы нельзя было на какой-нибудь левый сайт перебросить, то будет все нормально
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Сообщение ogen »

Привет Alek$. Просто заметил, что если редактировать тот кусок кода, которій описан в прошлом посте, то работает только при том, что логина в базе не существует. Если логин есть, но пароль не правильный - выкидывает на "страницу форума".

Нужно наверно редактировать еще где-нибудь. Не подскажешь где?

Заранее спасибо.
А у Вас есть план?
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

ogen
сейчас разбираться некогда, поэтому не подскажу :(
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Сообщение ogen »

:( :arrow: 8)
А у Вас есть план?
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Сообщение ogen »

Может новичкам пригодится - продолжение темы.

Для submit-a формы я использовал <input name="login" type="image"...>
В Firefox все отлично работало - логинился без проблем. А потом пересел тестировать на IE6 и старую оперу - логинится никак не хотело. Форма отправлялась в login.php форума и там где-то терялась.

Если я правильно понял, ток Firefox передает name="login" для type="image" как $HTTP_POST_VARS?

Покамест вставил в форму еще один <input name="login" type="hidden" value="login">

гыгы
А у Вас есть план?
Bambr
phpBB 1.0.0
Сообщения: 6
Стаж: 16 лет 2 месяца

Сообщение Bambr »

А нет ли возможноститак настороить/видоизменить форум, чтобы я просто передавал(хранил в переменной/сесии и т.д.) имя пользователя, то есть "взял на себя" все вопросы логина/пароля/регистрации и т.д. ???

Заранее благодарен...
ogen
phpBB 1.0.0
Сообщения: 8
Стаж: 16 лет 4 месяца

Сообщение ogen »

Если я правильно понял, то phpBB примерно так и делает.
Но вообще думаю что вопросы логина/пароля/регистрации(!!!) и т.д. прийдется делать "с нуля". А оно надо? :roll:
А у Вас есть план?
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

Bambr
это будет слишком сложно, тк на системе пользователей в phpBB очень многое завязано.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
Bambr
phpBB 1.0.0
Сообщения: 6
Стаж: 16 лет 2 месяца

Сообщение Bambr »

Ну а если пользователь зарегистрированный, то как мне просто его автоматически залогинить?
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 18 лет 9 месяцев
Откуда: Новосибирск
Поблагодарили: 3 раза

Сообщение Alek$ »

Bambr
Вот так это делается в самом phpBB (взято из login.php)

Код: Выделить всё

				if( md5($password) == $row['user_password'] && $row['user_active'] )
				{
					$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;

					$admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0;
					$session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin);

					// Reset login tries
					$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);

					if( $session_id )
					{
						$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
						redirect(append_sid($url, true));
					}
					else
					{
						message_die(CRITICAL_ERROR, "Couldn't start session : login", "", __LINE__, __FILE__);
					}
				}
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.

Вернуться в «Поддержка phpBB 2.0.x»