Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Опен Ресурс > Разработчикам > Готовые хаки

Ответ
 
Опции темы Опции просмотра
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #1 10-22-2012, 01:24

Хак редиректа внешних ссылок (роня 2.X) / обновлено

---

Скрываем внешние ссылки с помощью редиректа на внутреннюю страницу, чтобы сделать бесполезным размещение спамерами ссылок на портале (в основном в комментариях). Верен только для ссылок, размещенных посредством BB–кода и для ссылок на сайт пользователя, которую он указал в профиле.

---

Создаем новый пустой файл

/modules/system/cache/goodurl.php

Создаем в корне сайта файл /go.php

с содержанием

PHP код:
<?php

include_once("./mainfile.php");

if (!empty(
$_GET['url'])) {

    
$url strip_tags(base64_decode($_GET['url']));

    if (
myRefererCheck($errstr) == true) {
        
redirect_header($url5_REDIRECT_LINK_ATTENTION);
    }

    exit();

}

?>
В файле

/language/russian/global.php

После строки

PHP код:
define("_START""Первая"); 
Добавляем

PHP код:
define("_REDIRECT_LINK_ATTENTION""Внимание! Вы перенаправляетесь на другой сайт."); 
открываем файл

/class/module.textsanitizer.php

находим метод rcxCodeDecode()

находим и меняем строку

PHP код:
$replacements[] = '<a href="\\2" target="_blank">\\3</a>'
На

PHP код:
$replacements[] = "\$this->checkGoodUrl('$2', '$3')"
А строку

PHP код:
$replacements[] = '<a href="http://\\2" target="_blank">\\3</a>'
На

PHP код:
$replacements[] = "\$this->checkGoodUrl('http://$2', '$3')"
После метода rcxCodeDecode()


Т.е. после строк

PHP код:
return $text;

Добавляем новый метод

