Kullanıcının kasıtlı olarak yanlış yapısına (hafifçe koymak için) koruma eklersem, kullanıcının maruz kalabileceği zarar kodumla ilgili değilse aşırı mühendislik mi?
Açıklamak için, böyle basit bir JSON RESTful hizmetini açığa vuruyorum:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
Hizmetin kendisi bir tarayıcı aracılığıyla değil, yalnızca kullanıcı tarafından kontrol edilen üçüncü taraf uygulamalarından (telefon uygulamaları, masaüstü uygulaması vb.) Kullanılmak üzere tasarlanmıştır. Ayrıca, hizmetin kendisi vatansız olmalıdır (yani oturumsuz).
Kimlik doğrulama SSL üzerinden Temel Kimlik Doğrulama ile yapılır.
Bunun gibi bir "zararlı" davranıştan bahsediyorum:
Kullanıcı GET URL'sini bir tarayıcıya girer (bir neden yok ama ...). Tarayıcı Temel Yetkilendirme ister, işler ve geçerli tarama oturumu için yetkilendirmeyi saklar. Kullanıcı, tarayıcıyı kapatmadan, hizmetimize POST yapan kötü amaçlı bir CSRF / XSRF javascript içeren kötü amaçlı web sitesini ziyaret eder .
Yukarıdaki senaryo pek olası değildir ve iş açısından bakıldığında çok fazla endişelenmemem gerektiğini biliyorum. Ancak durumu iyileştirmek için JSON POST verilerinde kullanıcı adı / parola gerekiyorsa da yardımcı olacağını düşünüyor musunuz?
Yoksa Temel Yetkilendirmeyi tamamen bırakmalı, GET'ten kurtulmalı ve içinde yetki bilgisiyle yalnızca POST / PUT kullanmalı mıyım? GET üzerinden alınan bilgiler de hassas olabilir.
Öte yandan, özel üstbilgilerin kullanılması saf REST uygulamasını dikkate alıyor mu? Temel Yetkilendirmeyi bırakabilir ve özel üstbilgiler kullanabilirim. Bu şekilde, bir tarayıcıdan en azından CSRF saldırısından kaçınılabilir ve hizmeti kullanan uygulamalar kullanıcı adını / parolayı özel heather'de ayarlayacaktır. Bu yaklaşım için kötü, şimdi hizmet bir tarayıcıdan tüketilemez.