dosya sistemi erişimi olan PHP script kısıtlamak nasıl?

4 Cevap

Ben hassas verilere sahip dizinleri dosyalara erişmeye çalıştığınızda OLABİLİR bir PHP komut dosyası var. Böyle işlemleri kısıtlamak istiyorum.

Ben bu script sadece ben değilim belirterek dizindeki dosyaları / dizinleri erişmek için izin istiyor. Bunu yapmak mümkün mü? Teşekkürler.

4 Cevap

Disclaimer: If you don't control the way PHP is set up on the server, this answer is useless.

Web sunucusu kullanarak ve hangi SAPI modu var gibi hangi Biz gerçekten, PHP kurulumu hakkında daha fazla bilgiye ihtiyacımız var. Sen SAPI modülü echo php_sapi_name() çalıştırarak kullanılmakta olduğu öğrenebilirsiniz

Ben kabul olsaydı Ancak, mod_php ile Apache 2.2 bulunuyor:

PHP Apache modül sürümü web sunucusu kullanıcı ve grup olarak çalışır. Bu betiğin sahibi ve grup olarak çalışmasını sağlamak için PHP CGI versiyonu sarar (manuel Apache suEXEC PHP için kurmak zorunda önler) suPHP adlı ikinci bir Apache modül var.

Bunun dışında, kullanıcının hassas dizin ve dosyalara erişimi okuma kalmaması dosya sistemi izinlerini değiştirerek yeterince iyi olmalıdır.

Bu sadece güvenli dizinleri dosyaları erişir böylece sadece, evet senaryo yazmaya. (Şimdiye kadar) kullanıcı girişi denetlenmeyen bir yoldan bir dosyaya erişim yok. Kabul edilebilir yolları ve / veya dosya bir liste karşı yolunu kontrol, ya da sadece dosya adları erişim kodu geçirilir, böylece dosyayı erişecek kod yolunu içerir ya.

These functions will help: pathinfo() , dirname() , basename()

Böyle bir şey çalışması gerekir:

function isBelowAllowedPath($file, $allowedPath)
{
    return ( strpos( realpath($file), $allowedPath) === 0 );
}

isBelowAllowedPath('/etc/passwd', '/var/www/pub/'); // false
isBelowAllowedPath('/var/www/pub/index.htm', '/var/www/pub/'); // true

Emin $ dosyası yapmak istiyorsanız ya da var

function isBelowAllowedPath($file, $allowedPath)
{
    return file_exists( $allowedPath . basename(realpath($file)) );
}

isBelowAllowedPath('/../../../../etc/passwd', '/var/www/pub/'); // false
isBelowAllowedPath('index.htm', '/var/www/pub/'); // true

veya (bir yolu altında) $ AllowedPaths belirli bir listede olmak $ dosyasını isterseniz

function isInAllowedPath($file, array $allowedPath)
{
    $fileDir = realpath(dirname($file));
    return (in_array($fileDir, $allowedPath));
}

$allowed = array('/var/www/pub/', 'somewhere/else');
isInAllowedPath('/var/www/pub/foo/index.htm', $allowed); // false
isInAllowedPath('/var/www/pub/index.htm', $allowed); // true

Onlara erişemiyor gibi kullanıcı PHP çalıştıracak şekilde dizinleri 'haklarını yapılandırmak gerekir.

Linux / Unix sisteminde Bunu yapmak için, (chmod) dizinlere (chown) sahibini değiştirmek ve haklarını değiştirme hakkını gerekir ve muhtemelen hat erişimi buyururdu . Gerçekten dosyaları kime, sunucu nasıl yapılandırıldığına bağlıdır, ve PHP gibi kim çalışır.

Linux sistem kullanımı PHP'nin kullanıcının kullanıcı kimliğini öğrenmek için posix_getuid().

I disable_functions üzerinden belirli fonksiyonlara erişmek çıkarma dışında PHP-yan erişimden dosyalarınızı korumak için başka bir yol düşünemiyorum. Yani olsa da, (ve muhtemelen olacak) yanı sıra meşru eylemler bir çok kırılabilir.