Использовать учетные данные для входа в PHPBB2 на моем сайте

В настоящее время я использую форум PHPBB2 для раздела одного из моих сайтов, и я хотел бы расширить этот сайт (добавить новые страницы, сценарии и т. Д.). Я хотел бы ограничить доступ к этим страницам для пользователей, уже вошедших в форум PHPBB2.

Фактически, если бы только члены определенной группы MemberGroup могли получить доступ к этим страницам, это было бы здорово.

Есть ли способ использовать те же учетные данные для входа на остальную часть моего сайта и проверить, из каких групп входят участники?

Спасибо

(кстати, эти страницы на PHP)


person Spez    schedule 10.03.2009    source источник


Ответы (3)


Если пользователь вошел в систему PHPBB, есть хороший шанс, хотя и не всегда, что у него будет cookie, который вы можете прочитать и помочь с проверкой того, кто есть кто против базы данных.

В этом случае вам нужно разбить крошки печенья ниже:

$_COOKIE["phpbb2mysql_data"]

Давайте воспользуемся примером и рассмотрим его, чтобы найти данные, которые нам нужно запросить в базе данных. Ниже приведен фрагмент указанного выше файла cookie:

a:2:{s:11:"autologinid";s:0:"";s:6:"userid";s:1:"3";}

Для этого вам нужно зайти и извлечь ту цифру «3», которая соответствует зарегистрированному пользователю PHPBB.

Десериализуйте эти данные, чтобы извлечь этот user_id:

 $goo = unserialize($_COOKIE["phpbb2mysql_data"]);
 $extracted_id = $goo["userid"];

(Спасибо epochwolf за указание на приведенную выше сериализованную форму этого файла cookie)

Это число будет полезно сравнить с базой данных, чтобы проверить, к какой группе принадлежит участник. И вы должны запустить проверку по phpbb_user_group таблице (если бы у вас был phpbb_ в качестве префикса ваших таблиц форума.)

Если вы не хотите отслеживать идентификаторы групп из базы данных, вам нужно будет выполнить какое-то соединение и проверить имя. Может быть, примерно так:

SELECT pug.user_id FROM phpbb_user_group pug 
 LEFT JOIN phpbb_groups g 
 ON pug.group_id=g.group_id
 WHERE pug.user_id='$extracted_id'
 AND g.group_name='Foo';

Если вы можете вытащить из этого строку, значит, вы вошли в систему как пользователь, принадлежащий к этой группе Foo.

person random    schedule 10.03.2009
comment
Если вы не знали, этот файл cookie содержит сериализованный массив. Вы должны использовать функцию php unserialize () для извлечения данных. php.net/unserialize - person epochwolf; 10.03.2009
comment
Спасибо за указатель на сериализованные данные, отредактированный ответ, чтобы облегчить жизнь. - person random; 11.03.2009

Используйте пользовательскую таблицу PHPBB2, ее логин и код прав доступа на других страницах. Это грязно, но работает.

Используя код PHPBB2, я имею в виду:

Изучите код PHPBB2, выясните, как PHPBB2 аутентифицирует пользователей, и скопируйте соответствующие фрагменты кода. Если PHPBB2 прилично структурирован, вы можете просто включить пару файлов из PHPBB2 и использовать их без серьезного взлома. Если он плохо структурирован, он будет грязным и некрасивым.

Не забудьте протестировать свои новые защищенные дополнения к вашему сайту! Убедитесь, что вы понимаете все правильно.

person epochwolf    schedule 10.03.2009
comment
Я не помню, есть ли это в phpBB2, но у phpBB3 есть документированный API для входа в систему и выполнения связанных задач. - person Powerlord; 10.03.2009

Вы можете напрямую использовать таблицы пользователей и групп phpBB 2. Насколько я помню, столбец пароля - это просто md5 () фактического пароля.

Этот трюк больше не работает в phpBB3, так как пароль (наконец) соленый.

person Powerlord    schedule 10.03.2009