Emin olmak için nasıl kendi etki altında olanlar dışında hiçbir komut, db bağlantı dosyasını içerebilir?

5 Cevap php

Benim veritabanı bağlantı dosyası "include" için çalışıyoruz herhangi bir komut kendi etki altında yer sağlamak istiyoruz. Ben bir hacker onların kötü niyetli komut dosyası veritabanı bağlantı dosyası içerir ve benim veritabanına erişimi bu şekilde kazanmak istemiyorum. Benim bağlantı dosyasının adı "connect.php" denir, tahmin etmek oldukça kolaydır. Bu yüzden yeniden adlandırma ve bilinmezlik rota üzerinden güvenliğini almadan, nasıl tüm bağlantı istekleri benim kendi etki alanı adı altında yaşayan komut dosyaları tarafından yapıldığından emin yaparak koruyabilirsiniz? Bu nasıl PHP kullanarak kontrol edilebilir?

5 Cevap

Birisi etki bir dosya eklemek için çalışırsa Genel olarak, onlar bu dosyanın yürütme sonuçlarını göreceksiniz. Eğer web tarayıcınızda connect.php script yük zaman ne görüyorsunuz? Onlar uzak bir dosya eklemek için çalışırsanız onlar da görürsünüz ne Thats.

O dedi, genel web alanı dışından erişilemez önemli dosyaları tutmak için genellikle iyi bir fikir. Web sitenizin Yani, /var/www/yoursite/ sonra connect.php /some/dev/dir/yoursite tutmak ve require_once '/some/dev/dir/yoursite/connect.php'; kullanarak sayfalarından dosyaları içerir

thetaiko cevabı burada temel sorunları giderir - ama başkasının sunucusuna (yani, paylaşılan sunucu) kod çalıştırmak için erişimi varsa o dosyaya erişim sunucusunun nasıl yapılandırıldığına bağlıdır.

- Örneğin kısıtlı olabilir erişmek birçok yolu vardır suPHP, base_opendir, birden chroot sunucular. Emin oluyor ne olduğunu bulmak için tek yol hacker rolü kendinizi CaSR ve belirlenen alanı dışında dosyalarınıza erişebilirsiniz olmadığını görmektir.

C.

Eğer bağlantı dosyasına dahil ederek ne demek? Bir script "connect.php" içermez sonra onlar dosyasının kaynak kodunu görebilirsiniz, bu nedenle gibi olacak gibi bu dosyaya eklemek ne olursa olsun güvenlik önlemleri, anlamsız olacaktır:

if($notFromHostname)
{
echo "DONT LOOK AT THIS";
die();
}
define('DB_PASS',"myPassword");
...

Ve "hacker" açıkça şifrenizi görmek mümkün olacak. Muhtemelen, belirli bir etki alanından olmayan ana inkar iptables gibi bir şey kullanarak daha iyi.

Eğer paylaşılan bir sunucuda ve aynı sunucu örneğinin diğer kullanıcıların dosyalarınıza almak mümkün istemiyorum? Bu sunucu sağlayıcısına kadar, sonra, mod_suid güzel gerçekleştirebilirsiniz Apache İçin Eşyalarını içeri tutmak chroot veya sanal sistem çeşit sağlamak olurdu ve her vhost kendi kimliği alır ve izinleri ayarlayın.

Eğer dış kullanıcıların dosyalarınıza ulaşmak mümkün olmayacaktır istiyorsanız, o zaman kötü kodunuzu munged sürece, ya da sunucunun kötü hatalı, daha sonra ziyaret ettikleri zaman alırsınız hepsi http://yourserver.com/connect.php bir boş sayfa

Felix belirtildiği gibi kendinizi başka bir kullanıcı, herhangi bir şekilde PHP dosyalarına erişimi olmalıdır. Ancak, bu PHP kontrol ediyorum nasıl:

if($_SERVER['SERVER_NAME'] != "example.com")
    die("I've been kidnapped!");