第十五章:第13节论坛系统(BBS)会员注册

更新于:2018-03-30 15:45:04

这节我们开始写前台功能了。前台的第一个功能:会员注册功能。


1.png


上图为注册页面。


了解相关:


论坛容易吸引人发广告。早些年的论坛网站,注册功能很简单,也不做任何限制,一个用户名、密码就能注册,所以一个人可以在同一网站平台上注册很多的账号。这都是毫无价值的垃圾账号。网站封杀掉大量垃圾账号,它们又会重新注册新的账号。光靠人力无法杜绝垃圾账号的产生。


所以,很多网站在注册这块都会加上一个邮箱验证,注册前先往用户填写的邮箱发一个验证码或者验证链接。这种方法有些效果,也有不足之处:增加了注册的繁琐度,还得去登录邮箱。可能有些人没有邮箱,得先注册一个邮箱。注册邮箱是不花钱的,想发广告的同志可以注册很多邮箱,这样依然不能彻底解决实际问题。


现在绝大数的网站注册时都开启了手机验证。手机验证和邮箱验证是一样的,先往手机上发一个验证码。


手机验证相比邮箱验证的好处:


1)、能上网的人基本上人人都有手机,却不一定人人都有邮箱。

2)、手机号大部分人只有一个,很少一个人好几个手机号的,这涉及到成本的问题。注册邮箱不花钱,所以一个人可能会有很多个邮箱。

3)、现在的手机号都需要实名。假如有人在论坛发布了违法信息,警察可以通过手机号锁定发帖人真实身份。假如邮箱的运营商没有对用户实名,通过邮箱就难查到真实身份。


手机验证相比邮箱验证的坏处:


网站实现自动发送邮件功能是免费不花钱的,而发送短信则需要花钱,需要去第三方购买服务,再与自己的网站平台做对接。


注册功能流程讲解:


需要设计两张表:


短信日志表:


1.png


我们肯定要记录下短信发送情况。而且这张表的数据参与逻辑功能,比如限制往同一手机发送短信的时间间隔。


用户表:


1.png


根据字段数据用途不同,楠神把用户表分拆了主表与副表。


注册流程思路:


1)、填写手机号,往手机号发验证码(激活码)。


此处特别注意!!!


一定不能省略掉图形验证码功能。原因:


有图形验证码验证,可确保当前注册的用户是手动操作,而不是用其他工具在刷你的短信接口。说说楠神自己犯的错误:


我第一次写手机号注册功能,没用图形验证码,我是这样想的。假如用户发送过一次短信了,就在session中做个时间标识。当用户第二次发送短信,先从session中查找有没有这个时间标识,有则判断下两次发送短信的时间间隔是否是合理的,不合理则不发短信。


看似想法挺好的,现实却被人恶意刷了一遍。黑客没有得到什么,就是一下子把我几千的短信费刷没了。像这样的贱人网上到处都是,搞了你他很高兴。


问题出在哪了?


我想黑客应该是把cookie禁用了,每次发送请求不带上cookie,这样服务端一直创建新的session,自然就获取不到上一次短信的时间标识。所以,代码中的限制功能起不到作用,黑客使用工具或用JS、PHP写脚本程序都可以轻而易举地频繁请求,从而刷掉我的短信次数。


可能有朋友会想,不写到session,写到数据库中呀。没用的!


写到数据库中,用什么来标识当前请求网站的用户身份?用IP吗?不靠谱,黑客可以使用代理客户端,频繁更改他的IP地址。用手机号?没意义,注册时只要没注册过的手机号都可以注册,所以黑客可以每次请求的手机号都不一样。


楠神以前想过很多办法,总结下就是加图形验证码是最简单最有效的方法。如果有朋友想把图形验证码去掉,那一定要多开动脑筋,想一套自己的方法,做好防止被刷的限制。


当用户登录后才能使用的短信功能可以去掉图形验证码,原因就是可以把一些限制参数放到session中,用户把cookie禁用了,他自己就会处于退出的状态。具体怎么做?等到写用户修改密码功能时再说。


2)填写手机验证码(激活码)、用户密码,提交后台服务器,使用手机验证码验证手机号所属人是否正确。


此处也有需要注意的地方,那就是一定要有出错次数的限制!


什么意思呢?


我们平时登录银行账号时,密码输错超过三次,账户就会被冻结。道理都是一样的。


如果程序中不加上出错次数的限制,黑客知道了某一用户的手机号,通过短信验证码的方式密码找回,就可以轻而易举地修改用户的密码。


一般发往手机的验证码(激活码)都很简单,大多是6位数的纯数字。黑客输入某用户的手机号,发送验证码,他虽然猜不出来这个验证码(激活码),但他会通过工具或写程序频繁提交000000——999999的数字,花不了多长时间就可以匹配到验证码(这属于暴力破解)。


加上了出错次数限制,比如最多5次。当黑客连续输入000000-000004后依然和后台储存的验证码(激活码)不匹配,那验证码(激活码)就会失效,需要重新发送新的验证码(激活码)。


1.png


整体思路和注意的地方楠神已介绍完毕了,下面大家自己去看代码:


1.png


控制器:app\home\controller\Register.php

模型:app\common\model\Sms.php、User.php、UserInfo.php

扩展类:app\extend\Sms.php

注册页面视图文件:app\home\view\register\index.html



1.png


这是楠神第一次使用事务,TP框架开启事务的方法就是这样写的。


后台也要有个短信日志显示的功能


1.png


本节学习代码》》》