mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-08-12 19:41:39 +00:00
feat(auth): require a captcha on the endpoints that send mail (#32)
Signup had no bot protection. The account itself was never the prize — GoTrue refuses a session until the address is confirmed, and 0 of the 2 unconfirmed accounts on record ever signed in. The prize is our mail: /signup and /recover send to whatever address the caller types, so a stranger could make pezkuwichain.io mail thousands of people who never asked for it. Sending reputation takes months to rebuild and every product on the domain shares it. Rate limiting alone was not enough. GoTrue defaults to 30 emails/hour, which is 720 a day to attacker-chosen recipients; tightening it to 15 halves the number without changing what is possible. Verification runs inside GoTrue, not here. It POSTs to siteverify with the widget secret before /signup, /recover, /resend, /magiclink, /otp and /token with grant_type=password. Adding our own check in the frontend or a proxy would protect nothing, because /auth/v1/signup is reachable directly. One shared widget in execute mode rather than one per form: some of these are buttons with nowhere to put a checkbox, and interaction-only appearance keeps the challenge invisible unless Cloudflare asks for one. Tokens are single-use, so each call renders fresh and tears down the previous widget. Six call sites, matching the six protected endpoints — password login included, since /token with grant_type=password is enforced. Refresh-token grants are exempt, so open sessions are unaffected. Site key travels as a build arg like the WalletConnect id: it is public by construction, visible in the bundle. Only the secret is privileged and it lives in GoTrue's env on the auth host. Ships ahead of enforcement. Turning captcha on server-side before the frontend sends tokens would break every login and signup in the same instant.
This commit is contained in:
committed by
GitHub
parent
35884cb8c9
commit
c26eeee12c
@@ -87,6 +87,7 @@ jobs:
|
||||
VITE_ASSET_HUB_ENDPOINT: wss://asset-hub-rpc.pezkuwichain.io
|
||||
VITE_PEOPLE_CHAIN_ENDPOINT: wss://people-rpc.pezkuwichain.io
|
||||
VITE_WALLETCONNECT_PROJECT_ID: 8292a793b7640e8364c378e331e76d04
|
||||
VITE_TURNSTILE_SITE_KEY: 0x4AAAAAAEDkUkbsUgw2D9zN
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -208,6 +209,7 @@ jobs:
|
||||
VITE_ASSET_HUB_ENDPOINT=wss://asset-hub-rpc.pezkuwichain.io
|
||||
VITE_PEOPLE_CHAIN_ENDPOINT=wss://people-rpc.pezkuwichain.io
|
||||
VITE_WALLETCONNECT_PROJECT_ID=8292a793b7640e8364c378e331e76d04
|
||||
VITE_TURNSTILE_SITE_KEY=0x4AAAAAAEDkUkbsUgw2D9zN
|
||||
VITE_SUPABASE_URL=${{ secrets.VITE_SUPABASE_URL }}
|
||||
VITE_SUPABASE_ANON_KEY=${{ secrets.VITE_SUPABASE_ANON_KEY }}
|
||||
cache-from: type=registry,ref=${{ steps.meta.outputs.image }}:cache
|
||||
|
||||
Reference in New Issue
Block a user