Topic: Problem with Captcha

I just upgraded from Punbb 1.2.17 to 1.2.20 and a bug with the captcha I am using appeared.

I use this captchabox: http://www.punres.org/desc.php?pid=250

When you click on register, you can't see any image at all.

Here is my register.php of that might help find out what's wrong.

<?php
/***********************************************************************

  Copyright (C) 2002-2008  PunBB

  This file is part of PunBB.

  PunBB is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2 of the License,
  or (at your option) any later version.

  PunBB is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  MA  02111-1307  USA

************************************************************************/


define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';


// If we are logged in, we shouldn't be here
if (!$pun_user['is_guest'])
{
    header('Location: index.php');
    exit;
}

// Load the register.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php';

// Load the register.php/profile.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php';

if ($pun_config['o_regs_allow'] == '0')
    message($lang_register['No new regs']);
// use CaptchaBox for registration ?
if ($pun_config['o_regs_captchabox'] == '1') {  
  @require_once('captchabox.class.php');
  $picture = new CaptchaBox();
  session_start();
}

if (isset($_GET['genImage']) ) {
  $picture=$_SESSION["captchabox"];
  $picture->generateImage();
  exit;
}



// User pressed the cancel button
if (isset($_GET['cancel']))
    redirect('index.php', $lang_register['Reg cancel redirect']);


else if ($pun_config['o_rules'] == '1' && !isset($_GET['agree']) && !isset($_POST['form_sent']))
{
    $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register'];
    require PUN_ROOT.'header.php';

?>
<div class="blockform">
    <h2><span><?php echo $lang_register['Forum rules'] ?></span></h2>
    <div class="box">
        <form method="get" action="register.php">
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_register['Rules legend'] ?></legend>
                    <div class="infldset">
                        <p><?php echo $pun_config['o_rules_message'] ?></p>
                    </div>
                </fieldset>
            </div>
            <p><input type="submit" name="agree" value="<?php echo $lang_register['Agree'] ?>" /><input type="submit" name="cancel" value="<?php echo $lang_register['Cancel'] ?>" /></p>
        </form>
    </div>
</div>
<?php

    require PUN_ROOT.'footer.php';
}


