Pagina 1 van 1
phpbb bug in Activeringslink
Geplaatst: 23 okt 2005, 17:08
door immers
Hallo lieve mensen,
Ik ben er laatst achter gekomen dat iedereen offline leden weer kan activeren. Door heel simpel in de activeringslink het lidnummer te wijzigen. Ik heb gezocht en gezocht op dit forum, maar nog geen bugfix gezien voor dit probleem. Iemand nog suggesties dan behalve de goedkeuring door de beheerder in te stellen? Je zou zeggen dat dit toch te fixen moet zijn om bijvoorbeeld de activering maar eenmalig te laten plaatsvinden.
Alvast bedankt voor het meedenken!
Immers
Geplaatst: 23 okt 2005, 19:13
door Paul
Volgens mij kan dat niet hoor, kan enkel met en de juiste user_id en de juiste code. Eventueele bugs kan je trouwens toevoegen aan de bug database op
http://www.phpbb.com/bugs/
Geplaatst: 23 okt 2005, 19:35
door immers
Hoi Paulus,
Ja, het kan echt en het is ook nog eens kinderlijk eenvoudig!
Voorbeeld:
Orignele link van een nieuwe gebruiker: forum/profile.php?mode=activate&u=2771&act_key=7ad70b
Wijzig user 2771 bijvoorbeeld in u=15 dus forum/profile.php?mode=activate&u=6 ( dus zonder de achtervoegsels &act_key=7ad70b en het werkt!
User 15 wordt geactiveerd. Als dit geen bug is dan weet ik het niet meer. PHPBB is gelukkig nog niet af. Ik zal deze meteen plaatsen in de door jou aangegeven buglist.
Want deze bug moeten we natuurlijk gaan fixen.
Geplaatst: 23 okt 2005, 19:36
door Paul
Ik ga eens even in de code kijken, maar geloof nog steeds niet dat het kan
EDIT:
Code: Selecteer alles
$sql = "SELECT user_active, user_id, username, user_email, user_newpasswd, user_lang, user_actkey
FROM " . USERS_TABLE . "
WHERE user_id = " . intval($HTTP_GET_VARS[POST_USERS_URL]);
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain user information', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
if ( $row['user_active'] && trim($row['user_actkey']) == '' )
{
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="10;url=' . append_sid("index.$phpEx") . '">')
);
message_die(GENERAL_MESSAGE, $lang['Already_activated']);
}
else if ((trim($row['user_actkey']) == trim($HTTP_GET_VARS['act_key'])) && (trim($row['user_actkey']) != ''))
{
haal ik uit usercp_activate.php
Het is dus niet mogelijk om de user_id te veranderen, BEHALVE als de activate ID hetzelfde is, en die kans lijkt me erg klein.
Geplaatst: 24 okt 2005, 08:32
door frop
Hmmm. Maar als je de code verder bekijkt, zie je:
Code: Selecteer alles
$sql = "UPDATE " . USERS_TABLE . "
SET user_active = 1, user_actkey = ''" . $sql_update_pass . "
WHERE user_id = " . $row['user_id'];
Dus de activation code wordt ge-reset na het activeren. En dan kom je met een lege activation key wel degelijk door het if statement (HTTP_GET_VARS['act_key'] is immers leeg)...!
Code: Selecteer alles
else if ((trim($row['user_actkey']) == trim($HTTP_GET_VARS['act_key'])) && (trim($row['user_actkey']) != ''))
Overigens zit deze 'feature' (om de activation code leeg te maken) ook in het admin deel van het bord. Bijvoorbeeld in admin_users_inactive.php:
Code: Selecteer alles
$sql = "UPDATE " . USERS_TABLE . " SET user_active = 1, user_actkey = '' WHERE user_id=$to_userdata AND user_id <> " . ANONYMOUS ;
Wellicht een bug in het de-activeren van een gebruiker?
Geplaatst: 24 okt 2005, 14:08
door Paul
frop schreef:Hmmm. Maar als je de code verder bekijkt, zie je:
Code: Selecteer alles
$sql = "UPDATE " . USERS_TABLE . "
SET user_active = 1, user_actkey = ''" . $sql_update_pass . "
WHERE user_id = " . $row['user_id'];
Dus de activation code wordt ge-reset na het activeren. En dan kom je met een lege activation key wel degelijk door het if statement (HTTP_GET_VARS['act_key'] is immers leeg)...!
Als die leeg zou zijn, zou deze code niet uitgevoerd worden
frop schreef:
Code: Selecteer alles
else if ((trim($row['user_actkey']) == trim($HTTP_GET_VARS['act_key'])) && (trim($row['user_actkey']) != ''))
Overigens zit deze 'feature' (om de activation code leeg te maken) ook in het admin deel van het bord. Bijvoorbeeld in admin_users_inactive.php:
Code: Selecteer alles
$sql = "UPDATE " . USERS_TABLE . " SET user_active = 1, user_actkey = '' WHERE user_id=$to_userdata AND user_id <> " . ANONYMOUS ;
Ik kan die hele file niet vinden, ik neem aan dat je bedoelt admin_users.php, wanneer daar een user geactiveerd wordt, wordt er automatische een lege string toegekent, zodat een gebruiker hem niet nogmaals hoeft te activeren.
frop schreef:
Wellicht een bug in het de-activeren van een gebruiker?
Het is geen bug, de code is gewoon goed.
Geplaatst: 25 okt 2005, 01:04
door immers
Hallo lieve mensen,
Het probleem is nogsteeds niet opgelost en het ziet er echt uit dat het een phpbug is. Ondertussen gaat het bij ons als een lopend vuurtje en zet iedereen profielen van anderen te activeren. Dat kan toch niet de bedoeling zijn. Erg vreemd dat na al die jaren niemand eerder op het idee is gekomen of deze bug heeft ontdekt.
Nu maar hopen op een snelle bugfixs.
Groetjes,
Immers
Geplaatst: 25 okt 2005, 08:59
door Paul
Geef jouw usercp_activate.php eens in een tekstbestand?
Geplaatst: 25 okt 2005, 15:51
door Bee
Hallo lieve mensen,
Waarom zet je dan niet tijdelijk de activatie op beheerder, zodat activatie door gebruikers niet mogelijk is?
Groetjes, Bee
Geplaatst: 25 okt 2005, 15:55
door Paul
Omdat ook die buggie is?

Geplaatst: 25 okt 2005, 15:59
door Bee
paulus schreef:Omdat ook die buggie is?

Je kan tenminste een poging doen om activaties te blokkeren
