Ovo su tvorci Laravela morali napraviti drugačije jer ovo je epidemija. Znam da env treba sakriti, znam i kako ga sakriti, međutim to je trebao biti prioritet frameworka (sigurnost).
Googlajte: db_password filetype:env
Ne znam koliko ljudi koristi na forumu Laravel, pa pripazite da se ne desi i vašem projektu.
Pa ništa ne treba biti u web accessible directory-ju osim public
-a?
Tipa, u VrtualHosts podešavanju imaš
# Ensure that Apache listens on port 80
Listen 80
<VirtualHost *:80>
DocumentRoot "/var/www/example.com/public" # <= public is MOST important
ServerName www.example.com
# Other directives here
</VirtualHost>
Svako drugačije igranje sa serverom je opasno.
Ja radim sljedeće na Linux/Apache-u (malo se razlikuje od podešavanja iznad pa oprezno):
- kompletan projekat imam na nekoj deep inside lokaciji, recimo
~/websites/example.com
^ tu se nalaze svi Laravel (ili bilo koji drugi for that matter) fajlovi - napravim simbolic link u
ln -s /home/username/websites/example.com/public /var/www/example.com
^ bitno je primijetiti da linkujempublic
dir i ništa više -
sudo nano /etc/apache2/sites-available/example.com.conf
^ napravim conf file koji je samo vezan za tu sym linked lokaciju i nema veze sa lokacijom gdje je Laravel projekt - U fajlu postavim
DocumentRoot /var/www/example.com
^ sad će ovo imati uvid samo upublic
od projekta
I riješen problem.
U biti to nije propust ni Taylera niti Laravela, to je proupust Admina servera. Ali @tpojka ti je vec sve objasnio. Nema potrebe da kompletna aplikacija bude u www root folderu dovolajn je samo public folder.
Ma znam, čitam docs, pratim grupe i laracast, sve mi je jasno što se postavljanja Laravela na server tiče. Međutim smatram da .env nisu trebalo tako postaviti niti nazvati. Zašto nije npr. env.php?
Nema ovo veze s Laravelom niti je ikakva Laravel-specific sigurnosna rupa.
I da se zove env.php
opet nisi rijesio problem vec si ga samo gurnuo na drugo mjesto, a to je da i dalje imas neispravno setupiran webserver.
Setupiras webserver kako spada i nemas ovaj problem.
btw poz @creatifcode, dugo te nije bilo. ;]
Plus se i fajl može nazvati env.php
.
Framework koristi vlucas/dotenv
package i može se vidjeti kako da se postave dodatna podešavanja.
Opet, slažem se sa @tony da se ne postiže ništa u vezi sa inicijalnim problemom.
.env (ako se pogrešno postavi Laravel na server) očito bude indexiran od crawlera. A kada ga indeksira - javno je dostupan sadržaj datoteke.
Da ga postavi u .php file - ne može biti (po defaultu) javno dostupan i vidljiv sadržaj datoteke.
Na to sam mislio.
Problem nije datoteka i njen sadržaj, problem je (uz neispravno postavljanje Laravela na server) laka dostupnost .env datoteke i pregled njenog sadržaja.
Nema to veze sa Laravel to je jednostavno propust kao sto je neko pomenuo onoga ko je podesio server i fino su taj dio opisali ovdje https://laravel.com/docs/5.7/configuration
Ali vjerovatno dobar dio koristi i shared hosting pa iz public prebace u public_html cio sadrzaj gdje im je i .env i samo promijene putanju u index.php i sami sebi napravili problem.