Ben farklı içerik dizinlere bazı yollar alır ve sonraki sayfalarda çeşitli parçalar içeren bu kullanan bazı PHP yazıyorum. Ben göründüğü gibi yolları olduğundan emin olmak için çalışıyorum, ve bunların hiçbiri uygulama kurallarını kırmak. Hangileri,
PRIVATEDIR
(tanımlanır göreliDOCUMENT_ROOT
) üzerinde olmalıdırDOCUMENT_ROOT
.CONTENTDIR
(tanımlanmış göreliPRIVATEDIR
)PRIVATEDIR
altında kalmalıdır ve geri dönmemeliDOCUMENT_ROOT
.- Kalan
*DIRS
'in (tanımlanır göreliCONTENTDIR
) altında kalmalıdırCONTENTDIR
Ben bir tek denetleyicisi sınıftaki bazı varsayılan kuruyorum, ve daha sonra kullanıcı bu sınıfları yapıcı geçersiz kılmak istediğiniz yolları bir dizi geçer. Ben o zaman yukarıdaki kurallara uymasını sağlamak için onları kontrol aklı istiyorum. Ben bu konuda gitmek için başladım nasıl İşte ...
EDIT: Please note my use of error_reporting
Aşağıdaki kodu, ve sonra kendiniz yapmayın! Ben bu komut nasıl yanlış. Eğer merak ediyorsanız, (bana bu işaret için ve onlar sayesinde) yorumlarda stealthyninja bulunuyor ve Albay şarapnel sözlerini bakın. Em>
private $opts = array( // defaults
'PRIVATEDIR' => '..', // relative to document root
'CONTENTDIR' => 'content', // relative to private dir
...
...
);
private function __construct($options) { //$options is the user defined options
error_reporting(0);
if(is_array($options)) {
$this->opts = array_merge($this->opts, $options);
}
if($this->opts['STATUS']==='debug') {
error_reporting(E_ALL | E_NOTICE | E_STRICT);
}
$this->opts['PUBLICDIR'] = realpath($_SERVER['DOCUMENT_ROOT'])
.DIRECTORY_SEPARATOR;
$this->opts['PRIVATEDIR'] = realpath($this->opts['PUBLICDIR']
.$this->opts['PRIVATEDIR'])
.DIRECTORY_SEPARATOR;
$this->opts['CONTENTDIR'] = realpath($this->opts['PRIVATEDIR']
.$this->opts['CONTENTDIR'])
.DIRECTORY_SEPARATOR;
$this->opts['CACHEDIR'] = realpath($this->opts['CONTENTDIR']
.$this->opts['CACHEDIR'])
.DIRECTORY_SEPARATOR;
$this->opts['ERRORDIR'] = realpath($this->opts['CONTENTDIR']
.$this->opts['ERRORDIR'])
.DIRECTORY_SEPARATOR;
$this->opts['TEMPLATEDIR' = realpath($this->opts['CONTENTDIR']
.$this->opts['TEMPLATEDIR'])
.DIRECTORY_SEPARATOR;
...
...
...
// then here I have to check that PRIVATEDIR is above PUBLICDIR
// and that all the rest remain within private dir and don't drop
// down into (or below) PUBLICDIR again. And die with an error if
// they don't conform.
}
Şey başka bir şey yapmadan önce, bu, (örneğin, ben hizmet ediyorum sayfanın önbelleğe alınmış bir sürümü için kontrol edin), her zaman bir sayfa erişildiğinde, çalıştırmak gerekir, özellikle yapmak için bir sürü iş gibi görünüyor olduğunda yolları esas statiktir.
Parçam sitenin sürdürücü (beni şu anda) onlar vermekteyiz hangi yolları farkında olması gerektiğini düşünüyor ve onlar kurallara uygun kendilerini kontrol etmelisiniz. Ama bana (bence) daha mantıklı tarafı yok, ben kazalar gerçekleşebilir, çünkü yolları uygun olduğunu kontrol etmek için aynı derecede sorumlu olacak (site büyüdükçe özellikle / değişiklik / yeni idarecisinden alır ...) ve olmalıdır, diyor Onlar yakalanmış olabilir eğer, bir güvenlik-kritik ortamda, onları yakalamak için hiçbir bahane yoktur.
Yani, ben çok fazla bu yolları kontrol İSTİYORUZ karar ediyorum, soru benim yöntemi ne kadar iyi olduğunu? Bu bir optimal çözüm gibi hissediyor. Bunu nasıl artıracak ya da ne alternatifler önerirsiniz? Bunu bir sayfa yükler her zaman yapmak zorunda problemi aşmanın yine de var mı, ve her nasılsa sadece yapılandırma değişiklikleri yapmak? (Bu ideal olacaktır, ama önemsiz hayal etmeyin).
Teşekkürler.