- Konu sahibi
- #1
PHP kodu tarayıcıda neden kaynak olarak görünmemelidir?
PHP kodu tarayıcıda kaynak olarak görünmemelidir; çünkü PHP sunucuda çalıştırılır ve tarayıcıya yalnızca PHP’nin ürettiği çıktı, genellikle HTML gönderilir. Uygulamanın gerçek PHP dosyası beklenmedik biçimde ham içeriğiyle yanıt olarak geliyorsa işleyici eşlemesi hatalı olabilir; uygulamanın kaynak gösterme veya dosya okuma özelliği de incelenmelidir. Bir eğitim sayfasında bilerek gösterilen kod örneği, tek başına sızıntı kanıtı değildir. Bu durum yalnızca görüntüleme sorunu değil, kaynak kodu ve gizli bilgilerin açığa çıkması açısından ciddi bir yapılandırma hatasıdır.
PHP isteği nasıl işler?
Tarayıcı
index.php dosyasını istediğinde web sunucusu dosyayı PHP işlemcisine devreder. PHP kodu çalışır; echo ile üretilen HTML, metin veya JSON HTTP yanıtına yazılır. Tarayıcı bu yanıtı işler ve PHP kaynak kodunu görmez.Örneğin sunucudaki dosya şöyle olsun:
Kod:
<?php
$message = 'PHP çalışıyor';
echo '<h1>' . htmlspecialchars($message, ENT_QUOTES, 'UTF-8') . '</h1>';
Beklenen sayfa çıktısı yalnızca
PHP çalışıyor başlığının görüntülenmesidir. Bu örneğin ham dosya içeriği HTTP yanıtında aynen bulunuyorsa PHP yorumlama akışı incelenmelidir. Yalnızca değişken adına benzeyen bir metin görmek kesin kanıt sayılmaz. Tarayıcının geliştirici araçlarında görülen HTML de PHP kaynak kodu değildir; bu, sunucuda üretilmiş sonuçtur.Sorunu güvenli biçimde teşhis etme
Gerçek uygulama kaynağı açığa çıkıyorsa önce etkilenen adreslere erişimi sınırlandırın. Açığa çıkan parola veya anahtar varsa iptal edip yenileyin; erişim kayıtlarıyla olayın kapsamını araştırın. Kaynak metnini veya sırları destek mesajlarına kopyalamayın. Sonra yalnız yetkili test ortamında ya da erişimi sınırlandırılmış bir konumda, uygulamanın kullandığı web sunucusunu kontrol edin.
- İncelediğiniz PHP işleyicisinin kapsamındaki, erişimi sınırlandırılmış dizinde yalnızca aşağıdaki içeriği taşıyan geçici
php-test.phpdosyasını oluşturun:
Kod:<?php echo 'PHP_OK'; - Dosyayı tarayıcıda normal uygulama alan adınız üzerinden açın; dosyayı doğrudan bilgisayarınızdan veya bir editörün önizlemesinden çalıştırmayın.
- Ekranda
PHP_OKgörünüyorsa PHP işleyicisi en azından bu dizinde çalışıyordur. Uygulamanızdaki sorun dosya yolu, yönlendirme veya belirli sanal sunucu yapılandırmasıyla sınırlı olabilir. - Geliştirici araçlarının Network yanıtında veya sayfa kaynağında test dosyasının ham kodu görünüyorsa dosya yorumlanmadan gönderiliyordur. PHP çalışma zamanı ile web sunucusunun dosya eşlemesini ve ilgili sanal sunucu yapılandırmasını düzeltin.
- Dosya indiriliyorsa veya sunucu hata veriyorsa, dosya uzantısını, istek yönlendirmesini, PHP işlemcisinin kurulu ve etkin olduğunu ve web sunucusunun hata kayıtlarını kontrol edin.
- Test bittiğinde geçici dosyayı kaldırın. Ardından asıl uygulamanın aynı adres ve dizin kapsamındaki yanıtını, gerçek sırları ekrana basmadan doğrulayın.
Bu testin amacı yalnızca PHP’nin çalışıp çalışmadığını ayırmaktır.
PHP_OK görülmesi, uygulamanın veritabanı, oturum veya framework ayarlarının doğru olduğu anlamına gelmez.Belirtiye göre doğru yaklaşım
Aşağıdaki ayrım, sorunun sunucu katmanında mı yoksa uygulama akışında mı olduğunu hızlıca belirlemeye yardımcı olur.
| Belirti | Muhtemel neden | İlk kontrol |
|---|---|---|
| PHP etiketleri kaynakta görünüyor | Dosya PHP olarak işlenmiyor | PHP işleyicisi ve sanal sunucu eşlemesi |
| Dosya indiriliyor | Yanıt türü veya sunucu yönlendirmesi yanlış | Web sunucusu yapılandırması ve dosya uzantısı |
| Boş sayfa ya da sunucu hatası | PHP, uygulama veya üst sunucu katmanında hata olabilir | Sunucu hata kayıtları ve uygulama günlükleri |
| Yalnız bazı klasörlerde kaynak görünüyor | Farklı sanal sunucu veya dizin kuralı | İlgili dizinin yapılandırması |
Sunucu yapılandırmasını değiştirdikten sonra aynı test dosyasını yeniden açın. Değişiklik etkili olmuyorsa ilgili PHP işlemcisinin veya web sunucusunun yeniden yüklenmesi gerekebilir; bunu barındırma sağlayıcısının yönetim yöntemiyle yapın. Kaynak görünmesi devam ediyorsa uygulamayı yayımlamadan önce o sanal sunucuda PHP dosyalarını erişime kapatın.
Sık yapılan hatalar
- PHP dosyasını
.htmlolarak kaydetmek: Sunucu bu uzantıyı PHP’ye devretmeyebilir. PHP kodu içeren dosyanın uzantısı ve sunucu kuralı birlikte uyumlu olmalıdır. - Dosyayı
file://ile açmak: Bu yöntem bir PHP sunucusu çalıştırmaz. Dosya, PHP destekli bir web sunucusu üzerinden istenmelidir. - Yalnızca tarayıcı önbelleğini temizlemek: Kaynak kodu görünüyorsa temel sorun önbellek değil, sunucunun yanıt üretme biçimidir.
- Gizli bilgileri PHP dosyasına doğrudan yazmak: PHP normal çalışsa bile yanlış yapılandırma veya yedek dosya gibi başka bir sunucu hatası bilgileri açığa çıkarabilir. Gizli yapılandırmayı uygulamanın güvenli yapılandırma yönteminde tutun.
- Sorunu gidermek için kaynak kodunu HTML yorumu içine almak: Bu, kodu korumaz; HTML yorumları tarayıcıya gönderilir ve sayfa kaynağında okunabilir.
Sık sorulan sorular
PHP çalışırken kaynak kodu yine de sızabilir mi?
Evet. Yanlış hazırlanmış bir dosya indirme veya kaynak gösterme uç noktası, PHP işleyicisi doğru çalışırken de dosya içeriğini yanıt olarak okuyabilir. Bu yüzden “PHP_OK çıktı” sonucu, bütün uygulama yollarının güvenli olduğunu kanıtlamaz.
Eski PHP yedek dosyaları neden ayrıca kontrol edilmelidir?
config.php.bak gibi bir kopya, PHP işleyicisine gönderilmeyip statik dosya olarak sunulabilir. Kaynak ve yapılandırma yedeklerini herkese açık belge kökünün dışında tutun; yalnızca asıl .php adresinin düzgün çalışmasına güvenmeyin.