MAISON CODE .
/ Security · Middleware · Token Gating · Membership

Middleware di gatekeeping: token-gating e abbonamenti

Come creare raccolte "NFT Access" o "Solo VIP" utilizzando Edge Middleware in Remix. Bloccare le richieste prima che raggiungano il server.

AB
Alex B.
Middleware di gatekeeping: token-gating e abbonamenti

Lanci una vendita “Amici e famiglia”. Invia il collegamento tramite e-mail. Qualcuno lo pubblica su Reddit. 10.000 persone fanno irruzione nelle tue azioni. Hai bisogno di Gatekeeping. La logica deve avvenire al Edge. Se l’utente non è autorizzato, non eseguire nemmeno il rendering della pagina.

Perché Maison Code ne parla

In Maison Code Paris, agiamo come la coscienza architettonica dei nostri clienti. Spesso ereditiamo stack “moderni” costruiti senza una comprensione fondamentale della scala.

Discutiamo di questo argomento perché rappresenta un punto di svolta critico nella maturità ingegneristica. Implementarlo correttamente differenzia un MVP fragile da una piattaforma resiliente di livello aziendale.

Il modello middleware Edge

In Remix/Next.js, il middleware viene eseguito su ogni richiesta.

“dattiloscritto”. // app/entry.server.tsx (o middleware.ts) importa { reindirizzamento } da ‘@remix-run/node’;

esporta la funzione asincrona checkAccess(richiesta, utente) { const url = nuovo URL(richiesta.url);

// 1. Controlla se il percorso è protetto if (url.nomepercorso.startsWith(‘/collection/vip’)) {

// 2. Controlla l'accesso
if (!utente) lancia reindirizzamento('/account/login');

// 3. Controlla tag/token
const tag = utente.tags || [];
const hasVipTag = tags.includes('VIP_TIER_1');
const hasNft = attendono checkWallet(user.wallet, 'BORED_APE');

if (!hasVipTag && !hasNft) {
  lanciare reindirizzamento('/pages/access-denied');
}

} }


## Gating dei token (Web3)
Per i marchi NFT, il "Login" è un Wallet Connect.
Utilizziamo **SIWE (Accedi con Ethereum)**.
1. L'utente fa clic su "Connetti portafoglio".
2. Firma un nonce.
3. Il server verifica la firma.
4. Il server interroga il nodo Blockchain (Alchemy/Infura): "Il portafoglio X possiede il token Y?"
5. Se sì, emetti un cookie di sessione.

## Protezione tramite password (semplice)
A volte hai solo bisogno di una password per la raccolta.
Non utilizzare la pagina della password globale di Shopify.
Crea una **password con ambito**.
Memorizza l'hash della password nel metafield della raccolta.
L'utente inserisce la password -> Verifica hash -> Imposta cookie `collection_access_123=true` -> Consenti accesso.

## Geo-Gating
"Questo prodotto non può essere venduto in California." (Normativo).
Controlla "request.cf.region" (Cloudflare) o "request.geo.city" (Vercel).
Se `region === 'CA'`, nascondi il pulsante "Aggiungi al carrello" o reindirizza.

## 5. Controllo degli accessi basato sui ruoli (RBAC) sull'edge

"Gli amministratori possono vedere `/dashboard`. Gli utenti no."
Di solito, lo controlli nel componente server.
Ma questo spreca la CPU.
Controllalo nel Middleware.
Memorizza i ruoli nel JWT (`user.roles = ['admin']`).
Il middleware decodifica il JWT (ignorando la verifica della firma per velocità o verificando utilizzando la crittografia compatibile con Edge).
Se role != admin, restituisce immediatamente 403 Forbidden.
Ciò protegge la tua API backend da sondaggi non autorizzati.

## 6. Protezione dai bot (tornello Cloudflare)

Il middleware è il luogo perfetto per fermare i bot.
Se "User-Agent" è "HeadlessChrome", blocca.
Se `cf-bot-score` < 30, blocca.
Iniettiamo **Cloudflare Turnstile** (Smart Captcha) appositamente per le richieste sospette.
L'utente normale non vede nulla. Il bot vede una sfida.
Ciò accade prima ancora che il tuo database venga toccato.

## 8. Test A/B lato server

Il test A/B lato client (Google Optimize) provoca "sfarfallio".
L'utente vede il vecchio titolo per 0,5 secondi, quindi lo scambia.
Il middleware risolve questo problema.
1. Arriva la richiesta.
2. Il middleware controlla "cookie_bucket". Se vuoto, assegna `bucket=B`.
3. Riscrivi la richiesta in "/variants/home-b".
4. Il server esegue il rendering della variante B.
5. L'utente vede immediatamente la variante B.
Sfarfallio zero. SEO sicuro (se vengono gestiti i canonici).

## 9. Prezzi personalizzati all'avanguardia

"Gli utenti VIP ricevono uno sconto del 20%."
Se lo fai in Client JS, l'hacker cambia semplicemente la logica.
Se lo fai in Middleware, è sicuro.
1. Il middleware vede "user_tier=vip".
2. Il middleware inserisce l'intestazione "x-pricing-tier: vip".
3. Origin Server restituisce $ 80 anziché $ 100.
L'HTML arriva con il prezzo corretto. L'utente non può manipolarlo.

## 10. Mitigazione degli DDoS a livello di applicazione

Gli attacchi DDoS di rete sono gestiti da Cloudflare.
L'applicazione DDoS (Layer 7) è più difficile.
"Cerca 'a' 1000 volte al secondo." (Uccide il DB).
Il middleware è il filtro.
Implementiamo la **Token Bucket Rate Limiting** per IP *prima* del rendering Remix.
`const consentito = attendono rateLimit.check(ip, 10, "10s");`
Se superano le 10 richieste in 10 secondi, restituiscono 429 Too Many Requests.
Il tuo server di rendering non si sveglia nemmeno.

