Ben aşağıdakileri yapmak için güvenli bir yol bulmaya çalışıyorum:
- Kullanıcılar html forma değerini girer.
- Formu teslim edilir.
- PHP "scandir" fonksiyonu için argüman olarak sunulan değerini kullanır.
Benim teorisi mutlak yolları yasaklar ve belirli bir değer eklemek için dizin adı gerektirir php script mantığı dahil olduğunu.
Benim endişe bir hacker kendi değerini göndermek ve hassas dosyalara erişmek için benim formu kullanabilirsiniz olmasıdır.
Bu bir JQuery eklentisi için olduğunu. Kullanıcıların PHP dosyasını değiştirmek zorunda istemiyorum.
Nasıl aşağıda kod kesmek olabilir?
<?php
$foo = $_POST["some_directory"];
//validate $foo
//make sure path to directory is relative
$foo_url_test = parse_url($foo);
if (isset($foo_url_test['scheme']) || isset($foo_url_test['host'])) {
$foo = NULL;
}
//make sure the directory name contains 'bar123'
$foo_name_test = preg_split('_[\\\\/]_', $foo);
$foo_name_test = end($foo_name_test);
$foo_name_test = strpos($foo_name_test,'bar123');
if ($foo_name_test === false) {
$foo = NULL;
}
//make sure the path does not contain '..'
$foo_dot_dot_test = strpos($foo,'..');
if ($foo_dot_dot_test == TRUE || $foo_dot_dot_test === 0) {
$foo = NULL;
}
//get files
$files_array = scandir($foo);
?>