所以我在一个网站上工作,我们希望用户注册一个私人测试版。当用户在注册页面上单击提交时,一个 php 代码将他们的姓名、电子邮件和随机生成的 32 个字符的哈希值放入我数据库中的一个表中。然后它会向用户发送一封电子邮件,其中包含一个验证链接,其中包括用户的电子邮件地址和哈希值,以实现最终的安全性。它看起来像这样:
domain.com/b/verify.php?email=sample@sample.com&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a
当他们单击此链接时,它会将他们发送到 verify.php 页面,该页面从 url 获取电子邮件和哈希,并检查前面提到的数据库中的匹配项。如果有匹配,它会生成另一条消息。如果没有匹配,它会显示“无效的 url 或您尚未注册”。此外,数据库表包含一个名为“活动”的列,默认情况下设置为 0,但单击链接时更改为 1。verify.php 代码检查以确保在显示匹配消息之前将 active 设置为 0,以便链接只能使用一次。
匹配时显示的消息为他们提供了指向我的 phpbb3 注册页面的链接,该页面已被修改。链接如下所示:
domain.com/phpbb/ucp.php?mode=register&email=sample@sample.com&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a
我已将论坛根目录中的 ucp.php 文件修改为如下所示:
case 'register':
// Database info (which I stupidly forgot not to hide prior to this...
if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['hash']) && !empty($_GET['hash'])){
// Verify data
$email = mysql_escape_string($_GET['email']); // Set email variable
$hash = mysql_escape_string($_GET['hash']); // Set hash variable
$search = mysql_query("SELECT email, hash FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='1'") or die(mysql_error());
$match = mysql_num_rows($search);
if($match > 0){
// We have a match, activate the account
mysql_select_db("db2") or die(mysql_error());
if ($user->data['is_registered'] || isset($_REQUEST['not_agreed']))
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}
$module->load('ucp', 'register');
$module->display($user->lang['REGISTER']);
}else{
// No match -> invalid url or account has already been activated.
mysql_select_db("db2") or die(mysql_error());
if ($user->data['is_registered'] || isset($_REQUEST['not_agreed']))
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
} else {
redirectpage();
}
}
}else{
// No match -> invalid url or account has already been activated.
redirectpage();
}
break;
在 verify.php 页面上使用了相同的代码,除了我更改了它,以便不必将 active 设置为 0 即可工作。
整个过程大部分都有效:如果没有给出电子邮件或哈希值,或者它不正确,页面将正确重定向。唯一的问题是,当用户单击注册协议页面上的“我同意”按钮时,由于某种原因,重定向开始起作用。它不会将他们带到存在注册表单的下一页。
当我试图跳过注册协议页面时,也会发生这种情况。它成功跳过它,但在我填写注册表并单击“提交”后,它再次触发了我的重定向功能。
任何人都知道为什么在按下提交按钮时会发生重定向?