web-dev-qa-db-fra.com

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

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 indiqué si une valeur de chaîne de requête est trouvée et définie correctement. Par exemple:

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


Le lien ci-dessus montrera le contenu de la page, mais rien d’autre que celui ci-dessous ne:

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


Je réfléchissais maintenant à ce qu'il fallait faire si les moteurs de recherche et/ou les utilisateurs non-administrateurs accouraient en quelque sorte sur ces pages cachées.

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

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


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

9
WPRookie82

Le code correct serait 401 non autorisé

Selon les spécifications HTTP

10.4.2 401 non autorisé

La demande nécessite une authentification de l'utilisateur. La réponse DOIT inclure un champ d'en-tête WWW-Authenticate (paragraphe 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 contient 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 que l'agent utilisateur a déjà tenté l'authentification au moins une fois, il DEVRAIT alors présenter à l'entité qui a été donnée dans la réponse, cette entité pouvant 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 l'exécuter. L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée. Si la méthode de la demande n'était pas HEAD et que le serveur souhaite rendre publique la raison pour laquelle la demande n'a pas été remplie, il DEVRAIT décrire le motif du refus dans l'entité. Si le serveur ne souhaite pas mettre cette information à la disposition du client, vous pouvez utiliser le code d'état 404 (Introuvable).

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

Dans tous les cas, les redirections 301 sont non appropriées, la ressource n'a pas été déplacée.

11
Jarrod Roberson

Je voudrais utiliser une balise noindex,nofollow,noarchive dans l'en-tête des pages que vous souhaitez sortir de la recherche.

J'ai trouvé que la balise noarchive tend à extraire rapidement les recherches, alors que la balise noindex peut l'empêcher d'entrer en recherche, mais si elle est déjà disponible, vous devez la vider. hors des résultats de recherche.

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

1
Andrew Martin

S'agissant d'une page destinée aux administrateurs, avec ou sans 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 indiquez à Google que la page a été déplacée, mais ensuite vers une page qui n'existe pas.

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

1
dm-guy

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

Le serveur a compris la demande, mais refuse de l'exécuter. L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée. Si la méthode de la demande n'était pas HEAD et que le serveur souhaite rendre publique la raison pour laquelle la demande n'a pas été remplie, il DEVRAIT décrire le motif du refus dans l'entité. Si le serveur ne souhaite pas mettre cette information à la disposition du client, vous pouvez utiliser le code d'état 404 (Introuvable).

(Bien que la définition de la réponse 403 indique que "l’autorisation n’aidera pas", l’OMI doit être comprise comme se référant plus particulièrement à l’authentification HTTP Basic/Digest , pour laquelle le code de statut 401 Unauthorized doit être utilisé à la place, puisque vous utilisez not et que vous utilisez l'une de ces méthodes d'authentification, 403 est le code d'état approprié dans votre cas.)


Cependant, l'utilisation d'un code d'état 403 révèle (ou du moins implique fortement) le fait que est une page avec cette URL, même si le serveur refuse de la diffuser. Comme il s’agit là d’une chose que vous voudrez peut-être dissimuler aux intrus potentiels, le standard HTTP/1.1 autorise explicitement le 404 introuvable code de statut à renvoyer à la place ( emphasis mien):

Le serveur n'a rien trouvé qui corresponde à l'URI de demande. Aucune indication n'est donnée quant à savoir si la condition est temporaire ou permanente. Le code d'état 410 (Gone) DEVRAIT être utilisé si le serveur sait, par le biais d'un mécanisme configurable en interne, qu'une ancienne ressource est indisponible de façon permanente et qu'elle 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 entendu, pour que cette dissimulation soit efficace, la page d'erreur 404 que vous renvoyez doit être identique à celle que vous renvoyez pour actual pages inexistantes. Sinon, il ne fera que tromper les assaillants les plus stupides et les plus occasionnels. (Si votre objectif est simplement de garder les pages en dehors 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 crois pas qu'une réponse 401 soit appropriée ici. Cela peut fonctionne dans la pratique, dans la mesure où la plupart des navigateurs et des moteurs de recherche le seront. traiter toute personne mal formée ou non reconnue 4xx code de réponse en série comme s'il s'agissait d'un 404, mais il n'est toujours pas valide selon les spécifications HTTP, et il n'y a aucune raison pratique de le préférer au-dessus de 403 ou 404.

En ce qui concerne l’utilisation d’une redirection 301 (ou 302) vers une page séparée "erreur 404", c’est un awful pratique diffusé par des tutoriels bâclés mod_rewrite, et n’a absolument aucune fonctionnalité d’échange par rapport à renvoyer une réponse 404 directement:

  • Cela crée de la confusion aux visiteurs, car l'URL qu'ils étaient à essayer à 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 visible de what la page qu'ils essayaient de consulter était, et ne peut donc pas facilement tenter des stratégies de récupération telles que la correction de fautes de frappe évidentes dans l'URL ou le copier-coller dans Google ou la Wayback Machine.

  • Cela peut confondre les moteurs de recherche, surtout si votre page 404 n'est pas autorisée dans robots.txt , ou si elle renvoie incorrectement une réponse 200 OK au lieu d'un véritable code d'état 404 ( "soft 404" ), ce qui pourrait entraîner l’apparition de votre page 404 dans les résultats de recherche de termes de recherche aléatoires.

  • Cela entraîne (légèrement) une charge supplémentaire sur vos serveurs, augmente le temps de réponse des visiteurs et, éventuellement, ralentit l'exploration de votre site par les moteurs de recherche. En effet, chaque requête pour une page inexistante (ou cachée) implique désormais un tour supplémentaire HTTP. voyage.

  • Il n’a aucun avantage en termes de référencement, car tout "jus de liens" provenant de pages redirigées vers une page 404 est perdu.

(Bien sûr, la seule situation où do == veut utiliser une redirection 301 au lieu d'une réponse 404 est le moment où la page a 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, selon lequel "cacher" vos pages d'administration comme ceci est not un substitut adéquat de mot de passe correct authentification à base de données . Cela dit, if vous avez déjà un système d’authentification sécurisé, masquer les pages peut être utile en tant que couche supplémentaire, bien que relativement faible, dans un défense). en profondeur approche.

1
Ilmari Karonen