Хак Загрузка файлов в папку шаблона из админпанели

Тема в разделе "DLE", создана пользователем mishiko, 15 ноя 2014.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. mishiko

    mishiko Создатель

    Регистр.:
    5 сен 2011
    Сообщения:
    256
    Симпатии:
    101
    1399227207_zagr.adminpnl.jpg

    Иногда приходится быстро отредактировать шаблон, в том числе залить новую картинку в шаблон или новый css/js файл. Для этого приходится запускать FTP-клиент и подключаться к нужному серверу. Бывают случаи, когда находишься не на рабочем месте и нет доступа по FTP. Для таких случаев создан маленький хак, который добавляет возможность загрузить файлы в папку с шаблоном (и под папки) непосредственно из раздела редактирования шаблонов в админпанели.

    Установка:
    Открыть файл /engine/inc/templates.php и найти:
    Код:
    <table width="100%">
    <tr>
    <td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">{$lang['opt_edteil']} <b>{$do_template}</b> {$lang['templates_help']} <a class="main" href="http://dle-news.ru/extras/online/all2.html" target="_blank">http://dle-news.ru/extras/online/all2.html</a></div></td>
    </tr>
    </table>
    <div class="unterline"></div>

    Ниже вставить:
    Код:
    HTML;
    // Загрузка файлов в папку с шаблоном
    echo "<table width='100%' style='table-layout:fixed;'><tr><td style='padding-left:10px;'><div class='navigation'><b>Загрузка файлов в папку шаблона</b></div><form method='post' enctype='multipart/form-data'>Выберите папку для загрузки <select name='dirname'>";
    $tplpath = "/templates/".$do_template;
    showTree("./".$tplpath, "");
    function showTree($folder, $space) {
    $files = scandir($folder);
    foreach($files as $file) {
    if (($file == '.') || ($file == '..')) continue;
    $f0 = $folder.'/'.$file;
    if (is_dir($f0)) { echo "<option value=\"".$space.$file."\">".$space.$file."</value>\n"; }
    }
    }
    echo "</select> <input name=\"file\" size=\"18\" type=\"file\" value=\"\" > <input name=\"submit\" type=\"submit\" value=\"Загрузить\" class=\"btn btn-primary\"></form>";
    $dirname = htmlspecialchars(stripslashes($_POST['dirname']));
    $file = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
    if(!empty($file)) {
    ini_set('memory_limit', '32M');
    $maxsize = "20000000";
    $extentions = array("gif","jpg","jpeg","png","swf","js","css","tpl");
    $size = filesize ($_FILES['file']['tmp_name']);
    $type = strtolower(substr($filename, 1 + strrpos($filename, ".")));
    if($size > $maxsize) {
    echo 'Вы загружаете слишком большой по объёму файл.';
    } elseif(!in_array($type,$extentions)) {
    echo '<b> Данный файл запрещен к загрузке.</b>';
    } else {
    if (copy($file, ROOT_DIR.$tplpath."/".$dirname."/".$filename))
    echo " Файл <b>".$filename."</b> загружен в папку ".$tplpath."/".$dirname."/<script>setTimeout('location.replace(\"{$PHP_SELF}?mod=templates\")', 3000);</script>";
    }
    }
    echo "</td></tr></table>";
    // конец загрузки
    echo <<<HTML
    <div class="unterline"></div>
    Готово!
     
  2. Grigirij

    Grigirij $$$

    Регистр.:
    25 сен 2008
    Сообщения:
    693
    Симпатии:
    329
    хак достаточно нужный, но уверен в разы увеличивает рис повышения уязвимости и так регулярно дырявого движака (хотя сам его юзаю в основном) и ещё одна возможность залития шела и другой гадости на сервак.
     
  3. mishiko

    mishiko Создатель

    Регистр.:
    5 сен 2011
    Сообщения:
    256
    Симпатии:
    101
    Ну ограничить заливку файлов только определенных форматов сделать и все