Rediriger 301 vers la page 404 ou définir le code d'état sur 404 et rester sur la page?

9

J'ai un certain nombre de pages sur mon site Web auxquelles seuls les administrateurs peuvent accéder et l'accès à ces pages est donné si une valeur de chaîne de requête est trouvée et correctement définie. Par exemple:

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


Le lien ci-dessus affichera le contenu de la page, mais rien d'autre tel que ci-dessous ne le fera:

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


Maintenant, je réfléchissais à ce qu'il fallait faire si les moteurs de recherche et / ou les utilisateurs non administrateurs atterrissaient d'une manière ou d'une autre sur ces pages cachées.

Je peux bien sûr changer le code d'état de la page en 404 ou bien rediriger 301 vers:

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


Quelle est la meilleure solution en ce qui concerne Google et le référencement?

WPRookie82
la source
6
J'envisagerais plutôt d'implémenter une authentification réelle, si les informations que vous essayez de cacher ont une quelconque importance. En dehors de cela, une redirection 301 indique sémantiquement que le contenu a bougé, ce qui n'est pas le cas ici et c'est donc une réponse inappropriée.
Vous

Réponses:

11

Le code correct serait 401 Non autorisé

Selon les spécifications HTTP

10.4.2 401 non autorisé

La demande nécessite une authentification utilisateur. La réponse DOIT inclure un champ d'en-tête WWW-Authenticate (section 14.47) contenant un défi applicable à la ressource demandée. Le client PEUT répéter la demande avec un champ d'en-tête d'autorisation approprié (section 14.8). Si la demande incluait déjà des informations d'identification d'autorisation, la réponse 401 indique que l'autorisation a été refusée pour ces informations d'identification. Si la réponse 401 contient le même défi que la réponse précédente, et l'agent utilisateur a déjà tenté l'authentification au moins une fois, alors l'utilisateur DEVRAIT être présenté l'entité qui a été donnée dans la réponse, car cette entité peut inclure des informations de diagnostic pertinentes. L'authentification d'accès HTTP est expliquée dans "Authentification HTTP: Authentification d'accès de base et Digest" [43].

Ou bien

10.4.4 403 Interdit

Le serveur a compris la demande, mais refuse de la satisfaire. L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée. Si la méthode de demande n'était pas HEAD et que le serveur souhaite rendre public pourquoi la demande n'a pas été satisfaite, il DEVRAIT décrire la raison du refus dans l'entité. Si le serveur ne souhaite pas mettre ces informations à la disposition du client, le code d'état 404 (Not Found) peut être utilisé à la place.

Ces deux éléments sont sémantiquement plus corrects que 404. La ressource existe donc 404n'est pas correcte. 401devrait être correct, mais vous n'avez pas besoin d'authentification. La sécurité par l'obscurité n'est pas la sécurité. 403est également correcte car la demande est comprise, la ressource existe, elle refuse simplement de répondre à la demande. 404est approprié si vous ne voulez pas révéler pourquoi cela 403se produit.

Dans tous les cas, les 301redirections ne sont pas appropriées, la ressource n'a pas bougé.


la source
2
Google n'indexe pas et supprime les pages renvoyant des messages d'état 401/403, une question similaire a été posée il y a quelque temps, vous pouvez toujours utiliser un simple noindex et bloquer à l'aide de robots.txt
Simon Hayter
1
@ WPRookie82 À propos de la protection de la page en la gardant secrète - vous vous trompez.
Cthulhu
4
la sécurité par obscurité n'est pas du tout une sécurité
1
L'utilisation de 401 pour des méthodes d'authentification autres que HTTP Basic ou Digest auth (ou d'autres schémas d'authentification compatibles RFC2617) a été discutée ici auparavant ; mon avis à l'époque, que je maintiens toujours, est que cela peut fonctionner dans la pratique, mais ce n'est pas vraiment valable selon la spécification HTTP, et qu'en tout cas, 403 ou même 404 serait préférable.
Ilmari Karonen
1
Je suis d'accord avec d'autres commentaires selon lesquels 401 Unauthorized est inapproprié selon la spécification HTTP.
Stephen Ostermiller
1

Puisqu'il s'agit d'une page pour les administrateurs, avec ou sans le paramètre "clé", les pages ne peuvent et ne doivent pas être indexées. Par conséquent, la page Web pour les non-administrateurs peut envoyer un code d'état 404 et vous pouvez laisser la même URL intacte. Ne redirigez pas, car vous dites à Google que la page a été déplacée, mais ensuite vers une page qui n'existe pas.

C'est également ainsi que Google procède. Découvrez ce qui se passe lorsque vous accédez à une page factice: http://www.google.com/analytics/asdsas

dm-guy
la source
Une petite correction à mon message ci-dessus http://www.example.com/404-errorexiste, c'est une sorte de page 404 globale de tout le site Web, donc je ne me redirige pas vers une page non existante.
WPRookie82
@ WPRookie82: En ce qui concerne quiconque sauf vous et votre serveur Web, il n'y a pas de différence entre une page inexistante et une page existante qui renvoie une réponse 404.
Ilmari Karonen
1

Le code de réponse HTTP sémantiquement correct pour cette situation serait 403 Interdit :

Le serveur a compris la demande, mais refuse de la satisfaire. L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée. Si la méthode de demande n'était pas HEAD et que le serveur souhaite rendre public pourquoi la demande n'a pas été satisfaite, il DEVRAIT décrire la raison du refus dans l'entité. Si le serveur ne souhaite pas mettre ces informations à la disposition du client, le code d'état 404 (Not Found) peut être utilisé à la place.

