Firebase ile uygulama geliştirirken, ilk önce öğrenmeniz gereken şey, DATA’ nızı nasıl korumanız gerektiğidir. Eğerki güvenliği es geçerseniz, günler harcayıp ortaya çıkardığınız ürün, ertesi sabah yerle bir edilmiş olabilir.

Firebase nedir ? Neden kullanılır ? konusunda herhangi bir fikriniz yok ise öncelikle http://angulartr.com/firebase-nedir-ne-amacla-kullanilir/ adresindeki yazımı okumanızı tavsiye ederim.

Güvenlik konusunu tam anlamıyla anlamanız için öncelikle Firebase’ in anasayfasındaki motto’ suna tekrardan bir göz atıyoruz.

Firebase can power your app’s backend, including data storage, user authentication, static hosting, and more. Focus on creating extraordinary user experiences. We’ll take care of the rest.

Bu ne demek oluyor ?

Uygulamamızın Backend’ ini tamamen Firebase’ e devrediyoruz. Veri depolama, kullanıcı işlemleri, hosting ve daha fazlası. Ve asıl önemli kısma geliyoruz, tüm bunlar olurken Firebase ile iletişime geçen tüm kodumuz, kullanıcının gözü önünde.

Çünkü Backend işini Firebase yaptığı için, sadece Frontend’ imiz var. Tüm kodlar javascript ile yazılıp, kullanıcının tarayıcısında çalışıyor. Ve Kullanıcı sayfa kaynağını görüntülediğinde, uygulamamızın tüm kodunu görüyor.

Pardon ama niye Backend yok?” diyebilirsiniz halen, eğerki Firebase’ in ne olduğunu, neler yapabildiğini anlamadıysanız.

Firebase bize bir rest api veriyor. Bu rest api üzerinden Firebase’ deki database’ imizin tüm data işlemlerini(kayıt ekleme, silme, güncelleme,okuma) Realtime olarak gerçekleştiriyoruz.

Firebase tüm bunları sunarken halen kendimizin de yazdığı bir backend’ e ihtiyacımız olduğunu mu düşünüyorsunuz ?

Hem Evet Hem Hayır.

Gün içinde kullandığınız web sitelerini, mobil uygulamaları düşündüğünüzde, hepsinin yaptığı iş gözönüne alındığında, karşımıza 100 lerce kategori ve çalışma mantığı çıkar. Kimileri çok büyük e-ticaret siteleri, kimileri ise basit birkaç veri alıp verme prensibine dayalı fakat çok yararlı uygulamalardır.

Bir e-ticaret sitesinde yapılan işlemlerin %40′ ı kullanıcının yaptığı alışverişlere dayalı ise, %60′ ı da arkaplanda çalışan ciddi backend işlemleridir. Mail gönderimi, 10 larca webservice ile iletişim, cron jobs, veri analizi ve daha pek çoğu.

Milyonlarca insanın kullandığı whatsapp uygulamasını incelediğimizde ise, tamamen anlık olarak kullanıcıların gönderdiği mesajları ileten bir çalışma mekanizması olduğu görürüz.

İşte tüm bunlardan yola çıkarak, örnekleri daha da arttırarak, Firebase’ in her web sitesi yada uygulama için tek başına kullanılamayacağı LAKİN pek çok websitesi ve uygulama içinse tek başına(ekstradan backend yazmamıza ihtiyaç olmadan) kullanılmasının hem maddi, hemde uygulamanın ortaya çıkış hızını ve yönetilebilirliğini muazzam derecede arttırdığını söyleyebiliriz.

Özetlersek, bazı projeler Firebase ile asla yapılamaz. Bazıları için ise en iyisi Firebase yada muadilleridir.

 

“Güvenlik, Güvenlik, peki bana basit bir örnek ver ki güvenlik konusunda nelere dikkat etmeliyim, neler dönüyor anlayayım”

Bu yazıyı hazırlamaya başlarken https://code4startup.com/startuphack/how-a-chinese-student-hacked-my-taskninja-application adresindeki konu karşıma çıktı. İnceleyelim;

Uygulama kısaca şunu yapıyor;

Kullanıcılar ilanlar veriyor, ve diğer kullanıcılar da bunları onaylıyor. Fakat onaylama işleminin sadece ilanı veren kişi tarafından yapılabilmesi gerekiyor. Bu kontrol sadece frontend te ele alınmış.

code2

Kullanıcının biride napıyor ? Hemen bütün projeyi tarayıcıdan kaydedip, bu kontrolü siliyor ve sistemi hackliyor 🙂

Peki normalde nasıl olurdu ?

Kullanıcı frontend’ teki kodu değiştirip, bu sorguyu gönderse bile backend’ te önlem alınıp, işlem gerçekleştirilmeyecekti.

İşte bizde tüm bu validasyonları ve güvenlik kontrollerini Firebase security rules ile yapacağız. İşlemler çok basit.

Firebase security rules konuları için angulartr yi takip etmeyi unutmayın.

