2009-03-10 12 views
3

J'utilise actuellement un forum PHPBB2 pour une section de l'un de mes sites, et j'aimerais étendre ce site (ajouter de nouvelles pages, scripts, etc.). Je souhaite limiter l'accès à ces pages aux utilisateurs déjà connectés au forum PHPBB2. En fait, si seulement les membres d'un certain groupe-membre pouvaient accéder à ces pages, ce serait génial.Utiliser les identifiants de connexion PHPBB2 sur mon site

Existe-t-il un moyen d'utiliser les mêmes informations de connexion sur le reste de mon site et de vérifier de quels groupes proviennent les membres?

Merci

(en passant, ces pages sont en PHP)

Répondre

1

Si un utilisateur est connecté à PHPBB, il y a de bonnes chances, mais pas toujours probable, qu'il dispose alors d'un cookie que vous pouvez lire et aider à vérifier qui est qui dans la base de données.

Dans ce cas, vous aurez envie de briser les miettes du biscuit ci-dessous:

$_COOKIE["phpbb2mysql_data"] 

Prenons un exemple et souffler pour trouver les données dont nous avons besoin pour interroger la base de données contre. Ci-dessous le morceau trouvé dans le cookie ci-dessus:

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

Pour cela, vous aurez envie d'aller et extraire que « 3 », qui arrive à correspondre à l'utilisateur connecté PHPBB.

Unserialize that data Yank que user_id sur:

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

(Merci à epochwolf en pointant vers le formulaire sérialisé ci-dessus ce cookie)

Ce numéro sera bon pour exécuter contre la base de données pour vérifier le groupe auquel le membre appartient. Et vous exécuteriez la vérification sur la table phpbb_user_group (si vous aviez phpbb_ comme préfixe de vos tables de forum.)

Si vous ne souhaitiez pas conserver les ID de groupe dans la base de données, vous devrez faire une sorte de rejoindre et tester contre le nom. Peut-être quelque chose comme ceci:

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'; 

Si vous pouvez tirer une ligne de cela, alors vous vous avez trouvé un utilisateur connecté qui appartient à ce groupe de Foo.

+0

-1 pour traitement incorrect des données sérialisées. – epochwolf

+0

Si vous ne le saviez pas, ce cookie contient un tableau sérialisé. Vous devriez utiliser la fonction unserialize() de php pour extraire les données. http://www.php.net/unserialize – epochwolf

+0

Merci pour le pointeur sur les données sérialisées, réponse éditée pour vous rendre la vie plus facile. – random

1

Utilisez la table des utilisateurs de PHPBB2 et son code de connexion et les autorisations dans les autres pages. C'est sale mais ça marche.

En utilisant le code de PHPBB2, je veux dire:

Dig dans le code de PHPBB2, comprendre comment PHPBB2 authentifie les utilisateurs et copier les morceaux pertinents du code. Si PHPBB2 est décemment structuré, vous pouvez juste inclure quelques fichiers de PHPBB2 et les utiliser sans travail de hack majeur. Si ce n'est pas bien structuré, ça va être sale et moche. N'oubliez pas de tester vos nouveaux ajouts sécurisés sur votre site Web! Assurez-vous que vous avez les bons hacks.

+0

Je ne me souviens pas si phpBB2 a ceci, mais phpBB3 a une API documentée pour se connecter et effectuer des tâches connexes. – Powerlord

0

Vous pouvez directement utiliser les tables d'utilisateurs et de groupes de phpBB2.Si je me souviens, la colonne mot de passe est juste un md5() du mot de passe réel.

Cette astuce ne fonctionne plus dans phpBB3, car le mot de passe est (enfin) salé.