403 Uždrausta vs 401 Neleistini HTTP atsakymai

Ar yra tinkamas HTTP atsakas už paslaugą, jei yra tinklalapio, kuris yra, bet kurio naudotojo, neturinčio pakankamai teisių (jie nėra prisijungę arba nepriklauso atitinkamoms vartotojų grupėms)? 401? 403? Kažkas kita? Kol kas aš perskaičiau apie kiekvieną iš jų, nėra labai aišku, koks jų skirtumas. Kokie naudojimo atvejai tinkami kiekvienam atsakymui?

2117
21 июля '10 в 10:21 2010-07-21 10:21 „VirtuosiMedia “ nustatoma liepos 21 d. 10 val. 10:21 2010-07-21 10:21
@ 14 atsakymų

Aiškus Daniel Irvine paaiškinimas:

Problema, susijusi su 401 autentifikavimo klaidų neteisėto HTTP būsenos kodu. Ir tai paprasta: autentifikavimui, o ne autorizacijai. Atsakymo gavimas 401 yra serveris, kuris jums pasakys: „Jūs nesate atpažintas - ar nepatvirtintas, nei patvirtintas neteisingai, bet dar kartą patikrinkite ir bandykite dar kartą.“ Kad padėtų jums, jis visada turės WWW autentifikavimo antraštę, kurioje aprašoma, kaip autentifikuoti.

Tai yra atsakymas, kurį paprastai grąžina jūsų žiniatinklio serveris, o ne programos svetainė.

Jo kažkas labai laikina; serveris prašo bandyti dar kartą.

Taigi, autorizacijai naudoju 403 uždraustą atsakymą. jis yra nuolatinis, susietas su mano prašymo logika ir labiau specifinis nei 401.

Atsakymo gavimas 403 yra serveris, sakantis: „Atsiprašau, žinau, kas esate, manau, kas jūs sakote, bet jūs neturite leidimo pasiekti šį šaltinį. Galbūt, jei paprašysite sistemos administratoriaus, gausite leidimą Bet prašau, nesijaudinkite dar kartą, kol pasikeis nekantrumas. “

Taigi, 401 Neleistinas atsakas turėtų būti naudojamas arba netinkamas autentifikavimas, o po to, kai vartotojas yra autentifikuotas, turėtų būti naudojamas draudžiamas 403 atsakymas, tačiau jis neturi teisės atlikti reikalaujamos operacijos tam tikru šaltiniu.

Kitas gražus grafinis formatas , kaip naudoti „http“ būsenos kodus.

3150
04 авг. atsakymą pateikė JPReddy 04 rug . 2011-08-04 09:24 '11 at 9:24 am 2011-08-04 09:24

Žr. RFC2616 :

401 Neleistina:

Jei prašyme jau buvo nurodyti įgaliojimų įgaliojimai, atsakymas 401 rodo, kad šiems įgaliojimams buvo atsisakyta suteikti leidimą.

403 Draudžiama:

Serveris suprato prašymą, tačiau atsisako jį vykdyti.

border=0

Atnaujinti

Iš jūsų naudojimo atvejo paaiškėja, kad vartotojas nėra patvirtintas. Grįšiu 401.


Redaguoti: RFC2616 yra pasenusi, žr. RFC7231 ir RFC7235 .

352
21 июля '10 в 10:28 2010-07-21 10:28 atsakymas pateikiamas Oded liepos 21 d. 10:28 2010-07-21 10:28

Koks kitas atsakymo trūkumas yra tas, kad turėtų būti suprantama, kad autentifikavimas ir autorizacija pagal RFC 2616 priklauso tik HTTP autentiškumo protokolui RFC 2617. Autentifikavimas naudojant ne RFC 2617 schemas nėra palaikomas HTTP būsenos koduose ir nėra laikomas priimant sprendimą naudoti 401 arba 403.

Trumpas ir trumpas

Neteisėtas nurodo, kad klientas nepavyko atpažinti RFC2617 ir serveris inicijuoja autentifikavimo procesą. Draudžiama reiškia, kad klientas praėjo RFC2617 autentifikavimą ir nėra įgaliotas arba kad serveris nepalaiko RFC2617 prašomo šaltinio.

Tai reiškia, kad jei turite savo prisijungimo procesą ir niekada nenaudojate HTTP autentifikavimo, 403 visada yra teisingas atsakymas, o 401 niekada neturėtų būti naudojamas.

Išsamus ir išsamus

Iš RFC2616

10.4.2 401 Neleistina

