DB veri erişim gibi nerede PHP komut yapılandırmaları saklamak?

7 Cevap

Ben sadece tüm çerçeve yapılandırmasını içeren bir büyük dizi yapmak bir config.php dosyası var. Ayrıca "mysql: host = localhost; dbname = Mydb" gibi veritabanı kaynak dize şey (btw ki denilen nedir?) Ve DB için kullanıcı adı + şifre. Ben bu korkuyorum:

  1. stupkimlik
  2. iyi değil; there iyi bir çözümdür
  3. güvenli değil (?)

bu yüzden nasıl PHP uzmanlar bunu?

7 Cevap

İşte en çok bunu nasıl, ama aynı zamanda bu çözümlerin bazılarını deneyebilirsiniz:

  • (Bu PHP open_basedir yapılandırma devre dışı olduğunu gerektirir) web klasörü dışında konfigürasyon dosyasını kaydedin.
  • . Htaccess kullanarak yapılandırma dosyasına erişimi kısıtlayın:

    <Location /config.php> Order deny,allow Deny from all </Location>

  • Kullanın. Ini dosyaları ve parse_ini_file fonksiyonunu (bu gerçekten başlı başına bir çözüm değildir, ama diğerleri ile kombine edilebilir)

Bir www, httpdocs veya public_http klasör veya php uygulama bulunmaktadır nerede, böyle bir şey varsa, o config dosyasını koymak için iyi bir uygulamadır bu klasörün dışında, ve sadece bu gibi erişebilirsiniz:

include "../config.php";

Kimse FTP erişimi olmadan bu dosyaya erişebilir, ve bu yüzden uygulama klasörüne sahip kıyasla nispeten güvenli.

Eğer böyle bir klasör yoksa, bir tane oluşturun ve bu klasöre tüm istekleri yönlendirir kökünde bir. Htaccess dosyası yapabilirsiniz. Orada bunu yapmak için birçok farklı yolu vardır, ama hep birlikte farklı bir soru.

Kullanıcıların bu erişmesine izin vermemek için ben genellikle web kök üzerinde, bir düz metin ini tarzı yapılandırma dosyasında depolamak. Buna tüm erişimi engellemek şekilde erişilebilir olduğu durumlarda, genellikle deny from all ile bir. Htaccess dosyası var.

Storing it in a PHP file accessible to users should be fine, but it isn't ideal. If the sever handles PHP files correctly, even if people can access the file, they can't access the values as they just get the output (nothing). There are of course issues with this, (see comments).
Using PHP files is the most common method with PHP projects (Both FOSS and commercial) I have used. Most of them didn't both storing them above the web root. With any stable setup, there is on the face of it very little point in storing your configuration file above the web root, although given Murphy's law it is worth doing if you can (That or use .htaccess or the equilivent for your server to deny user access to a directory)

Neden depolama DB adı & "config.php" şifre güzel değil mi? sürece ben bildiğiniz gibi, bu dosyadaki verileri kamuya gösterilir olamaz.

ÖRN.

<?php
$DB_User = "amindzx";
$DB_Pass = "Something";

// connect to DB and so on.
?>

hacker FTP erişebilirsiniz eğer sürece.

Neden herhangi bir menkul kıymet olmadan basit config.php dosyasını tutmak için aptal? Programcı bu dosyayı bulur bile amindzx gibi dedi, çünkü o, hiçbir şey yapamaz "Bu dosya genel görünümde edilemez." Ya da ben yanılıyorum?

Veritabanı veya ödeme ağ geçidi kimlik, ve ben sunucu üzerinde kontrol var, ben benim apache sanal konak config satırları aşağıdaki gibi eklemek istediğiniz gibi hassas bilgiler ile:

SetEnv DB_USER "myuser"
SetEnv DB_PASS "mypass"

Lütfen PHP, $ _SERVER ['DB_USER'] kullanarak bu erişebilirsiniz. Eğer php çalıştırma zamanında erişen bir dosyaya asla, hangi sadece root tarafından bu yapılandırma dosyası okunabilir yapabilirsiniz. Bir uyarı: Eğer php_info devre dışı bırakmak ve print_r ($ _SERVER) gibi saçma bir şey bu değişkenleri bırakmayın emin olun. (Bunun çoğu here paraphrased veya çalınması.)

Hassas olmayan yapılandırma için, ben senin ayarlarına benzer sabitler, tam bir sınıf yapmak ister, ama bunun cepten-lik gibi.

class Application
{
    const CONTACT_EMAIL = "me@mysite.com";
}

usage:
$contactEmail = Application::CONTACT_EMAIL;

Ben genellikle bu tür veritabanı bağlantı ayarları, dosya yolları vs gibi de bir config.php ayarları saklamak,