else if (isset($_POST['form_sent']))
{
  // Check that the captchaBox is ok
  if ($pun_config['o_regs_captchabox'] == '1') {
    $picture=$_SESSION["captchabox"];
    if (CHECK_KO == $picture->check() ) {
      message($lang_common['captchabox failed']) ; 
    } else if (CHECK_MAX_TRIES == $picture->check() ) {
      redirect('',$lang_common['captchabox denied']) ; 
    };
  }
    // Check that someone from this IP didn't register a user within the last hour (DoS prevention)
    $result = $db->query('SELECT 1 FROM '.$db->prefix.'users WHERE registration_ip=\''.get_remote_address().'\' AND registered>'.(time() - 3600)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());

    if ($db->num_rows($result))
        message('A new user was registered with the same IP address as you within the last hour. To prevent registration flooding, at least an hour has to pass between registrations from the same IP. Sorry for the inconvenience.');


    $username = pun_trim($_POST['req_username']);
    $email1 = strtolower(trim($_POST['req_email1']));

    if ($pun_config['o_regs_verify'] == '1')
    {
        $email2 = strtolower(trim($_POST['req_email2']));

        $password1 = random_pass(8);
        $password2 = $password1;
    }
    else
    {
        $password1 = trim($_POST['req_password1']);
        $password2 = trim($_POST['req_password2']);
    }

    // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)
    $username = preg_replace('#\s+#s', ' ', $username);

    // Validate username and passwords
    if (strlen($username) < 2)
        message($lang_prof_reg['Username too short']);
    else if (pun_strlen($username) > 25)    // This usually doesn't happen since the form element only accepts 25 characters
        message($lang_common['Bad request']);
    else if (strlen($password1) < 4)
        message($lang_prof_reg['Pass too short']);
    else if ($password1 != $password2)
        message($lang_prof_reg['Pass not match']);
    else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, $lang_common['Guest']))
        message($lang_prof_reg['Username guest']);
    else if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $username))
        message($lang_prof_reg['Username IP']);
    else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
        message($lang_prof_reg['Username reserved chars']);
    else if (preg_match('#\[b\]|\[/b\]|\[u\]|\[/u\]|\[i\]|\[/i\]|\[color|\[/color\]|\[quote\]|\[quote=|\[/quote\]|\[code\]|\[/code\]|\[img\]|\[/img\]|\[url|\[/url\]|\[email|\[/email\]|\[s\]|\[/s\]|\[nospam|\[/nospam\]|\[dm code=\]|\[yt code=\]|\[gg code=\]|\[acronym|\[/acronym\]|\[left|\[/left\]|\[right|\[/right\]|\[center|\[/center\]|\[justify|\[/justify\]|\[small|\[/small\]|\[large|\[/large\]|\[sup|\[/sup\]|\[sub|\[/sub\]|\[---\]#i', $username))
        message($lang_prof_reg['Username BBCode']);

    // Check username for any censored words
    if ($pun_config['o_censoring'] == '1')
    {
        // If the censored username differs from the username
        if (censor_words($username) != $username)
            message($lang_register['Username censor']);
    }

    // Check that the username (or a too similar username) is not already registered
    $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(preg_replace('/[^\w]/', '', $username)).'\')') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());

    if ($db->num_rows($result))
    {
        $busy = $db->result($result);
        message($lang_register['Username dupe 1'].' '.pun_htmlspecialchars($busy).'. '.$lang_register['Username dupe 2']);
    }


    // Validate e-mail
    require PUN_ROOT.'include/email.php';

    if (!is_valid_email($email1))
        message($lang_common['Invalid e-mail']);
    else if ($pun_config['o_regs_verify'] == '1' && $email1 != $email2)
        message($lang_register['E-mail not match']);

    // Check it it's a banned e-mail address
    if (is_banned_email($email1))
    {
        if ($pun_config['p_allow_banned_email'] == '0')
            message($lang_prof_reg['Banned e-mail']);

        $banned_email = true;    // Used later when we send an alert e-mail
    }
    else
        $banned_email = false;

    // Check if someone else already has registered with that e-mail address
    $dupe_list = array();

    $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE email=\''.$email1.'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
    if ($db->num_rows($result))
    {
        if ($pun_config['p_allow_dupe_email'] == '0')
            message($lang_prof_reg['Dupe e-mail']);

        while ($cur_dupe = $db->fetch_assoc($result))
            $dupe_list[] = $cur_dupe['username'];
    }

    // Make sure we got a valid language string
    if (isset($_POST['language']))
          {
              $language = preg_replace('#[\.\\\/]#', '', $_POST['language']);
              if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php'))
                      message($lang_common['Bad request']);
          }
          else
              $language = $pun_config['o_default_lang'];
      
          $timezone = round($_POST['timezone'], 1);
    $save_pass = (!isset($_POST['save_pass']) || $_POST['save_pass'] != '1') ? '0' : '1';

    $email_setting = intval($_POST['email_setting']);
    if ($email_setting < 0 || $email_setting > 2) $email_setting = 1;

    // Insert the new user into the database. We do this now to get the last inserted id for later use.
    $now = time();

    $intial_group_id = ($pun_config['o_regs_verify'] == '0') ? $pun_config['o_default_user_group'] : PUN_UNVERIFIED;
    $password_hash = pun_hash($password1);

    // Add the user
    $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\', '.$email_setting.', '.$save_pass.', '.$timezone.' , \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
    $new_uid = $db->insert_id();


    // If we previously found out that the e-mail was banned
    if ($banned_email && $pun_config['o_mailing_list'] != '')
    {
        $mail_subject = 'Alert - Banned e-mail detected';
        $mail_message = 'User \''.$username.'\' registered with banned e-mail address: '.$email1."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'Forum Mailer'."\n".'(Do not reply to this message)';

        pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
    }

    // If we previously found out that the e-mail was a dupe
    if (!empty($dupe_list) && $pun_config['o_mailing_list'] != '')
    {
        $mail_subject = 'Alert - Duplicate e-mail detected';
        $mail_message = 'User \''.$username.'\' registered with an e-mail address that also belongs to: '.implode(', ', $dupe_list)."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'Forum Mailer'."\n".'(Do not reply to this message)';

        pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
    }

    // Should we alert people on the admin mailing list that a new user has registered?
    if ($pun_config['o_regs_report'] == '1')
    {
        $mail_subject = 'Alert - New registration';
        $mail_message = 'User \''.$username.'\' registered in the forums at '.$pun_config['o_base_url']."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'Forum Mailer'."\n".'(Do not reply to this message)';

        pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
    }

    // Must the user verify the registration or do we log him/her in right now?
    if ($pun_config['o_regs_verify'] == '1')
    {
        // Load the "welcome" template
        $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/welcome.tpl'));

        // The first row contains the subject
        $first_crlf = strpos($mail_tpl, "\n");
        $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
        $mail_message = trim(substr($mail_tpl, $first_crlf));

        $mail_subject = str_replace('<board_title>', $pun_config['o_board_title'], $mail_subject);
        $mail_message = str_replace('<base_url>', $pun_config['o_base_url'].'/', $mail_message);
        $mail_message = str_replace('<username>', $username, $mail_message);
        $mail_message = str_replace('<password>', $password1, $mail_message);
        $mail_message = str_replace('<login_url>', $pun_config['o_base_url'].'/login.php', $mail_message);
        $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);

        pun_mail($email1, $mail_subject, $mail_message);

        message($lang_register['Reg e-mail'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.', true);
    }

    pun_setcookie($new_uid, $password_hash, ($save_pass != '0') ? $now + 31536000 : 0);

    redirect('index.php', $lang_register['Reg complete']);
}


