¿301 redirige a la página 404 o establece el código de estado en 404 y permanece en la página?

9

Tengo una serie de páginas en mi sitio web a las que solo los administradores pueden acceder y el acceso a estas páginas se proporciona si se encuentra un valor de cadena de consulta si se encuentra y se establece correctamente. Por ejemplo:

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


El enlace anterior mostrará el contenido de la página, pero cualquier otra cosa como la siguiente no:

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


Ahora estaba pensando qué hacer si los motores de búsqueda y / o usuarios que no son administradores de alguna manera llegan a estas páginas ocultas.

Por supuesto, puedo cambiar el código de estado de la página a 404 o, si no, 301 redirigir a:

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


¿Cuál es la mejor solución con respecto a Google y SEO?

WPRookie82
fuente
66
Consideraría implementar la autenticación real en su lugar, si la información que está tratando de ocultar tiene alguna importancia. Aparte de eso, una redirección 301 indica semánticamente que el contenido se ha movido, lo cual no es el caso aquí y, por lo tanto, es una respuesta inapropiada.
Usted

Respuestas:

11

El código correcto sería 401 No autorizado

Según las especificaciones HTTP

10.4.2 401 No autorizado

La solicitud requiere autenticación de usuario. La respuesta DEBE incluir un campo de encabezado WWW-Authenticate (sección 14.47) que contenga un desafío aplicable al recurso solicitado. El cliente PUEDE repetir la solicitud con un campo de encabezado de autorización adecuado (sección 14.8). Si la solicitud ya incluía credenciales de autorización, la respuesta 401 indica que se ha rechazado la autorización para esas credenciales. Si la respuesta 401 contiene el mismo desafío que la respuesta anterior, y el agente de usuario ya ha intentado la autenticación al menos una vez, entonces el usuario DEBE presentar la entidad que se le dio en la respuesta, ya que esa entidad podría incluir información de diagnóstico relevante. La autenticación de acceso HTTP se explica en "Autenticación HTTP: Autenticación de acceso básica y resumida" [43].

o alternativamente

10.4.4 403 Prohibido

El servidor entendió la solicitud, pero se niega a cumplirla. La autorización no ayudará y la solicitud NO DEBE repetirse. Si el método de solicitud no era HEAD y el servidor desea hacer público el motivo por el cual la solicitud no se ha cumplido, DEBERÍA describir el motivo del rechazo en la entidad. Si el servidor no desea que esta información esté disponible para el cliente, se puede usar el código de estado 404 (No encontrado).

Ambos son semánticamente más correctos que 404. El recurso existe, así que 404no es correcto. 401debe ser correcto, pero no necesita autenticación. La seguridad por oscuridad no es seguridad. 403también es correcto a medida que se entiende la solicitud, el recurso existe, solo se niega a atender la solicitud. 404es apropiado si no quieres revelar por qué 403está sucediendo.

En cualquier caso, las 301redirecciones no son apropiadas, el recurso no se ha movido.


fuente
2
Google no indexa y elimina las páginas que vuelven 401/403 mensajes de estado, una pregunta similar se le pidió un tiempo atrás , alternativamente, siempre se puede utilizar un simple noindex y bloque usando robots.txt
Simon Hayter
1
@ WPRookie82 Acerca de proteger la página manteniéndola en secreto, lo estás haciendo mal.
Cthulhu
44
seguridad por oscuridad no es seguridad en absoluto
1
El uso de 401 para métodos de autenticación que no sean HTTP Basic o Digest auth (u otros esquemas de autenticación compatibles con RFC2617) se ha discutido aquí anteriormente ; mi opinión en ese momento, que todavía mantengo, es que puede funcionar en la práctica, pero no es realmente válida de acuerdo con la especificación HTTP, y que en cualquier caso, sería preferible 403 o incluso 404.
Ilmari Karonen
1
Estoy de acuerdo con otros comentarios en que 401 no autorizado es inapropiado de acuerdo con la especificación HTTP.
Stephen Ostermiller
1

Dado que esta es una página para administradores, con o sin el parámetro "clave", las páginas no pueden ni deben indexarse. Por lo tanto, la página web para usuarios que no son administradores puede enviar un código de estado 404 y puede dejar la misma URL intacta. No redirija, ya que le dice a Google que la página se ha movido, pero luego a una página que no existe.

Así es como Google lo hace también. Vea lo que sucede cuando va a una página ficticia: http://www.google.com/analytics/asdsas

dm-guy
fuente
http://www.example.com/404-errorExiste una pequeña corrección a mi publicación anterior, es una especie de página 404 global de todo el sitio web, por lo que no estaría redirigiendo a una página que no existe.
WPRookie82
@ WPRookie82: En lo que respecta a todos, excepto a usted y a su servidor web, no hay diferencia entre una página inexistente y una página existente que devuelve una respuesta 404.
Ilmari Karonen
1

El código de respuesta HTTP semánticamente correcto para esta situación sería 403 Prohibido :

El servidor entendió la solicitud, pero se niega a cumplirla. La autorización no ayudará y la solicitud NO DEBE repetirse. Si el método de solicitud no era HEAD y el servidor desea hacer público el motivo por el cual la solicitud no se ha cumplido, DEBERÍA describir el motivo del rechazo en la entidad. Si el servidor no desea que esta información esté disponible para el cliente, se puede usar el código de estado 404 (No encontrado).