PHP код:
function checkGoodUrl($url$text$clean_text true)
{
    
$url strip_tags($url);
    if (
$clean_text$text strip_tags($text);
    
    
$good_url file_get_contents(RCX_ROOT_PATH '/modules/system/cache/goodurl.php');
    
    
$rcx_parsed_url parse_url(RCX_URL);
    
$parsed_link parse_url($url);
    
    if (
preg_match('/' preg_quote($rcx_parsed_url['host']) . '/is'$url) || preg_match('/' preg_quote($parsed_link['host']) . '/is'$good_url)) {
        
$link_html "<a href=\"" $url "\" target=\"_blank\">" $text "</a>";
    } else {
        
$link_html "<noindex><a rel=\"nofollow\" href=\"" RCX_URL "/go.php?url=" base64_encode($url) . "\" target=\"_blank\">" $text "</a></noindex>";
    }
    
    return 
$link_html;

Открываем

/modules/system/admin/filter/language/russian/filter.php

и после

PHP код:
define("_AM_BADAGENTSCONTAIN","aaa\.bbb\.ccc соответствует агенту, содержащему aaa.bbb.ccc"); 
добавляем

PHP код:
define("_AM_GOODURL","Дружественные URL");
define("_AM_GOODURL_DESC","Cайты-исключения (дружественные сайты) на которые не ставиться редирект при преобразовании BB-кода  в HTML ссылку"); 
открываем

/modules/system/admin/filter/filter.php

и меняем содержимое этого файла на

PHP код:
<?php
/**
*
* @ Copyright: Copyright (C) Farsus Design. All rights reserved. 
* @ Package: ScarPoX / shortterm SPX
* @ Subpackage: RUNCMS 
* @ License: http://www.gnu.org/copyleft/gpl.html GNU/GPL
*
*/

if ( $rcxUser->isAdmin($rcxModule->mid()) ) {

/**
* Description
*
* @param type $var description
* @return type description
*/
function filterMain($type='menu') {

if (
$_POST['submit'] == _SUBMIT) {
    
filterSave($type);
}

rcx_cp_header();
OpenTable();
echo 
'<a href="admin.php?fct=filter"><h4>'._AM_FILTERSETTINGS.'</h4></a><br />';

include_once(
RCX_ROOT_PATH."/class/rcxformloader.php");
$form = new RcxThemeForm(''"filterform""admin.php?fct=filter""post"true);

switch (
$type) {
    case 
'badunames':
        
$badentries file(RCX_ROOT_PATH.'/modules/system/cache/badunames.php');
        if ( !empty(
$badentries) ) {
            
$value '';
            foreach (
$badentries as $bad) {
                
$value .= trim($bad)."\n";
            }
            
$value trim($value);
        }
        
$unames_tarea  = new RcxFormTextArea(_AM_BADUNAMES."</b><br /><br />"._AM_ENTERUNAMES."<b>""unames"$value10);
        
$form->addElement($unames_tarea);
        
$submit_button = new RcxFormButton("""submit"_SUBMIT"submit");
        
$form->addElement($submit_button);

        
$op   = new RcxFormHidden('op''unames');
        
$form->addElement($op);
        
$form->display();
        break;

    case 
'bademails':
        
$badentries file(RCX_ROOT_PATH.'/modules/system/cache/bademails.php');
        if ( !empty(
$badentries) ) {
            
$value '';
            foreach (
$badentries as $bad) {
                
$value .= trim($bad)."\n";
            }
            
$value trim($value);
        }
        
$emails_tarea = new RcxFormTextArea(_AM_BADEMAILS."</b><br /><br />"._AM_ENTEREMAILS."<b>""emails"$value10);
        
$form->addElement($emails_tarea);
        
$submit_button = new RcxFormButton("""submit"_SUBMIT"submit");
        
$form->addElement($submit_button);

        
$op   = new RcxFormHidden('op''emails');
        
$form->addElement($op);
        
$form->display();
        break;

    case 
'badwords':
        
$badentries file(RCX_ROOT_PATH.'/modules/system/cache/badwords.php');
        if ( !empty(
$badentries) ) {
            
$value '';
            foreach (
$badentries as $bad) {
                
$value .= trim($bad)."\n";
            }
            
$value trim($value);
        }
        
$words_tarea   = new RcxFormTextArea(_AM_BADWORDS."<br /><br /></b>"._AM_ENTERWORDS."<b>""words"$value10);
        
$form->addElement($words_tarea);
        
$submit_button = new RcxFormButton("""submit"_SUBMIT"submit");
        
$form->addElement($submit_button);

        
$op = new RcxFormHidden('op''words');
        
$form->addElement($op);
        
$form->display();
        break;

    case 
'badips':
        
$value      '';
        
$badentries file(RCX_ROOT_PATH.'/modules/system/cache/badips.php');

        if ( !empty(
$badentries) ) {
            foreach (
$badentries as $bad) {
                
$value .= trim($bad)."\n";
            }
        }

        
$add_ip $_GET['add_ip'];
        if (!empty(
$add_ip)) {
            
$value .= "#".preg_quote(trim($add_ip))."#\n";
        }

        
$value trim($value);
        
$ips_tarea = new RcxFormTextArea(_AM_BADIPS."</b><br /><br />"._AM_ENTERIPS."<br /><div class='rcxquote'>"._AM_BADIPSTART."<br />"._AM_BADIPEND."<br />"._AM_BADIPCONTAIN."<b></div>""ips"$value10);
        
$form->addElement($ips_tarea);
        
$submit_button = new RcxFormButton("""submit"_SUBMIT"submit");
        
$form->addElement($submit_button);

        
$op = new RcxFormHidden('op''ips');
        
$form->addElement($op);
        
$form->display();
        break;

    case 
'badagents':
        
$badentries file(RCX_ROOT_PATH.'/modules/system/cache/badagents.php');
        if ( !empty(
$badentries) ) {
            
$value '';
            foreach (
$badentries as $bad) {
                
$value .= trim($bad)."\n";
            }
            
$value trim($value);
        }
        
$agents_tarea = new RcxFormTextArea(_AM_BADAGENTS."</b><br /><br />"._AM_ENTERAGENTS."<br /><div class='rcxquote'>"._AM_BADAGENTSSTART."<br />"._AM_BADAGENTSEND."<br />"._AM_BADAGENTSCONTAIN."<b></div>""agents"$value10);
        
$form->addElement($agents_tarea);
        
$submit_button = new RcxFormButton("""submit"_SUBMIT"submit");
        
$form->addElement($submit_button);

        
$op   = new RcxFormHidden('op''agents');
        
$form->addElement($op);
        
$form->display();
        break;
        
    case 
'goodurl':
        
$goodurl file_get_contents(RCX_ROOT_PATH '/modules/system/cache/goodurl.php');

        
$goodurl_tarea = new RcxFormTextArea(_AM_GOODURL."</b><br /><br />"._AM_GOODURL_DESC."</div>""goodurl"$goodurl10);
        
$form->addElement($goodurl_tarea);
        
$submit_button = new RcxFormButton("""submit"_SUBMIT"submit");
        
$form->addElement($submit_button);

        
$op   = new RcxFormHidden('op''goodurl');
        
$form->addElement($op);
        
$form->display();
        break;        

    default:
    echo 
'<ul><li><a href="admin.php?fct=filter&op=unames">'._AM_BADUNAMES.'</a></li>';
    echo 
'<li><a href="admin.php?fct=filter&op=emails">'._AM_BADEMAILS.'</a></li>';
    echo 
'<li><a href="admin.php?fct=filter&op=words">'._AM_BADWORDS.'</a></li>';
    echo 
'<li><a href="admin.php?fct=filter&op=ips">'._AM_BADIPS.'</a></li>';
    echo 
'<li><a href="admin.php?fct=filter&op=agents">'._AM_BADAGENTS.'</a></li>';
    echo 
'<li><a href="admin.php?fct=filter&op=goodurl">'._AM_GOODURL.'</a></li></ul>';
    break;
}
}


/**
* Description
*
* @param type $var description
* @return type description
*/
function filterSave($name) {
global 
$myts;

$rcx_token = & RcxToken::getInstance();

if ( !
$rcx_token->check() ) {
    
redirect_header('admin.php?fct=filter&op=' $name3$rcx_token->getErrors(true));
    exit();
}

if (!@
is_writable(RCX_ROOT_PATH."/modules/system/cache/".$name.".php")) {
    
$errors[] = sprintf(_MUSTWABLERCX_ROOT_PATH."/modules/system/cache/$name.php");
    return 
false;
}

$errors   = array();
$filter   = array();
$filtered $myts->oopsNl2Br($myts->oopsStripSlashesGPC(trim($myts->stripPHP($_POST[$name]))));
$filter   explode("<br />"$filtered);

if (!
$file = @fopen(RCX_ROOT_PATH."/modules/system/cache/$name.php""w")) {
    
$errors[] = sprintf(_MUSTWABLERCX_ROOT_PATH."/modules/system/cache/$name.php");
    } else {
        
$output "";
        foreach (
$filter as $entry) {
            
$output .= $entry."\n";
        }
        if (
fwrite($file$output) == -1) {
            
$errors[] = sprintf(_NGWRITERCX_ROOT_PATH."/modules/system/cache/$name.php");
        }
        
fclose($file);
    }

if (
count($errors) > 0) {
    
rcx_cp_header();
    
OpenTable();
    echo 
'<a href="admin.php?fct=filter"><h4>'._AM_FILTERSETTINGS.'</h4></a><br />';
    foreach (
$errors as $er) {
        echo 
$er."<br />";
    }
    } else {
        
redirect_header("admin.php?fct=filter&op=$name"1_UPDATED);
        exit();
    }

}


/**
* Description
*
* @param type $var description
* @return type description
*/
$op = !empty($_POST['op']) ? $_POST['op'] : $_GET['op'];

switch(
$op) {

case 
'words':
    
filterMain('badwords');
    break;

case 
'ips':
case 
'add_ip':
    
filterMain('badips');
    break;

case 
'unames':
    
filterMain('badunames');
    break;

case 
'emails':
    
filterMain('bademails');
    break;

case 
'agents':
    
filterMain('badagents');
    break;
    
case 
'goodurl':
    
filterMain('goodurl');
    break;

default:
    
filterMain();
}

CloseTable();
rcx_cp_footer();

}
?>
---

Теперь нам надо сделать, чтобы через редирект шли ссылки на сайт пользователя, которое он указал в своем профиле (в комментариях, на форуме, в самом прфиле)

открываем файл

/modules/forum/class/class.forumposts.php

находим метод showPost() и строку

PHP код:
$www_image "<a href='".$poster->url()."' target='_blank'><img src='".$bbImage['www']."' alt='"._VISITWEBSITE."' target='_blank' /></a>"
и меняем ее на

PHP код:
$www_image $myts->checkGoodUrl($poster->url(), "<img src='".$bbImage['www']."' alt='"._VISITWEBSITE."' target='_blank' />"false); 
открываем файл

/class/rcxcomments.php

находим метод showThreadPost() и строку

PHP код:
$www_image "<a href='".$poster->getVar("url")."'><img src='".RCX_URL."/images/icons/www.gif' alt='"._VISITWEBSITE."' target='_blank' /></a>"
меняем на

PHP код:
$www_image $myts->checkGoodUrl($poster->getVar("url"), "<img src='".RCX_URL."/images/icons/www.gif' alt='"._VISITWEBSITE."' target='_blank' />"false); 
открываем файл

/userinfo.php

находим строку

PHP код:
echo "<a href='".$thisUser->getVar("url""E")."' target='_blank'>".$thisUser->getVar("url")."</a>\n"
и меняем ее на

PHP код:
echo $myts->checkGoodUrl($thisUser->getVar("url"), "<img src='".RCX_URL."/images/icons/www.gif' alt='" _US_WEBSITE "' />"false) . "\n"
ОБЯЗАТЕЛЬНО! Открываем файл /robots.txt и после

Код:
User-agent: *
добавляем

Код:
Disallow: /go.php
---

После этого заходим в админ-панель в настройки фильтров в раздел «Дружественные URL» и заносим сайты, на которые редирект добавляться не будет.

Для ссылок на свой сайт редирект добавляться не будет по умолчанию, безотносительно к наличию его в «Дружественных URL»

---

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

Последний раз редактировалось LARK, 10-22-2012 в 22:48


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
pan вне форума pan
): ǝҺɐни dиw ɐн иd⊥оwɔ

Аватар для pan

| Цитировать Старый #2 10-22-2012, 15:28

В профиле есть 2 формы bio и occupation_text
В них тоже можно спокойно воткнуть ссылки, для них правило будет работать?


Напильник для RUNCMS
Строим помаленьку
Для гурманов
Мебель для дома
Посетить домашнюю страницу pan
  Сообщения: 4,777 c 15.03.2004 | Репутация: 121
LARK вне форума LARK
[исход]

Аватар для LARK

| Цитировать Старый #3 10-22-2012, 16:13

Цитата:
Сообщение от pan Посмотреть сообщение
В профиле есть 2 формы bio и occupation_text
В них тоже можно спокойно воткнуть ссылки, для них правило будет работать?
да, будет.


Правила нашего Форума :: О клубе пользователей RUNCMS :: Рекомендации по публикации сообщений :: Прежде чем задать вопрос воспользуйтесь Поиском
-------------------------------------------------------------------
Если что-то не работает, задавая вопрос, ! ОБЯЗАТЕЛЬНО ! пишите версию RUNCMS/модуля/PHP/MySQL и текст самой ошибки.
Посетить домашнюю страницу LARK
  Сообщения: 4,185 c 20.09.2003 | Репутация: 223
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 121.88 Kb. compressed to 118.61 Kb. by saving 3.26 Kb. (2.68%)
Page generated in 0.08989 seconds with 12 queries