$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register'];
$required_fields = array('req_username' => $lang_common['Username'], 'req_password1' => $lang_common['Password'], 'req_password2' => $lang_prof_reg['Confirm pass'], 'req_email1' => $lang_common['E-mail'], 'req_email2' => $lang_common['E-mail'].' 2');
$focus_element = array('register', 'req_username');
require PUN_ROOT.'header.php';

?>
<div class="blockform">
    <h2><span><?php echo $lang_register['Register'] ?></span></h2>
    <div class="box">
        <form id="register" method="post" action="register.php?action=register" onsubmit="this.register.disabled=true;if(process_form(this)){return true;}else{this.register.disabled=false;return false;}">
            <div class="inform">
                <div class="forminfo">
                    <h3><?php echo $lang_common['Important information'] ?></h3>
                    <p><?php echo $lang_register['Desc 1'] ?></p>
                    <p><?php echo $lang_register['Desc 2'] ?></p>
                </div>
                <fieldset>
                    <legend><?php echo $lang_register['Username legend'] ?></legend>
                    <div class="infldset">
                        <input type="hidden" name="form_sent" value="1" />
                        <label><strong><?php echo $lang_common['Username'] ?></strong><br /><input type="text" name="req_username" size="25" maxlength="25" /><br /></label>
                    </div>
                </fieldset>
            </div>
<?php if ($pun_config['o_regs_verify'] == '0'): ?>            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_register['Pass legend 1'] ?></legend>
                    <div class="infldset">
                        <label class="conl"><strong><?php echo $lang_common['Password'] ?></strong><br /><input type="password" name="req_password1" size="16" maxlength="16" /><br /></label>
                        <label class="conl"><strong><?php echo $lang_prof_reg['Confirm pass'] ?></strong><br /><input type="password" name="req_password2" size="16" maxlength="16" /><br /></label>
                        <p class="clearb"><?php echo $lang_register['Pass info'] ?></p>
                    </div>
                </fieldset>
            </div>
<?php endif; ?>            <div class="inform">
                <fieldset>
                    <legend><?php echo ($pun_config['o_regs_verify'] == '1') ? $lang_prof_reg['E-mail legend 2'] : $lang_prof_reg['E-mail legend'] ?></legend>
                    <div class="infldset">
<?php if ($pun_config['o_regs_verify'] == '1'): ?>            <p><?php echo $lang_register['E-mail info'] ?></p>
<?php endif; ?>                    <label><strong><?php echo $lang_common['E-mail'] ?></strong><br />
                        <input type="text" name="req_email1" size="50" maxlength="50" /><br /></label>
<?php if ($pun_config['o_regs_verify'] == '1'): ?>                        <label><strong><?php echo $lang_register['Confirm e-mail'] ?></strong><br />
                        <input type="text" name="req_email2" size="50" maxlength="50" /><br /></label>
<?php endif; ?>                    </div>
                </fieldset>
            </div>
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_prof_reg['Localisation legend'] ?></legend>
                    <div class="infldset">
                        <label><?php echo $lang_prof_reg['Timezone'] ?>: <?php echo $lang_prof_reg['Timezone info'] ?>
                        <br /><select id="time_zone" name="timezone">
                            <option value="-12">-12</option>
                            <option value="-11">-11</option>
                            <option value="-10">-10</option>
                            <option value="-9.5">-9.5</option>
                            <option value="-9">-09</option>
                            <option value="-8.5">-8.5</option>
                            <option value="-8">-08 PST</option>
                            <option value="-7">-07 MST</option>
                            <option value="-6">-06 CST</option>
                            <option value="-5">-05 EST</option>
                            <option value="-4">-04 AST</option>
                            <option value="-3.5">-3.5</option>
                            <option value="-3">-03 ADT</option>
                            <option value="-2">-02</option>
                            <option value="-1">-01</option>
                            <option value="0" selected="selected">00 GMT</option>
                <option value="1">+01</option>
                            <option value="2">+02</option>
                            <option value="3">+03</option>
                            <option value="3.5">+03.5</option>
                            <option value="4">+04</option>
                            <option value="4.5">+04.5</option>
                            <option value="5">+05</option>
                            <option value="5.5">+05.5</option>
                            <option value="6">+06</option>
                            <option value="6.5">+06.5</option>
                            <option value="7">+07</option>
                            <option value="8">+08</option>
                            <option value="9">+09</option>
                            <option value="9.5">+09.5</option>
                            <option value="10">+10</option>
                            <option value="10.5">+10.5</option>
                            <option value="11">+11</option>
                            <option value="11.5">+11.5</option>
                            <option value="12">+12</option>
                            <option value="13">+13</option>
                            <option value="14">+14</option>
                        </select>
                        <br /></label>
