301 auf 404 Seite umleiten oder Statuscode auf 404 setzen und auf Seite bleiben?

9

Ich habe eine Reihe von Seiten auf meiner Website, auf die nur Administratoren zugreifen können, und der Zugriff auf diese Seiten wird angegeben, wenn ein Querystring-Wert gefunden und korrekt festgelegt wurde. Zum Beispiel:

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


Der obige Link zeigt den Inhalt der Seite an, alles andere wie der folgende jedoch nicht:

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


Jetzt überlegte ich, was ich tun sollte, wenn Suchmaschinen und / oder Benutzer ohne Administratorrechte irgendwie auf diesen versteckten Seiten landen.

Ich kann natürlich entweder den Statuscode der Seite in 404 ändern oder 301 umleiten zu:

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


Was ist die beste Lösung in Bezug auf Google und SEO?

WPRookie82
quelle
6
Ich würde stattdessen in Betracht ziehen, die eigentliche Authentifizierung zu implementieren, wenn die Informationen, die Sie verbergen möchten, überhaupt eine Bedeutung haben. Abgesehen davon zeigt eine 301-Umleitung semantisch an, dass sich der Inhalt verschoben hat, was hier nicht der Fall ist, und daher handelt es sich um eine unangemessene Antwort.
Sie

Antworten:

11

Der richtige Code wäre 401 Nicht autorisiert

Gemäß den HTTP-Spezifikationen

10.4.2 401 Nicht autorisiert

Die Anforderung erfordert eine Benutzerauthentifizierung. Die Antwort MUSS ein WWW-Authenticate-Headerfeld (Abschnitt 14.47) enthalten, das eine für die angeforderte Ressource geltende Herausforderung enthält. Der Client kann die Anforderung mit einem geeigneten Feld für den Autorisierungsheader wiederholen (Abschnitt 14.8). Wenn die Anforderung bereits Berechtigungsnachweise enthielt, zeigt die Antwort 401 an, dass die Berechtigung für diese Anmeldeinformationen verweigert wurde. Wenn die 401-Antwort dieselbe Herausforderung wie die vorherige Antwort enthält und der Benutzeragent bereits mindestens einmal versucht hat, sich zu authentifizieren, MUSS dem Benutzer die Entität angezeigt werden, die in der Antwort angegeben wurde, da diese Entität möglicherweise relevante Diagnoseinformationen enthält. Die HTTP-Zugriffsauthentifizierung wird unter "HTTP-Authentifizierung: Standard- und Digest-Zugriffsauthentifizierung" [43] erläutert.

oder alternativ

10.4.4 403 Verboten

Der Server hat die Anfrage verstanden, weigert sich jedoch, sie zu erfüllen. Die Autorisierung hilft nicht und die Anfrage sollte nicht wiederholt werden. Wenn die Anforderungsmethode nicht HEAD war und der Server veröffentlichen möchte, warum die Anforderung nicht erfüllt wurde, sollte der Grund für die Ablehnung in der Entität beschrieben werden. Wenn der Server diese Informationen dem Client nicht zur Verfügung stellen möchte, kann stattdessen der Statuscode 404 (Nicht gefunden) verwendet werden.

Beide sind semantisch korrekter als 404. Die Ressource ist vorhanden, daher ist sie 404nicht korrekt. 401sollte korrekt sein, aber Sie benötigen keine Authentifizierung. Sicherheit durch Dunkelheit ist keine Sicherheit. 403ist auch korrekt, da die Anfrage verstanden wird, die Ressource existiert und sich nur weigert, die Anfrage zu bearbeiten. 404ist angemessen, wenn Sie nicht verraten möchten, warum dies 403geschieht.

In jedem Fall sind 301Weiterleitungen nicht angemessen, die Ressource wurde nicht verschoben.


quelle
2
Google nicht indexiert und entfernt Seiten 401/403 Statusmeldungen Rückkehr, eine ähnliche Frage eine Weile zurück , gefragt wurde , alternativ Sie immer konnte ein einfaches Noindex verwenden und Block mit robots.txt
Simon Hayter
1
@ WPRookie82 Über den Schutz der Seite durch Geheimhaltung - Sie machen es falsch.
Cthulhu
4
Sicherheit durch Dunkelheit ist überhaupt keine Sicherheit
1
Die Verwendung von 401 für andere Authentifizierungsmethoden als HTTP Basic oder Digest auth (oder andere RFC2617-kompatible Authentifizierungsschemata) wurde hier bereits erläutert . Meine damalige Meinung, zu der ich immer noch stehe, ist, dass es in der Praxis funktionieren mag , aber gemäß der HTTP-Spezifikation nicht wirklich gültig ist und dass auf jeden Fall 403 oder sogar 404 vorzuziehen wären.
Ilmari Karonen
1
Ich stimme anderen Kommentaren zu, dass 401 Unauthorized gemäß der HTTP-Spezifikation unangemessen ist.
Stephen Ostermiller
1

