Как стать автором
Обновить

Комментарии 7

Интересная штука.
Форкнул себе, вот пытаюсь запустить ваши скрипты… а какие права нужно выдать на папки?
Для data — чтение и запись. Если планируется редактировать скрипт через браузер — для папки scripts то же самое
Почему вы не хотите использовать сервер задач, Gearman например? годное функциональное решение, без всяких велосипедов.
Прежде всего потому, что в таком случае необходимо иметь этот сервер задач под рукой. Если я, к примеру, закажу бесплатный хостинг, или даже платный, будет сложно установить на него что-то. А эти скрипты работают на хостингах с php любого типа, всегда.
Ух, не рекомендовал бы никому это у себя размещать.
Вот здесь возможна уязвимость с инклюдом произвольного php-файла.

if(isset($_POST['handler'])){
	if(is_file(PDT_WORKING_DIR.'/handlers/'.$_POST['handler'].'.php')){
		include(PDT_WORKING_DIR.'/handlers/'.$_POST['handler'].'.php');
	}else{
		PDT_HandleError('Handler <b>'.$_POST['handler'].'</b> not found');
	}
}elseif($_POST){
	PDT_HandleError('Неверный запрос');
}else{
	include(PDT_WORKING_DIR.'/media/templates/pdt_index.html');
}


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

<?php
	$from = array("`","~","!","@","#","$","%","^","&","*","(",")","-","=","+","\\","|","?","/",",",";",":","№","'","\"",".");
	$_POST['args']['script'] = str_replace($from, '_', $_POST['args']['script']);
	$_POST['args']['script'] = preg_replace('/\_+/','_', $_POST['args']['script']);
	if($_POST['args']['script']!='_'&&$_POST['args']['script']){
		$src = fopen(PDT_WORKING_DIR.'/scripts/'.$_POST['args']['script'].'.php','w');
		fwrite($src, '<?php
// Содержимое скрипта
?>');
		echo json_encode(array('script'=>$_POST['args']['script']));
	}else{
		echo json_encode(array('error'=>'В названии скрипта не должно быть спецсимволов, имя не может быть пустой строкой'));
	}
?>


Недавно я задавал в q/a именно такой вопрос, который вы пытались решить. Почитайте, там местная публика предложила целую россыпь замечательных решений — habrahabr.ru/qa/34957/

дабы избежать недоразумений, повторю слова из README на GitHub:
Все действия обрабатываются через файл index.php, для обеспечения безопасности в доступе к утилите достаточно:

— Создать в папке с утилитой файл .htaccess, прописать в нем запрет на доступ к папкам «data», «handlers», «scripts»
— Прописать в начале файла index.php перед всеми обработчиками свою систему защиты.

Внимание! Учтите, что доступ к утилите могут иметь другие пользователи / посетители сайта. Без применения соответствующих мер, данная утилита являет собой большую угрозу для безопасности.


, и повторю слова, которые написал в конце поста:
Утилита писалась без мысли о том, чтоб выйти в мир, во всеобщее употребление. Выложил только из-за мысли, что кому-то может пригодиться.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории