本文来自PHP教学中心
大多数产品都涉及邮件认证代码的使用界面,尤其是手机产品、邮件认证代码几乎成为所有手机产品的标准。 因此,防止邮件成为产品经理和开发人员关心的问题。
没有经历过涂过邮件的问题的产品经理可能不怎么注意这个问题。 本文简要介绍黑色工具的邮件轰炸机。 邮件轰炸机是软件,用书面程序印刷大量邮件。 可以自动统一提交手机号码,通过模拟IP等打印邮件。
因此,在设计使用邮件认证码的产品时,必须制定限制规则以防止邮件闪烁。
在PC时代,很多平台都降低了以图形认证代码的形式印刷在机器上的风险。 最典型的例子是12306“奇怪的验证码”。 然而,在移动互联网时代,用户体验是非常重要的,且使用图形认证码可以影响用户体验。 那么,除了模式认证代码的方式以外,如何解决打印邮件的问题呢
提供一些方案供参考。 因为有所构想,代码很容易实现啊
1、时间限制: 60秒后可以再次发送认证码,前端(客户端)执行60秒倒计时。 在此分钟之内,用户不能提交发送多个消息的请求。 通常使用这种方法,但不太有用。 技术好的人可以绕过这个限制,直接发送邮件的验证码。
代码如下所示
//60秒后$ limit key = " mobile _ SMS _ send _ limit:" $ mobile; $ smssendlimit = yii:: app ( )-> redis-> get ( $ limit key ) if ( $ smssendlimit ) { $ this-> end ( 1,' 60秒后可以重新发送邮件认证码! "; 2、移动电话号码限制:在同一移动电话号码、24小时内以同一移动电话号码注册或发送SMS认证码等其他操作不超过5件的情况下,系统可以限制移动电话号码。 例如,24小时内只能发送5个消息认证码。 如果超出限制,将报告错误(例如,繁忙,请稍后重试)。 但是,手动写邮件是不可避免的。 对于使用不同的手机号码统一发送邮件的计算机,这种方法是无能为力的。
代码如下所示
/发送次数$ key = " mobile _ SMS _ send _ times:" $ mobile.":".date ( " ymdhis " ) $ smssendtimes = yii:: app ( )-> redis-> get ( $ key ) if ( empty ( $ smssendtimes ) ) { $ smssendtimes = 0; else if ( $ smssendtimes > =5) { $ this-> end ( 1,'每个手机号码一天最多发送五封邮件! "; 3、邮件认证码的限制:有在30分钟以内发送相同认证码的另一种方法: 30分钟以内发送的邮件认证码全部是相同的认证码。 第一次请求SMS接口并缓存SMS认证码的结果。 如果在30分钟内再次请求,则直接返回缓存的内容。 以此方式,不清楚消息接口提供商是否对传送该缓存信息进行计费。 如果你有兴趣,你可以理解。
有些代码如下
4、后端验证:很少人认为提出Token参数验证的方式值得个人尝试这种方法。 前端(客户端)在请求发送邮件的同时向服务器发送Token参数,服务器验证该Token参数,验证通过后,将邮件发送到请求发送邮件的接口。
5、唯一的限制:微通信产品可以限制具有相同微通信ID的用户的需求数量用微通信ID来标识,随后,可以限制具有相同微通信ID的用户在24小时内最多发送10个邮件。
6、产品流程限制:按步骤进行。 例如,使用注册的邮件认证代码时,将注册步骤分为两个步骤。 当用户输入了手机号码并设定了密码后,下一步骤进入认证码验证步骤。
7、图形验证代码限制:图形验证通过后、请求接口图形验证代码前在后台进行交互的过程比较简单,主要分为以下三个步骤
客户端在请求页面的同时,向服务器发出请求,服务器生成认证代码,将认证代码字符放入session,为客户端的认证做准备。 同时,服务器将生成的认证代码模式传递给前端,在前端获取验证代码模式,渲染并显示在页面上。 用户识别图形认证码后,向服务器提供认证码字符的服务器接受认证码检查的请求,将接收到的字符与存储在session中的认证码字符进行对照,将对照结果返回到开头。 前端部分代码
验证代码: 交换后端部分的代码
8、IP和Cookie限制:通过将相同IP/Cookie信息的最大数量限制为Cookie或IP,可以轻松标识相同的用户并限制相同的用户(例如,最多24小时内可以发送20条消息)。 但是,您可以删除Cookie、模拟IP,或者IP在局域网上具有相同的IP。 因此,在使用这种方法时,应考虑具体情况。
代码如下所示
//ip发送次数$ keyip = " mobile IP _ SMS _ send _ times:".publicfunhelper:: getip ( ).":".date ( " ymdhis " ) $ smsipsendtimes = yii:: app ( )-> redis-> get ( $ keyip ) if ( empty ( $ smsipsendtimes ) ) { $ smsipsendtimes = 0; else if ( $ smsipsendtimes > = 20 ) { $ this-> 请稍后再试! "; 9、邮件警告机制有可能不能完全防止邮件被打印,除了发生问题后的保护以外。 因此,在邮件的使用量达到一定数量时,向管理者发送警告消息,管理者也能够立即监视邮件接口并保护。