Bu aynı klasöre parola yerleştirmek için güvenli midir?

6 Cevap php

Ben php ve mysql kullanıyorum. Benim veritabanı adı, kullanıcı adı ve parolaya sahip bir veritabanı yapılandırma dosyası (db-config.php) var. Www (httpdocs) / app / db-config.php: benim uygulama ve db config dosyası deposu

Bu güvenli midir? Benim dosyayı çalmak ve benim veritabanı giriş bilgilerinizi almak mümkün olacak diğerleri / hackerlar?

Ya da ben örneğin, www klasörü dışında koymak gerekir: db-config.php mağazaları www (httpdocs) aynı düzeydeki klasör içinde. Yani benim app in 1, ben sadece bunu:

include_once('../../db-config.php');

Çalışır mı? Ben root / www / httpdocs klasörüne 2 seviye yukarı atlamak demek?

Eğer veritabanı şifre saklamak için herhangi daha güvenli bir yol var mı?

6 Cevap

Kamuya indirilen PHP yazılım bir sürü genellikle www kök klasörü altında bir dizinde DB şifreleri ile yapılandırma dosyası var ve sürece sunucu doğru yapılandırılmış gibi, OK olmalıdır.

Şifreleri ile bir yapılandırma dosyası gibi herhangi bir hassas bilgi için yapılacak daha iyi bir şey ancak outside belge kök (bir klasör yukarı standart bir uygulama olduğunu) depolamak ve ben tavsiye ederim budur.

Eğer yapılandırma dosyasında kaydetmek ve sonra da yazılım kullanmadan önce şifresini var önce de şifreyi öncesi şifreleyebilirsiniz (ancak bu yalnızca şifre açık depolanan tutacak - sourcecode bir erişimi olan bir hacker dosyaları) kolayca saklanan şifre şifresini mümkün olacaktır.

Umarım şifre ekrana yazdırılır değil, ama evet, web üzerinden doğrudan erişilebilir değil dizinde olması için hala en iyi uygulamadır. Ayrıca web uygulaması minimum gerekli izinleri olan bir giriş kullanmak için iyi bir fikirdir.

Ben unix soket olamaz beri (yerine "localhost" örneğin ben '127 .0.0.1 kullanın ') bir soket aracılığıyla yerel bir TCP bağlantısı üzerinden bağlanma yerine sonuna kadar anlamına gelir, bir chroot hapiste benim web uygulamaları çalıştırmak hapishanede görülen.

Kimse senin. PHP dosyalarının kaynak kodunu görebilirsiniz, şifre public_ftp klasöre koymayın sinüslerle her yerde, (tam denetime sahip olan) web sitenizin klasör içinde tutmak, eğer özel yerleştirmek güvenlidir. ..

Belki [aşırı] durumda birileri httpd.conf ve kaynaklar ortaya çıkacak böylece çalışma PHP durdurma berbat sadece içinde, bir seviye public_html klasörüne üstü yerleştirebilirsiniz.

Eğer web sunucusu üzerinde yeterli kontrol varsa, PHP'nin include_path yönergesine bir dizin eklemenizi öneririz. Sonra, şöyle bir şey söyleyebilirim:

PHP.ini içinde

include_path=/home/xxxx/php_includes:blah.blah.blah

in / home / xxx / php_includes:

create a directory named "config"
create a file named "config/database_config.php"

Eğer PHP dosyaları:

include_once("config/database_config.php")

Dahil etmek kolay ve güvenli bir web kök dışında.

EDIT:

Sen set_include_path komutuyla zamanında yapabilirsiniz. Apache kullanıyorsanız eğer Ayrıca, ben size (bkz: php documentation), bir. Htaccess dosyasında php_admin_value yönergeler yerleştirerek bir dizin için bu ayarlayabilirsiniz düşünüyorum

Yes, you can put the file in same or other directory

Make a configuration file, where you can keep all settings in a file.. and you can keep it any where you want. All you need to is call whenever you need it.

Bu yapılandırma dosyasına, kamu tarafından dosya izin unaccessible olun.

1. Make config.ini file

[local]
db_host = localhost
db_user = your_local_database_username
db_pass = **********
db_name = your_local_database_name


[server]
db_host = serverhost
db_user = your_local_database_username
db_pass = **********
db_name = your_server_database_name

2. Move and give permission to config.ini file

3. Create your php or connection page conn.php

<?php
$config_file_location_path = "/var/somelocation/config.ini"

$read_file = parse_ini_file($config_file_location_path, true);
$read_data = $read_file['local'];

$db_config = $read_data;

$db_host = $db_config['db_host'];
$db_user = $db_config['db_user'];
$db_pass = $db_config['db_pass'];
$db_name = $db_config['db_name'];


$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

if (!$conn) {
    die("Could not connect to server : " . mysqli_errno($conn));
}

Ve server sadece değiştirmek $read_data = $read_file['server']; üzerinde çalışmak istiyorsanız,

Daha yüksek bir düzeyde bulunmaktadır dosyayı yerleştirerek çalışacaktır. I / var / www ve kullanım koyun

set_include_path(get_include_path() . PATH_SEPARATOR .'/var/www/');

require_once 'mysqli_connect.inc.php';

Şifreler mysqli_connect.inc.php olan ancak PHP tarayıcınıza onları göndermeden önce HTML içine döner, çünkü kullanıcılar, PHP dosyalarının kaynak kodunu göremiyorum.

Muhtemelen sen tarayıcılar klasörlerin içeriğini görmek için izin değiliz - Apache gibi Hayır 'directoryindexes' çağırır.