Prašymui reikia vartotojo autentifikavimo. Atsakymas turi apimti WWW-Authenticate antraštės lauką (14.47 skirsnis), kuriame yra užklausa, kuri taikoma prašomam ištekliui. Klientas gali pakartoti užklausą su atitinkamu autorizacijos antraštės lauku (14.8 skyrius).

ir taip pat

10.4.4 403 Uždraustas Serveris suprato prašymą, tačiau atsisako jį įvykdyti. Autorizacija nepadės ir prašymas NEGALIMA kartoti.

Pirmas dalykas, kurį reikia nepamiršti, yra tas, kad „autentifikavimas“ ir „autorizacija“ šio dokumento kontekste konkrečiai susiję su HTTP autentifikavimo protokolais iš RFC 2617. Jie nėra susiję su jokiais autentifikavimo protokolais, kuriuos sukūrėte . prisijungimo puslapių naudojimas ir kt. Aš naudosiu „prisijungimą“, kad galėčiau nurodyti autentifikavimą ir leidimą, išskyrus RFC2617

Taigi realus skirtumas nėra tai, kas yra problema, ar net jei yra sprendimas. Skirtumas yra tas, kad serveris tikisi, kad klientas atliks kitą.

401 rodo, kad išteklių negalima suteikti, tačiau serveris prašo, kad klientas įvestų per HTTP autentifikavimą ir siųsti atsakymo antraštes, kad būtų pradėtas procesas. Galbūt yra leidimų, kurie leis naudotis ištekliais, galbūt ne, bet pabandykime pamatyti, kas atsitiks.

403 rodo, kad išteklių negalima suteikti, o dabartiniam vartotojui nėra galimybės tai išspręsti per RFC2617 ir nėra prasmės bandyti. Taip gali būti dėl to, kad yra žinoma, kad nepakanka autentifikavimo lygio (pvz., Dėl juodojo IP adresų sąrašo), tačiau tai gali būti dėl to, kad vartotojas jau yra autentifikuotas ir neturi įgaliojimų. RFC2617 yra vienas vartotojas, vienas vartotojas, todėl gali būti ignoruojamas atvejis, kai vartotojas gali turėti antrą įgaliotųjų duomenų rinkinį. Tai nereiškia ar nereiškia, kad bet kuris prisijungimo puslapis ar kitas autentiškumo patvirtinimo protokolas, išskyrus RFC2617, gali arba gali nepadėti, o tai neatitinka RFC2616 standartų ir apibrėžimų.


Pakeisti: RFC2616 yra pasenusi, žr. RFC7231 ir RFC7235 .

266
05 февр. atsakymas pateikiamas ldrut 05 vas . 2013-02-05 20:14 '13, 20:14, 2013-02-05 20:14

Pagal RFC 2616 (HTTP / 1.1), 403 siunčiamas, kai:

Serveris suprato prašymą, tačiau atsisako jį vykdyti. Autorizacija nepadės, ir prašymas NEGALIMA kartoti. Jei užklausos metodas nebuvo HEAD, o serveris nori pranešti, kodėl prašymas nebuvo įvykdytas, jis turi aprašyti priežastį, kodėl jis nepavyko. Jei serveris nenori pateikti šios informacijos klientui, gali būti naudojamas 404 būsenos kodas (nerastas).

Kitaip tariant, jei klientas gali pasiekti išteklių per autentifikavimą, turite išsiųsti 401.

104
21 июля '10 в 10:26 2010-07-21 10:26 Atsakymą pateikė Cumbayah liepos 10 d., 10 val. 10-07 val. 10:26
GET, išteklius egzistuoja? |  |  NE |  |  TAIP vv404 Ar patvirtinta (prisijungta)?  |  |   NE |  |  TAIP  vv  401 Ar gali pasiekti išteklius (turi leidimus)?(arba: 404) |  |arba 301 NE |  |  TAIPperadresuoti vvprisijungti 403 OK 200, 301, ...

Patikrinimai paprastai atliekami tokia tvarka:

  • 401 jei prisijungimas ar sesija nėra baigtos
  • 403, jei vartotojas neturi leidimo pasiekti šaltinį
  • 404, jei išteklių nėra

UNAUTHORIZED : būsenos kodas (401), rodantis, kad užklausai reikalingas autentifikavimas , o tai reiškia, kad vartotojas turi būti registruotas (sesija). Vartotojas / agentas nežinomas serveriui. Gali būti pakartota su kitais įgaliojimais. PASTABA. Tai paini, nes ji turėjo būti vadinama „nepatvirtinta“ vietoj „neteisėta“. Tai gali įvykti ir prisijungus, jei pasibaigė sesija.

FORBIDDEN : būsenos kodas (403), nurodantis, kad serveris suprato užklausą, bet atsisakė jį vykdyti. Naudotojas / agentas, žinomas serveryje, bet neturintis pakankamai įgaliojimų . Pakartotinis prašymas neveiks, nebent pasikeis įgaliojimai, kurie per trumpą laiką yra labai mažai tikėtini.

NOT FOUND : būsenos kodas (404), rodantis, kad prašomas šaltinis nėra. Gerai žinomas vartotojas / agentas, bet serveris nieko nepraneša apie šį šaltinį, tarsi jis nebūtų. Pasikartojimas neveiks. Tai ypatingas 404 (pvz., Github) naudojimas.

82
23 февр. Christophe Roussy atsakymas vasario 23 d 2015-02-23 14:00 '15 14:00 val. 2015-02-23 14:00

Jei autentifikavimas, kaip kitas vartotojas, suteikia prieigą prie prašomo šaltinio, tada reikia grąžinti 401 Neteisėtą. 403 Paprastai draudžiama naudoti, kai prieiga prie išteklių uždrausta visiems arba apribota konkrečiu tinklu arba leidžiama tik per SSL, neatsižvelgiant į tai, ar ji nėra susijusi su autentifikavimu.

Iš RFC 7235 (hiperteksto perdavimo protokolas (HTTP / 1.1): autentifikavimas):

3.1. 401 Neleistinas

Būsenos kodas 401 (Neteisėtas) rodo, kad prašymas netaikomas, nes jame nėra patikimų tikslinio išteklių autentifikavimo duomenų. Šaltinio serveris PRIVALO siųsti WWW-Authenticate antraštės lauką (4.4 skirsnis), kuriame yra bent vienas kvietimas, taikomas taikomam ištekliui. Jei užklausoje yra autentifikavimo įgaliojimai, 401 atsakymas rodo, kad leidimai šiems leidimams buvo atmesti . Klientas gali pakartoti prašymą nauju arba pakeisti institucijos antraštės lauką (4.1 skirsnis). Jei 401 atsakyme yra ta pati užduotis, kaip ir ankstesnis atsakymas, ir naudotojo agentas jau bandė autentifikuoti bent vieną kartą, tada naudotojo agentas turi pateikti pridėtą vaizdą vartotojui, nes paprastai jame yra atitinkama diagnostinė informacija.

Ir tai yra iš RFC 2616:

10.4.4 403 Draudžiama

Serveris suprato prašymą, tačiau atsisako jį įvykdyti.
Autorizacija nepadės , ir prašymas NEGALIMA kartoti.
Jei užklausos metodas nebuvo HEAD, o serveris nori, kad prašymas nebūtų įvykdytas, jis turi aprašyti atsisakymo priežastį juridiniame asmenyje. Jei serveris nenori pateikti šios informacijos klientui, būsenos kodas 404
(Nerasta).

Redaguoti: RFC 7231 („Hypertext Transfer Protocol“ (HTTP / 1.1): semantika ir turinys) keičia 403 reikšmę:

6.5.3. 403 Draudžiama

Būsenos kodas 403 (uždraustas) rodo, kad serveris suprato užklausą, bet atsisakė jį leisti. Serveris, norintis viešai paskelbti, kodėl prašymas buvo atmestas, gali apibūdinti šią priežastį atsakymo naudingojoje apkrovai (jei yra).

Jei prašyme pateikti įgaliojimai, serveris mano, kad prašymas yra nepakankamas, kad suteiktų prieigą. Klientas
NEGALIMA automatiškai pakartoti tokio paties prašymo
įgaliojimus Klientas gali pakartoti prašymą su nauja arba kita institucija. Tačiau prašymas gali būti atmestas dėl priežasčių, nesusijusių su institucija.

Kilmės serveris, norintis „paslėpti“ dabartinį draudžiamų tikslinių išteklių egzistavimą, galbūt gali atsakyti su 404 būsenos kodu (nerastas).

Taigi, dabar 403 gali reikšti ką nors. Naujų įgaliojimų suteikimas gali padėti ... arba ne.

38
27 февр. atsakymą pateikė Erwan Legrand , vasario 27 d. 2013-02-27 12:44 '13, 12:44, 2013-02-27 12:44

