Шифровка исходящих ссылок

(Ответов: 6, Просмотров: 1359)
  1. Дипломник Аватар для Viking5310
    • Регистрация: 02.04.2013
    • Сообщений: 107
    • Репутация: 18
    • Webmoney BL: ?
    Кто из кодеров знает как можно решить такой вопрос?

    На сайте (ВП) все исходящие ссылки имеют вид
    Код HTML:
    http://сайт/go/ххх.php?blog=&url=http://другой_сайт
    => затем пользователь попадает на транзитную страницу и далее уже может перейти на внешний ресурс.
    Я хочу что бы вместо " _http://другой_сайт" была шифровка как на dle сайтах вида " _http://vashsite.ru/url.php?url=aHR0cDovL3d3dy5lcG9jaHRhLnJ1L3JhdGluZy 8= "
    Нашел вот такой плагин
    PHP код:
    <?php
    /*
    Plugin Name: RC Link Redirector
    Plugin URI: http://chanishvili.org/rc-redirector/
    Description: Превращение внешних ссылок во внутренние, с попутной их шифрацией. Очень удобно прятать рефовые и прочие «хитрые» ссылки. Управление плагином: <a href="/wp-admin/admin.php?page=rc_redirector/rc_redirector.php">Внешний вид » RC Link Redirector</a>.
    Author: Роланд Чанишвили
    Version: 0.8.2
    Author URI: http://chanishvili.org/
    $Id: rc_redirector.php 17 2009-05-27 15:34:59Z Роланд $
    */

    function rcr_redirect()
    {
        
    $url=$_SERVER['REQUEST_URI'];
        if((
    $url[0]!='/') and ($url[strlen($url)]!='/'))return;
        
    $uarr=explode("/",$url);
        
    $rcr_opt maybe_unserialize(get_option('rcr_settings'));
        if(!isset(
    $rcr_opt['rcr_relink_val'])) return;
        
    $incr 0;
        foreach (
    $uarr as $chpu) {
           if (
    $chpu == $rcr_opt['rcr_relink_val']) {
                
    $todo '/^.*' $chpu '\//';
                
    $link preg_replace($todo,'',$url);
                
    $link str_replace("==/",'==',$link);
                
    $rederectlink html_entity_decode(rcr_crypt(base64_decode($link)));
                if (
    preg_match('/^(https:|http:|ftp:)/i'$rederectlink)) wp_redirect($rederectlink302);
                else 
    wp_redirect(get_option('siteurl').'/'.md5($rederectlink), 404);
                exit;
           }
        
    $incr++;
        }
    }

    function 
    rcr_crypt($str){
        global 
    $rcr_opt;
        if(empty(
    $rcr_opt['secreet'])) return $str;
        
    $key=str_pad(''strlen($str), $rcr_opt['secreet'], STR_PAD_RIGHT);
        for(
    $i=0;$i<strlen($str);$i++){
            
    $str[$i] = chr(ord($str[$i]) ^ ord($key[$i]));
        }
        return 
    $str;
    }

    function 
    rcr_isstopwords($data)
    {
        global  
    $rcr_opt;
        if(
    $rcr_opt['rcr_stop']){
        
    $list explode("\n",$rcr_opt['rcr_stop_list']);
        foreach(
    $list as $sw)
            if(
    stripos($datatrim($sw))!==false) return true;
        }
        return 
    false;
    }

    function 
    rcr_isstoprel($data)
    {
        global  
    $rcr_opt;
        if(
    $rcr_opt['rcr_rel_stop']){
            
    $needle "rel=\"".$rcr_opt['rcr_rel_val']."\"";
            if(
    stripos($data$needle)!==false) return true;
            
    $needle "rel='".$rcr_opt['rcr_rel_val']."'";
            if(
    stripos($data$needle)!==false) return true;
        }
        if(
    $rcr_opt['rcr_class_stop']){
            
    $needle "class=\"".$rcr_opt['rcr_class_val']."\"";
            if(
    stripos($data$needle)!==false) return true;
            
    $needle "class='".$rcr_opt['rcr_class_val']."'";
            if(
    stripos($data$needle)!==false) return true;
        }
        return 
    false;
    }

    function 
    rcr_iscanblank($data)
    {
        global  
    $rcr_opt;
        if (!
    $rcr_opt['rcr_blank']) return false;
        if ((
    stripos($data'.exe')!==false) or (stripos($data'.zip')!==false) or
            (
    stripos($data'.rar')!==false) or (stripos($data'.msi')!==false)) return false;
        return 
    true;

    }

    function 
    rcr_encode($data)
    {
        global  
    $rcr_opt;
        
    $home get_settings('home');
        
    preg_match_all('#<a(?:.*?)href(?:\s*)=(?:\s*)[\"\']((https?|ftp):\/\/\S*?)[\"\']([^>]*)>(.*?)<\/a>#im',$data,$arr);
    #    echo "<pre>"; print_r($arr);echo "</pre>";
        
    for ($i=0$i<count($arr[0]); $i++) {
            if(
    stripos($arr[1][$i],$home)!==0){ // Внешняя ссылка
                
    if(rcr_isstoprel($arr[0][$i])==false){ // Не со служебным rel или class
                    
    if(rcr_isstopwords($arr[1][$i])==false){ // Не в стопсписке
                        
    if (!stristr($arr[0][$i], 'javascript:')) { // Не яваскрипт
                            
    $tmp $arr[0][$i];
                            if(
    $rcr_opt['rcr_comment_text']==true){
                                if(
    strpos($arr[4][$i],'<img')===false){
                                    if (
    preg_match('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/im'$arr[4][$i])) $tmp str_replace('>'.$arr[4][$i].'<','>'.$rcr_opt['rcr_comment_text_val'].'<',$tmp);
                                }
                            }
                            if(
    $rcr_opt['rcr_comment']==true){
                                
    $tmp str_replace($arr[1][$i],$home.'/'.$rcr_opt['rcr_relink_val'].'/'.base64_encode(rcr_crypt($arr[1][$i])).'/',$tmp);
                            }
                            if(
    rcr_iscanblank($arr[0][$i])) {// Добавлять target=_blank
                                
    $tmp ereg_replace('target=["\'][^\'".]+["\']'''$tmp);
                                
    $tmp str_replace('<a','<a target="_blank"',$tmp);
                            }
                            if(
    $rcr_opt['rcr_nofollow']){ // Добавлять rel=nofollow
                                
    $tmp ereg_replace('rel=["\'][^\'".]+["\']'''$tmp);
                                
    $tmp str_replace('<a','<a rel="nofollow"',$tmp);
                            }
                            if(
    $rcr_opt['rcr_noindex']){ // Добавлять noindex
                                
    $tmp str_replace('</a>','</a></noindex>',$tmp);
                                
    $tmp str_replace('<a','<noindex><a',$tmp);
                            }
                            
    $data str_replace($arr[0][$i],$tmp,$data);
                        }
                    }
                }else { 
    // Не обрабатывать, ибо есть служебный rel
                    
    $tmp ereg_replace('rel=["\'][^\'".]+["\']'''$arr[0][$i]);
                    
    $data str_replace($arr[0][$i],$tmp,$data);
                }
            }
        }
    return 
    $data;
    }

    function 
    rcr_encode_bookmarks($data)
    {
        global  
    $rcr_opt;
        for (
    $i =$i<count($data); $i++) {
            
    $data[$i]->link_url get_settings('home').'/'.$rcr_opt['rcr_relink_val'].'/'.base64_encode(rcr_crypt($data[$i]->link_url)).'/';
            if(
    $rcr_opt['rcr_blank']) $data[$i]->link_target '_blank';
        }

    return 
    $data;
    }

    function 
    rcr_info($str)
    {
        
    $class = (strpos($str,'!')===false) ? 'updated' 'error';
        echo 
    '<div class="'.$class.'"><p>'.$str.'</p></div>';
    }

    function 
    rcr_adminpage()
    {
        global  
    $rcr_opt;
        if(isset(
    $_POST['rcr_save'])) {
            unset(
    $_POST['rcr_save']);
            
    $_POST['secreet'] = md5(mt_rand().mt_rand().mt_rand());
            if(
    strlen(trim($_POST['rcr_rel_val']))==0)        $_POST['rcr_rel_stop']=0;
            if(
    strlen(trim($_POST['rcr_class_val']))==0)    $_POST['rcr_class_stop']=0;
            if(
    strlen(trim($_POST['rcr_stop_list']))==0)    $_POST['rcr_stop']=0;
            if(
    strlen(trim($_POST['rcr_comment_text_val']))==0)    $_POST['rcr_comment_text']=0;
            if(
    strlen(trim($_POST['rcr_relink_val']))==0)    $_POST['rcr_relink_val']=dechex(rand(0x1000,0xFFFFFF));
            
    update_option('rcr_settings',serialize($_POST));
            
    rcr_info('Установки <strong>RC Redirector</strong> сохранены.<br />Секретный ключ: '.$_POST['secreet']);
        };

        
    $rcr_opt maybe_unserialize(get_option('rcr_settings'));
        if(
    count($rcr_opt)==1$rcr_opt = array(
            
    'rcr_content'=>"1",
            
    'rcr_excerpt'=>"1",
            
    'rcr_stop'=>"1",
            
    'rcr_rel_val'=>dechex(rand(0x1000,0xFFFFFF)),
            
    'rcr_relink_val'=>dechex(rand(0x1000,0xFFFFFF)),
            
    'rcr_stop_list'=>"kaak.ru\nchanishvili.org\nrssguru.ru",
            
    'rcr_comment_text_val'=>"[ссылка]",
        );
        if(empty(
    $rcr_opt['secreet'])) rcr_info("Секретный ключ не найден! Сохраните настройки для его генерации.</p>");
    ?>
    <div class="wrap">
    <h2>RC Link Redirector</h2>
    <?=$msg;?>
    <form method='post'>
      <fieldset>
      <table>
       <tr><td><label><input name='rcr_content' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_content'] ? 'checked' ''?> />
        &nbsp;"Оборачивать" ссылки в <strong>записях</strong></label></td></tr>
       <tr><td><label><input name='rcr_excerpt' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_excerpt'] ? 'checked' ''?> />
        &nbsp;"Оборачивать" ссылки в <strong>цитатах</strong></label></td></tr>
       <tr><td><label><input name='rcr_comment' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_comment'] ? 'checked' ''?> />
        &nbsp;"Оборачивать" ссылки в <strong>комментариях</strong></label></td></tr>
       <tr><td><label><input name='rcr_comment_author' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_comment_author'] ? 'checked' ''?> />
        &nbsp;"Оборачивать" ссылки <strong>на сайты коментаторов</strong></label></td></tr>
       <tr><td><label><input name='rcr_bookmarks' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_bookmarks'] ? 'checked' ''?> />
        &nbsp;"Оборачивать" ссылки в <strong>блогролле</strong></label></td></tr>

       <tr><td><label><input name='rcr_comment_text' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_comment_text'] ? 'checked' ''?> />
        &nbsp;Если текст ссылки сам является ссылкой, то заменять его на текст </label><input name='rcr_comment_text_val' type='text' size=10 value='<?php  echo $rcr_opt['rcr_comment_text_val'?>' /></label></td></tr>

        <tr><td><label><input name='rcr_blank' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_blank'] ? 'checked' ''?> />
        &nbsp;Добавлять <strong>target='_blank'</strong> ко всем обработанным ссылкам, кроме архивов и исполнимых файлов</label></td></tr>

        <tr><td><label><input name='rcr_nofollow' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_nofollow'] ? 'checked' ''?> />
        &nbsp;Добавлять <strong>rel='nofollow'</strong> ко всем обработанным ссылкам</label></td></tr>

        <tr><td><label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Базоваая ссылка для редиректа <input name='rcr_relink_val' type='text' size=6 value='<?php  echo $rcr_opt['rcr_relink_val'?>' /></label></td></tr>

        <tr><td><label><input name='rcr_noindex' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_noindex'] ? 'checked' ''?> />
        &nbsp;Обрамлять обработанные ссылки тегом <strong>&lt;noindex&gt;</strong></label></td></tr>

        <tr><td><label><input name='rcr_rel_stop' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_rel_stop'] ? 'checked' ''?> />
        &nbsp;Использовать служебное значение тега <b>rel="</b></label><label><input name='rcr_rel_val' type='text' size=6 value='<?php  echo $rcr_opt['rcr_rel_val'?>' /><b>"</b> отменяющee обработку ссылки.</label></td></tr>

        <tr><td><label><input name='rcr_class_stop' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_class_stop'] ? 'checked' ''?> />
        &nbsp;Использовать CSS <b>class="</b></label><label><input name='rcr_class_val' type='text' size=6 value='<?php  echo $rcr_opt['rcr_class_val'?>' /><b>"</b> отменяющий обработку ссылки. Специально для продажи ссылок через SAPE.</label></td></tr>

        <tr><td><label><input name='rcr_stop' type='checkbox' value='1' <?php echo ($rcr_opt['rcr_stop'] ? 'checked' ''?> />
        &nbsp;Использовать «белый список» слов отменяющих обработку ссылки.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Один URL на строку, регистр неважен, поиск идет по аттрибуту <strong>href</strong> ссылки</label></td></tr>
        <tr><td><textarea name='rcr_stop_list' rows=6 cols=50><?php echo stripslashes($rcr_opt['rcr_stop_list']); ?></textarea></td></tr>

        <tr><td>&nbsp;<br /><input name='rcr_save' class='button-primary' type='submit' id='rcr_save' value='Сохранить изменения »'  /></td></tr>
       </table>
      </fieldset>
    </form>

    <p>Самая свежая версия плагина доступна на <strong><a href='http://www.chanishvili.org/rc-redirector/' target='_blank'>www.chanishvili.org/rc-redirector</a></strong><br />Консультации и доработки обычно платные, пишите на <a href='mailto:roland@turtleblast.com'>roland@turtleblast.com</a> или стучитесь в ICQ <img alt="Статус ICQ" src="http://web.icq.com/whitepages/online?icq=48426188&amp;img=26" border="0"  class="wp-smiley"> 48426188. О цене  договоримся :)</p>
    </div> <!-- wrap -->
    <?php
    }

    function 
    rcr_redirector_hook(){
        global 
    $admin_page_hooks
        foreach(
    $admin_page_hooks as $key=>$val) if($val=='rc-plugins'$file $key;
        if(empty(
    $file)) {
            
    add_menu_page('RC Link Redirector''RC Plugins'8__FILE__'rcr_adminpage',"http://www.chanishvili.org/favicon.ico");
            
    $file __FILE__;
        }
        
    add_submenu_page($file,'RC Link Redirector''RC Link Redirector'8__FILE__'rcr_adminpage');
    }

    add_action('admin_menu','rcr_redirector_hook');
    add_action('template_redirect''rcr_redirect');

    $rcr_opt maybe_unserialize(get_option('rcr_settings'));
    if(
    $rcr_opt['rcr_excerpt']) add_action('the_excerpt''rcr_encode');
    if(
    $rcr_opt['rcr_content']) add_action('the_content''rcr_encode');
    if(
    $rcr_opt['rcr_comment']) add_filter('comment_text''rcr_encode');
    if(
    $rcr_opt['rcr_comment_author']) add_filter('get_comment_author_link''rcr_encode');
    if(
    $rcr_opt['rcr_bookmarks']) add_filter('get_bookmarks''rcr_encode_bookmarks');

    ?>
    но он автоматически отправляет посетителя на внешний без использования транзитной страницы.
    Сам код транзитной страницы:
    PHP код:
    <?php
             header
    ('Content-Type:text/html; charset=UTF-8');
        
    $url  $_GET['url'];
        
    $blog urldecode($_GET['blog']);
    ?>

    <html>
    <header>
    <meta http-equiv="refresh" content="50; url=<?php echo $url?>">
    </header>
    <body style="margin:0">
    <p style="font:12px Arial,Helvetica,sans-serif;color:#000;margin:99px 0;text-align:center;padding:50px;border:1px dotted #00F;background-color:#EEE">
    <?php
             
    if ($blog == "") {
    ?>
    Примечание: После нажатия на внешнюю ссылку Вы покините наш сайт.<br />
    <?php
             
    } else {
    ?>
    Примечание: После нажатия на внешнюю ссылку Вы сможете покинуть наш сайт - <b><?php echo $blog?></b>.<br>
    <br />
    <br />
    <?php
             
    }
    ?>
    <br />
    Однако, <b><?php echo $blog?></b> не несет ответственность за содержание следующей страницы... 
    <br />
    Если Вы не переместились автоматически, то нажмите на ссылку - <a href="<?php echo $url?>">Здесь</a>.<br>
    </p>

    </body>
    </html>
    Наткнулся на такой сайт
    Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1 сообщение(ий)):
    У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
    , но тут нужно кодировать ссылку руками - муторно и вариант.

    Прошу помощи.
    • 0
  2. Рождённый в СССР Аватар для Gann
    • Регистрация: 30.04.2012
    • Сообщений: 1,073
    • Репутация: 310
    Viking5310, если для ВП - то можно использовать плагин WP-NoExternalLinks. Просто в настройках указать "Кодировать ссылки в base64 (не требует отдельной mysql таблицы, но и не будет собирать статистику переходов)"
    • 1

    Спасибо сказали:

    Viking5310(25.08.2014),
  3. Дипломник Аватар для Viking5310
    • Регистрация: 02.04.2013
    • Сообщений: 107
    • Репутация: 18
    • Webmoney BL: ?
    Gann, а папка /goto/ и ссылки в ней индексируется если не использовать ноуиндек/ноуфолоу?
    Этоя к тому, что бы стат вес распределять по сайту, т.к. на папку /goto/ будет много ссылок.
    • 0
  4. Banned
    • Регистрация: 26.06.2014
    • Сообщений: 647
    • Репутация: 192
    • Webmoney BL: ?
    Viking5310,
    Модуль dude Smart Leech вообще писался не именно для DLE просто интегрировал автор его именно в DLE, поэтому он будет работать практически на большинстве CMS, просто необходимо настроить его конфиг и подключить к index.php вашего скрипта.
    • 0
  5. Дипломник Аватар для Viking5310
    • Регистрация: 02.04.2013
    • Сообщений: 107
    • Репутация: 18
    • Webmoney BL: ?
    VtopSearch, мне для WP нужно было)
    • 0
  6. Рождённый в СССР Аватар для Gann
    • Регистрация: 30.04.2012
    • Сообщений: 1,073
    • Репутация: 310
    Viking5310, сколько смотрел как у "других" - эта папка практически всегда закрыта в файле роботс, с помощью директивы "Дизалов: /goto
    • 1

    Спасибо сказали:

    Viking5310(26.08.2014),
  7. Студент
    • Регистрация: 29.01.2011
    • Сообщений: 32
    • Репутация: 11
    base64_decode / base64_encode как по мне должно быть достаточно. Для обычного пользователя уже ничего не понятно.
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
закрытие исходящих ссылок
Общие вопросы поисковой оптимизации 22 08.07.2014 11:03
Избавление от исходящих ссылок.
Вопросы от новичков 8 28.02.2014 21:49
Какое оптимальное соотношение входящих и исходящих ссылок?
Поисковые системы 9 03.05.2012 01:16
Влияние исходящих ссылок со страницы на продвижение запроса :)
Общие вопросы поисковой оптимизации 12 02.01.2012 01:14
Прирост исходящих ссылок
Поисковые системы 22 10.12.2009 16:24

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры