exec — Как создать папку над корневым каталогом с помощью переполнения стека

мой корневой каталог

/var/www/html/

я хочу создать каталог в / var / www /
т.е. /var/www/myfolder

я выполняю create_dir.php
от

/var/www/html/site/create_dir.php

когда я запускаю эту программу, она не может создать папку.

в журнале я получаю разрешение отрицать.
Обновить

Это мой код

<?php
$os_type=php_uname('s');
$cur_file_path=$_SERVER['PHP_SELF'];
echo "File path:$cur_file_path<br>";
$scount=substr_count($cur_file_path, '/');
echo "/ count:$scount<br>";
$doc_root= $_SERVER['DOCUMENT_ROOT'] ;
echo "doc root:$doc_root<br>";
if($os_type=='Linux')
{
$ds=substr_count("$cur_file_path","/");//directory seperator
echo "Count of /=$ds<br>";
}
if($os_type=='Windows')
{
$ds=substr_count("$cur_file_path","'\'");//directory seperator
}
$path="../";
for($i=1;$i<$scount;$i++)
{

$path.="../";
}

$dir="myfolder";
exec("mkdir ".$dir);
?>

как решить это.

2

Решение

Это проблема безопасности, так как она дает миру доступ для чтения и записи. Может быть, что ваш апаш У пользователя нет прав на чтение / запись в каталоге.

Вот что вы делаете, если $os_type=='Linux':

1. Убедитесь, что все файлы принадлежат группе Apache и пользователю. В Linux это WWW-данные группа и пользователь

exec('chown -R www-data:www-data /path/to/webserver/www',$ouput,$result);

2. Далее включены все члены WWW-данные группа для чтения и записи файлов

exec('chmod -R g+rw /path/to/webserver/www',$ouput,$result);

Php mkdir() Функция теперь должна работать без возврата ошибок. Вы также можете увидеть вывод ошибки в $ output в случае ошибки.

Существует еще один способ создания каталога с использованием ftp:

Вы можете попробовать mkdir с помощью ftp, mkdir работает с потоковыми упаковщиками, так что писать можно mkdir('ftp://user:pass@server/mydir');

ИЛИ ЖЕ

Если у вас есть проблемы с БЕЗОПАСНЫЙ РЕЖИМ Действует ограничение, т. Е. Если вы пытаетесь создать и получить доступ к subdirectorys рекурсивный вы можете использовать FTP-Lib как это.

<?php

DEFINE ('FTP_USER','yourUser');
DEFINE ('FTP_PASS','yourPassword');

/**
* Returns the created directory or false.
*
* @param Directory to create (String)
* @return Created directory or false;
*/

function mkDirFix ($path) {$path = explode("/",$path);
$conn_id = @ftp_connect("localhost");
if(!$conn_id) {
return false;
}
if (@ftp_login($conn_id, FTP_USER, FTP_PASS)) {

foreach ($path as $dir) {
if(!$dir) {
continue;
}
$currPath.="/".trim($dir);
if(!@ftp_chdir($conn_id,$currPath)) {
if(!@ftp_mkdir($conn_id,$currPath)) {
@ftp_close($conn_id);
return false;
}
@ftp_chmod($conn_id,0777,$currPath);
}
}
}
@ftp_close($conn_id);
return $currPath;

}
?>

Может быть, это поможет.

1

Другие решения

Назначение «корневого» каталога — защитить хост-компьютер от вредоносного / ошибочного кода, который может повредить информацию, хранящуюся в других частях компьютера. Это дает вам область, в которой вы можете безопасно выполнять свои действия, в то же время явно и преднамеренно предотвращая вмешательство в любые данные «выше» вашего корневого каталога. Корень настолько низок, насколько вы можете, по замыслу. Любой хост-компьютер, имеющий уязвимость, которая позволяет вам получать доступ к данным за пределами назначенного вам пространства, является хост-компьютером, который требует взлома; надеюсь, вы не найдете многих из них.

Возможно, стоит реструктурировать каталоги внутри корневого каталога, чтобы имитировать более глубокий корень, чем тот, на который вы на самом деле ограничены. В противном случае необходимо убедить системного администратора хост-компьютера предоставить вам дополнительный доступ.

В правильно спроектированной и управляемой системе то, что вы запрашиваете, намеренно невозможно, и столкновение с этим конкретным блокпостом является скорее признаком того, что вам, возможно, придется пересмотреть то, что вы хотите сделать в свете ваших ограничений. Даже если это происходит с вашего собственного компьютера, и вы являетесь системным администратором, было бы разумно изучить все возможные пути достижения целей, которые вы надеетесь достичь, не преодолев этот барьер. ЛЮБОЕ означает, что вы реализуете, чтобы позволить контролируемому веб-коду преодолеть этот барьер, — это уязвимость в вашей системе, которую кто-то где-то ищет возможность использовать.

1

По вопросам рекламы [email protected]