Olası Çoğalt:
Web'e “sunucudan daha az” uygulamalar yazma
Diyelim ki bir Stack Exchange klonu oluşturacağım ve arka uç mağazam olarak CouchDB gibi bir şey kullanmaya karar verdim. Dahili kimlik doğrulama ve veritabanı düzeyinde yetkilendirme kullanırsam, istemci tarafı Javascript'in doğrudan herkese açık CouchDB sunucusuna yazmasına izin vermemek için herhangi bir neden var mı? Bu temelde bir CRUD uygulaması olduğundan ve iş mantığı “Sadece yazarın gönderisini düzenleyebiliyor” dan oluştuğundan, müşteri tarafı ile veri tabanı arasında bir katmana sahip olma gereği duymuyorum. Birinin çöp verilerini koymadığından ve izinlerin doğru ayarlandığından ve kullanıcıların yalnızca kendi _user verilerini okuyabildiğinden emin olmak için yalnızca CouchDB tarafında doğrulama kullanırdım. Render müşteri tarafında AngularJS gibi bir şey tarafından yapılabilir. Temelde bir CouchDB sunucusuna ve bir sürü "statik" sayfaya sahip olabilirsiniz ve gitmeniz iyi olur. Herhangi bir sunucu tarafı işlemeye ihtiyacınız olmaz, yalnızca HTML sayfalarını düzenleyebilecek bir şey kullanılır.
Veritabanımı dünyaya açmak yanlış görünüyor, ancak bu senaryoda izinlerin neden uygun şekilde verildiği sürece nedenini düşünemiyorum. Bir web geliştiricisi olarak içgüdülerime aykırı, ama iyi bir sebep düşünemiyorum. Peki, bu neden kötü bir fikir?
EDIT: Burada benzer bir tartışma var gibi görünüyor: Web "sunucu daha az" uygulamaları yazma
EDIT: Şimdiye kadarki müthiş tartışma ve herkesin geri bildirimini takdir ediyorum! Özellikle CouchDB ve AngularJS'i çağırmak yerine birkaç genel varsayım eklemem gerektiğini düşünüyorum. Öyleyse farz edelim ki:
- Veritabanı, kullanıcıları doğrudan gizli mağazalarından doğrulayabilir
- Tüm veritabanı iletişimi SSL üzerinden gerçekleşir
- Veri doğrulama olabilir (ama belki? Olmamalıdır) veritabanı tarafından ele
- Yönetici işlevlerinden başka umursadığımız tek yetkilendirme, yalnızca kendi gönderilerini düzenlemesine izin verilen bir kişidir.
- Tüm verileri okuyabilen herkes için gayet iyiyiz (şifre karmaları içerebilecek EXCEPT kullanıcı kayıtları)
- İdari işlevler, veritabanı yetkilendirmesiyle kısıtlanacaktır
- Hiç kimse kendilerini yönetici rolüne ekleyemez
- Veritabanının ölçeklendirilmesi nispeten kolaydır
- Gerçek bir iş mantığı yok denecek kadar azdır; Bu temel bir CRUD uygulaması
DELETE FROM ImportantData;