Merhaba, Firebase hakkında şimdiye kadar 2 adet yazı yazdım. http://angulartr.com/category/firebase/ adresinden bu yazılara ulaşıp, bir göz atmanızı tavsiye ederim.

Firebase ve güvenlik. Güvenliğin Firebase uygulamaları için neden ÇOK ÇOK Önemli olduğunu http://angulartr.com/firebase-security-rules-guvenlik-ve-kurallar-giris/ adresindeki (yukarıda verdiğim kategori linkine tıkladıysanız, bu içeriği görmüşsünüzdür) yazımda üzerine basa basa ve bir adet yaşanmış örnek vererek anlattım.

Firebase’ i kullanmak çok basit. Bunu ileriki konularımda bol bol örnek yaparken göreceksiniz. Bana güvenin. Projenin amacı zaten bu, kolaylık. Çünkü günümüzün imkanları bize bu kolaylığı yaşamamıza imkan veriyor. LAKİN Öncelikle Güvenliği çok iyi anlamanız gerekiyor. Ardından arkanıza yaslanıp, mükemmel uygulamalar çıkarabilirsiniz.

Firebase güvenlik konusunda yazacağım seri, https://www.firebase.com/docs/security/guide/ adresindeki Rehber’ in Türkçe’ ye çevrilmesi, kısaca üzerinden geçilen örneklerin sakız gibi uzatılarak, anlamadığınız hiçbir yer kalmaması, ve tüm bunları yaparken kendi deneyimlerimi de araya sıkıştırmak şeklinde ilerleyecek.

“Güvenliği Anlamak”

https://www.firebase.com/docs/security/guide/understanding-security.html

Öncelikle Overview kısmını özetliyim;

Güvenlik gerçekten büyük bir konudur ve çok önemlidir. Genellikle, uygulama geliştirmenin en zor konularından biridir. Firebase dahili olarak güvenliğin belli bir kısmının sorumluluğunu kendi alır. Örneğin kullanıcı işlemleri gibi(kullanıcı işlemleri, bir uygulamanın bel kemiğidir. Bir e-ticaret sitesini düşünün, herşey onun üzerine kurulu.) Fakat kontrolü ele alamadığımız yerlerde var. Buralarda ise işi basite indirgedik.

Araya giriyorum. Buralar nereler olabilir ? de buralarda kontrolü ele alamıyorlar ?

Uygulamanızda bir çok database tablosu var. Fakat herbirinin veri girişine izni farklı. Sitenizdeki ziyaretçi defterine girilen kayıtlar, sizin için güvenlik endişesi taşımaz. Lakin siparişler tablosunu düşünün. İşte bu noktada Firebase hangi tabloyu ? neye göre koruması gerektiğini nerden bilecek ? Bunu bizim belirlememiz çok basit. Aşağıda göreceğiz.

Sonra devam ediyor;

Firebase daha çok client-side kod üzerine çalışır. Bu sebeple güvenliği ele alışımız, diğer teknolojilerden biraz farklı olacak.

“Authentication | Doğrulama”

Kullanıcı kimliği çok önemli bir güvenlik konseptidir. Sadece Firebase’ de değil, tüm uygulamalarda.

Örneğin bir chat uygulamasında, kullanıcı kendi mesajlarını silebilmelidir. Ama başkalarınınkini asla silememelidir. Yada sileceksede, o üyenin moderator vb. rolü olmalıdır. Uygulamanızı güvenli hale getirmenin ilk yolu, kullanıcılarınızı kimliklendirmektir. Buna Authentication(Doğrulama) diyoruz.

Firebase 4 farklı Authentication aracı sunuyor. Harika. Bence ihtiyaçları tam anlamıyla karşılıyor. Hemde üst düzeyde. Bu yüzden bu konunun altını çizin.

  • Sosyal medya üyelikleri ile Giriş. Facebook, Google, Twitter ne varsa.
  • Klasik email, şifre. Bildiğin üye oluyorlar.
  • Single-session anonymous login
  • Custom login tokens. SSO gibi kurumsal kimliklerle de entegre edilebiliyor. Büyük iş yapar!

“Authorization | Yetkilendirme”

Kullanıcılarınız uygulamanıza kullanıcı girişi yaptıktan sonra artık onların kim olduğunu bilir duruma gelirsiniz, artık uygulamanın verisi üzerinden değişiklik yapabilecekleri yollar sunmalı ve bu yolları sunarkende hangi veri kanalları üzerinde neler yapabileceklerinin kurallarını koymalısınız.

