★★★ SANALALEM.ORG'A HOŞ GELDİNİZ ★★★ SİTEMİZ SÜREKLİ GÜNCELLENMEKTEDİR ★★★ LÜTFEN ZİYARETÇİ DEFTERİMİZİ İMZALAYINIZ ★★★ EN İYİ GÖRÜNÜM 800x600 ★★★ SİTEMİZİ ARKADAŞLARINIZA TAVSİYE EDİNİZ ★★★
← yazılar
· 3 dk okuma

Plesk'te belge kökü yanlışsa .env dosyanız internetten okunabilir

Laravel kurdunuz, site çalışıyor, her şey yolunda görünüyor. Ama tarayıcıya /.env yazan biri uygulama anahtarınızı indirebiliyor olabilir.

Bu yazı bir vaka anlatısı. Geçen hafta bir Laravel projesini Plesk'e kurarken sırayla dört farklı sorunla karşılaştık ve her biri klasikti. En tehlikelisi de en sessiz olanıydı.

Belge kökü meselesi

Laravel'in dizin yapısı şöyledir:

httpdocs/
├── .env          ← uygulama anahtarı, veritabanı parolası
├── app/          ← kaynak kod
├── vendor/       ← bağımlılıklar
├── storage/      ← loglar, önbellek
└── public/       ← YALNIZCA burası dışarıya açık olmalı
    └── index.php

Plesk'te bir abonelik açtığınızda belge kökü varsayılan olarak httpdocs gelir. Laravel'i oraya kurup belge kökünü değiştirmezseniz, web sunucusu bütün klasörü servis eder.

Sonuç: https://siteniz.com/.env adresi dosyayı indirir.

O dosyada APP_KEY vardır. O anahtar oturum çerezlerini imzalar ve şifrelenmiş alanları çözer. Veritabanı parolanız da oradadır.

Düzeltmesi

Plesk → Hosting Ayarları → Belge kökühttpdocs/public

Bu kadar. Ama unutulması da bu kadar kolay, çünkü site belge kökü yanlışken de çalışır. Hiçbir hata vermez. Sadece savunmasızdır.

Doğrulaması

Kurulum sonrası ilk yapılacak kontrol:

curl -s -o /dev/null -w "%{http_code}\n" https://siteniz.com/.env

403 veya 404 bekliyoruz. 200 dönüyorsa belge kökü yanlıştır. Düzeltin ve ardından php artisan key:generate ile anahtarı yenileyin — eski anahtar ifşa olmuş sayılır.

Yanındaki üç klasik

Aynı kurulumda karşılaştığımız diğer üç sorun:

1. PHP sürümü. Laravel 12/13 PHP 8.2+ ister. Plesk'te abonelik 8.1'de kalmışsa site 500 verir ve log'a çoğu zaman anlamlı bir şey yazmaz, çünkü hata autoloader'ın ilk satırında oluşur. Plesk → PHP Ayarları'ndan kontrol edin.

2. Dağıtım kancası chroot'ta. Plesk'in Git dağıtım eylemleri, SSH erişimi "chrooted" seçiliyken hapsedilmiş bir kabukta çalışır. composer bir yana, /opt/plesk/php/8.3/bin/php bile görünmez — tam yol yazsanız da "No such file or directory" alırsınız.

İki yolu var: ya SSH erişimini /bin/bash yapıp yalıtımı gevşetirsiniz, ya da vendor/ klasörünü depoya alıp sunucuda composer'a hiç ihtiyaç duymazsınız. Müşteri sitelerini de barındıran bir makinede ikinci yolu tercih ederim.

3. APP_KEY yanlış uzunlukta. Anahtarı elle kopyalarken bir karakter eksilirse Laravel şu hatayı verir:

Unsupported cipher or incorrect key length

Varsayılan şifre AES-256-CBC'dir ve tam 32 bayt anahtar ister; yani base64: kısmından sonrası 44 karakter olmalıdır. Kopyalamak yerine sunucuda üretin:

php artisan key:generate --force

Ve bir de kalıcı ayar

php.ini'de expose_php = Off yapın. Aksi hâlde her yanıtta X-Powered-By: PHP/8.4.24 başlığı gider ve saldırgana hangi açığı deneyeceğini siz söylemiş olursunuz.

Kontrol:

curl -sI https://siteniz.com/ | grep -i x-powered-by

Çıktı boşsa doğru.

// paylaş

WhatsApp X Telegram

// hatıra defteri

Sen ne hatırlıyorsun?

tüm defter →

Burası yorum alanı değil. Bu yazıyı okurken aklına gelen kendi hatıranı bırak — bir isim, bir akşam, bir ayrıntı. Arşiv ortak hafızayla büyüyor.

Küfür ve bağlantı geçmez. E-posta istemiyoruz. Nasıl saklıyoruz?

Defter henüz boş. İlk hatırayı sen bırak.

// devamı