Tai yra senesnis klausimas, tačiau viena galimybė, kuri niekada nebuvo iškeltas, buvo grįžti į 404. Saugumo požiūriu didžiausias atsakas į balsą kenčia dėl galimo informacijos nutekėjimo pažeidžiamumo. Pavyzdžiui, pasakykite, kad atitinkamas saugomas interneto puslapis yra sistemos administravimo puslapis arba, dažniausiai, įrašas sistemoje, prie kurios vartotojas neturi prieigos. Idealiu atveju nenorite, kad kenkėjiškas vartotojas net žinotų, jog ten yra puslapis / pranešimas, jau nekalbant apie tai, kad jie neturi prieigos. Kai sukursiu kažką panašaus, vidiniame žurnale bandysiu rašyti nepatvirtintus / neteisėtus prašymus, bet grįžau 404.

„OWASP“ turi papildomos informacijos apie tai, kaip užpuolikas gali naudoti šią informaciją kaip atakos dalį.

23
25 дек. Patrick White atsakymas, gruodžio 25 d 2014-12-25 12:09 '14, 12:09, 2014-12-25 12:09

Šis klausimas buvo užduotas prieš kurį laiką, bet žmonės galvoja, kad juda toliau.

Šio projekto 6.5.3 skirsnyje („Fielding“ ir „Reschke“) pateikiamas būsenos kodas 403, kuris šiek tiek skiriasi nuo vertės, aprašytos RFC 2616 .

Jis atspindi tai, kas vyksta autentifikavimo ir autorizacijos sistemose, kurias naudoja daugelis populiarių interneto serverių ir sistemų.

Aš pabrėžiau tai, kas, mano nuomone, yra pati svarbiausia.

6.5.3. 403 Draudžiama

Būsenos kodas 403 (uždraustas) rodo, kad serveris suprato užklausą, bet atsisako jį leisti. Serveris, norintis viešai paskelbti, kodėl prašymas buvo atmestas, gali šią priežastį apibūdinti atsakymo naudingojoje apkrovai (jei yra).

Jei prašyme buvo pateikti įgaliojimai, serveris mano, kad jų nepakanka prieigai suteikti. Klientas PRIVALO pakartoti prašymą su tais pačiais įgaliojimais. Klientas gali pakartoti prašymą su naujais arba skirtingais įgaliojimais. Tačiau prašymas gali būti atmestas dėl kitų priežasčių nei įgaliojimai.

Kilmės serveris, norintis paslėpti dabartinį draudžiamų tikslinių išteklių buvimą, gali atsakyti su būsenos kodu 404 (nerastas).

Nesvarbu, kokio susitarimo jūs naudojatės, svarbu užtikrinti vienodumą jūsų svetainėje / API.

20
22 мая '14 в 13:54 2014-05-22 13:54 Atsakymą pateikia Dave Watts gegužės 22 d., 14 val., 14.44 val. 2014-05-22 13:54

jie nėra prisijungę arba nepriklauso atitinkamoms vartotojų grupėms

Jūs nurodėte du skirtingus atvejus; Kiekvienas atvejis turėtų turėti skirtingą atsakymą:

  1. Jei jie visai neprisijungę, turite grąžinti 401 neleistiną
  2. Jei jie yra prisijungę, bet nepriklauso atitinkamoms vartotojų grupėms, turite grąžinti 403 Uždraustas

RFC komentaras pagal komentarus, gautus už šį atsakymą:

Jei vartotojas nėra prisijungęs, jie neatpažįstami, o HTTP ekvivalentas yra 401 ir klaidinamas kaip neteisingas RFC. Kadangi 10.4.2 skirsnyje nurodyta 401 Neleistina :

„Prašymas reikalauja vartotojo autentifikavimo“.

Jei neatliksite bandymo, 401 yra teisingas atsakymas. Tačiau, jei esate neteisėtas, semantiškai teisinga prasme, 403 yra teisingas atsakymas.

9
01 окт. atsakymas pateikiamas Zaid Masud 01 okt. 2012-10-01 17:34 '12, 17:34, 2012-10-01 17:34

Tl; DR

  • 401: autentifikavimo gedimas
  • 403: gedimas, kurį NOTHING daro su autentifikavimu

Praktiniai pavyzdžiai

Jei apache reikalauja autentifikavimo (per .htaccess ), ir spustelėsite „ Cancel , ji atsakys su 401 Authorization Required

Jei nginx suranda failą, bet neturi leidimų (vartotojo / grupės) skaityti / pasiekti, jis atsakys 403 Forbidden

RFC (2616, 10 skyrius)

401 Neleistinas (10.4.2)

Reikšmė 1: Reikalingas autentifikavimas