(Bien que la définition de la 403 réponse indique que « l' autorisation ne sera pas utile », l' OMI cela devrait être comprise comme faisant référence spécifiquement à l' authentification HTTP de base / Digest , pour lesquels le code d'état 401 non autorisé doit être utilisé à la place. Puisque vous ne l' aide l'une de ces méthodes d'authentification, 403 est le code d'état approprié dans votre cas.)


Cependant, en utilisant un code d'état 403 révèle (ou au moins implique fortement) le fait qu'il y est une page avec cette URL, même si le serveur refuse de le livrer. Comme c'est quelque chose que vous voudrez peut-être cacher aux intrus potentiels, la norme HTTP / 1.1 autorise explicitement le code d'état 404 Not Found à retourner à la place (c'est moi qui souligne ):

Le serveur n'a rien trouvé correspondant à l'URI de la demande. Aucune indication n'est donnée quant à savoir si la condition est temporaire ou permanente. Le code d'état 410 (disparu) DEVRAIT être utilisé si le serveur sait, par le biais d'un mécanisme configurable en interne, qu'une ancienne ressource est indisponible en permanence et n'a pas d'adresse de transfert. Ce code d'état est couramment utilisé lorsque le serveur ne souhaite pas révéler exactement pourquoi la demande a été refusée, ou lorsqu'aucune autre réponse n'est applicable.

Bien sûr, pour que cette dissimulation soit efficace, la page d'erreur 404 que vous renvoyez doit apparaître identique à celle que vous renvoyez pour les pages inexistantes réelles . Sinon, cela ne fera que tromper les attaquants les plus stupides et les plus occasionnels. (Si votre objectif est simplement de garder les pages hors de l'index de Google, une réponse 403 le fera tout aussi bien.)


Qu'en est-il des autres réponses possibles suggérées dans votre question et des autres réponses?

Comme je l'ai indiqué précédemment, je ne pense pas qu'une réponse 401 soit appropriée ici. Il peut fonctionner dans la pratique, dans la mesure où la plupart des navigateurs et des moteurs de recherche traitera tout 4 malformé ou non reconnu xx code de réponse de la série comme si elle était un 404, mais il est toujours pas valide selon la spécification HTTP, et il n'y a aucune raison pratique de préférer plus de 403 ou 404.

Quant à l'utilisation d'une redirection 301 (ou 302) vers une page "404 error" distincte, c'est une pratique affreuse répandue par des didacticiels bâclés mod_rewrite, et n'a absolument aucune fonctionnalité de rachat par rapport au retour direct d'une réponse 404:

  • C'est déroutant pour les visiteurs, car l'URL qu'ils essayaient de visiter est remplacée par l'URL de la page d'erreur. Ainsi, ils voient un message indiquant qu'ils ont atteint une page inexistante, mais aucune indication facilement visible de ce qu'était la page qu'ils essayaient de visiter, et ne peuvent donc pas facilement essayer de stratégies de récupération comme la correction de fautes de frappe évidentes dans l'URL, ou copiez-collez-le dans Google ou dans Wayback Machine.

  • Cela peut confondre les moteurs de recherche, surtout si votre page 404 est interdite dans robots.txt , ou si elle renvoie de manière incorrecte une réponse 200 OK au lieu d'un véritable code d'état 404 ( "soft 404" ), ce qui pourrait faire apparaître votre page 404 dans la recherche résultats pour des termes de recherche aléatoires.

  • Il provoque (une petite quantité) de charge supplémentaire sur vos serveurs, augmente le temps de réponse aux visiteurs et ralentit potentiellement les moteurs de recherche explorant votre site, car chaque demande de page inexistante (ou cachée) implique désormais une ronde HTTP supplémentaire- voyage.

  • Il n'a aucun avantage SEO, car tout "jus de lien" des pages redirigées vers une page 404 est de toute façon perdu.

(Bien sûr, une situation où vous ne souhaitez utiliser une redirection 301 au lieu d'une réponse 404 est lorsque la page en fait est déplacé, et vous pouvez rediriger le visiteur vers son emplacement correct. Mais ce n'est pas le cas discuté ici.)


Enfin, je voudrais faire écho au sentiment, exprimé dans de nombreux commentaires ici, que le simple fait de "masquer" vos pages d'administration comme celle-ci n'est pas un substitut adéquat à une authentification par mot de passe appropriée . Cela dit, si vous disposez déjà d'un système d'authentification sécurisé, masquer les pages peut être utile en tant que couche supplémentaire, quoique assez faible, dans une approche de défense en profondeur .

Ilmari Karonen
la source
J'ai finalement décidé d'opter pour ce que vous proposiez dans la deuxième partie. Quiconque atterrit sur la page sans clé valide verra ma page 404 normale et je renvoie bien sûr le code d'état 404 dans le processus.
WPRookie82
1

J'utiliserais une noindex,nofollow,noarchivebalise en tête des pages que vous souhaitez retirer de la recherche.

J'ai trouvé que la noarchivebalise a tendance à sortir les choses de la recherche assez rapidement, alors que cela noindexpeut l'empêcher de se lancer dans la recherche, mais si elle est déjà là, alors vous devez la vider des résultats de recherche.

En ce qui concerne la question de l'accès administrateur, les autres gars ici ont déjà donné quelques conseils sur la sécurité que je recommanderais de vérifier.

Andrew Martin
la source