Il codice di risposta HTTP semanticamente corretto per questa situazione sarebbe 403 Proibito :
Il server ha compreso la richiesta, ma si rifiuta di soddisfarla. L'autorizzazione non sarà di aiuto e la richiesta NON DOVREBBE essere ripetuta. Se il metodo di richiesta non era HEAD e il server desidera rendere pubblico il motivo per cui la richiesta non è stata soddisfatta, DOVREBBE descrivere il motivo del rifiuto nell'entità. Se il server non desidera rendere disponibili queste informazioni al client, è possibile utilizzare invece il codice di stato 404 (Not Found).
(Sebbene la definizione della risposta 403 affermi che "l'autorizzazione non aiuterà", IMO dovrebbe essere inteso come riferito specificamente all'autenticazione HTTP di base / digest , per la quale invece dovrebbe essere utilizzato il codice di stato 401 non autorizzato . Dato che non si utilizza uno di questi metodi di autenticazione, 403 è il codice di stato appropriato nel tuo caso.)
Tuttavia, utilizzando un codice di stato 403 rivela (o almeno implica fortemente) il fatto che ci sia una pagina con questo URL, anche se il server si rifiuta di consegnarlo. Poiché si tratta di qualcosa che potresti voler nascondere a potenziali intrusi, lo standard HTTP / 1.1 consente invece di restituire esplicitamente il codice di stato 404 Not Found ( sottolineatura mia):
Il server non ha trovato nulla corrispondente all'URI di richiesta. Non viene fornita alcuna indicazione se la condizione è temporanea o permanente. Il codice di stato 410 (andato) DOVREBBE essere utilizzato se il server è a conoscenza, tramite un meccanismo configurabile internamente, che una vecchia risorsa è permanentemente non disponibile e non ha un indirizzo di inoltro.
Questo codice di stato viene comunemente utilizzato quando il server non desidera rivelare esattamente il motivo per cui la richiesta è stata rifiutata o quando non è applicabile alcuna altra risposta.
Naturalmente, per rendere efficace tale occultamento, la pagina di errore 404 che restituisci deve apparire identica a quella che restituisci per le pagine inesistenti effettive . Altrimenti, ingannerà solo gli attaccanti più stupidi e casuali. (Se il tuo obiettivo è solo quello di mantenere le pagine fuori dall'indice di Google, una risposta 403 lo farà altrettanto.)
E le altre possibili risposte suggerite nella tua domanda e le altre risposte?
Come ho notato prima, non credo che una risposta 401 sia appropriata qui. Essa può funzionare in pratica, nella misura in cui la maggior parte dei browser e motori di ricerca si trattano ogni 4 malformato o non riconosciuta xx codice di risposta serie, come se fosse una 404, ma non è ancora valido secondo l'HTTP specifiche, e non c'è ragione pratica a preferirlo oltre 403 o 404.
Per quanto riguarda l'utilizzo di un reindirizzamento 301 (o 302) a una pagina separata "Errore 404", questa è una pratica terribile diffusa dai tutorial sciatti mod_rewrite e non ha assolutamente alcuna funzionalità di riscatto rispetto al ritorno diretto di una risposta 404:
È fonte di confusione per i visitatori, poiché l'URL che stavano tentando di visitare viene sostituito dall'URL della pagina di errore. Quindi, vedono un messaggio che dice di aver raggiunto una pagina inesistente, ma nessuna indicazione facilmente visibile di quale fosse la pagina che stavano cercando di visitare e quindi non possono facilmente tentare strategie di recupero come correggere eventuali errori di battitura nell'URL, o incollarlo e incollarlo su Google o Wayback Machine.
Potrebbe confondere i motori di ricerca, specialmente se la tua pagina 404 non è consentita in robots.txt o se restituisce erroneamente una risposta di 200 OK invece di un vero codice di stato 404 ( "soft 404" ), causando potenzialmente la visualizzazione della tua pagina 404 nella ricerca risultati per termini di ricerca casuali.
Causa (una piccola quantità di) carico extra sui tuoi server, aumenta i tempi di risposta ai visitatori e potenzialmente rallenta i motori di ricerca che eseguono la scansione del tuo sito, poiché ogni richiesta di una pagina inesistente (o nascosta) ora comporta un round HTTP aggiuntivo- viaggio.
Non ha alcun vantaggio SEO, in quanto qualsiasi "collegamento succo" da pagine reindirizzate a una pagina 404 viene comunque perso.
(Naturalmente, quella situazione in cui si fa desidera utilizzare un redirect 301 invece di una risposta 404 è quando la pagina in realtà si è mosso, e si può reindirizzare il visitatore alla sua posizione corretta. Ma non è il caso discusso qui.)
Infine, vorrei fare eco al sentimento, espresso in molti commenti qui, che semplicemente "nascondere" le tue pagine di amministrazione in questo modo non è un sostituto adeguato per un'autenticazione basata su password corretta . Detto questo, se hai già un sistema di autenticazione sicuro impostato, nascondere le pagine può essere utile come livello aggiuntivo, anche se piuttosto debole, in un approccio di difesa in profondità .