Prašymas reikalauja vartotojo autentifikavimo.

Reikšmė 2: nepakankamas autentifikavimas

... Jei užklausoje jau yra įgaliojimų įgaliojimai, 401 atsakymas rodo, kad šiems įgaliojimams buvo atsisakyta suteikti leidimą.

403 Draudžiama (10.4.4)

Reikšmė: nėra susijęs su autentifikavimu

... Autorizacija nepadės ...

Daugiau informacijos:

  • Serveris suprato prašymą, tačiau atsisako jį vykdyti.

  • TURI aprašyti atsisakymo priežastį juridiniame asmenyje.

  • Vietoj to galite naudoti būsenos kodą 404 (nerastas)

    (Jei serveris nori išsaugoti šią informaciją iš kliento)

9
25 февр. vasario 25 d 2015-02-25 12:03 '15, 12:03 2015-02-25 12:03

Manau, svarbu nepamiršti, kad 401 naršyklėje jis inicijuoja autentifikavimo dialogo >

Štai keletas atvejų pagal šią logiką, kai klaida grąžinama iš autentifikavimo ar autorizacijos, pabrėžiant svarbias frazes.

  • Šiam ištekliui reikalingas autentifikavimas, tačiau nėra jokių įgaliojimų .

401 : Klientas turi pateikti įgaliojimus.

  • Nurodyti kredencialai yra netinkami .

400 : nei 401, nei 403, nes sintaksės klaidos visada turėtų grįžti į 400.

  • Nurodyti kredencialai nurodo vartotoją, kuris neegzistuoja .

401 : klientas turi pateikti galiojančius įgaliojimus.

  • Nurodyti kredencialai negalioja, bet nurodo galiojantį vartotoją (arba nenurodo vartotojo, jei nenaudojamas nurodytas vartotojas).

401 : Dar kartą klientas turi pateikti galiojančius įgaliojimus.

  • Nurodyti įgaliojimai baigėsi .

401 : Tai praktiškai tas pats, kaip ir neteisingi kredencialai, todėl klientas turi pateikti galiojančius įgaliojimus.

  • Šie įgaliojimai yra visiškai galiojantys, tačiau jie nėra pakankami tam tikriems ištekliams , nors įmanoma, kad įgaliojimai, turintys daugiau teisių.

Galiojančių kredencialų nustatymas nesuteiks prieigos prie išteklių, nes dabartiniai kredencialai jau galioja, tačiau jie neturi leidimo.

  • Nurodytas šaltinis neprieinamas nepriklausomai nuo įgaliojimų.

403. Tai nepriklauso nuo kredencialų, todėl galiojančių įgaliojimų nustatymas negali padėti.

  • Šie įgaliojimai yra visiškai tinkami, tačiau konkretus klientas yra užblokuotas .

403. Jei klientas yra užblokuotas, naujų įgaliojimų nustatymas nieko nekeičia.

3
03 июня '18 в 2:34 2018-06-03 02:34 Grant Gryczan atsakė birželio 03 d. 18 val. 2:34 ; 2018-06-03 02:34

Mano galva yra lengviau nei bet kur kitur, todėl:

401: jums reikia HTTP pagrindinio auth.

403: negalite matyti, o HTTP pagrindinis auth nepadės.

Jei vartotojas tiesiog turi prisijungti naudodamas standartinę prisijungimo formą jūsų svetainėje, 401 nebus tinkamas, nes jis yra susijęs su HTTP pagrindiniu auth.

Nerekomenduojame naudoti 403, kad atsisakytumėte prieigos prie tokių dalykų, kaip, pavyzdžiui, dėl to, kad interneto atžvilgiu šie ištekliai neegzistuoja, todėl turi būti 404.

Tai palieka 403 kaip „jums reikia prisijungti“.

Kitaip tariant, 403 reiškia, kad „šiam ištekliui reikia ne tik HTTP pagrindinio auth“, bet ir tam tikros formos.

https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2

2
23 сент. atsakymas pateikiamas Vladimiro Kornea 23 sep . 2017-09-23 15:33 '17, 15:33 pm 2017-09-23 15:33

Atsižvelgiant į naujausią RFC šiuo klausimu ( 7231 ir 7235 ), precedentas atrodo gana suprantamas (pridėtas kursyvas):

  • 401 - для не прошедших проверку подлинности ("отсутствует достоверная проверка подлинности"); т.е. "Я не знаю, кто вы, или я не верю, что вы такие, кем вы себя называете".

401 Несанкционированный