<?php

        $languages = array();
        $d = dir(PUN_ROOT.'lang');
        while (($entry = $d->read()) !== false)
        {
            if ($entry != '.' && $entry != '..' && is_dir(PUN_ROOT.'lang/'.$entry) && file_exists(PUN_ROOT.'lang/'.$entry.'/common.php'))
                $languages[] = $entry;
        }
        $d->close();

        // Only display the language selection box if there's more than one language available
        if (count($languages) > 1)
        {

?>
                            <label><?php echo $lang_prof_reg['Language'] ?>: <?php echo $lang_prof_reg['Language info'] ?>
                            <br /><select name="language">
<?php

            while (list(, $temp) = @each($languages))
            {
                if ($pun_config['o_default_lang'] == $temp)
                    echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.$temp.'</option>'."\n";
                else
                    echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.$temp.'</option>'."\n";
            }

?>
                            </select>
                            <br /></label>
<?php

        }
?>
                    </div>
                </fieldset>
            </div>
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_prof_reg['Privacy options legend'] ?></legend>
                    <div class="infldset">
                        <p><?php echo $lang_prof_reg['E-mail setting info'] ?></p>
                        <div class="rbox">
                            <label><input type="radio" name="email_setting" value="0" /><?php echo $lang_prof_reg['E-mail setting 1'] ?><br /></label>
                            <label><input type="radio" name="email_setting" value="1" checked="checked" /><?php echo $lang_prof_reg['E-mail setting 2'] ?><br /></label>
                            <label><input type="radio" name="email_setting" value="2" /><?php echo $lang_prof_reg['E-mail setting 3'] ?><br /></label>
                        </div>
                        <p><?php echo $lang_prof_reg['Save user/pass info'] ?></p>
                        <div class="rbox">
                            <label><input type="checkbox" name="save_pass" value="1" checked="checked" /><?php echo $lang_prof_reg['Save user/pass'] ?><br /></label>
                        </div>
                    </div>
                </fieldset>
            </div>
<?php if ($pun_config['o_regs_captchabox'] == '1') { 
  $picture->url = "register.php?action=register";
  $_SESSION["captchabox"]=$picture;
?>  
      <div class="inform"><p><b><?php echo $lang_common['captchabox reg tip']; ?></b></p>
      <p><input type="image" src="register.php?genImage=true" alt="Captcha Box" title="<?php echo $lang_common['captchabox img title'] ?>" width="<?php echo $picture->imageX; ?>" height="<?php echo $picture->imageY; ?>" border="0"></p>
            </div>
<?php } else { ?>
            <p><input type="submit" name="register" value="<?php echo $lang_register['Register'] ?>" /></p>

<?php }; ?>    

        </form>
    </div>
</div>
<?php

require PUN_ROOT.'footer.php';

Thanks.

If you do what you've always done, you'll get what you've always gotten.

2

Re: Problem with Captcha

That differs from what is being displayed in your page output:

<p><input type="image" src="register.php?genImage=true&PHPSESSID=2bdc1edc470e96ac59111f024ea5d7b1" alt="Captcha Box" title="Click the box for next step" width="200" height="150" border="0"></p>

This line from your script generates that:

<p><input type="image" src="register.php?genImage=true" alt="Captcha Box" title="<?php echo $lang_common['captchabox img title'] ?>" width="<?php echo $picture->imageX; ?>" height="<?php echo $picture->imageY; ?>" border="0"></p>

There is nothing which could be generating, (that I can see offhand), the PHPSESSID in that register.php you have posted.

Re: Problem with Captcha

I'll change that line then, and see if it works.

If you do what you've always done, you'll get what you've always gotten.

Re: Problem with Captcha

I changed the line you said wasn't working, to the one you provided, and the problem remains.
What's strange is that the problem appeared only after I upgraded.
Any thoughts?

Thanks for your time.

If you do what you've always done, you'll get what you've always gotten.

5

Re: Problem with Captcha

View the HTML source code on your registration page:

http://www.speakmoroccan.com/forum/register.php

You now have two PHPSESSID's there. big_smile