## 11. La coda (sala d'attesa virtuale)

Per "Hyped Drops" (Yeezy/Supreme), nessun server può gestire il picco.
Il middleware reindirizza il traffico a una **coda virtuale** (Queue-it o Custom Redis).
1. Seleziona "queue_token". Mancante?
2. Reindirizza a "/queue".
3. L'utente attende. WebSocket aggiorna la posizione "Sei #5000".
4. L'utente si porta davanti. Reindirizzamento a `/product?token=xyz`.
5. Il middleware convalida il token. Consente l'accesso per 10 minuti.
Ciò appiattisce la curva del traffico da uno "Spike" a un "Plateau".

## 12. Firma HMAC per B2B

Se hai un negozio B2B, spesso hai un collegamento "Portale" da un ERP.
L'utente fa clic sul collegamento in NetSuite -> Accesso a Shopify.
Come si protegge questo collegamento?
**HMAC (codice di autenticazione dei messaggi basato su hash)**.
Il collegamento contiene `?user=123&timestamp=17000000&signature=abc...`.
Il middleware verifica la firma utilizzando un segreto condiviso.
Se il "timestamp" è più vecchio di 5 minuti, rifiuta.
Ciò consente l'accesso "senza password" che è crittograficamente sicuro.

## 11. Perché Maison Code?

Noi di **Maison Code** consideriamo il middleware come lo **scudo**.
È la prima linea di difesa.
Non lasciamo esposta la tua logica aziendale specifica in JS lato client.
Spostiamo la complessità sull'Edge.
Abbiamo realizzato negozi "Token Gated" per progetti NFT e "VIP Tiers" per case di moda di lusso.
Sappiamo come bloccare i bot mentre stendiamo il tappeto rosso per i VIP.

## 13. Rilevamento avanzato dei bot (euristica)

I robot stanno diventando più intelligenti. Eseguono JS. Passano Captcha (usando le fattorie).
Abbiamo bisogno dell'**Analisi Comportamentale** all'Edge.
1. **Movimento del mouse**: i robot si muovono in linea retta. Gli esseri umani si muovono in curve.
2. **Tempo sulla pagina**: i bot acquistano in 2 secondi. Gli esseri umani impiegano 20 secondi.
3. **Intestazioni richiesta**: i bot spesso hanno "User-Agent" e "Sec-CH-UA" non corrispondenti.
Utilizziamo la logica Cloudflare Worker per assegnare un punteggio a queste richieste.
"Punteggio < 10"? Reindirizzamento silenzioso a un checkout "Honeypot" che addebita costi ma non spedisce nulla.
Questo spreca i loro soldi e li scoraggia dall'attaccarti di nuovo.

## 14. Geo-fencing per la conformità alle licenze

Vendi Nike. Puoi vendere nell'UE, ma non negli Stati Uniti.
La convalida del "Selettore indirizzo" è troppo tardi. Il cliente statunitense vede il prodotto, lo aggiunge al carrello e viene rifiutato alla cassa.
Sono arrabbiati.
**Edge Geo-Fencing** nasconde il prodotto in base all'IP.
Se `cf-ipcountry == 'US'`, la pagina del prodotto restituisce 404.
L'utente non sa mai che esiste.
Ciò protegge il contratto di licenza del fornitore e impedisce la capacità di esportazione del "mercato grigio".

## 15. Elenco di controllo del middleware (preparazione al lancio)

Non distribuire il middleware senza verificare quanto segue:
1. [ ] **Fail Open vs Fail Closed**: in caso di errori del Middleware, blocchi tutti o fai entrare tutti? (Predefinito: Fail Closed per sicurezza).
2. [ ] **Timeout**: imposta il timeout di 50 ms. Se KV è lento, non bloccare la pagina.
3. [ ] **Verifica regione**: testato tramite VPN da un paese bloccato?
4. [ ] **Bypass Token**: hai un parametro di query `?token=admin_bypass` per l'accesso di emergenza?
5. [ ] **Regole cache**: assicurati che `Vary: Cookie` sia impostato in modo da non memorizzare nella cache la pagina "Accesso negato" per tutti.
6. [ ] **Logging**: registra ogni blocco su Datadog.
7. [ ] **User Agent**: autorizza Googlebot (controllo User-Agent).
8. [ ] **Limite di velocità**: il limite è per IP o per sessione?
9. [ ] **Asset statici**: ignora il middleware per `.jpg`, `.css`, `.js`.
10. [ ] **Gestione delle eccezioni**: prova/catch blocca tutto.
11. [ ] **Avvio a freddo**: verificare che l'avvio a freddo WASM sia < 10 ms.
12. [ ] **Costo**: monitora le invocazioni. Il middleware viene eseguito su *ogni* richiesta.
13. [ ] **Redirect Loop**: assicurati di non reindirizzare a una pagina protetta.
14. [ ] **App mobile**: il middleware interrompe le chiamate API dell'app iOS?
15. [ ] **Sitemap**: non nascondere sitemap.xml.

## 16. Conclusione

Il gatekeeping crea scarsità. La scarsità crea valore.
Ma la Porta deve essere sicura.
Nascondere un pulsante tramite CSS ("display: none") non è sicurezza. Chiunque può ispezionare l'elemento.
Il middleware è l'unico modo.
È veloce, invisibile e indistruttibile.


<hr style="margin: 1rem 0" />

### Hai bisogno di drop esclusivi?
Progettiamo sistemi di controllo accessi ad alta sicurezza.


**[Proteggi il mio Drop](/contatto)**.
**[Assumi i nostri architetti](/contact)**.