Skip to content

Add email verification requirement on signup #23

Description

@PeaStew

Summary

The auth service allows signup with any email address and no verification. Accounts are immediately active. This makes mass account creation trivial for bots — generate random emails, register, get tokens, abuse.

Impact

  • Sybil attacks: create thousands of accounts for point farming
  • No accountability — throwaway emails with no verification
  • Database pollution with fake accounts

Recommendation

better-auth (already in use) supports email verification natively:

emailAndPassword: {
  enabled: true,
  requireEmailVerification: true,
  sendVerificationEmail: async ({ user, url }) => {
    await sendEmail({
      to: user.email,
      subject: "Verify your email",
      body: `Click here to verify: ${url}`
    });
  }
}

Additional measures

  • Add email domain blocklist (disposable email providers: mailinator, tempmail, guerrillamail, etc.)
  • Consider requiring a verified email before any point-earning actions
  • Rate limit verification email sends (max 3 per email per hour)

References

  • better-auth docs: email verification plugin
  • Disposable email blocklist: github.com/disposable-email-domains/disposable-email-domains

Metadata

Metadata

Assignees

No one assigned

    Labels

    anti-abuseBot detection and abuse preventionenhancementNew feature or requestpriority: highHigh severity findingsecuritySecurity issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions