Laravel 5 ile Gelen Güvenlik Zafiyeti (.env file)

Merhabalar,

Geçenlerde (7-23 ağustos arası) Bolu’da Linux Yaz Kampı vardı ve Uğur Arıcı, Hamza Bulat, Adil İlhan ve Ramazan Terzi ile beraber Php eğitimi verdik. Ramazan ve Hamza abinin ben ve Uğur dinlenelim diye geldikleri bir vakitte bizde Uğur ile beraber fırsattan istifade Laravel 5’i bir kurcalayalım dedik. Ne gelmiş, ne gitmiş, bu adamlar yne ne gibi hayran bırakacak şeyler yapmışlar diye.

Laravel 5 ile gelen env dosyasından bahsedeceğim. Bu dosya tam olarak “.env” olarak duruyor sistemde. Unix ve Linux sistemlerde dosyasının başında nokta var ise o dosya gizli dosyadır. Yani kullanıcının bu dosya ile  herhangi bir işi yok, sistem ihtiyacı olduğunda kullanıyordur. Kullanıcının işi yok ise kullanıcının GUI’de boş yere görmesininde manası yoktur, biz bunu hide yapalım demişler.

Peki bu dosyanın Laravel 5’teki işlevi ne? Laravel’in eski sürümlerinde veritabanı bağlantı ayarları, smtp mail ayarları, veritabanı driver ayarları vs gibi tüm ayarlar “app/config/” dizini içerisindeki php dosyaları ile yapılıyordu. Ancak Laravel geliştiricileri, bir projeyi birden fazla kişi geliştiriyor. Her edit commit’ten sonra repoyu pull eden developer tekrardan o ayar dosyaları ile oynamasın diye tüm ayaların tek bir dosya üzerinden yapılmasına karar vermişler. Bu sebepten ötürü Laravel’in root dizininde .env dosyasını da getirmişler.

Bilindiği üzere Laravel’de 3. kullanıcının görebildiği dizin sadece “public”  dizini idi. Public dizinin önceki dizinlere ulaşamadığından herhangi bir güvenlik açığı teşkil etmiyordu. Ancak çoğu paylaşımlı hosting firması verdikleri hosting hizmetinde illa tüm dosyaları 3. kullanıcının erişebileceği dizine upload etmenizi istiyor. Eski sürümlerde ayalamaları php dosyasından yaptığınız için yine bir sıkıntı çıkmıyordu, ancak Laravel 5’te .env dosyası üzerinden yapıldığından ve bu dosya içeriğini 3. kullanıcı rahatça okuyabildiğinden tüm bilgilerimizi resmen tepsi üzerinde yetkisi olmayan kişilere teslim etmiş oluyoruz.

Dipnot : Laravel’in paylaşımlı hostingde nasıl kullanılacağı Sinan Eldem tarafından şurada anlatılmış : https://www.sinaneldem.com.tr/paylasimli-sunucuya-laravel-4-yuklemek/

Sizin de dikkatinizi çekmiştir, bu güvenlik açığı Laravel’in bir güvenlik zafiyeti değil. Laravel’in yanlış kullanılmasından ötürü ortaya çıkan bir güvenlik zafiyeti. Ve malesef kendine “developer” sıfatı takıp bunu göremeyecek kadar cahil developer(!) arkadaşlar var.

intext:APP_ENV ext:env” gibi bir google dork ile (ki bu dorklar rahatlıkla çoğaltılabilir) nekadar cahil geliştirici olduğu tespit edebilirsiniz 🙂

Dipnot : .env dosyasında sadece veritabanı bilgileri tutulmuyor. SMTP mail bilgilerinden kullanılan Facebook gibi sistemlerin API secret keylerine kadar sistemin tüm ayarları orada tutuluyor. Tehlikenin boyutunu siz düşünün 🙂

heklenmeden bir gün daha geçirmeniz dileği ile…

Comments on this post

  1. .env dosyasını productionda hiç kullanmamak için;
    config dosyalarında ayarları env(‘DB_HOST’, ‘localhost’) şeklinde kullanmak gerekir. env dosyası varsa DB_HOST oradan gelecek yoksa localhost kullanılacaktır.

  2. ergün

    peki bunu gidermenin yolu nedir.

    • tester

      Kullandığınız sunucuya göre gerekli ayarları yapmak gerekir.
      Apache, nginx vs gibi. genelde apache oluyor; .htaccess’te gerekli ayarları yapıp dizinleri gizlemek lazım. Ama sunucu üstten zorlama yapıyor da olabilir.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackbacks and Pinbacks

  1. […] Bu arada .env file demişken şu yazıma da göz atmanızda fayda var; Laravel 5 ile Gelen Güvenlik Zafiyeti (.env file) […]

TrackBack URL