Опубликовано в разделе: DLE   Приветствую...

Опубликовано в разделе: DLE   Приветствую всех ещё раз, никогда не пишу два поста в день, но предыдущий рождался долго, поэтому его трудно отнести к сегодняшнему дню. Сейчас вернёмся к практике вебмастера, к нашим насущным проблема. В этом посте я выкладываю официальную версию DLE 9.0 (от 27 ноября 2010 года), где нет никаких багов и дырок по состоянию на этот день. Так же я напишу немного об самых уязвимых частях этого популярного php скрипта, дам заплатки для дыр, начиная с версии 8.0. Все из нас встречали мнение типа «DLE – дырявый движок, им нельзя пользоваться», с первым абсолютно согласен, второе положение отрицаю полностью. Да, в DLE есть дырки и они будут всегда, имея такую популярность он подвержен пристальному вниманию сотен хакеров, от школьников до профи. Нужно чётко понимать для каких проектов можно использовать DLE и как защищать свой сайт. Самые простые советы по защите DLE от меня: Ставим только официальную версию, во взломанных общедоступных версиях намного больше дырок. Если нам не нужна регистрация пользователей, отключаем её. Нет возможности регистрации, это значительно снижает возможность взлома. Пытаемся не использовать любые левые модули, их код всегда ослабляет защиту. Вовремя обновляем все новые версии, устраняем дырки в тот же день, как появилось предупреждение на официальном сайте. Правильно расставляем права на доступы к разным директориям, пишем robots. txt, закрывающий всё лишние. Не забываем вставлять. htaccess в папки /uploads/ и /templates/. Следим за вирусами на своём компе и аккуратно храним ftp пароли. 6 лёгких пунктов и мы на 95% защитились от школьников. Баг Фиксы для DLE 8.0 – 9.0: Заплатки для дыр на последних версиях: Версия DLE 9.0 Проблема: Недостаточная фильтрация входящих данных. Ошибка в версии: Все версии Степень опасности: Высокая Для исправления откройте файлы engine/modules/search. php и engine/modules/fullsearch. php и найдите: $count_result = 0; ниже добавьте: $sql_count = “”; Откройте файл engine/inc/templates. php и найдите: $allow_save = false; ниже добавьте: $_REQUEST['do_template'] = trim( totranslit($_REQUEST['do_template'], false, false) ); $_REQUEST['do_language'] = trim( totranslit($_REQUEST['do_language'], false, false) ); Версия DLE 8.5 Проблема: Пользователю которому разрешена загрузка файлов на сервер (не картинок), может выйти за пределы разрешенной папки загрузки, а если он имеет администраторский аккаунт на сайте, то и повредить данные скрипта. Ошибка в версии: 7.x – 8.5 Степень опасности: Средняя (Высокая при наличии администраторского аккаунта на сайте) Для исправления откройте файл engine/inc/files. php и найдите: $serverfile = trim( htmlspecialchars( strip_tags( $_POST['serverfile'] ) ) ); замените на: if ($member_id['user_group'] == 1) $serverfile = trim( htmlspecialchars( strip_tags( $_POST['serverfile'] ) ) ); else $serverfile = ”; if ( $serverfile!= ” ) { $serverfile = str_replace( “\\”, “/”, $serverfile ); $serverfile = str_replace( “..”, “”, $serverfile ); $serverfile = str_replace( “/”, “”, $serverfile ); $serverfile_arr = explode( “.”, $serverfile ); $type = totranslit( end( $serverfile_arr ) ); $curr_key = key( $serverfile_arr ); unset( $serverfile_arr[$curr_key] ); if ( in_array( strtolower( $type ), $allowed_files ) ) $serverfile = totranslit( implode( “.”, $serverfile_arr ) ) . “.” . $type; else $serverfile = ”; } if( $serverfile == “.htaccess”) die(”Hacking attempt!”); Откройте файл engine/classes/thumb. class. php и найдите: $this->img['des'] = imagecreatetruecolor( $this->img['lebar_thumb'], $this->img['tinggi_thumb'] ); и добавьте выше: if ($this->img['lebar_thumb'] img['lebar_thumb'] = 1; if ($this->img['tinggi_thumb'] img['tinggi_thumb'] = 1; Проблема: При определенных условиях на сайт можно провести атаку XSS. Данными условиями является посещение авторизованным администратором, сайта злоумышленника, при этом использование администратором устаревшего браузера, что может привести к перехвату куков браузера. Ошибка в версии: 7.x – 8.5 Степень опасности: Низкая Для исправления скачайте и скопируйте на свой сервер патч: http://dle-news. ru/files/dle7_85_path. zip Данный патч применим ко всем версиям: 7.x – 8.5 Версия DLE 8.2 Проблема: Недостаточная фильтрация входящих данных в модуле восстановления пароля. Ошибка в версии: только 8.2, версии ниже 8.2, а также актуальная версия 8.3 данной уязвимости не подвержены Степень опасности: Очень высокая Для исправления скачайте и скопируйте на свой сервер патч: http://dle-news. ru/files/dle82_path. zip Версия DLE 8.0 Проблема: Недостаточная фильтрация входящих данных при обработке новостей. Ошибка в версии: все версии Степень опасности: Низкая Ручное исправление: Откройте файл: engine/classes/parse.

Опубликовано в разделе: DLE   Приветствую...

class. php найдите: if( ((strpos( strtolower( $attrSubSet[1] ), ‘expression’ ) !== false) && ($attrSubSet[0] == ’style’)) || (strpos( strtolower( $attrSubSet[1] ), ‘javascript:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘behaviour:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘vbscript:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘mocha:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘data:’ ) !== false and $attrSubSet[0] == “href”) || ($attrSubSet[0] == “href” and strpos( strtolower( $attrSubSet[1] ), $config['admin_path'] ) !== false and preg_match( “/[?&% замените на: if( ((strpos( strtolower( $attrSubSet[1] ), ‘expression’ ) !== false) && ($attrSubSet[0] == ’style’)) || (strpos( strtolower( $attrSubSet[1] ), ‘javascript:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘behaviour:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘vbscript:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘mocha:’ ) !== false) || (strpos( strtolower( $attrSubSet[1] ), ‘data:’ ) !== false and $attrSubSet[0] == “href”) || (strpos( strtolower( $attrSubSet[1] ), ‘data:’ ) !== false and $attrSubSet[0] == “src”) || ($attrSubSet[0] == “href” and strpos( strtolower( $attrSubSet[1] ), $config['admin_path'] ) !== false and preg_match( “/[?&% Найдите: $source = str_replace( “`”, “`”, $source ); Ниже добавьте: $source = preg_replace( “#