301 redirecionar para a página 404 ou definir o código de status para 404 e permanecer na página?

9

Eu tenho um número de páginas no meu site que somente administradores podem acessar e acessar a essas páginas, se um valor de string de consulta for encontrado e definido corretamente. Por exemplo:

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


O link acima mostra o conteúdo da página, mas qualquer outra coisa como a abaixo não:

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


Agora, eu estava pensando no que fazer se os mecanismos de pesquisa e / ou usuários não administradores de alguma forma aterrissarem nessas páginas ocultas.

É claro que posso alterar o código de status da página para 404 ou redirecionar 301 para:

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


Qual é a melhor solução em relação ao Google e SEO?

WPRookie82
fonte
6
Eu consideraria a implementação da autenticação real, se as informações que você está tentando ocultar têm alguma importância. Além disso, um redirecionamento 301 indica semanticamente que o conteúdo foi movido, o que não é o caso aqui e, portanto, é uma resposta inadequada.
Você

Respostas:

11

O código correto seria 401 Não autorizado

Conforme as especificações HTTP

10.4.2 401 Não autorizado

A solicitação requer autenticação do usuário. A resposta DEVE incluir um campo de cabeçalho WWW-Authenticate (seção 14.47) contendo um desafio aplicável ao recurso solicitado. O cliente pode repetir o pedido com um campo de cabeçalho de autorização adequado (seção 14.8). Se a solicitação já incluía credenciais de autorização, a resposta 401 indica que a autorização foi recusada para essas credenciais. Se a resposta 401 contém o mesmo desafio que a resposta anterior, e o agente do usuário já tentou a autenticação pelo menos uma vez, então o usuário DEVE ser apresentada a entidade que foi dada na resposta, já que essa entidade pode incluir informações de diagnóstico relevantes. A autenticação de acesso HTTP é explicada em "Autenticação HTTP: Autenticação de Acesso Básico e Digest" [43].

ou alternativamente

10.4.4 403 Proibido

O servidor entendeu a solicitação, mas se recusa a atendê-la. A autorização não ajudará e a solicitação NÃO DEVE ser repetida. Se o método de solicitação não foi HEAD e o servidor deseja tornar público o motivo pelo qual a solicitação não foi atendida, DEVE descrever o motivo da recusa na entidade. Se o servidor não desejar disponibilizar essas informações ao cliente, o código de status 404 (Não encontrado) poderá ser usado.

Ambos são semanticamente mais corretos que 404. O recurso existe, portanto, 404não está correto. 401deve estar correto, mas você não está exigindo autenticação. Segurança pela obscuridade não é segurança. 403também está correto conforme a solicitação é entendida, o recurso existe, apenas se recusa a atender a solicitação. 404é apropriado se você não quiser revelar por que 403está acontecendo.

Em qualquer caso, os 301redirecionamentos não são apropriados, o recurso não foi movido.


fonte
2
Google não indexa e remove páginas que retornam 401/403 mensagens de status, uma pergunta semelhante foi perguntado algum tempo atrás , alternativamente, você pode sempre usar um simples noindex e bloco usando robots.txt
Simon Hayter
11
@ WPRookie82 Sobre como proteger a página mantendo em segredo - você está fazendo errado.
Cthulhu
4
segurança pela obscuridade não é segurança
11
O uso do 401 para métodos de autenticação diferentes de autenticação HTTP Basic ou Digest (ou outros esquemas de autenticação compatíveis com RFC2617) foi discutido aqui antes ; minha opinião na época, na qual ainda permaneço, é que pode funcionar na prática, mas não é realmente válido de acordo com a especificação HTTP, e que, em qualquer caso, seria preferível 403 ou mesmo 404.
Ilmari Karonen
11
Concordo com outros comentários que o 401 Unauthorized é inadequado de acordo com a especificação HTTP.
Stephen Ostermiller
1

Como esta é uma página para administradores, com ou sem o parâmetro "key", as páginas não podem e não devem ser indexadas. Portanto, a página da Web para não administrador pode enviar o código de status 404 e você pode deixar o mesmo URL intacto. Não redirecione, pois você diz ao Google que a página foi movida, mas depois para uma página que não existe.

É assim que o Google faz isso também. Veja o que acontece quando você acessa uma página fictícia: http://www.google.com/analytics/asdsas

dm-guy
fonte
http://www.example.com/404-errorExiste uma pequena correção no meu post acima, é uma espécie de página 404 global de todo o site, por isso não acabei redirecionando para uma página não existente.
WRookie82
@ WPRookie82: Para qualquer pessoa, exceto você e seu servidor, não há diferença entre uma página inexistente e uma página existente que retorna uma resposta 404.
Ilmari Karonen
1

O código de resposta HTTP semanticamente correto para essa situação seria 403 Proibido :

O servidor entendeu a solicitação, mas está se recusando a atendê-la. A autorização não ajudará e a solicitação NÃO DEVE ser repetida. Se o método de solicitação não foi HEAD e o servidor deseja tornar público o motivo pelo qual a solicitação não foi atendida, DEVE descrever o motivo da recusa na entidade. Se o servidor não desejar disponibilizar essas informações ao cliente, o código de status 404 (Não encontrado) poderá ser usado.