I may be missing something here, but can you post that line you've just altered in your register.php file up here again, as it is at this moment in time?

Re: Problem with Captcha

Just for you info, I don't often deal with codes, so...

I put the first line you quoted instead of the second line you said was in my code. Makes sense?

Here is my register.php again:

<?php
/***********************************************************************

  Copyright (C) 2002-2008  PunBB

  This file is part of PunBB.

  PunBB is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2 of the License,
  or (at your option) any later version.

  PunBB is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  MA  02111-1307  USA

************************************************************************/


define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';


// If we are logged in, we shouldn't be here
if (!$pun_user['is_guest'])
{
    header('Location: index.php');
    exit;
}

// Load the register.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php';

// Load the register.php/profile.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php';

if ($pun_config['o_regs_allow'] == '0')
    message($lang_register['No new regs']);
// use CaptchaBox for registration ?
if ($pun_config['o_regs_captchabox'] == '1') {  
  @require_once('captchabox.class.php');
  $picture = new CaptchaBox();
  session_start();
}

if (isset($_GET['genImage']) ) {
  $picture=$_SESSION["captchabox"];
  $picture->generateImage();
  exit;
}



// User pressed the cancel button
if (isset($_GET['cancel']))
    redirect('index.php', $lang_register['Reg cancel redirect']);


else if ($pun_config['o_rules'] == '1' && !isset($_GET['agree']) && !isset($_POST['form_sent']))
{
    $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register'];
    require PUN_ROOT.'header.php';

?>
<div class="blockform">
    <h2><span><?php echo $lang_register['Forum rules'] ?></span></h2>
    <div class="box">
        <form method="get" action="register.php">
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_register['Rules legend'] ?></legend>
                    <div class="infldset">
                        <p><?php echo $pun_config['o_rules_message'] ?></p>
                    </div>
                </fieldset>
            </div>
            <p><input type="submit" name="agree" value="<?php echo $lang_register['Agree'] ?>" /><input type="submit" name="cancel" value="<?php echo $lang_register['Cancel'] ?>" /></p>
        </form>
    </div>
</div>
<?php

    require PUN_ROOT.'footer.php';
}