5 Comments Firebase Security & Rules [Güvenlik ve Kurallar] Giriş

  1. Sertaç

    Selamlar, yazının girişi çok güzel olmuş. Önden soru sorarak yazınızın devamına katkıda bulunmak istiyorum.

    – Dediğiniz gibi firebase ile iletişim kodumuz ortada, kullanıcı bu kod ile bir anda milyarlarda kullanıcı oluşturabilir. Buna önlem nedir aceba? Verification sanırım ? Bu kurallara nasıl eklenir ?
    – Verification yapan bir kullanıcıda yine bu kod ile firebase storage içine milyonlarda dosya upload yada gelişi güzel dosya silebilir.

    Yazınızın devamını dört gözle bekliyorum, teşekkürler.

    Reply
    1. emre

      Merhaba Sertaç,
      Öncelikle değerli yorumun için teşekkür ederim.
      Aslına bakarsan milyarlarca kullanıcı kaydı denemesi yapacak kişi, backend’ ini kendi serverlarımızda sakladığımız uygulamalarada saldırıp başarılı olabilir. Captcha’ yı geçmenin binbir yolu var. Lakin Firebase’ de bu daha kolay gözüküyor haliylen. Fakat Firebase’ in hangi amaca hizmet ettiğini, çapını iyi görmek gerekiyor. Firebase daha soft uygulamalar için var. Şuanda büyük şirketler tarafından iç uygulamalarda kullanılıyor daha çok. Çünkü kimin girip çıktığı belli, kimse yanlış bir iş yapmaz. Ve bunu dert etmeyince, serverlarla uğraşmakta gereksiz olup, kolayca scale edilebilen firebase kullanıyorlar.

      Bu demek olmuyorki ben firebase ile public bir uygulama yapamam! Firebase rules konusunu çok iyi anlamak gerekiyor. Ben defalarca bakmama rağmen, hiçbir zaman içime sinmedi. Her an söylenenleri uygulasam ve bir uygulama geliştirsem, açıklar zinciri ile başbaşa kalacağım gibi geliyor. Ama emin ol ki, firebase rules’ u iyi anlayan birisi, günde milyonlarca kişinin kullandığı bir uygulama yapıp, gönül rahatlığı ile sunabilir.

      Ha milyarlarca üyelik denemesi alır mı? Alır, fakat gün sonunda en fazla 1 milyar küsür üyesi olur. Data kaybetmez, yada çaldırtmaz. Firebase ile reCaptcha entegrasyonunun bir yolu yok diye biliyorum fakat , firebase rules ile yeni üyelik denemeleri arasına 2-3 sn gibi bir şart koyarsa bunu da engeller. Fakat ölçülebilir bir sonuç olmaz. Kabul edilemez.

      Bu yüzden bu tarz noktalarda, Üyelik işlemini bir third party’ e devretmek en güzeli. Firebase facebook, google, twitter gibi neredeyse tüm insanların en az birine sahip olduğu provider’ lar sunuyor. Custom registration yerine bu denenebilir.

      Aslında senin aradığın service https://www.backand.com/ olabilir. Firebase gibi ama değil. Firebase’ in yaptıklarının benzerini yapıyor. Benzer konsept ama arkasında Google yok 🙂 Keza nodejs yazar gibi, event bazlı kod yazabiliyorsun. Yani Google reCaptcha’ yı backand.com da entegre edebilirsin 🙂 reCaptcha Frontend entegrasyon + üyelik XHR’ da reCaptcha validation code gönderimi + backand.com üye tablosu kayıt event’ inde js ile yazılmış reCaptcha api kontrol. İşte hepsi bu kadar. Bu sayede milyarlarca üyeliği durdurmak için önlem alabilmiş olursun. Ha reCaptcha kırılırsa, kırılır. Ama kendi server’ ını kullansanda aynı şey olacak bu durumda.

      Görüşmek üzere.

      Reply
  2. Sertaç

    Emre hocam teşekkür ederim bilgilendirme için. Firebase console da yetersiz gibi, hem auth hemde storage kısımlarının yönetimi zor ve yavaş. Önerdiğiniz alternatifi inceliyorum. Ancak son bir uğraş daha verip anlamayı denicem.
    Bu arada sing up kontrolü için “günün sonuda en fazla 1 mil.üye olur” demekle neyi kastetdiniz. Firebase sahte olanları eliyormu? yoksa verification yapmayanlar siliniyor mu? Ben denedim 48.st de ve silinmedi. Zaten javakodunu vermişler ama sec.rules da verification kontrolü yapmamışlar. Olmazsada yine çok teşekkürler.

    Reply
    1. emre

      sen 1 milyon kişi üye olabilir demiştin ya bende onu kastederek, en fazla 1 milyon üyen olur, ne kaybedersinki manasında dedim. 5 milyon üyelik denenirse onlarda üye olur, sınırı yok (üyeliğinin storage’ ı bitmedikçe), ama 1 milyon üye işini kafana takma, twitter’ da da 10 milyonlarca sahte üye var ona bakarsan. Hem şöyle bir durum var. Database’ in bakımını sen yapmıyorsun, datan arttıkça yavaşlama vs vs derdin yok ki hiç, farzetki 100 milyon kişi üye olsun, bu firebase’ in sorunu. Üyeliklerin gerçekliği senin için önemliyse (elbette önemli fakat e-ticaret sitesi yapmıyoruz) mail aktivasyon getirirsin. Aktive edilmeyen üyelikler yarım saat içinde silinir. Nasıl ???? çok basit. Firebase ile 3.party servisleri entegre edebiliyorsun örneğin popüler mail gönderim şirketleri, bunlar ile mail göndertirsin, kullanıcı maildeki linke tıklar, url den aktivasyon kodunu al xhr ile gönder(firebase) sorgula vs vs. cron vb. içinde 3.party entegrasyonlar var. cronlada yarım saatte bir çöp üyeleri(aktive etmeyen) sil.
      Burda görmen gereken şu; cronla 1 milyon üye silmek, veritabanın sende olsa ne kadar uzun sürebilir dimi ? ama firebase’ de emri ver, gerisine karışma.

      Reply

Leave A Comment

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