(Embora a definição da resposta 403 diga que "a autorização não ajudará", na IMO isso deve ser entendido como uma referência específica à autenticação HTTP Básica / Digest , para a qual o código de status 401 Não Autorizado deve ser usado. Como você não está usando qualquer um desses métodos de autenticação, 403 é o código de status apropriado no seu caso.)


No entanto, usando um código 403 estatuto revela (ou pelo menos implica fortemente) o fato de que não é uma página com essa URL, mesmo que o servidor se recusa a entregá-lo. Como isso é algo que você pode ocultar de possíveis invasores, o padrão HTTP / 1.1 permite explicitamente que o código de status 404 Não encontrado seja retornado ( ênfase minha):

O servidor não encontrou nada que corresponda ao Request-URI. Nenhuma indicação é dada sobre se a condição é temporária ou permanente. O código de status 410 (ido) DEVE ser usado se o servidor souber, através de algum mecanismo configurável internamente, que um recurso antigo está permanentemente indisponível e não possui endereço de encaminhamento. Esse código de status é comumente usado quando o servidor não deseja revelar exatamente por que a solicitação foi recusada ou quando nenhuma outra resposta é aplicável.

Obviamente, para tornar essa ocultação eficaz, a página de erro 404 que você retornar precisa parecer idêntica à que você retorna para páginas reais inexistentes. Caso contrário, apenas enganará os atacantes mais idiotas e casuais. (Se seu objetivo é apenas manter as páginas fora do índice do Google, uma resposta 403 também fará isso.)


E as outras respostas possíveis sugeridas na sua pergunta e as outras respostas?

Como observei anteriormente, não acredito que uma resposta 401 seja apropriada aqui. Ele pode funcionar na prática, na medida em que a maioria dos navegadores e os motores de busca irá tratar qualquer 4 malformado ou não reconhecida xx código de resposta série como se fosse um 404, mas ainda não é válido de acordo com o HTTP especificação, e não há nenhuma razão prática a preferi-la mais de 403 ou 404.

Quanto ao uso de um redirecionamento 301 (ou 302) para uma página separada "erro 404", essa é uma prática horrível , disseminada por tutoriais desleixados de mod_rewrite, e não possui recursos de resgate em comparação com o retorno direto de uma resposta 404:

  • É confuso para os visitantes, pois o URL que eles estavam tentando visitar é substituído pelo URL da página de erro. Portanto, eles veem uma mensagem dizendo que chegaram a uma página inexistente, mas não há nenhuma indicação facilmente visível do que a página estava tentando visitar e, portanto, não podem facilmente tentar estratégias de recuperação, como corrigir erros de digitação óbvios no URL, ou copie e cole no Google ou na Wayback Machine.

  • Isso pode confundir os mecanismos de pesquisa, especialmente se a sua página 404 não for permitida no robots.txt , ou se ela retornar incorretamente uma resposta 200 OK, em vez de um código de status 404 real ( "soft 404" ), potencialmente fazendo com que sua página 404 apareça na pesquisa resultados para termos de pesquisa aleatórios.

  • Isso causa (uma pequena quantidade de) carga extra em seus servidores, aumenta o tempo de resposta aos visitantes e potencialmente diminui a velocidade dos mecanismos de pesquisa que rastreiam seu site, pois toda solicitação de uma página inexistente (ou oculta) agora envolve um processo HTTP adicional- viagem.

  • Não possui benefício de SEO, pois qualquer "suco de link" de páginas redirecionadas para uma página 404 é perdido de qualquer maneira.

(Claro, a única situação em que você faz querer usar um redirecionamento 301 em vez de uma resposta 404 é quando a página realmente foi movido, e você pode redirecionar o visitante para sua localização correta. Mas esse não é o caso discutido aqui.)


Por fim, gostaria de ecoar o sentimento, expresso em muitos comentários aqui, de que apenas "ocultar" suas páginas de administração como essa não é um substituto adequado para a autenticação adequada por senha . Dito isto, se você já possui um sistema de autenticação seguro configurado, ocultar as páginas pode ser útil como uma camada extra, embora bastante fraca, em uma abordagem de defesa em profundidade .

Ilmari Karonen
fonte
Finalmente decidi optar pelo que você sugeriu na segunda parte. Quem chegar à página sem uma chave válida verá minha página 404 regular e, é claro, estou retornando o código de status 404 no processo.
WRookie82
1

Eu usaria uma noindex,nofollow,noarchivetag no cabeçalho das páginas que você deseja sair da pesquisa.

Descobri que a noarchivetag tende a tirar as coisas da pesquisa bem rápido, enquanto isso noindexpode impedi-la de entrar na pesquisa, mas se ela já estiver lá, você precisará liberá-la dos resultados da pesquisa.

Quanto à pergunta de acesso de administrador, os outros caras aqui já deram alguns conselhos sobre segurança que eu recomendaria conferir.

Andrew Martin
fonte