(Aunque la definición de la respuesta 403 dice que "la autorización no ayudará", en mi opinión, esto debe entenderse que se refiere específicamente a la autenticación HTTP Basic / Digest , para lo cual se debe usar el código de estado 401 No autorizado en su lugar. Ya que no está usando cualquiera de esos métodos de autenticación, 403 es el código de estado apropiado en su caso).


Sin embargo, el uso de un código de estado 403 revela (o al menos fuertemente implica) el hecho de que no es una página con URL que, a pesar de que el servidor se niega a entregarlo. Como esto es algo que es posible que desee ocultar a posibles intrusos, el estándar HTTP / 1.1 permite explícitamente que se devuelva el código de estado 404 No encontrado ( énfasis mío):

El servidor no ha encontrado nada que coincida con el URI de solicitud. No se indica si la condición es temporal o permanente. El código de estado 410 (Gone) DEBE usarse si el servidor sabe, a través de algún mecanismo internamente configurable, que un recurso antiguo no está disponible permanentemente y no tiene dirección de reenvío. Este código de estado se usa comúnmente cuando el servidor no desea revelar exactamente por qué se rechazó la solicitud o cuando no se aplica ninguna otra respuesta.

Por supuesto, para que esta ocultación sea efectiva, la página de error 404 que devuelva debe ser idéntica a la que devuelve para las páginas inexistentes reales . De lo contrario, solo engañará a los atacantes más tontos y casuales. (Si su objetivo es mantener las páginas fuera del índice de Google, una respuesta 403 también lo hará).


¿Qué pasa con las otras posibles respuestas sugeridas en su pregunta y las otras respuestas?

Como señalé anteriormente, no creo que una respuesta 401 sea apropiada aquí. Se puede trabajar en la práctica, en la medida en la mayoría de los navegadores y motores de búsqueda tratará cualquier malformación o no reconocida 4 xx código de respuesta serie como si se tratara de un 404, pero todavía no es válida de acuerdo con los protocolos HTTP especificación, y no hay ninguna razón práctica para preferirlo más de 403 o 404.

En cuanto al uso de una redirección 301 (o 302) a una página separada de "error 404", esa es una práctica horrible difundida por tutoriales mod_rewrite descuidados, y no tiene absolutamente ninguna función de canje en comparación con devolver una respuesta 404 directamente:

  • Es confuso para los visitantes, ya que la URL que intentaban visitar se reemplaza por la URL de la página de error. Por lo tanto, ven un mensaje que dice que han llegado a una página inexistente, pero no hay una indicación fácilmente visible de cuál era la página que intentaban visitar, por lo que no pueden intentar fácilmente ninguna estrategia de recuperación como corregir cualquier error obvio en la URL, o copiarlo y pegarlo en Google o en la Máquina Wayback.

  • Puede confundir a los motores de búsqueda, especialmente si su página 404 no está permitida en robots.txt , o si devuelve incorrectamente una respuesta 200 OK en lugar de un código de estado 404 real ( "404 suave" ), lo que podría hacer que su página 404 aparezca en la búsqueda resultados para términos de búsqueda aleatorios.

  • Causa (una pequeña cantidad) de carga adicional en sus servidores, aumenta el tiempo de respuesta a los visitantes y posiblemente ralentiza los motores de búsqueda que rastrean su sitio, ya que cada solicitud de una página inexistente (u oculta) ahora implica una ronda HTTP adicional. viaje.

  • No tiene ningún beneficio de SEO, ya que cualquier "enlace de jugo" de las páginas redirigidas a una página 404 se pierde de todos modos.

(Por supuesto, la situación en la que lo hace quiere utilizar un redireccionamiento 301 en lugar de una respuesta 404 es cuando la página en realidad se ha movido, y se puede redirigir al visitante a su ubicación correcta. Pero eso no es el caso discutido aquí.)


Finalmente, me gustaría hacer eco del sentimiento, expresado en muchos comentarios aquí, de que simplemente "ocultar" sus páginas de administrador de esta manera no es un sustituto adecuado para la autenticación adecuada basada en contraseña . Dicho esto, si ya tiene un sistema de autenticación seguro configurado, ocultar las páginas puede ser útil como una capa adicional, aunque sea bastante débil, en un enfoque de defensa en profundidad .

Ilmari Karonen
fuente
Finalmente decidí optar por lo que sugirió en la segunda parte. Quien llegue a la página sin una clave válida verá mi página 404 normal y, por supuesto, estoy devolviendo el código de estado 404 en el proceso.
WPRookie82
1

Yo usaría una noindex,nofollow,noarchiveetiqueta en el encabezado de las páginas que desea salir de la búsqueda.

Descubrí que la noarchiveetiqueta tiende a sacar las cosas de la búsqueda bastante rápido, mientras que noindexpuede impedir que entre en la búsqueda, pero si ya está disponible, entonces debe eliminarla de los resultados de búsqueda.

En cuanto a la pregunta de acceso de administrador, los otros chicos aquí ya han dado algunos consejos sobre seguridad que recomendaría consultar.

Andrew Martin
fuente