301 reindirizzare alla pagina 404 o impostare il codice di stato su 404 e rimanere nella pagina?


9

Ho un numero di pagine sul mio sito Web che solo gli amministratori possono accedere e accedere a queste pagine se viene fornito un valore di querystring se trovato e impostato correttamente. Per esempio:

http://www.mydomain.com/show-daily-statistics?key=abc


Il link sopra mostrerà il contenuto della pagina ma qualsiasi altra cosa come quella sotto non lo farà:

http://www.mydomain.com/show-daily-statistics


Ora stavo pensando a cosa fare se i motori di ricerca e / o gli utenti non amministratori arrivano in qualche modo su queste pagine nascoste.

Ovviamente posso cambiare il codice di stato della pagina in 404 oppure 301 reindirizzare a:

http://www.mydomain.com/404-error


Qual è la soluzione migliore rispetto a Google e SEO?


6
Considererei invece l'implementazione dell'autenticazione effettiva, se le informazioni che stai cercando di nascondere hanno qualche importanza. A parte questo, un reindirizzamento 301 indica semanticamente che il contenuto è stato spostato, il che non è il caso qui e quindi è una risposta inappropriata.
Si

Risposte:


11

Il codice corretto sarebbe 401 Non autorizzato

Secondo le specifiche HTTP

10.4.2 401 Non autorizzato

La richiesta richiede l'autenticazione dell'utente. La risposta DEVE includere un campo di intestazione WWW-Authenticate (sezione 14.47) contenente una sfida applicabile alla risorsa richiesta. Il cliente può ripetere la richiesta con un campo di intestazione Autorizzazione adeguato (sezione 14.8). Se la richiesta includeva già le credenziali di autorizzazione, la risposta 401 indica che l'autorizzazione è stata rifiutata per tali credenziali. Se la risposta 401 contiene la stessa sfida della risposta precedente e l'agente utente ha già tentato l'autenticazione almeno una volta, all'utente DOVREBBE essere presentata l'entità che è stata data nella risposta, poiché tale entità potrebbe includere informazioni diagnostiche pertinenti. L'autenticazione dell'accesso HTTP è spiegata in "Autenticazione HTTP: autenticazione di accesso di base e digest" [43].

o in alternativa

10.4.4 403 Proibito

Il server ha compreso la richiesta, ma si rifiuta di soddisfarla. L'autorizzazione non aiuterà 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).

Entrambi sono semanticamente più corretti di 404. La risorsa esiste quindi 404non è corretta. 401dovrebbe essere corretto, ma non è richiesta l'autenticazione. La sicurezza per oscurità non è sicurezza. 403è anche corretto quando viene compresa la richiesta, la risorsa esiste, si rifiuta solo di soddisfare la richiesta. 404è appropriato se non vuoi rivelare perché 403sta accadendo.

In ogni caso i 301reindirizzamenti non sono appropriati, la risorsa non è stata spostata.


2
Google non indicizza e rimuove le pagine che restituiscono i messaggi di stato 401/403, una domanda simile è stata posta qualche tempo fa in alternativa in alternativa potresti sempre utilizzare un semplice noindex e bloccare utilizzando robots.txt
Simon Hayter

1
@ WPRookie82 Informazioni sulla protezione della pagina mantenendola segreta: stai sbagliando.
Cthulhu,

4
la sicurezza per oscurità non è affatto sicurezza

1
L'uso di 401 per metodi di autenticazione diversi da HTTP Basic o Digest auth (o altri schemi di autorizzazione compatibili con RFC2617) è stato discusso qui in precedenza ; la mia opinione al momento, a cui rimango ancora, è che potrebbe funzionare in pratica, ma non è realmente valida secondo le specifiche HTTP, e che in ogni caso sarebbe preferibile 403 o persino 404.
Ilmari Karonen,

1
Concordo con altri commenti sul fatto che 401 non autorizzato è inappropriato in base alle specifiche HTTP.
Stephen Ostermiller

1

Poiché questa è una pagina per gli amministratori, con o senza il parametro "chiave", le pagine non possono e non devono essere indicizzate. Pertanto la pagina Web per i non amministratori può inviare il codice di stato 404 ed è possibile lasciare intatto lo stesso URL. Non reindirizzare, poiché dici a Google che la pagina è stata spostata, ma poi a una pagina che non esiste.

Anche Google lo fa. Guarda cosa succede quando vai su una pagina fittizia: http://www.google.com/analytics/asdsas


http://www.example.com/404-errorEsiste una piccola correzione al mio post sopra , è una sorta di pagina 404 globale dell'intero sito Web, quindi non mi reindirizzerò a una pagina non esistente.
WPRookie82,

@ WPRookie82: per quanto riguarda chiunque tranne te e il tuo server web, non c'è differenza tra una pagina inesistente e una pagina esistente che restituisce una risposta 404.
Ilmari Karonen,

1

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à .


Alla fine ho deciso di optare per quello che hai suggerito nella seconda parte. Chiunque atterra sulla pagina senza una chiave valida vedrà la mia normale pagina 404 e ovviamente sto restituendo il codice di stato 404 nel processo.
WPRookie82,

1

Vorrei utilizzare un noindex,nofollow,noarchivetag nella parte superiore delle pagine che si desidera uscire dalla ricerca.

Ho scoperto che il noarchivetag tende a far uscire le cose dalla ricerca abbastanza rapidamente, mentre ciò noindexpotrebbe impedirgli di entrare nella ricerca, ma se è già là fuori, allora è necessario eliminarlo dai risultati di ricerca.

Per quanto riguarda la domanda di accesso all'amministratore, gli altri ragazzi qui hanno già dato alcuni consigli sulla sicurezza che consiglierei di provare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.