Firebase bunun için deklaratif bir dil sunar. Bu kuralları nereye mi yazacaksınız? Firebase’ e giriş yaptıktan sonra Security & Rules tabında sizi bekliyor olacak.

Hemen çok ufacık bir örnek geliyor. Büyük kapsamlı örnekler ise azcık daha ilerde olacak.

Yukarıdaki kural ile, foo tablosunu sadece okuyabiliyoruz, lakin yazamıyoruz. Çünkü read özelli true, write özelliği ise false.

İleride hiçbir özellik bu şekildeki gibi statik olmayacak. true false yazıp bırakmayacağız. Bunun yerine true yada false değeri dönen expression lar olacak. Yani aşağıdaki gibi;

Yukarıda yapılan kontrol, users tablosu üzerinde yazma işlemi yapılırken, yazılmak istenen alanın ait olduğu kullanıcı ile, sisteme giriş yapmış kullanıcının aynı olup olmadığıdır. Yani her kullanıcı users tablosunda kendi kaydını güncelleyebilir.

Örnekler bu kadar mı??? Kolay gibi gözüküyor ama işime yeterli olacakmıııı? diye düşünmeyin. Çünkü bu örnekler sadece sistemin işleyişine biraz aşina olmanız için. Asıl lezzetli örnekler, yeri gelince verilecek.

“Data Validation | Veri Validasyonu”

Uygulamanızdaki her veri alanının kendine göre bir kriteri olmalı. Bir alan string, diğeri integer, bir diğeri ise boolean olabilir. Siz her ne kadar bu validasyonu, kullanıcıdan veriyi alırken, front-end te yapsanız da, örneğin input type=”text”, maxlength gibi. En fazla 100 karakter girilebilecek bir alan için, elbet bir kullanıcı frontend teki kısıtlamaları basitçe geçecek ve ilgili alana belkide 10.000 harflik bir kayıt gönderecektir. Bu tarz girişimlere açık olun. Elbet biri yapar. Kimse yapmazsa bile ben yaparım 🙂

İşte bu durumda validate özelliğini kullanacağız. Örnek;

Diyorki; foo tablosuna kayıt girilirken, newData yani gelen yeni data, string tipinde olmalı ve 100 karakterden ufak olmalı. Aksi halde kayıt yapmaz.

validation özelliği tıpkı read ve write özelliği gibi, dahili olarak gelen fonksiyonlara ve değişkenlere erişim hakkına sahiptir. Örneğin kullanıcı bilgisi, server zamanı ve daha fazlası gibi.

user tablosuna kayıt girilirken, kayıt girmek isteyen, giriş yapmış mı ? ve düzenlemek istediği kayıt ın sahipliği kendinde mi? diye kontrol ediyor.

Veri validasyonu Firebase tarafında şıkır şıkır çalışacaktır. Yukarıdaki kuralları uygularsanız, kimse 100 karakterden fazla bir içerik giremeyecek yada kendisine ait olmayan bir üyeliği güncellemeyecektir. Lakin siz yine de frontend te validasyon yapmaya devam ederseniz, kullanıcı deneyimini kaybetmemiş olursunuz. Çünkü bir içeriğin 100 karakterden büyük olup olmadığı kontrolünü frontend ten kaldırdığınızda, kullanıcı yanlış bir iş yaptığını ancak, sorgu Firebase serverlarına gidip, olumsuz yanıt alıp geri döndüğünde farkedecektir. Keza offline uygulamalar da yapabilirsiniz. Böyle bir durumda. Kullanıcı yazar yazar yazar. İnternete bağlanıp,veri Firebase serverlarına gitmeye kalkınca, ŞOK ŞOK, tüm emekler ÇÖP e gider.

Bir sonraki konuda görüşmek üzere..

1 Comment Firebase Security | Firebase Güvenliğini Anlamak

  1. ismail

    Merhabalar. üyelik kaydı yaptırdığımız zaman user_uid auth kısmında saklanıyor ama burdaki kurallar database kısmından sorgulanıyor. Yeni üye kaydı yapıldığında user_id yi database’e nasıl kaydedebilirim. Teşekkür ederim

    Reply

Leave A Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir