core: add strict register rate limit (#663)

pull/665/head
panda 1 year ago committed by GitHub
parent 9bceee8507
commit 659bd9f4aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -243,6 +243,7 @@ export class UserRegisterHandler extends Handler {
const mailDomain = mail.split('@')[1]; const mailDomain = mail.split('@')[1];
if (await BlackListModel.get(`mail::${mailDomain}`)) throw new BlacklistedError(mailDomain); if (await BlackListModel.get(`mail::${mailDomain}`)) throw new BlacklistedError(mailDomain);
await Promise.all([ await Promise.all([
this.limitRate(`send_mail_${mail}`, 60, 3, false),
this.limitRate('send_mail', 3600, 30, false), this.limitRate('send_mail', 3600, 30, false),
oplog.log(this, 'user.register', {}), oplog.log(this, 'user.register', {}),
]); ]);
@ -265,7 +266,11 @@ export class UserRegisterHandler extends Handler {
} else this.response.redirect = this.url('user_register_with_code', { code: t[0] }); } else this.response.redirect = this.url('user_register_with_code', { code: t[0] });
} else if (phoneNumber) { } else if (phoneNumber) {
if (!global.Hydro.lib.sendSms) throw new SystemError('Cannot send sms'); if (!global.Hydro.lib.sendSms) throw new SystemError('Cannot send sms');
await this.limitRate('send_sms', 60, 3); await Promise.all([
this.limitRate(`send_sms_${phoneNumber}`, 60, 1, false),
this.limitRate('send_sms', 3600, 15, false),
oplog.log(this, 'user.register', {}),
]);
const id = String.random(6, '0123456789'); const id = String.random(6, '0123456789');
await token.add( await token.add(
token.TYPE_REGISTRATION, token.TYPE_REGISTRATION,
@ -334,7 +339,7 @@ class UserLostPassHandler extends Handler {
if (!udoc) throw new UserNotFoundError(mail); if (!udoc) throw new UserNotFoundError(mail);
await Promise.all([ await Promise.all([
this.limitRate('send_mail', 3600, 30, false), this.limitRate('send_mail', 3600, 30, false),
this.limitRate(`user_lostpass_${mail}`, 60, 5, false), this.limitRate(`user_lostpass_${mail}`, 60, 3, false),
oplog.log(this, 'user.lostpass', {}), oplog.log(this, 'user.lostpass', {}),
]); ]);
const [tid] = await token.add( const [tid] = await token.add(

Loading…
Cancel
Save