Da dies eine Seite für Administratoren mit oder ohne den Parameter "key" ist, können und sollten die Seiten nicht indiziert werden. Daher kann die Webseite für Nicht-Administratoren den 404-Statuscode senden, und Sie können dieselbe URL intakt lassen. Leiten Sie nicht weiter, da Sie Google mitteilen, dass die Seite verschoben wurde, sondern auf eine Seite, die nicht vorhanden ist.

So macht es auch Google. Sehen Sie, was passiert, wenn Sie zu einer Dummy-Seite gehen: http://www.google.com/analytics/asdsas

dm-guy
quelle
Es gibt eine kleine Korrektur für meinen obigen Beitrag: http://www.example.com/404-errorEs handelt sich um eine Art globale 404-Seite der gesamten Website, sodass ich nicht auf eine nicht existierende Seite umleiten wollte.
WPRookie82
@ WPRookie82: Für alle außer Ihnen und Ihrem Webserver gibt es keinen Unterschied zwischen einer nicht vorhandenen Seite und einer vorhandenen Seite, die eine 404-Antwort zurückgibt.
Ilmari Karonen
1

Der semantisch korrekte HTTP-Antwortcode für diese Situation wäre 403 Verboten :

Der Server hat die Anfrage verstanden, weigert sich jedoch, sie zu erfüllen. Die Autorisierung hilft nicht und die Anfrage sollte nicht wiederholt werden. Wenn die Anforderungsmethode nicht HEAD war und der Server veröffentlichen möchte, warum die Anforderung nicht erfüllt wurde, sollte der Grund für die Ablehnung in der Entität beschrieben werden. Wenn der Server diese Informationen dem Client nicht zur Verfügung stellen möchte, kann stattdessen der Statuscode 404 (Nicht gefunden) verwendet werden.

(Obwohl die Definition der 403-Antwort besagt, dass "Autorisierung nicht hilft", sollte IMO dies so verstehen, dass es sich speziell auf die HTTP Basic / Digest-Authentifizierung bezieht , für die stattdessen der Statuscode 401 Unauthorized verwendet werden sollte. Da Sie nicht verwenden Bei jeder dieser Authentifizierungsmethoden ist 403 in Ihrem Fall der entsprechende Statuscode.)


Allerdings zeigt einen 403 - Statuscode (oder zumindest impliziert stark) die Tatsache , dass es ist eine Seite mit dieser URL, obwohl der Server um es zu liefern verweigert. Da dies etwas ist, das Sie möglicherweise vor potenziellen Eindringlingen verbergen möchten, erlaubt der HTTP / 1.1-Standard explizit die Rückgabe des Statuscodes 404 Not Found stattdessen ( Hervorhebung von mir):

Der Server hat nichts gefunden, das mit dem Request-URI übereinstimmt. Es wird kein Hinweis darauf gegeben, ob der Zustand vorübergehend oder dauerhaft ist. Der 410 (Gone) -Statuscode sollte verwendet werden, wenn der Server über einen intern konfigurierbaren Mechanismus weiß, dass eine alte Ressource dauerhaft nicht verfügbar ist und keine Weiterleitungsadresse hat. Dieser Statuscode wird häufig verwendet, wenn der Server nicht genau angeben möchte, warum die Anforderung abgelehnt wurde, oder wenn keine andere Antwort zutreffend ist.

Um eine solche Verschleierung überhaupt wirksam zu machen, muss die von Ihnen zurückgegebene 404-Fehlerseite natürlich mit der identisch sein, die Sie für tatsächlich nicht vorhandene Seiten zurückgeben. Andernfalls täuscht es nur die dümmsten und gelegentlichsten Angreifer. (Wenn Ihr Ziel nur darin besteht, die Seiten aus dem Google-Index herauszuhalten, funktioniert eine 403-Antwort genauso gut.)


