Hai diverse opzioni per codici come questo. Presumo che la tua idea sia di usare il codice come login principale dell'utente e non ci sarebbe una password separata. Hai diverse parti della domanda, inizierò con "è sicuro?"
Risposta breve, probabilmente non abbastanza. E non è solo per il contesto di invito solo e nessun motivo. C'è sempre un motivo, anche se è solo "per il lulz". Solo perché il sito non è indicizzato ed è solo ad invito, non significa che alcuni blackhat non lo trovino e vogliano giocare. Potrebbero non sapere di non avere informazioni potenzialmente preziose oltre all'accesso. Quanto di un problema sarà se qualcuno ottiene una copia del tuo database? Quanto di un problema se il codice di qualcuno viene rubato?
5 caratteri potrebbero essere sufficienti per un codice di invito, ma come accesso è irragionevolmente breve, anche se c'è un numero molto basso di utenti. Con la dimensione del tuo codice, hai tra 30 e 60 milioni di combinazioni a seconda dell'algoritmo di generazione e se stai limitando i caratteri per evitare confusione "O vs 0". Il codice può sempre essere suddiviso in sezioni per semplificare la digitazione, ad esempio A1C-B2X-YP3. 9 caratteri saranno almeno trilioni di combinazioni.
In termini di generazione dei codici, uno è più corto ma casuale, l'altro è più lungo e naturale. Scegliere un codice di lingua naturale significa che l'utente deve digitare più informazioni, e può anche limitare la quantità di combinazioni se viene ordinato di apparire naturali come una frase. Come gestisci un refuso? Cosa succede se un errore di battitura genera un accesso valido? Chiamando l'opzione della lingua naturale una "passphrase" può migliorare le cose per l'utente, in quanto la percezione di ciò che è può influenzare la capacità di richiamarlo e di non lasciarsi intimidire da esso. L'altro problema con un codice di linguaggio naturale è che a un utente potrebbero non piacere alcune delle parole, o la loro combinazione, potrebbero trovarle offensive, di cattivo gusto o avere qualche brutta memoria. Ad alcune persone, ad esempio, non piace la parola "umido".
Come utente preferirei un codice più "codey". Potrebbe esserci una verifica della cifra di controllo sul lato client prima del codice utilizzato per l'accesso. Limitare la quantità di tentativi di accesso funziona molto meglio se qualcuno non può inserire un codice ovviamente non valido. Io uso un algoritmo per generare codici come quello usando una permutazione pseudocasuale chiamata Molibdeno, fondamentalmente un codice a blocchi personalizzato simile a ALTA . Internamente è 5 valori a 8 bit, esternamente è 8 valori a 5 bit, codificati in 32 caratteri alfanumerici, con "OIZS" omesso da non confondere con "0125". Aggiungi una singola cifra di controllo alla fine, ed è composta da 9 cifre, che sembra carina suddivisa in 3 gruppi di 3. Rivedo regolarmente codici molto più lunghi nelle mailing. I nuovi codici vengono generati crittografando un contatore incrementale, quindi è garantito che non vengano ripetuti. Generare codici in modo casuale richiede un controllo contro tutti i codici in uso per assicurarsi che non ci sia una collisione. Usare una permutazione per generare codici significa che l'accesso ad esso deve essere limitato.
Potresti anche forzare un tipo specifico di sequenza come un codice postale canadese, che sta alternando lettere e numeri. NLN-LNL-NL (N) come 5A9-F4E-0L0 ti limitarebbero a 4,6 miliardi di codici, ma potrebbero essere più facili da ricordare e più facili da capire quando qualcuno sta riscontrando un problema. Supporrei che gli utenti non provassero a ricordare, ma piuttosto a tenerlo scritto da qualche parte.
Se un codice viene utilizzato come invito, i codici brevi sono ok, purché siano limitati nel tempo e utilizzati una sola volta. Suppongo che gli utenti non abbiano password e solo il loro ID utente. In tal caso, potresti considerare un codice di invito come aggiunta all'ID utente, utilizzato solo quando qualcuno deve chiamare il supporto come autenticatore aggiuntivo. In questo modo useranno il codice di invito per ottenere il loro codice utente al momento della registrazione, quindi il codice di invito viene disattivato, ma memorizzato con l'account. Solo il codice di invito verrebbe mai inviato per posta.
Se non sei vittima di un attacco mirato contro il tuo sistema e segui le migliori pratiche per proteggere il sito e il database, probabilmente starai bene. Esistono molti modi per archiviare ed elaborare i dati di accesso, che è probabilmente al di fuori della portata della domanda, che possono influire sulla sicurezza del sistema. Controllare la generazione e la ricerca di codici da parte del personale di supporto è una buona idea. Ho fatto alcune assunzioni qui a causa delle informazioni limitate riguardanti la base di utenti e il sito, speriamo che questa risposta sia ancora pertinente.