Bir html tabanlı giriş formuna http 401 durum kodu döndürmeli miyim?


11

Bir html tabanlı giriş formuna http 401 durum kodu döndürmeli miyim? Sayfa özel bir giriş formudur ve başka anlamlı bir içeriğe sahip değildir, sadece site çerçevesi vardır. Ancak URL, anlamlı içeriğe sahip, ancak giriş yapılması gereken bir sayfa için olabilir. Bu kurulumun yalnızca 401 durum kodunu döndürdüğünü ve kullanıcıdan temel kimlik doğrulaması istemediğini unutmayın.

Standartlara bakıldığında, 401'in html tabanlı giriş formları için uygun olmayan bir durum kodu olduğu anlaşılıyor. Ancak, bunun herhangi bir kötü sonucunu hiç yaşamadım veya duymadım.

401 gönderilirken, "Yanıt, istenen kaynağa uygulanabilir bir meydan okuma içeren bir WWW-Authenticate başlık alanı (bölüm 14.47) içermelidir."

burada belirtilen gereklilik:

http://tools.ietf.org/html/rfc2616#section-10.4.2

burada ayrıntılı:

http://tools.ietf.org/html/rfc2617#section-3.2.1

Ben bir giriş formu varlığına dayalı sayfaları endekslemek için, ya da değil, onları arama motorları etrafında çalışmanın yolları olduğunu biliyorum, ama ben tanım gibi görünüyor gibi http durum kodları, özellikle 401 tercih ederim WWW-Authenticate başlık gereksinimi için mükemmel eşleşme.

Bu durumda 401 kullanmamam için bir neden var mı? Anlamsal olarak, http düzeyinde Yetkilendirilmemek ile uygulama düzeyinde Yetkilendirilmenin arasında bir fark var mıdır? Açıkçası her ikisine de sahip olabilirsiniz, ancak kimlik doğrulaması yalnızca uygulama düzeyinde uygulayamamak için http düzeyinde değil mi?

Yanıtlar:


9

Belirttiğiniz gibi RFC 2616 , 401 yanıtının bir RFC 2617 WWW-Authenticate üstbilgisi ile birlikte verilmesini gerektirir . Sanırım sahte bir başlık göndererek teknik olarak bu şarta uyabilirsiniz:

WWW-Authenticate: Bogus realm="blahblah", comment="use form to log in"

ancak anladıkları zorlukları içeren bir 401 yanıtı sunulduğunda tarayıcıların ne yapacağına dair hiçbir fikrim yok. Ben ediyorum varsayalım (RFC 2616 kimlik doğrulama başarısız olursa yapmaları gerektiğini söylediği gibi), ancak hiçbiri RFC yüzden açıkça söylemek gibi görünüyor onlar meşru sadece genel bir hata mesajı gösterebilir, böylece kullanıcıya istek gövdesini sunacaklarını hepsi eğer çoğu yerine.

Olası bir alternatif (eğer herkes gibi göründüğü gibi 200 yanıtı kullanmak istemiyorsanız) 403 Yasak durum kodu kullanmak olacaktır . Bu yaygın olarak kullanılan bir yanıt kodudur ve bildiğim kadarıyla, neredeyse tüm etkileşimli kullanıcı aracıları (örneğin, arama motorları veya indirme yöneticilerinin aksine tarayıcılar) içeriği en azından kullanıcıya sunarak buna tepki vermelidir. eğer yeterince uzunsa .

403 durum kodunun açıklaması "[a] yetkilendirmenin yardımcı olmayacağını" söylese de, bu IMO'nun RFC 2617 kimlik doğrulaması veya benzer protokol düzeyindeki yetkilendirme mekanizmalarına atıfta bulunulduğu bağlamında anlaşılmalıdır; tarayıcı söz konusu olduğunda, bir form göndermenin ve yanıt olarak bir çerez almanın "yetkilendirme" veya başka bir şey sayılması konusunda hiçbir fikri yoktur.

Daha yaygın olarak kullanılan bir mekanizma, kimliği doğrulanmamış isteklere ayrı bir giriş sayfasına geçici bir yönlendirmeyle yanıt vermek ve orijinal URL'nin parametre olarak geçirilmesi, böylece kullanıcının başarılı bir kimlik doğrulamasından sonra yeniden yönlendirilebilmesi olacaktır. Ancak, naif bir uygulamanın, kötü niyetli bir kullanıcının giriş yaptıktan sonra kullanıcıyı rastgele bir URL'ye yönlendirecek bir giriş bağlantısı oluşturmasına izin verebileceğini unutmayın. Bu bir güvenlik sorunu olabilirse, bunu önlemek için gerekli adımları atmanız gerekir, örneğin yalnızca kabul ederek bilinen güvenli bir kalıpla eşleşen URL'leri döndürün veya değişikliği önlemek için dönüş URL'sini bir mesaj kimlik doğrulama koduyla koruyun.

Her durumda, oturum açtıktan sonra kimlik doğrulama jetonlarını saklamak için HTTP çerezleri kullanıyorsanız , olduğu gibi uygunsuz önbelleğe almayı önlemek için yanıtlarınıza (kimlik doğrulamasından önce ve sonra) bir Vary başlığı eklemeniz gerekir Vary: Cookie.


2

İlk olarak, sayfanın giriş yapması gerekiyorsa, muhtemelen robots.txt tarafından engellemelisiniz

İkinci olarak, robotlar sayfaya ulaşırsa, 401 hatası uygundur.


0

muhtemelen, durum kodları insan olmayan [ve bazı tarayıcılar için yararlı olabilir? ]

Giriş yönteminden bağımsız olarak doğru başlık gönderilmelidir

örneğin gelecekte html kodunun toplamını değil, yalnızca sayfa üstbilgilerini isteyerek kendini doğrulayacak bir sarmalayıcı istemcisi (web tarayıcısı değil) yazmanız gerekebilir.

giriş uygulamanızı kullanıcı listesiyle aynı veritabanını kullanarak her iki yöntemle de uygulayabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.