Parse Sunucu Güvenliği
Herkese merhaba bu makalede Back4App üzerinde Parse Server kullanırken Güvenlik hakkında konuşacağım. Güvenlik, geliştiricileri mutlu eden bir konu olmadığı için çok kısa ve doğrudan olacağım. Buradaki amacım, Uygulamanızı bir Üretim Uygulaması haline getirmeden önce gözden geçirmek için hızlı bir güvenlik kontrol listesi sağlamaktı.
Contents
- 1 Parse Güvenlik Mekanizması
- 2 Güvenlik Uygulaması Kontrol Listesi
- 2.1 1-Ana Anahtarı Güvende Tutun
- 2.2 2-İstemci Sınıfı Oluşturmanın İşaretini Kaldırın
- 2.3 3-Rol Yapısı Oluşturun
- 2.4 4-Kullanıcılar ve Roller için CLP’yi Yapılandırma
- 2.5 5-Sabit Sınıfları Salt Okunur Yapın
- 2.6 6-Genel CLP ve ACL tavsiyeleri
- 2.7 7-Seansınızın Uzunluğunu Ayarlayın (Sadece Bazı Durumlar)
- 2.8 8-Https ve SSL kullanın
- 3 Son Sözler
Parse Güvenlik Mekanizması
Uygulamanıza yeterli güvenlik erişimini düzgün bir şekilde yapılandırmak için öncelikle bazı Parse Temel Güvenlik Mekanizmaları Kavramlarını, Varsayılan Parse Sınıflarını ve Kimlik Doğrulama Mekanizmalarını anlamanız gerekir.
1-Varsayılan Sınıfları Parse
Parse varsayılan olarak 3 Sınıf oluşturur: Kullanıcılar, Roller ve Oturumlar. Bu sınıflar tüm arka uç ile tamamen entegredir ve ayrıca Uygulamanızı korumak için Kimlik Doğrulama Mekanizmalarını yapılandırırken hayatınızı kolaylaştıracaktır.
Kullanıcı
Parse
, kullanıcı hesabı yönetimi için gereken işlevlerin çoğunu otomatik olarak işleyen Parse.User
adlı özel bir kullanıcı sınıfı sağlar.
Parse.User
sınıfı varsayılan olarak güvenlidir. Bir Parse.
User’da depolanan veriler yalnızca o kullanıcı tarafından değiştirilebilir. Varsayılan olarak, veriler herhangi bir istemci tarafından okunabilir. Bu nedenle, bazı Parse.User
nesnelerinin kimliği doğrulanır ve değiştirilebilirken, diğerleri salt okunurdur.
Roller
Rol, Kullanıcıları ve Diğer Rolleri yeni bir Rolle ilişkilendirebileceğiniz bir Sınıftır. Bir Rol oluşturduktan sonra, bu Rolün CLP’leri ve ACL’leri kullanarak Uygulamanızda nelere erişeceğini tanımlamak için kullanabilirsiniz.
Oturum
Bir Kullanıcı
giriş yöntemi ile bir kullanıcı girişi yaptığınızda, Parse otomatik olarak Parse Sunucunuzda yeni bir kısıtlanmamış Oturum
nesnesi oluşturacaktır. Kayıtlar ve Facebook/Twitter girişleri için de aynı şey geçerlidir.
2-Parse Auth Mekanizması
Parse üzerinde Veri Erişimi hakkında konuşurken Uygulama Güvenliğinizi 2 farklı seviyede kontrol edebilirsiniz:
- Sınıf/Tablo – Yeni sütunların oluşturulmasını ve tüm sınıfa genel Veri Erişimini kısıtlamak için CLP’leri (Sınıf Düzeyi İzinleri) kullanın;
- Nesne- Belirli bir nesneye erişimi kontrol etmek için ACL (Erişim Kontrol Listeleri) kullanın;
Sınıf Düzeyi İzinler – CLP’ler
Sınıf seviyesi İzinler, bir Sınıfın ve tüm nesnelerinin erişimini kontrol eden bir mekanizmadır. CLP’leri kullanarak bir Role, bir Kullanıcıya veya bir İşaretçiye Okuma/Yazma erişimini yapılandırabilirsiniz.
Bu mekanizmayı kullanarak aşağıdaki işlemlere erişimi kısıtlayabilirsiniz:
- Okuyun
- Get – Belirli bir ObjectId için nesne bilgilerini getirir;
- Find – Bu Sınıftaki tüm nesneleri sorgular (ObjectID gerekli değildir);
- Count – Sınıfın Toplam Nesne Sayısı;
- Yazmak
- Oluştur – Yeni Nesneler oluşturun;
- Güncelle – Mevcut Nesneyi güncelleyin;
- Sil – Mevcut Nesneyi silin;
- Ekle
- Alan Ekle – Bu Sınıfta yeni sütunlar oluşturun;
Bu yapılandırma seçeneklerine erişmek için Sınıf’ın sağ üst hızlı menüsündeki küçük kalkan simgesine gitmelisiniz.
Kalkan simgesine tıkladıktan sonra, sadece okuma/yazma seçeneklerinin bulunduğu basit bir menü göreceksiniz. Gelişmiş CLP Yapılandırmasına erişmek için pencerenizin sağ üst simgesine tıklayın.
Ardından CLP yapılandırma penceresinin tamamını göreceksiniz.
Erişim Kontrol Listeleri – ACL’ler
Erişim Kontrol Listeleri, belirli bir Sınıfın her bir nesnesine erişimi farklı şekilde kontrol etmenizi sağlar. Bir nesne için ACL oluşturabilir ve her Rol veya Kullanıcı için erişimi (okuma/yazma) yapılandırabilirsiniz.
Parse, herhangi bir Rol oluşturmak için her zaman bir ACL gerektirir. Dolayısıyla, İlk Rolü oluşturmak için bir kullanıcıya ihtiyacınız olacak. Uygulamamızda İlk Rolleri oluşturmak için bir root kullanıcısı oluşturalım. Bu kullanıcı, bu Rolleri düzenleyebilecek tek kullanıcı olacaktır.
İlk olarak, Kullanıcı Tablosunda sadece kullanıcı adı ve parola doldurarak root kullanıcısını oluşturabiliriz.
Ardından kök Kullanıcı ObjectId’sini kopyalayın ve Rol Sınıfına gidin. Yeni bir Rol oluşturun ve ACL oluşturmak için ACL alanına çift tıklayın. Bu durumda, kök kullanıcının bu ACL’yi okumasına/yazmasına izin vereceğim, bu nedenle ACL’yi kök kullanıcı ObjectID’si ile dolduralım ve ardından kaydedelim.
Bu adımdan sonra bu Role Admin adını verelim ve Alex ve Alysson kullanıcılarını ilişkilendirelim. Rol Sınıfının Kullanıcı Sınıfı ile bir ilişkisi olduğu için ilişkiye genel bakışa tıklayabilir ve ardından eklemek istediğiniz kullanıcının ObjectID’lerini bu ilişkiye ekleyebilirsiniz.
Artık yeni Roller oluşturmak, yeni ACL ‘lere veya CLP’lere atıfta bulunmak için kullanabileceğiniz 2 kullanıcılı bir Rol Yöneticiniz var.
Güvenlik Uygulaması Kontrol Listesi
Artık ana Parse Güvenlik kavramlarına aşina olduğunuza göre, Uygulamanızı daha güvenli hale getirmek için bazı önerilerde bulunmak istiyorum.
1-Ana Anahtarı Güvende Tutun
Ana Anahtar, diğer tüm güvenlik katmanlarını atlamak için kullanılan Parse mekanizmasıdır. İyi bir karşılaştırma yapmak gerekirse, bir Uygulama için Uygulama Ana Anahtarına sahip olmak, bir Sunucunun kök erişimine sahip olmak gibidir.
Bu nedenle bu anahtarı korumanız ve gerektiğinde anahtarı yalnızca bulut kodu aracılığıyla kullanmanız gerekir. Ön uç kodunuzda kullanmaktan kaçınmalısınız çünkü birisi kodu açabilir veya JS durumunda kaynağı görüntüle seçeneğine tıklayıp Anahtarınızı kopyalayabilir.
Bir başka tavsiye de, bu anahtarı bir bulut kodunda kullanırken, anahtarı (bulut kodunuzun bir parçası olan) herhangi bir genel kod deposuna işlemeyeceğinizden emin olun.
2-İstemci Sınıfı Oluşturmanın İşaretini Kaldırın
Back4App üzerinde yeni bir Uygulama oluşturduğunuzda, Parse Anahtarı allowClientClassCreation etkinleştirilir. Bu, AppID ve İstemci Anahtarına sahip herkesin veritabanınızda yeni sınıflar oluşturabileceği anlamına gelir.
Bu yapılandırmayı Back4App üzerinde Sunucu Ayarları->Çekirdek Ayarlar->Ayarlar Menü Seçeneğinden değiştirebilirsiniz.
Sadece aşağı kaydırın ve aşağıda gösterildiği gibi “İstemci Sınıfı Oluşturulmasına İzin Ver” seçeneğinin işaretini kaldırın.
Burada tavsiye edilen, uygulamanızı geliştirirken bu seçeneği etkin tutmanız ve işiniz bittiğinde kaldırmanızdır.
3-Rol Yapısı Oluşturun
ACL bölümünde başladığımız gibi devam edebilir ve tüm Uygulama Sınıflarınız ve Nesneleriniz üzerinde erişimi daha iyi kontrol etmek için bir Rol Yapısı oluşturabilirsiniz. Diyelim ki bir Uber-Clone Uygulaması oluşturuyorsunuz ve 3 ana erişiminiz var: Yönetici, Yolcular, Sürücüler.
4-Kullanıcılar ve Roller için CLP’yi Yapılandırma
User varsayılan bir Parse Sınıfı olduğundan, sınıf adına, REST API anahtarına ve Uygulama Kimliğine sahip olan herkes tek bir curl komutu vererek tüm kullanıcı listenizi isteyebilir:
curl -X GET -H "X-Parse-Application-Id: FyebII2zNpA2i9DdZ8froWna9vIvJMcgjfmjS0iK" -H "X-Parse-REST-API-Key: hluEgfZ084RdR0MyyE8Y9v4RwsOsTIWlJeCc4qGw" https://parseapi.back4app.com/users
Ve Kullanıcı Listesini alın:
Bir CLP oluşturarak ve Kullanıcı Tablonuzu kimlerin okuyup yazabileceğini sınırlayarak bundan kaçınabilirsiniz (ACL’leri kullanarak koruma yapmak da mümkündür). Bu durumda, yalnızca Yönetici Kullanıcıların tüm Kullanıcı Listesini okumasına izin vereceğim.
Rol Sınıfı için de benzer bir işlem yapabilir ve sınıfın tamamını okuması gerekmeyen Rollerden/Kullanıcılardan erişimi kaldırabilirsiniz.
Oturum Sınıfı varsayılan olarak korumalıdır çünkü tüm Oturum
nesneleri otomatik olarak oluşturulan ve yalnızca o kullanıcı tarafından okunup yazılabilen bir ACL’ye sahiptir.
5-Sabit Sınıfları Salt Okunur Yapın
Yalnızca Parse Dashboard aracılığıyla değiştirmek istediğiniz tablolarınız/sınıflarınız varsa, CLP’yi kullanarak bunları salt okunur hale getirebilirsiniz. Benim durumumda, Uber-Clone-App’imin çalışacağı şehri tanımlayan bir sınıf oluşturdum.
Bu Sınıfı yalnızca Parse Dashboard aracılığıyla değiştirmek istiyorum, bu nedenle diğer tüm Rollerden yazma erişim haklarını kaldıracağım.
6-Genel CLP ve ACL tavsiyeleri
Uygulamanızdaki çoğu sınıf, güvenliği kolay birkaç kategoriden birine girecektir. Tamamen herkese açık veriler için sınıf düzeyinde izinler kullanarak tabloyu kilitleyebilir ve hiç kimse tarafından okunamaz ve yazılamaz hale getirebilirsiniz. Tamamen özel veriler için ise ACL’leri kullanarak yalnızca verinin sahibi olan kullanıcının okuyabilmesini sağlayabilirsiniz.
Ancak zaman zaman, verilerin tamamen herkese açık veya tamamen özel olmasını istemediğiniz durumlarla karşılaşırsınız. Örneğin, bir kullanıcı için yalnızca onayladığı arkadaşları tarafından okunabilir olması gereken verilere sahip olduğunuz bir sosyal uygulamanız olabilir. Bunun için, tam olarak istediğiniz paylaşım kurallarını etkinleştirmek üzere bu kılavuzda tartışılan tekniklerin bir kombinasyonuna ihtiyacınız olacaktır.
Daha fazla ayrıntı için ACL’nin nasıl oluşturulacağına ilişkin bu videoyu izleyin.
7-Seansınızın Uzunluğunu Ayarlayın (Sadece Bazı Durumlar)
Çok hassas bilgiler içeren bir Uygulama geliştiriyorsanız (Bankacılık Uygulaması, Sağlık Uygulaması) ve kısa bir süre sonra kullanıcıların oturumunu kapatmanız gerekebilir.
Oturum Uzunluğunu sınırlamak için Sunucu Ayarları->Özel Uygulama Ayarları bölümüne gidin.
Özel Parse Seçenekleri metin kutusunda Oturum Uzunluğunu saniye cinsinden tanımlayın. Aşağıdaki durumda 10 dakikalık bir Oturum tanımlıyorum. Ardından Kaydet’e tıklayın.
8-Https ve SSL kullanın
Https, istemcinin tarayıcısından sunucunuza bilgi aktarmak için kullanılan güvenli bir protokoldür. Bilgisayar korsanlarının MITM gibi saldırılarla hassas bilgilere erişmesini önlemek için gereklidir.
Buradaki tavsiye, Parse Sunucusu ile bağlantı kurmak için Http üzerinden Https kullanmaktır. Aşağıda, aktif bir bağlantı kurmak için https’nin nasıl doğru kullanılacağını gösteren Parse ile bir JS Bağlantısı kullanan bir örnek bulunmaktadır. Yanlış yolun https:// yerine http:// kullanmak olduğunu unutmayın.
Parse.initialize("APP_ID", "JS_KEY"); Parse.serverURL = 'https://parseapi.back4app.com/'
Back4App Webhosting kullanıyorsanız, Back4App’in varsayılan olarak zaten bir https bağlantısı sağladığına dikkat etmeniz önemlidir (aramalarınızda https:// kullanmalısınız!).
Ancak kendi alan adınızı kullanmak ve Back4App sunucularına yönlendirme yapmak istiyorsanız, SSL sertifikanızın geçerli ve düzgün bir şekilde yüklendiğinden ve Back4App’e yönlendirmeleri https kullanarak yaptığınızdan emin olun.
Son Sözler
Back4App ve Parse, Bulutta veri güvenliğini sağlamanız için çeşitli yollar sunar. Uygulamanızı oluştururken ve depolayacağınız veri türlerini değerlendirirken, hangi uygulamayı seçeceğinize karar verebilirsiniz.
Uygulamanızın verilerini ve kullanıcılarınızın verilerini güvende tutmak için elinizden gelen her şeyi yapmak üzere bu araçları kullanacağınızı umuyoruz. Birlikte web’i daha güvenli bir yer haline getirebiliriz.