我目前正在为我的一个站点的一部分使用 PHPBB2 论坛,并且我想扩展这个站点(添加新页面、脚本等)。我想限制已经登录 PHPBB2 论坛的用户访问这些页面。
事实上,如果只有某个 MemberGroup 的成员可以访问这些页面,那就太好了。
有没有办法在我的网站的其余部分使用相同的登录凭据,并检查成员来自哪些组?
谢谢
(顺便说一下,这些页面是 PHP 的)
我目前正在为我的一个站点的一部分使用 PHPBB2 论坛,并且我想扩展这个站点(添加新页面、脚本等)。我想限制已经登录 PHPBB2 论坛的用户访问这些页面。
事实上,如果只有某个 MemberGroup 的成员可以访问这些页面,那就太好了。
有没有办法在我的网站的其余部分使用相同的登录凭据,并检查成员来自哪些组?
谢谢
(顺便说一下,这些页面是 PHP 的)
使用 PHPBB2 的用户表以及其他页面中的登录和权限代码。它很脏,但它有效。
通过使用 PHPBB2 的代码,我的意思是:
深入研究 PHPBB2 的代码,弄清楚 PHPBB2 如何验证用户,并复制相关的代码块。如果 PHPBB2 结构合理,您可以只在 PHPBB2 中包含几个文件并使用它们,而无需大量的 hack 工作。如果它的结构不好,它将变得又脏又丑。
不要忘记测试您网站的新安全添加项!确保你得到正确的黑客攻击。
如果用户登录到 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 组的登录用户。
您可以直接使用 phpBB 2 的用户和组表。我记得,密码列只是实际密码的 md5() 。
这个技巧在 phpBB3 中不再有效,因为密码(最终)是加盐的。