Was ist mit den anderen möglichen Antworten, die in Ihrer Frage vorgeschlagen wurden, und den anderen Antworten?

Wie ich bereits erwähnt habe, glaube ich nicht, dass eine 401-Antwort hier angemessen ist. Es kann in der Praxis, soweit die meisten Browsern und Suchmaschinen wird jede fehlerhafte oder unbekannte 4 behandeln xx Serie Antwortcode , als ob es sich um eine 404 waren, aber es ist noch nicht gültig gemäß der HTTP - Spezifikation, und es gibt keinen praktischen Grund , es zu bevorzugen über 403 oder 404.

Die Verwendung einer 301- (oder 302-) Umleitung auf eine separate "404-Fehler" -Seite ist eine schreckliche Praxis, die durch schlampige mod_rewrite-Tutorials verbreitet wird, und hat absolut keine einlösenden Funktionen im Vergleich zur direkten Rückgabe einer 404-Antwort:

  • Es ist verwirrend für die Besucher, wie die URL sie versuchen zu Besuch durch die URL der Fehlerseite ersetzt wird. Daher wird eine Meldung angezeigt, die besagt, dass sie eine nicht vorhandene Seite erreicht haben, aber keinen leicht sichtbaren Hinweis darauf, welche Seite sie besuchen wollten. Daher können sie keine Wiederherstellungsstrategien wie das Beheben offensichtlicher Tippfehler in der URL versuchen. oder kopieren und einfügen in Google oder die Wayback-Maschine.

  • Dies kann Suchmaschinen verwirren, insbesondere wenn Ihre 404-Seite in robots.txt nicht zulässig ist oder wenn fälschlicherweise eine 200-OK-Antwort anstelle eines echten 404-Statuscodes ( "soft 404" ) zurückgegeben wird, was möglicherweise dazu führt, dass Ihre 404-Seite in der Suche angezeigt wird Ergebnisse für zufällige Suchbegriffe.

  • Dies führt zu einer (zusätzlichen) zusätzlichen Belastung Ihrer Server, erhöht die Antwortzeit für Besucher und verlangsamt möglicherweise das Crawlen Ihrer Website durch Suchmaschinen, da jede Anforderung einer nicht vorhandenen (oder verborgenen) Seite jetzt eine zusätzliche HTTP-Runde umfasst. Ausflug.

  • Es hat keinen SEO-Vorteil, da jeglicher "Link-Saft" von Seiten, die auf eine 404-Seite umgeleitet wurden, sowieso verloren geht.

(Natürlich ist die eine Situation , wo Sie tun wollen stattdessen eine 301 - Weiterleitung auf die Verwendung eines 404 - Antwort, wenn die Seite tatsächlich hat bewegt, und Sie können die Besucher an die richtige Position umgeleitet werden . Aber das ist hier nicht der Fall diskutiert.)


Abschließend möchte ich das in vielen Kommentaren zum Ausdruck gebrachte Gefühl wiederholen, dass das bloße "Verstecken" Ihrer Administrationsseiten auf diese Weise kein angemessener Ersatz für eine ordnungsgemäße kennwortbasierte Authentifizierung ist . Das sei gesagt, wenn Sie bereits ein sicheres Authentifizierungssystem eingerichtet haben, versteckt die Seiten als eine zusätzliche Schicht, wenn auch eine ziemlich schwachen nützlich sein können, in einem gestaffelten Sicherheitsansatz.

Ilmari Karonen
quelle
Ich habe mich schließlich für das entschieden, was Sie im zweiten Teil vorgeschlagen haben. Wer ohne gültigen Schlüssel auf der Seite landet, sieht meine reguläre 404-Seite und ich gebe dabei natürlich den Statuscode 404 zurück.
WPRookie82
1

Ich würde ein noindex,nofollow,noarchiveTag im Kopf der Seiten verwenden, die Sie aus der Suche entfernen möchten.

Ich habe festgestellt, dass das noarchiveTag dazu neigt, Dinge ziemlich schnell aus der Suche zu entfernen, während das noindexmöglicherweise verhindert, dass es in die Suche aufgenommen wird. Wenn es jedoch bereits vorhanden ist, müssen Sie es aus den Suchergebnissen entfernen.

Was die Frage zum Administratorzugriff betrifft, haben die anderen Jungs hier bereits einige Ratschläge zur Sicherheit gegeben, die ich zum Auschecken empfehlen würde.

Andrew Martin
quelle