else if (isset($_POST['form_sent']))
{
  // Check that the captchaBox is ok
  if ($pun_config['o_regs_captchabox'] == '1') {
    $picture=$_SESSION["captchabox"];
    if (CHECK_KO == $picture->check() ) {
      message($lang_common['captchabox failed']) ; 
    } else if (CHECK_MAX_TRIES == $picture->check() ) {
      redirect('',$lang_common['captchabox denied']) ; 
    };
  }
    // Check that someone from this IP didn't register a user within the last hour (DoS prevention)
    $result = $db->query('SELECT 1 FROM '.$db->prefix.'users WHERE registration_ip=\''.get_remote_address().'\' AND registered>'.(time() - 3600)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());

    if ($db->num_rows($result))
        message('A new user was registered with the same IP address as you within the last hour. To prevent registration flooding, at least an hour has to pass between registrations from the same IP. Sorry for the inconvenience.');


    $username = pun_trim($_POST['req_username']);
    $email1 = strtolower(trim($_POST['req_email1']));

    if ($pun_config['o_regs_verify'] == '1')
    {
        $email2 = strtolower(trim($_POST['req_email2']));

        $password1 = random_pass(8);
        $password2 = $password1;
    }
    else
    {
        $password1 = trim($_POST['req_password1']);
        $password2 = trim($_POST['req_password2']);
    }

    // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)
    $username = preg_replace('#\s+#s', ' ', $username);

    // Validate username and passwords
    if (strlen($username) < 2)
        message($lang_prof_reg['Username too short']);
    else if (pun_strlen($username) > 25)    // This usually doesn't happen since the form element only accepts 25 characters
        message($lang_common['Bad request']);
    else if (strlen($password1) < 4)
        message($lang_prof_reg['Pass too short']);
    else if ($password1 != $password2)
        message($lang_prof_reg['Pass not match']);
    else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, $lang_common['Guest']))
        message($lang_prof_reg['Username guest']);
    else if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $username))
        message($lang_prof_reg['Username IP']);
    else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
        message($lang_prof_reg['Username reserved chars']);
    else if (preg_match('#\[b\]|\[/b\]|\[u\]|\[/u\]|\[i\]|\[/i\]|\[color|\[/color\]|\[quote\]|\[quote=|\[/quote\]|\[code\]|\[/code\]|\[img\]|\[/img\]|\[url|\[/url\]|\[email|\[/email\]|\[s\]|\[/s\]|\[nospam|\[/nospam\]|\[dm code=\]|\[yt code=\]|\[gg code=\]|\[acronym|\[/acronym\]|\[left|\[/left\]|\[right|\[/right\]|\[center|\[/center\]|\[justify|\[/justify\]|\[small|\[/small\]|\[large|\[/large\]|\[sup|\[/sup\]|\[sub|\[/sub\]|\[---\]#i', $username))
        message($lang_prof_reg['Username BBCode']);

    // Check username for any censored words
    if ($pun_config['o_censoring'] == '1')
    {
        // If the censored username differs from the username
        if (censor_words($username) != $username)
            message($lang_register['Username censor']);
    }

    // Check that the username (or a too similar username) is not already registered
    $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(preg_replace('/[^\w]/', '', $username)).'\')') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());

    if ($db->num_rows($result))
    {
        $busy = $db->result($result);
        message($lang_register['Username dupe 1'].' '.pun_htmlspecialchars($busy).'. '.$lang_register['Username dupe 2']);
    }


    // Validate e-mail
    require PUN_ROOT.'include/email.php';

    if (!is_valid_email($email1))
        message($lang_common['Invalid e-mail']);
    else if ($pun_config['o_regs_verify'] == '1' && $email1 != $email2)
        message($lang_register['E-mail not match']);

    // Check it it's a banned e-mail address
    if (is_banned_email($email1))
    {
        if ($pun_config['p_allow_banned_email'] == '0')
            message($lang_prof_reg['Banned e-mail']);

        $banned_email = true;    // Used later when we send an alert e-mail
    }
    else
        $banned_email = false;

    // Check if someone else already has registered with that e-mail address
    $dupe_list = array();

    $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE email=\''.$email1.'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
    if ($db->num_rows($result))
    {
        if ($pun_config['p_allow_dupe_email'] == '0')
            message($lang_prof_reg['Dupe e-mail']);

        while ($cur_dupe = $db->fetch_assoc($result))
            $dupe_list[] = $cur_dupe['username'];
    }

    // Make sure we got a valid language string
    if (isset($_POST['language']))
          {
              $language = preg_replace('#[\.\\\/]#', '', $_POST['language']);
              if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php'))
                      message($lang_common['Bad request']);
          }
          else
              $language = $pun_config['o_default_lang'];
      
          $timezone = round($_POST['timezone'], 1);
    $save_pass = (!isset($_POST['save_pass']) || $_POST['save_pass'] != '1') ? '0' : '1';

    $email_setting = intval($_POST['email_setting']);
    if ($email_setting < 0 || $email_setting > 2) $email_setting = 1;

    // Insert the new user into the database. We do this now to get the last inserted id for later use.
    $now = time();

    $intial_group_id = ($pun_config['o_regs_verify'] == '0') ? $pun_config['o_default_user_group'] : PUN_UNVERIFIED;
    $password_hash = pun_hash($password1);

    // Add the user
    $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\', '.$email_setting.', '.$save_pass.', '.$timezone.' , \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
    $new_uid = $db->insert_id();


    // If we previously found out that the e-mail was banned
    if ($banned_email && $pun_config['o_mailing_list'] != '')
    {
        $mail_subject = 'Alert - Banned e-mail detected';
        $mail_message = 'User \''.$username.'\' registered with banned e-mail address: '.$email1."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'Forum Mailer'."\n".'(Do not reply to this message)';

        pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
    }

    // If we previously found out that the e-mail was a dupe
    if (!empty($dupe_list) && $pun_config['o_mailing_list'] != '')
    {
        $mail_subject = 'Alert - Duplicate e-mail detected';
        $mail_message = 'User \''.$username.'\' registered with an e-mail address that also belongs to: '.implode(', ', $dupe_list)."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'Forum Mailer'."\n".'(Do not reply to this message)';

        pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
    }

    // Should we alert people on the admin mailing list that a new user has registered?
    if ($pun_config['o_regs_report'] == '1')
    {
        $mail_subject = 'Alert - New registration';
        $mail_message = 'User \''.$username.'\' registered in the forums at '.$pun_config['o_base_url']."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'Forum Mailer'."\n".'(Do not reply to this message)';

        pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
    }

    // Must the user verify the registration or do we log him/her in right now?
    if ($pun_config['o_regs_verify'] == '1')
    {
        // Load the "welcome" template
        $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/welcome.tpl'));

        // The first row contains the subject
        $first_crlf = strpos($mail_tpl, "\n");
        $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
        $mail_message = trim(substr($mail_tpl, $first_crlf));

        $mail_subject = str_replace('<board_title>', $pun_config['o_board_title'], $mail_subject);
        $mail_message = str_replace('<base_url>', $pun_config['o_base_url'].'/', $mail_message);
        $mail_message = str_replace('<username>', $username, $mail_message);
        $mail_message = str_replace('<password>', $password1, $mail_message);
        $mail_message = str_replace('<login_url>', $pun_config['o_base_url'].'/login.php', $mail_message);
        $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);

        pun_mail($email1, $mail_subject, $mail_message);

        message($lang_register['Reg e-mail'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.', true);
    }

    pun_setcookie($new_uid, $password_hash, ($save_pass != '0') ? $now + 31536000 : 0);

    redirect('index.php', $lang_register['Reg complete']);
}


$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register'];
$required_fields = array('req_username' => $lang_common['Username'], 'req_password1' => $lang_common['Password'], 'req_password2' => $lang_prof_reg['Confirm pass'], 'req_email1' => $lang_common['E-mail'], 'req_email2' => $lang_common['E-mail'].' 2');
$focus_element = array('register', 'req_username');
require PUN_ROOT.'header.php';

?>
<div class="blockform">
    <h2><span><?php echo $lang_register['Register'] ?></span></h2>
    <div class="box">
        <form id="register" method="post" action="register.php?action=register" onsubmit="this.register.disabled=true;if(process_form(this)){return true;}else{this.register.disabled=false;return false;}">
            <div class="inform">
                <div class="forminfo">
                    <h3><?php echo $lang_common['Important information'] ?></h3>
                    <p><?php echo $lang_register['Desc 1'] ?></p>
                    <p><?php echo $lang_register['Desc 2'] ?></p>
                </div>
                <fieldset>
                    <legend><?php echo $lang_register['Username legend'] ?></legend>
                    <div class="infldset">
                        <input type="hidden" name="form_sent" value="1" />
                        <label><strong><?php echo $lang_common['Username'] ?></strong><br /><input type="text" name="req_username" size="25" maxlength="25" /><br /></label>
                    </div>
                </fieldset>
            </div>
<?php if ($pun_config['o_regs_verify'] == '0'): ?>            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_register['Pass legend 1'] ?></legend>
                    <div class="infldset">
                        <label class="conl"><strong><?php echo $lang_common['Password'] ?></strong><br /><input type="password" name="req_password1" size="16" maxlength="16" /><br /></label>
                        <label class="conl"><strong><?php echo $lang_prof_reg['Confirm pass'] ?></strong><br /><input type="password" name="req_password2" size="16" maxlength="16" /><br /></label>
                        <p class="clearb"><?php echo $lang_register['Pass info'] ?></p>
                    </div>
                </fieldset>
            </div>
<?php endif; ?>            <div class="inform">
                <fieldset>
                    <legend><?php echo ($pun_config['o_regs_verify'] == '1') ? $lang_prof_reg['E-mail legend 2'] : $lang_prof_reg['E-mail legend'] ?></legend>
                    <div class="infldset">
<?php if ($pun_config['o_regs_verify'] == '1'): ?>            <p><?php echo $lang_register['E-mail info'] ?></p>
<?php endif; ?>                    <label><strong><?php echo $lang_common['E-mail'] ?></strong><br />
                        <input type="text" name="req_email1" size="50" maxlength="50" /><br /></label>
<?php if ($pun_config['o_regs_verify'] == '1'): ?>                        <label><strong><?php echo $lang_register['Confirm e-mail'] ?></strong><br />
                        <input type="text" name="req_email2" size="50" maxlength="50" /><br /></label>
<?php endif; ?>                    </div>
                </fieldset>
            </div>
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_prof_reg['Localisation legend'] ?></legend>
                    <div class="infldset">
                        <label><?php echo $lang_prof_reg['Timezone'] ?>: <?php echo $lang_prof_reg['Timezone info'] ?>
                        <br /><select id="time_zone" name="timezone">
                            <option value="-12">-12</option>
                            <option value="-11">-11</option>
                            <option value="-10">-10</option>
                            <option value="-9.5">-9.5</option>
                            <option value="-9">-09</option>
                            <option value="-8.5">-8.5</option>
                            <option value="-8">-08 PST</option>
                            <option value="-7">-07 MST</option>
                            <option value="-6">-06 CST</option>
                            <option value="-5">-05 EST</option>
                            <option value="-4">-04 AST</option>
                            <option value="-3.5">-3.5</option>
                            <option value="-3">-03 ADT</option>
                            <option value="-2">-02</option>
                            <option value="-1">-01</option>
                            <option value="0" selected="selected">00 GMT</option>
                <option value="1">+01</option>
                            <option value="2">+02</option>
                            <option value="3">+03</option>
                            <option value="3.5">+03.5</option>
                            <option value="4">+04</option>
                            <option value="4.5">+04.5</option>
                            <option value="5">+05</option>
                            <option value="5.5">+05.5</option>
                            <option value="6">+06</option>
                            <option value="6.5">+06.5</option>
                            <option value="7">+07</option>
                            <option value="8">+08</option>
                            <option value="9">+09</option>
                            <option value="9.5">+09.5</option>
                            <option value="10">+10</option>
                            <option value="10.5">+10.5</option>
                            <option value="11">+11</option>
                            <option value="11.5">+11.5</option>
                            <option value="12">+12</option>
                            <option value="13">+13</option>
                            <option value="14">+14</option>
                        </select>
                        <br /></label>
