3

我目前正在为我的一个站点的一部分使用 PHPBB2 论坛,并且我想扩展这个站点(添加新页面、脚本等)。我想限制已经登录 PHPBB2 论坛的用户访问这些页面。

事实上,如果只有某个 MemberGroup 的成员可以访问这些页面,那就太好了。

有没有办法在我的网站的其余部分使用相同的登录凭据,并检查成员来自哪些组?

谢谢

(顺便说一下,这些页面是 PHP 的)

4

3 回答 3

1

使用 PHPBB2 的用户表以及其他页面中的登录和权限代码。它很脏,但它有效。

通过使用 PHPBB2 的代码,我的意思是:

深入研究 PHPBB2 的代码,弄清楚 PHPBB2 如何验证用户,并复制相关的代码块。如果 PHPBB2 结构合理,您可以只在 PHPBB2 中包含几个文件并使用它们,而无需大量的 hack 工作。如果它的结构不好,它将变得又脏又丑。

不要忘记测试您网站的新安全添加项!确保你得到正确的黑客攻击。

于 2009-03-10T13:29:04.127 回答
1

如果用户登录到 PHPBB,则很有可能(尽管并非总是如此),然后他们将拥有一个 cookie,您可以读取该 cookie 并帮助检查谁与数据库相对。

在这种情况下,您需要打破以下 cookie 的碎屑:

$_COOKIE["phpbb2mysql_data"]

让我们举个例子,把它吹出来找到我们需要查询数据库的数据。以下是在上述 cookie 中找到的块:

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

为此,您需要进入并提取恰好对应于已登录 PHPBB 用户的“3”。

反序列化该数据以提取该 user_id:

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

(感谢epochwolf指出该 cookie 的上述序列化形式)

该数字可以很好地针对数据库运行以检查成员所属的组。然后您将对phpbb_user_group表格进行检查(如果您将 phpbb_ 作为论坛表格的前缀。)

如果您不想跟踪数据库中的组 ID,那么您将需要进行某种连接并针对名称进行测试。也许是这样的:

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 组的登录用户。

于 2009-03-10T14:01:41.130 回答
0

您可以直接使用 phpBB 2 的用户和组表。我记得,密码列只是实际密码的 md5() 。

这个技巧在 phpBB3 中不再有效,因为密码(最终)是加盐的。

于 2009-03-10T14:10:40.237 回答