DEDECMS防恶意注册增加邮箱注册码

35 篇文章 0 订阅
前提条件:后台核心设置,邮箱能够正常通信。
0、在数据库中新建一个dede_regnum
 .
表段如下图:
图片
1、/member/templets/reg-new.htm中

1>增加如下代码:
<script language="javascript">
function sendsms(){
if(document.getElementById('email').value==''){
alert('请输入邮箱帐号!');
document.getElementById('email').focus();
return false;
}
window.open("http://www.xx.com/member/regsendnum.php?num="+document.getElementById('email').value);
}
</script>
2>找到  <li><span>电子邮箱:</span>  替换为如下代码:
<li><span>电子邮箱:</span>
  <input type="text" class="intxt w200" id="email" name="email"/>
  <i class="red">*</i> <em id="_email" class="red">(每个电子邮箱只能注册一个帐号,并且用于接收下方的注册码!)</em> </li>
<li><span>电子邮箱注册码:</span>
  <input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px; text-transform: uppercase;" />
  <i class="red">*</i> <em id="_yznum">请点击发送邮件获取注册码</em>
  <input  value="发送邮件" type="button"  onClick="sendsms();"/>
</li>
效果如下图: 
图片 
2、在member/ reg_new.php中:
     在  #api{{
        if(defined('UC_API') && @include_once DEDEROOT.'/uc_client/client.php')之上增加如下代码:
//注册码核对
$time=time()-3600;//1小时前的注册码失效.
$yznum=$_POST['yznum'];
$email=$_POST['email'];
$regnum=$dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email' order by posttime desc limit 1");
if($regnum['num']==$yznum){
                 //删除一个小时前的注册码
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE posttime<'$time'")){
$dsql->ExecuteNoneQuery("DELETE FROM `#@__regnum` WHERE posttime<'$time'");  
}
}else{
ShowMsg("注册码不对!","-1");
exit();
}
3、在member下新建一个regsendnum.php文件
代码如下:
<?php
/**
 * @version        $Id: regsendnum.php 1 11:11 2013年5月6日Z jackers $
 * @copyright      Copyright (c) 2013, jackers, Inc.
 */
 //当前文件是注册时通过邮箱注册码的功能
require_once(dirname(__FILE__)."/config.php");
require_once DEDEINC.'/membermodel.cls.php';
$num=time()*5;
$randNum =substr(md5($num),0,4);
$timestamp=time();
$email=$_GET['num'];
$time=$timestamp-60;
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email' AND posttime>'$time'")){
ShowMsg('如果你的注册码还没有收到的话?请一分钟后再重发!','/member/index_do.php?fmdo=user&dopost=regnew');
exit;
}
  //邮件验证
$mailtitle = "{$cfg_webname}--提供给你的注册码信息";
$mailbody .= "{$cfg_webname}--";
$mailbody .="提供给您的注册码是:(".$randNum.")这四位数\n";
$mailbody .= "Power by http://www.xx.com 某某网!\r\n";

$headers = "From: ".$cfg_adminemail."\r\nReply-To: ".$cfg_adminemail;
  if($cfg_sendmail_bysmtp == 'Y' && !empty($cfg_smtp_server))
{        
$mailtype = 'TXT';
require_once(DEDEINC.'/mail.class.php');
$smtp = new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
$smtp->debug = false;
$smtp->sendmail($email,$cfg_webname,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
}
else
{
@mail($email, $mailtitle, $mailbody, $headers);
}
          //End 邮件验证
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email'")){
$dsql->ExecuteNoneQuery("UPDATE `#@__regnum` SET `num`='$randNum',`posttime`='$timestamp' WHERE `email`='$email'");
}else{
$dsql->ExecuteNoneQuery("REPLACE INTO `#@__regnum` ( `num` , `posttime` , `email` ) VALUES ('$randNum', '$timestamp', '$email')");
}
ShowMsg('注册码信息已经成功发送到您的邮箱中,请注意查收!','/member/index_do.php?fmdo=user&dopost=regnew');
exit;
?>
4、member/templets/js/reg_new.js中:
if($('#vdcode').val()=="")  之上增加如下代码: 
if($('#yznum').val()=="")
{
$('#yznum').focus();
alert("邮箱注册码不能为空!");
return false;
}
补充:在邮箱无法发送邮件的到邮箱的时候。有些服务器做安全组策略的时候关闭了一些端口tcp、udp等导致邮件无法发送到用户的邮箱。 
 上面我们是把注册码存到数据库中,我们只需要让注册用户自己查询出注册码即可。 
5、我们在member目录下新建一个serialnumber.htm文件
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>会员中心 - 邮箱注册码查询</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form action="serialnumber.php" method="post">
<input name="email" type="text" /><em style="color:#FF0000;">输入邮箱查询注册码</em>
<input type="submit" value="查询"/>
</form>
</body>
</html> 
6、 我们在member目录下建立一个读取查询的serialnumber.php文件
代码如下:
<?php
require_once(dirname(__FILE__)."/config.php");
        /** 验证码查看 **/
    $sql="select email,num from #@__regnum where email='".$email."'";
        $tests = array();
        $dsql->SetQuery($sql);
        $dsql->Execute();
        while ($row = $dsql->GetArray()) {
            $tests[] = $row;
        }
        $dpl = new DedeTemplate();
        $tpl = dirname(__FILE__)."/templets/zhuce.htm";
        $dpl->LoadTemplate($tpl);
        $dpl->display(); 
7、我们需要建立一个zhuce.htm来展示我们查询出来的注册码 
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>会员中心 - 邮箱注册码</title>
<style type="text/css">
 body{ font-size:14px; font-family:"微软雅黑"; color:#666666; text-align:center;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $cfg_soft_lang; ?>" />
</head>
<body>
<table width="300" border="1">
  <tr>
    <td>邮箱注册码</td>
    <td>邮箱</td>
  </tr>
   <?php foreach($tests as $ts){?>
   
  <tr>
    <td><em style="color:#FF0000;"><?php echo $ts['num']; ?></em></td>
 <td><?php echo $ts['email']; ?></td>
  </tr>
  <?php } ?>
</table>
</body>
</html>
8、我们的注册页面需要增加代码如下:
 找到:
<li><span>电子邮箱注册码:</span>
          <input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px;" /> <i class="red">*</i> <em id="_yznum">请点击发送邮件获取注册码</em> <input  value="发送邮件" type="button"  onClick="sendsms();"/> 
在之后追加如下:
<i class="red">*</i> <a href="serialnumber.htm" target="_blank">收不到注册码?请点这里</a>
9、效果如下:

图片
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值