短信/邮件防攻击设计
如果系统内涉及短信、邮件的发送业务,并且此业务暴露在外网环境下,则一定要考虑被攻击的可能性。
短信防攻击设计如图7-2所示。当用户点击页面上的“发送短信”按钮之后,为了防止机器人攻击,应先弹出验证码校验窗口,要求用户证明自己是人类,待验证码验证通过后,则立即禁用“发送短信”按钮,并进行倒计时,防止用户反复点击,这样看似简单的设计,却可以防止99%的用户的主动攻击行为。
1.频率限制策略
为了防止短信接口的使用存在缺陷(例如,客户端并没有增加图片验证码,也没有做任何防攻击的措施),导致短信接口被恶意攻击,短信系统必须具有主动防御能力,控制短信“发送短信频率”,通常需要包含以下5种频率控制方式。
(1) 对同一个应用,每个自然日发送短信条数不得超过N条。
(2) 对同一个手机号,30秒内发送短信条数不得超过N条。
(3) 对同一个手机号,1小时内发送短信条数不得超过N条。
(4) 对同一个手机号,1个自然日内发送短信条数不得超过N条。
(5) 相同内容短信对同一个手机号,X秒内发送短信条数不得超过N条。
邮件系统采用与短信系统相同的防御设计即可,增加邮件发送频率限制,能够在发生邮件接口攻击时,将损失降到最低。
2.防劫持策略
为了防止短信/邮件发送接口的请求数据被非法截取和利用,需要将接口报文进行加密和混淆处理。由于短信与邮件接口的处理方式相
同,因此这里仅以短信发送举例。例如,原短信接口的请求报文为
{mobile:'18704483052',content:' 123456',template:'S01',time:'2021-07-07
00:22;33'}。
(1) 选用HTTPS进行交互,防止前后端交互数据被网络抓包获取。但是,无法防止黑客在客户端获取,如浏览器的开发者模式。
(2) 对请求参数进行混淆,否则攻击人员很容易猜测报文交互的具体含义。例如,将以上数据修改为{m:'18704483052',c:'
123456',t:'S01',t:'2021-07-07 00:22:33'},参数避免使用完整的英文,而是采用更加难以猜测的参数命名。
(3) 对请求数据进行混淆,虽然参数混淆后会加大攻击者分析的难度,但是依然可以比较容易猜测出m代表手机号,因此可以针对手机
号参数继续混淆。例如,将手机号拆分为多个部分,即
{m0:'18',m1:'70',m2:'44',m3:'83',m4:'052'},服务端接收数据后再进行还原。这样,攻击者就很难猜测参数的具体含义了。
(4) 对请求报文做整体加密,防止攻击人员劫持利用。
图7-2 短信防攻击设计