È possibile enumerare le risorse attraverso distinzioni come queste: se si restituisce un 403 per le pagine esistenti, ma l'utente corrente non può accedere e 404 per le pagine che non esistono, un utente malintenzionato può facilmente distinguere tra risorse valide e non valide.
Se ciò che conta dipende dalla tua applicazione - se rivelassi informazioni in questa circostanza che ha valore, potrebbe essere una cosa negativa: se /user/73463
mi dà un 404 ma /user/64500
mi dà un 403, posso fare un supposizione istruita che 64500 sia un utente valido di cui non riesco a vedere il profilo. D'altra parte, se /year/2003
a /year/2016
mi dà un 403 ma /year/2002
e /year/2020
mi danno un 404, tutto quello che posso dire è che non hai creato cartelle annuali nel lontano futuro, e forse che non hai nulla da prima del 2003.
Idealmente, non vuoi fornire URL a cui l'utente non ha accesso ( dalla tua domanda, non sono sicuro che l'URL che segui sia sul tuo sito o altrove ). Tuttavia, è possibile controllarlo solo all'interno del proprio sistema: se l'utente B invia all'utente A un collegamento, l'utente A può scoprire che la risorsa esiste senza preoccuparsi della risposta a loro. Ciò si applica se un link viene fornito anche su un sito Web di terze parti - nessuno è in grado di collegarsi a una risorsa inesistente (sebbene potrebbero essere collegati a una risorsa che non esiste più, nel qual caso un 404 o 410 sarebbe adeguata). Per i tuoi sistemi, dovresti mirare a ridurre al minimo le possibilità che un utente legittimo possa seguire un link a una risorsa a cui non hanno il permesso di accedere.
Generalmente, se qualcosa può essere facilmente enumerato (ad es. identificatore numerico) ha più senso restituire una risposta coerente a tutte le richieste, indipendentemente dal fatto che allo stato attuale manchi l'autorizzazione o che la risorsa non sia esistente. Se qualcosa non può essere enumerato (ad esempio un identificatore di hash lungo), potrebbe avere senso distinguere tra gli stati, ma è necessario essere consapevoli del potenziale per qualcuno di imbattersi in risorse che non dovrebbero essere in grado di rilevare e di adottare misure per evitare ciò (ad es. monitorare alte frequenze di richiesta e limitare i tentativi apparenti di enumerare le risorse).