<?php

        $languages = array();
        $d = dir(PUN_ROOT.'lang');
        while (($entry = $d->read()) !== false)
        {
            if ($entry != '.' && $entry != '..' && is_dir(PUN_ROOT.'lang/'.$entry) && file_exists(PUN_ROOT.'lang/'.$entry.'/common.php'))
                $languages[] = $entry;
        }
        $d->close();

        // Only display the language selection box if there's more than one language available
        if (count($languages) > 1)
        {

?>
                            <label><?php echo $lang_prof_reg['Language'] ?>: <?php echo $lang_prof_reg['Language info'] ?>
                            <br /><select name="language">
<?php

            while (list(, $temp) = @each($languages))
            {
                if ($pun_config['o_default_lang'] == $temp)
                    echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.$temp.'</option>'."\n";
                else
                    echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.$temp.'</option>'."\n";
            }

?>
                            </select>
                            <br /></label>
<?php

        }
?>
                    </div>
                </fieldset>
            </div>
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_prof_reg['Privacy options legend'] ?></legend>
                    <div class="infldset">
                        <p><?php echo $lang_prof_reg['E-mail setting info'] ?></p>
                        <div class="rbox">
                            <label><input type="radio" name="email_setting" value="0" /><?php echo $lang_prof_reg['E-mail setting 1'] ?><br /></label>
                            <label><input type="radio" name="email_setting" value="1" checked="checked" /><?php echo $lang_prof_reg['E-mail setting 2'] ?><br /></label>
                            <label><input type="radio" name="email_setting" value="2" /><?php echo $lang_prof_reg['E-mail setting 3'] ?><br /></label>
                        </div>
                        <p><?php echo $lang_prof_reg['Save user/pass info'] ?></p>
                        <div class="rbox">
                            <label><input type="checkbox" name="save_pass" value="1" checked="checked" /><?php echo $lang_prof_reg['Save user/pass'] ?><br /></label>
                        </div>
                    </div>
                </fieldset>
            </div>
<?php if ($pun_config['o_regs_captchabox'] == '1') { 
  $picture->url = "register.php?action=register";
  $_SESSION["captchabox"]=$picture;
?>  
      <div class="inform"><p><b><?php echo $lang_common['captchabox reg tip']; ?></b></p>
      <p><input type="image" src="register.php?genImage=true&PHPSESSID=2bdc1edc470e96ac59111f024ea5d7b1" alt="Captcha Box" title="Click the box for next step" width="200" height="150" border="0"></p>            </div>
<?php } else { ?>
            <p><input type="submit" name="register" value="<?php echo $lang_register['Register'] ?>" /></p>

<?php }; ?>    

        </form>
    </div>
</div>
<?php

require PUN_ROOT.'footer.php';
If you do what you've always done, you'll get what you've always gotten.

7

Re: Problem with Captcha

That line wants putting back to how it was originally.

Was the mod working fine before you updated your install?

Re: Problem with Captcha

MattF wrote:

That line wants putting back to how it was originally.

Was the mod working fine before you updated your install?

I returned that line back.
Yes, the mod worked just fine before my upgrade. I am looking for other alternatives for the captcha... And I'll move to 1.3 soon anyways.

If you do what you've always done, you'll get what you've always gotten.

Re: Problem with Captcha

Does anyone know how to make the captchabox work?
Anyone using another alternative to stop bots from registering?

If you do what you've always done, you'll get what you've always gotten.

10

Re: Problem with Captcha

Anyone using another alternative to stop bots from registering?

I do have some suggestions for alternative anti-bot measures.

1: put in place a simple text based question on the registration page like so:
http://www.punres.org/viewtopic.php?id=3439

or

2: (better) use Jacky's excellent text based antibot mod at:

http://www.punres.org/desc.php?pid=503

People have had success with both. They are also both pretty easy to implement.

Re: Problem with Captcha

Thank you, Sirena. I'll try the first mod.

If you do what you've always done, you'll get what you've always gotten.

Re: Problem with Captcha

Works like a charm.
Thanks a lot, Sirena.

If you do what you've always done, you'll get what you've always gotten.