Warum verwendet Drupal 403 Forbidden?

7

RFC 2616 , das Dokument, das HTTP / 1.1 definiert, enthält die Definitionen aller HTTP-Statuscodes. Für 403 Forbidden, heißt es :

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.

Drupal verwendet es jedoch nicht so: Je nach Fall wird es entweder für die Standardbedingung in Rückrufen (z. B. shortcut_link_add_inline()) verwendet - im Wesentlichen 403 Forbiddengleichbedeutend mit "Drupal versteht die Anforderung nicht" - oder es wird verwendet, um den Client darüber zu informieren hat keinen Zugriff auf die Seite (dh aufgrund von Berechtigungen wie anonymer Benutzer).

Im ersteren Fall ("die Anfrage wird nicht verstanden") lautet der geeignetere Statuscode 400 Bad Request:

Die Anforderung konnte vom Server aufgrund einer fehlerhaften Syntax nicht verstanden werden. Der Client sollte die Anfrage NICHT ohne Änderungen wiederholen.

Und im letzteren Fall ("der Client hat aufgrund von Berechtigungen keinen Zugriff auf die Seite") sollte dies auch der Fall sein 401 Unauthorized(wenn Drupal verraten möchte, dass es sich nur um ein Berechtigungsproblem handelt):

Die Anforderung erfordert eine Benutzerauthentifizierung. Die Antwort MUSS ein WWW-Authenticate-Headerfeld (Abschnitt 14.47) enthalten, das eine Herausforderung enthält, die für die angeforderte Ressource gilt. 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.

oder 404 File Not Found(wenn nicht):

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 Statuscode 410 (Gone) 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.

Hervorhebung von mir (siehe auch den letzten Satz in der Definition für 403 Forbidden).

Mir ist klar, dass es seit vielen Jahren so ist, aber was war der ursprüngliche drupal_access_denied()Grund, um 403 Forbidden- und im weiteren Sinne - die einzige Antwort zu geben, die Drupal sendet, wenn es eine Anfrage erhält, die es nicht mag?

kiamlaluno
quelle

Antworten:

5

Wie in Ihrem Angebot angegeben, 401 Unauthorizedmuss es mit der HTTP-Authentifizierung kombiniert werden, die Drupal nicht verwendet. Daher ist dies keine Option.

403 ist meiner Meinung nach eine absolut gültige Antwort, da Kunden ihre Anfrage nicht wiederholen dürfen, sondern möglicherweise ein Anmeldeformular ausfüllen müssen, das zu einer anderen Anfrage führt.

Sonderfälle wie die von Ihnen gepostete Shortlink-Funktion sind nicht so klar. Ich denke, der Grund für die Verwendung des dort verweigerten Zugriffs ist, dass das Token überprüft wird, was irgendwie eine Authentifizierung ist. Aber es könnte genauso gut 400 oder 404 verwenden. Ich denke, der Grund für die Verwendung von 403 anstelle von 400 liegt einfach darin, dass es keine Hilfsfunktion für die Rückgabe einer 400 gibt.

Es gab auch eine Diskussion bezüglich des Privatemsg-Moduls (das ich gerade pflege), ob das Ausprobieren einer privaten Nachricht als anonymer Benutzer zu einem 403 oder einem 404 führen sollte (aus Datenschutzgründen). Früher war es 404, wurde aber in 403 geändert, da Benutzer in E-Mail-Benachrichtigungen häufig auf direkte Links klicken und eine 403-Seite leicht in ein Anmeldeformular umgewandelt werden kann (da es ein Modul gibt, das dies sofort erledigt). Das hängt also mit den letzten beiden Sätzen der 403-Beschreibung zusammen.

Berdir
quelle
Ein fairer Punkt in Bezug auf die Nichtverwendung 401 Unauthorized, aber wenn Drupal kein WWW-AuthenticateHeader-Feld senden möchte , 403 Forbiddenist dies nicht der Fallback: Es 403 Forbiddenhandelt sich um einen dauerhaften Fehler, und wie es heißt, "Autorisierung hilft nicht".
2
Stimmt, aber das bezieht sich IMHO speziell auf die HTTP-Autorisierung. Die HTTP-Spezifikation sagt AFAIK nichts über die Art der Authentifizierung aus, die die meisten Webanwendungen heutzutage verwenden (Die Hauptgründe dafür sind wahrscheinlich, dass die HTTP-Autorisierung hässlich aussieht und nicht in eine Site integriert werden kann, denken Sie an Links zur Kennwortwiederherstellung).
Berdir
Das Hauptanliegen bleibt: Wenn wir eine 403 für z. B. einen unveröffentlichten Entwurf / node / 123 oder / the-truth-about-my-lower-body-parts (URL-Alias) erhalten, wissen wir jetzt, dass diese URL existiert. Wenn wir diese Tatsache geheim halten wollen, müssen wir stattdessen eine 404 (oder etwas anderes?) Senden.
Donquijote