PHP kodu SQL giriş bilgi depolama güvenlik riski?

6 Cevap php

İlk kez okuyucu, ilk kez posteri dakikaları (Woo!)

Yani gayrı web sitesi için oturum açma komut dosyalarını uygulamaktadır oldum. Uzlaşma olabilir, ama sadece güvenli olması için değil, ben bir güvenlik riski php kod düz metin olarak depolanır benim MySQL veritabanı oturumu sahip olup olmadığını sormak istiyorum.

Bildiğim kadarıyla, kod kendisi Apache tarafından çözümlenir, böylece son kullanıcı onu tutmak için güvenli olmalıdır anlamına gelecektir (sadece çıkış), görmüyor ... ama ikinci bir görüş istiyorum .

Summary: Accessing database through mysql_connect, mysql_select_db, mysql_query. Login info stored in local variables defined at each iteration of the script, and (I think) dumped once script terminates.

Güvenlik açığı?

6 Cevap

Ayrıca Webroot dışında yaşayan bir ayrı yapılandırma dosyasına kullanıcı adı / şifre kombinasyonu hareket düşünebiliriz. Yer webserver tarafında doğrudan erişilebilir olduğundan emin olun.

Bu şekilde, nedense web sunucusu veritabanı sunucusuna hesap bilgilerini kaybetmek yok artık PHP dosyalarını çalıştırmak için değil karar verirse.

Eğer. Php dosyasında webroot (editörler, SVN ya da ne olursa olsun) bir kopyasını yapar bir şey kullanırsanız, bir bonus olarak, sen. Php yürütme dolaşmakta kimse risk yok.

Bu bir veritabanına konuşmak web uygulamaları için çok standart prosedür bulunuyor.

Ben web sunucusu ve kendiniz dışındaki kullanıcılar için uzak dosyadan okuma izinleri alarak tavsiye - dosya üzerinde casus olabilir kutunuza diğer kullanıcılar varsa, onlar sizin mysql sunucusuna erişmek mümkün olacak.

O bile girmesini yetkisiz kullanıcıların önlemek olacak gibi Ayrıca, üst dizinde çalıştırılabilir izni ayarlamak gerekir.

Sadece ihtiyacınız kutuları buna bağlayabilirsiniz, böylece mysql kullanıcının izin sağlamlaştırırsanız.

Kutu tehlikeye ve Saldırgan root erişimi varsa tabii ki, sizi koruyacak çok az var.

Sen ayrı bir dizinde (tabii index.php hariç) tüm php dosyaları koyarak güvenlik bazı ek katman eklemek ve bir. Htaccess dosyası ile bunları koruyabilirsiniz. Bu php ayrıştırıcı çağrılır ve apache düz metin dosyaları döndürür olduğu durumlarda kapsar. Yararlı olabilecek bir şey daha: <?php defined('some_id_here') or die(); ?>. Sen index.php (eğer some_id_here tanımlıyorsunuz) dışında her php dosyasının üstündeki bu koyabilirsiniz böylece veritabanı dosyalarına doğrudan erişimi vardır.

Bu, ancak olası, mümkün webroot, içindeki kod hacme sahip değil alınabilir savunma sadece ilk satırı.

Sadece zaten veritabanına bağlanmak için kaynak makineleri az sayıda izin basit uygun - veritabanı da veritabanı kullanıcı ve şifre yayınlandı bile güvenli olmalıdır.

Defence In Depth

<?php  // simplest /index.php, as the only .PHP file in the public-accessible webroot
require '../bootstrap.php';

I dont know how you connect to your MySQL database, but if you use PDO there is the possibility that the PDO constructor throws an exception. If you dont catch this exception the Zend Engine will show a backtrace by default and reveal your connection details!

Bu bir php dosya / değişkeni içinde bağlantı creds saklamak ya, bu durumda size DSN (veri kaynağı adı) olarak, PDO kullanmak için sadece normaldir. Incelenir ve web içine düz göndermez alır çünkü ben bile, bir php dosyasının içine koymak için öneririm ...

Daha fazla güvenlik için bir adım www-kök dışında giriş bilgilerinizi koymak ya da (bu imkansız web sunucusu aracılığı ile dosyaya erişmek için yapacak) bir. Htaccess dosyası ile korumaktır.

Ancak benim sunucuda o localhost'tan not bağlamak mümkün değildir. Birisi (elbette böyle değil.) Oturum açma bilgilerini okur Yani eğer i dont care.

Bu web sunucusu (ya da belki biraz daha düşük olanlar da) şifrenizi görmek mümkün olacak root yetkileri ile giriş yapabilirsiniz herkes - ama Eğer şifrenizi tutmak olabilir başka yerde o zaman, (süper kullanıcıya karşı savunmak için aslında imkansız, onlar) etrafında kesmek ve onu bulabiliriz. Bunun riskinden, güvenli olmalıdır.

Edit:. Sunucu yedekleri de bu php komut in-açık eğer şifrenizi kurtarmak için (şifresiz varsa, ya da onları deşifre edebilirsiniz birileri tarafından) kullanılabilir. Bu olası saldırı belki de farklı bir güvenli yere şifreyi tutarak, ve sadece son derece kısıtlayıcı koşullar altında (güvenli) göndererek (büyük rahatsızlık / maliyet) hafifletilebilir olabilir. Bu korku saldırı türüdür?