Защищаем движок Dle от спам ссылок (еще дополнение)
Раздел: Модули | Обзоров: 6853 | Отзывов: 30
Перед выполнением этих действий, обязательно сделайте резервные копии редактируемых файлов, хотя он здесь всего лишь один. Так же не забудьте прочитать статью Защищаем движок Dle от спам ссылок. Из той статьи возьмите лишь скрипт редиректа (go), все остальное пропускаете. Откройте текстовым редактором, например Notepad++ файл parse.class.php который находится в директории engine/classes. И ищите код, что я привел ниже: return "<a href=\"".$url['html']."\" ".$target.">".$show."</a>" . $url['end'];
Он находится между 540 и 550 строчкой в DataLife Engine 7.0 После того как найдете, замените его на код приведенный ниже: /* Назначение: "Защита от внешних ссылок" Автор: www.seomax.info */ if($this->check_home($url['html'])||$this->check_friend($url['html'])) { return "<a href=\"".$url['html']."\" ".$target.">".$show."</a>" . $url['end']; } else { $url['html'] = $config['http_home_url']."go/?".($url['html']); return "<noindex><a rel=\"nofollow\" href=\"".$url['html']."\" ".$target.">".$show."</a></noindex>" . $url['end']; }
Дальше находим следующий код: function code_tag($txt="") { if ( $txt == "" ) { return;
Он находится немного ниже того, что мы добавили. После того как найдете, добавьте выше него следующий код: /* Функция: "Дружественный URL" Автор: www.seomax.info */ function check_friend ($url) { global $config; /* Путь к файлу с нашими URL-адресами. Можете сменить на свой.*/ $friend_url = file($config['http_home_url']."engine/friend/friend_url.txt"); for ($i = 0; $i < count($friend_url); $i++) { if(trim($friend_url[$i]) == $url) { $friend = trim($friend_url[$i]); $value = str_replace("http://", "", $friend); $value = str_replace("www.", "", $value); $value = explode('/', $value); $value = reset($value); if ($value == "" ) return false;
if (strpos($url, $value) === false) return false; else return true; } } }
Как вы заметили, я прикрепил текстовый файл, который мы читаем когда формируем ссылку. Ясное дело, файл нужно создать, для этого создайте файл friend_url.txt и заполните как в примере ниже: http://seomax.info/ http://zone-game.info/ http://yandex.ru/
Обратите внимание на то, что URL-адрес пишется точно так, как я привел в примере. То есть с http:// и в конце /. Каждый новый URL-адрес пишеися с новой строки, все. Сохраните файл и поместите в директорию engine/friend/. Напомню на всякий пожарный, скрипт редиректа, берем в первой статье Защищаем движок Dle от спам ссылок. Так как без него, все внешние ссылки будут недоступны. Так же, вы наверно заметили, что при редактировании уже созданной новости, у вас появляется HTML код, который приходится убирать или постоянно включать опцию "Конвертировать html код". Давайте избавимся от этого занятия. Найдите следующий код: if ($this->filter_mode) $txt = $this->word_filter($txt, false);
После того как найдете, ниже пишете: /* Назначение: Раскодировка сформированного URL-адреса Автор: www.seomax.info */ $txt = preg_replace( "#<!--FFriend--><noindex><a rel=\"nofollow\" href=[\"'](http://|https://|ftp://|ed2k://|news://|magnet:)?(\S.+?)['\"].+?".">(.+?)</a></noindex><!--EndFFriend-->#ie" , "\$this->decode_friend('\\1\\2', '\\3')", $txt );
Далее находим следующий код: return "[leech=".$url."]".$show."[/leech]"; }
Ниже пишем: /* Функция: Раскодировка сформированного URL-адреса Автор: www.seomax.info */ function decode_friend($url="", $show="") { global $config; $home_url = $config['http_home_url']."go/?"; $url = str_replace($home_url, "", $url); $url = explode ("url=", $url); $url = end ( $url ); $url = rawurldecode($url); return "[url=".$url."]".$show."[/url]"; }
Теперь при редактировании добавленной новости, ссылка вида: <noindex><a rel="nofollow" ... > ... </a></noindex>
Примет исходный вид [ url] ... [/url ]. Все, на этом установка завершена. Если у вас остались вопросы, пожалуйста, задавайте, я с удовольствием на них отвечу. Правда я редко на сайт захожу, но все же захожу, так что если сразу не ответил, не серчайте ;)
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
|
| Комментарий добавил: stephanthe (25 декабря 2008 20:30) |
Задумка обалденная, но проблема в том, что при редактировании ссылка уже в редакторе после обработки парсера и при сохранении получется бред. Как-то можно обойти?
|
|
|
| Комментарий добавил: PROGRAMMATOR (26 декабря 2008 01:57) |
Здравствуйте,
То есть, если редактировать уже созданную новость, ваша ссылка получается в формате <noindex><a rel="nofollow" ...>...</a></noindex> и приходится чистить и добавлять [ url]...[/url ]?
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: PROGRAMMATOR (27 декабря 2008 08:53) |
И так, статью подправил и дополнил новыми идеями, которые конечно сразу реализовал :) Давайте, задавайте свои вопросы. Так же, если вы незнаете, что, как и куда, то пишите мне, я вам установлю, все как нужно.
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: valet (28 декабря 2008 18:27) |
Здравствуйте. Статья супер. Вопрос такой: а можно как-то сделать, чтобы подменить все активные внешние ссылки в уже опубликованных новостях. А то способ работает только для вновь публикуемых новостей.
С уважением, Леонид
|
|
|
| Комментарий добавил: PROGRAMMATOR (28 декабря 2008 23:08) |
Здравствуйте,
Увы никак :( В скрипте нет возможности пересчитать все новости, как например можно сделать на форуме vBulletin. Не очень правильно, но можно просто воспользоваться заменой текста через админку. Конечно даже дружественные URL зафильтрует. Так что правильно будет, только нажимать "редактировать новость" и "отправить".
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: valet (30 декабря 2008 08:46) |
Спасибо за ответ. Я в принципе так и думал.
Еще такой вопрос: не знаю в чем причина, но на одном сайте на ДЛЕ все получилось, а на втором не выходит редирект с go, я уже все прверил, но не редиректит и все (при попытки писать site.ru/go/?http://site2.ru выдается стандартное сообщение движка: К сожалению, данная страница для Вас не доступна: возможно, был изменен ее адрес или она была удалена. Пожалуйста, воспользуйтесь поиском.). Версии движков обе 6.5. В чем дело, не знаю. Может что подскажите?
|
|
|
| Комментарий добавил: PROGRAMMATOR (30 декабря 2008 09:39) |
Здравствуйте, После того как поместили файл index.php в директорию go с таким содержимым: <?php if (!empty($_SERVER['QUERY_STRING'])){ $re_addr=$_SERVER['QUERY_STRING']; header('Location: '.$re_addr); } ?>
Создайте файл .htaccess в директории go и заполните следующими строчками: DirectoryIndex index.php RewriteEngine Off
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: valet (30 декабря 2008 12:29) |
Я внимательно читал все ваши 3 статьи и все именно так и сделал, и на одном сайте работает, а на другом - нет. Ума не приложу в чем дело. Может что-то надо с правами папки шаманить, дал 777 - не помогло. Что это еще может быть. Может, из-за какого-нибудь .htaccess, что выше по иерархии (в корне сайта например)
???
такое ощущение, что при наборе site.ru/go/ движок просто напросто не хочет идти туда, а сразу выдает ошибку
Кстати на том сайте, где работает, если набрать site.ru/go/ то не выводится ничего, а том, где не работает, если так набрать, то выводится все та же ошибка, генерируемая движком: К сожалению, данная страница для Вас не доступна:...
|
|
|
| Комментарий добавил: PROGRAMMATOR (30 декабря 2008 13:04) |
Еще ниразу у меня такого небыло. А если ввести путь http://site.ru/go/index.php?http://site.net/ то скрипт обрабатывается?
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: valet (30 декабря 2008 15:34) |
Нет, та же самая ошибка. И что характерно, что если вводить site.ru/go/fkasfjasnfневажночто, то выдает эту ошибку: "К сожалению, данная страница для Вас не доступна: возможно, был изменен..." а если вводить например site.ru/go2/fkasfjasnfневажночто (то есть такой папки go2 там нет), то уже другая ошибка выводится: "По данному критерию новости не найдены, либо у вас нет доступа для просмотра этих новостей".
То есть движок как-то знает, что есть такая папка go, вот только скрипт, который в ней запускать не может.
Я уже так начал думать, может, это какая-то настройка самого движка, где-нибудь в настройках системы прописана, не знаю вообщем...
|
|
|
| Комментарий добавил: PROGRAMMATOR (30 декабря 2008 16:06) |
Пока я еще за компьютером, напишите мне на ICQ 883-749, гляну, что там у вас.
И так, с проблемой valet, разобрались. Оказывается скрипт по пути go определял переход в категорию, хотя непонятно как, на сайте категории небыло. Помогло изменение имени каталога на click (можно указать любое) и конечно незабыть изменить путь в коде parse.class.php. Это на тот случай, если у вас подобная проблема будет.
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: valet (30 декабря 2008 22:45) |
Да, спасибо PROGRAMMATOR за помощь. Удачи вам и вашему сайту в Новом 2009 году. С наступающим!
|
|
|
| Комментарий добавил: PROGRAMMATOR (31 декабря 2008 07:26) |
Не за что! Большое спасибо за поздравления, желаю вам и всем другим участникам в новом 2009 году всего самого лучшего.
С Наступающим!
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: pansik (4 января 2009 13:23) |
спасибо большое что реализовали улучшения, приятно что сайт действительно для людей. Такой вопрос по сео - при редиректе http://site.ru/go/index.php?http:// пр страницы льется на файл go/index.php, но это бесполезно с точки зрения веса страницы - он все равно теряется ссылаясь на не существенную страницу. Тоесть от спама мы спасаемся, но ничего и не выигрываем. Как сделать что ПР страницы лился например наглавную. (тобиш что б редирект страницы был вида site.ru/index.php? параметр...)
|
|
|
| Комментарий добавил: PROGRAMMATOR (4 января 2009 19:36) |
Цитата: pansik Тоесть от спама мы спасаемся, но ничего и не выигрываем. Ну так и не ставьте этот хак, он вам не нужен. Куда там PR льётся? Я понимаю, Новый Год и т.д. сам вчера писал программу, в итоге написал, сегодня половину кода перебивал. PR никак не может перетекать на каталог "go", так как ссылка где он упоминается, содержит атрибут rel="nofollow" который и сохраняет ваш PR и не передает его по ссылке. Ну и если у вас появится мысль что Яндекс индексит эту ссылку, то отвечу, что (левая, внешняя) ссылка закрыта тегами <noindex> (в которых Яндекс содержимое не индексирует).
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: pansik (4 января 2009 23:58) |
PROGRAMMATOR,сорь, сегодня действительно первый день после праздников, и весь в работе. Спасибо Вам и за то, что уже проделали, и за то, что указали на мою ошибку а не обматерили  . Завтра буду ставить, бо щас еще чего наворочу. Еще раз спасибо
|
|
|
| Комментарий добавил: PROGRAMMATOR (5 января 2009 10:41) |
:) не чего. Незачто, главное что бы больше людей его себе установило, а то я смотрю сейчас DLE стал каталогом ссылок. Каждый так и хочет в профиле оставить пачку ссылок... Вот пример http://seomax.info/user/45Charaup, жаль растраивать парня, но толку от них нет, а вот сам факт присутствия - противен!
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: pansik (5 января 2009 19:54) |
поставил, добавил новость с ссылкой в a href, ссылка добавилась хотя и преобразовалась в bb код. А стала редиректом только после редактирования. ТОбиш таким способом все ссылки, добавленые в хтмл коде все равно будут проходить, так ведь?
|
|
|
| Комментарий добавил: PROGRAMMATOR (5 января 2009 20:45) |
А у вас пользователи добавляют ссылки через HTML? Лично не видел еще доступа пользователей к этим тегам. Или вы опасаетесь что сами себе заспамите?
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: pansik (6 января 2009 14:22) |
PROGRAMMATOR, у меня спамеры добавляют ссылки в HTML, я ищу способа с ними бороться, вот и спрашиваю, будут ли такие ссылки проходить, или нет. В новости прошли, привел пример. Спамеры не только добавляют ссялки в хтмл, они еще и комбинируют, пытаясь сделать ссылки вида
[code] <a href="ya.ru">спам [/url] [url=ya.ru]spam</a> [/code] А как запрещать чистый html? Насколько я знаю он просто преобразовывается в бб код зы, проверил на коментах, на них все отображается текстом. так что работает... теперь ждем, че придумают спамеры
вот, а такой вопрос, ни ссылка на страницу партнерского сайта ни на категорию верно не обрабатывается, тоесть ставиться редирект на http://site.ru/video/ http://site.ru/video.html хотя это доверенный сайт... как это можно исправить?
|
|
|
| Комментарий добавил: PROGRAMMATOR (6 января 2009 15:27) |
Я уже в шоке, как может пользователь добавить HTML код? Любой HTML который добавит пользователь, да и админ парсится, каждая скобка < преабразовывается в < который "визуально" мы видим как <.
К примеру <a href="http://seomax.info/">seomax.info</a> - как он может обработаться?
Насчет второй проблемы, гляну после праздников.
Все, той проблемы уже нет. Исправил, скоро выложу финальную версию статьи, со всеми исправленными пунктами. С Рождеством ;)
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: pansik (7 января 2009 12:24) |
Цитата: PROGRAMMATOR Я уже в шоке, как может пользователь добавить HTML код? Любой HTML который добавит пользователь, да и админ парсится, каждая скобка < преабразовывается в < который "визуально" мы видим как <. Проверял добавлением новостей, - защита обрабатывает ББ код, поэтому если писать ссылку в хтмл то сначало парсером обрабатывается перевод <a href=" в [url= но редирект не ставится. И только после нажатия Редактировать поставился редирект, тоесть когда ссылка уже стояла в [url=. Отсюда и вывод сделал, что если не жать редактировать и сразу писать хтмл - будет необработаная редиректом ссылка в ББ коде Попробуйте добавить новость с ссылкой <a href="http://ya.ru/">ya.ru</a>. Проверялся с под админа на дле 7
|
|
|
| Комментарий добавил: PROGRAMMATOR (7 января 2009 14:18) |
Этот хак сделан не для защиты от "админа", админ с тем же успехом, добавляя код вида: <a href="http://seomax.info/">seomax.info</a>
Собственноручно сможет написать следуюший код: <noindex><a rel="nofollow" href="http://seomax.info/">seomax.info</a></noin dex>
Или же просто добавить в url-адрес путь /go/?. Просто смотрю, вы находите проблему, которой нет. Я же говорил, не удобно? Не используем и все, хотите обезопасить "администраторские действия", удалите admin.php с сайта, и вас не сломают, вы не заспамите себе в новости. Хак защищает от внешних ссылок, не тех что вы можете ставить в HTML, а тех что добавляют ваши посетилели в [ url ], а то что вы добавляете в HTML, простите, это ваш выбор, в дле прекрасно работают BB коды.
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: pansik (7 января 2009 23:43) |
Ну что вы так воспринимаете критику. Если б я не был заинтересован сделать ваш хак лучше, я бы не писал даже. И если бы не хотел использовать, не задавал бы таких вопросов. Всего то уточняю - ссылка в хтмл коде 100% от пользователей не пройдет ни в новость ни в комент? И это не значит что я недоволен или еще что то, попросту не знаю и интересуюсь у знающего человека.
|
|
|
| Комментарий добавил: PROGRAMMATOR (8 января 2009 00:51) |
Не обижайтесь если что, а то бывает настроения нет, а тут за ссылки в HTML Я благодарен вам, и другим пользователям что отписали найденные ошибки, благодаря вам я их исправил. С помощью ваших комментариев был пинок для меня в сторону файла с URL, в который можно было бы добавить много "дружественных ссылок", так же была исправлена ошибка с этими самыми дружественными URL, когда сам сайт не фильтровало, а категории и ссылки на новость - да. За что вам большое спасибо! Нет, пользователи доступа к вставке HTML кода не имеют, только BBcode. Только через панель администратора, на вкладке "Дополнительно", вы можете выбрать пункт "Автоматическое конвертирование HTML", у пользователей такого пункта нет. Не забываем, что эта статья уже устарела, обновите хак Защита DLE от внешних ссылок.
-------------------- Мой блокнот: www.seomax.info
|
|
|
| Комментарий добавил: vinni555 (3 февраля 2010 21:15) |
Незаменимая вещ уверен тИЦ поднимится на варез портале.  Все отлично работает, инструкция понятная. Спосибо, Вам большое.
|
|
|
| Комментарий добавил: vinni555 (4 февраля 2010 01:57) |
А yandex за редирект не банит?
|
|
|
| Комментарий добавил: nicklifs (27 августа 2010 19:23) |
У меня проблема с Дле с перекодированием хтмл кода. Если я всё сделаю как описано в этой новости, то у меня будут автоматом конвертироваться html код??? дле 8.0
|
|
|
| Комментарий добавил: PROGRAMMATOR (28 августа 2010 17:21) |
Хак затрагивает лишь BBCode.
-------------------- Мой блокнот: www.seomax.info
|
|
|