Вернуться   Форум SAPE.RU > Другое > Курилка

-->
Ответ
 
Опции темы
Старый 11.08.2008, 18:34   #201
Ваnnеd
 
Аватар для V!rus
 
Регистрация: 07.07.2007
Адрес: нет? :) Танцысбубном: да
Сообщений: 1,967
Вес репутации: 281
V!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущееV!rus - прекрасное будущее
Отправить сообщение для V!rus с помощью ICQ
По умолчанию

Опера 9.51
__________________
Помогаю рефералам.
Осуществляю поддержку сайтов с OpenCart, Bitrix, Wordpress, DLE, Drupal, WebAsyst и пр. Скайп agriboed
V!rus вне форума   Ответить с цитированием
Старый 29.08.2008, 01:52   #202
Новичок
 
Регистрация: 12.05.2008
Сообщений: 28
Вес репутации: 0
ShaMAD на пути к лучшему
Cool Защита от "Детектирования продажных ссылок"

Нашел тут на сетлинке тему про "Детектирование продажных ссылок" и портировал их код защиты на сапу.

PHP код:
...
class 
SAPE_base {

###### SafeUrl
    
var $_safe_params=Array();

    var 
$allow_url_params ""// параметры которые могут появлятся в урле через пробел "mod id username"

     
var $use_safe_method true// защита от проверки на продажность ссылок, читать тут
 ###### End of  SafeUrl

    
var $_version           '1.0.3';
... 
PHP код:
...
    function 
set_data($data){
        
$this->_links $data;
        if (isset(
$this->_links['__sape_delimiter__'])) {
            
$this->_links_delimiter $this->_links['__sape_delimiter__'];
        }

        
###### SafeUrl
        
if($this->use_safe_method && trim($this->allow_url_params) != '') {
            
$prms explode(" "$this->allow_url_params);
            foreach(
$prms as $p$this->_safe_params[] = $p;
        }
        
$this->_request_uri $this->SafeUrl('http://'.$this->_host.$this->_request_uri);

        
###### End of SafeUrl

        
if (array_key_exists($this->_request_uri$this->_links) && is_array($this->_links[$this->_request_uri])) {
            
$this->_links_page $this->_links[$this->_request_uri];
        } else {
            if (isset(
$this->_links['__sape_new_url__']) && strlen($this->_links['__sape_new_url__'])) {
                if (
$this->_is_our_bot || $this->_force_show_code){
                    
$this->_links_page $this->_links['__sape_new_url__'];
                }
            }
        }
    }

###### SafeUrl
    
function SafeUrl($url){
        
$url parse_url(trim($url));
        if(isset(
$url['query'])) {
            
$params $this->GetQueryParams($url['query']);
            if(
$params !== false) {
                
ksort($paramsSORT_STRING);
                
$params_string = Array();
                foreach(
$params as $name=>$value) {
                    if(
in_array($name$this->_safe_params)) {
                        if(
$value === false) {
                            
$params_string[]=$name;
                        }
                        else {
                            
$params_string[]=$name.'='.$value;
                        }
                    }
                }
                
$params_string implode('&'$params_string);
            }
        }
        if(!isset(
$url['path'])) $url['path'] = "/";
        if(isset(
$params_string) && $params_string != '')
            
$url['query'] = '?'.$params_string;
        else
            
$url['query'] = '';
        return 
$url['path'].$url['query'];
    }

    function 
GetQueryParams($query){
        if(
is_null($query) || trim($query)=='') return false;
        
$params explode('&'$query);
        
$out_params=Array();
        foreach(
$params as $val) {
            
$delimiter_position strpos($val,'=');
            if(
$delimiter_position === false  && $val!='') {
                
$out_params[$val] = false;
            } else if(
$delimiter_position == 0){
                
// no name...
            
} else {
                
$name substr($val0$delimiter_position);
                
$value substr($val$delimiter_position+1);
                
$out_params[strval($name)] = $value;
            }

        }
        return 
$out_params;
    }
###### End of SafeUrl

}
... 
Проверить можно через http://venality.name/
ShaMAD вне форума   Ответить с цитированием
Старый 29.08.2008, 01:53   #203
фОшЫст
 
Аватар для WebFX
 
Регистрация: 10.01.2008
Адрес: Эквадор
Сообщений: 6,773
Вес репутации: 504
WebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущееWebFX - прекрасное будущее
Отправить сообщение для WebFX с помощью ICQ
По умолчанию

Цитата:
Сообщение от ShaMAD Посмотреть сообщение
Проверить можно через http://venality.name/
да етот сайт и так нихрена определить не может
__________________
Скоро 2012 год. Скоро наступит апокалипсис. Страшный апокалипсис. Тупой апокалипсис. Ну вообще без мозгов апокалипсис.
WebFX вне форума   Ответить с цитированием
Старый 29.08.2008, 02:01   #204
Новичок
 
Регистрация: 12.05.2008
Сообщений: 28
Вес репутации: 0
ShaMAD на пути к лучшему
По умолчанию

Исправил ошибку, не показывающую ссылки из-за сортировки ключей.

PHP код:
...
class 
SAPE_base {

###### SafeUrl
    
var $_safe_params=Array();

    var 
$allow_url_params ""// параметры которые могут появлятся в урле через пробел "mod id username"

     
var $use_safe_method true// защита от проверки на продажность ссылок, читать тут
 ###### End of  SafeUrl

    
var $_version           '1.0.3';
... 
PHP код:
...
    function 
set_data($data){
        
$this->_links $data;
        if (isset(
$this->_links['__sape_delimiter__'])) {
            
$this->_links_delimiter $this->_links['__sape_delimiter__'];
        }

        
###### SafeUrl
        
if($this->use_safe_method && trim($this->allow_url_params) != '') {
            
$prms explode(" "$this->allow_url_params);
            foreach(
$prms as $p$this->_safe_params[] = $p;
        }
        
$this->_request_uri $this->SafeUrl('http://'.$this->_host.$this->_request_uri);

        
###### End of SafeUrl

        
if (array_key_exists($this->_request_uri$this->_links) && is_array($this->_links[$this->_request_uri])) {
            
$this->_links_page $this->_links[$this->_request_uri];
        } else {
            if (isset(
$this->_links['__sape_new_url__']) && strlen($this->_links['__sape_new_url__'])) {
                if (
$this->_is_our_bot || $this->_force_show_code){
                    
$this->_links_page $this->_links['__sape_new_url__'];
                }
            }
        }
    }

###### SafeUrl
    
function SafeUrl($url){
        
$url parse_url(trim($url));
        if(isset(
$url['query'])) {
            
$params $this->GetQueryParams($url['query']);
            if(
$params !== false) {
                
$params_string = Array();
                foreach(
$params as $name=>$value) {
                    if(
in_array($name$this->_safe_params)) {
                        if(
$value === false) {
                            
$params_string[]=$name;
                        }
                        else {
                            
$params_string[]=$name.'='.$value;
                        }
                    }
                }
                
$params_string implode('&'$params_string);
            }
        }
        if(!isset(
$url['path'])) $url['path'] = "/";
        if(isset(
$params_string) && $params_string != '')
            
$url['query'] = '?'.$params_string;
        else
            
$url['query'] = '';
        return 
$url['path'].$url['query'];
    }

    function 
GetQueryParams($query){
        if(
is_null($query) || trim($query)=='') return false;
        
$params explode('&'$query);
        
$out_params=Array();
        foreach(
$params as $val) {
            
$delimiter_position strpos($val,'=');
            if(
$delimiter_position === false  && $val!='') {
                
$out_params[$val] = false;
            } else if(
$delimiter_position == 0){
                
// no name...
            
} else {
                
$name substr($val0$delimiter_position);
                
$value substr($val$delimiter_position+1);
                
$out_params[strval($name)] = $value;
            }

        }
        return 
$out_params;
    }
###### End of SafeUrl


Добавлено через 2 минуты
Цитата:
Сообщение от WebFX Посмотреть сообщение
да етот сайт и так нихрена определить не может
У меня определял.

Незнаю, надо это "скрытие" или туфта это вообще?

Последний раз редактировалось ShaMAD; 29.08.2008 в 02:03. Причина: Добавлено сообщение
ShaMAD вне форума   Ответить с цитированием
Старый 29.08.2008, 02:10   #205
Специалист
 
Аватар для Skvik
 
Регистрация: 27.03.2008
Сообщений: 219
Вес репутации: 209
Skvik - просто великолепная личностьSkvik - просто великолепная личностьSkvik - просто великолепная личностьSkvik - просто великолепная личностьSkvik - просто великолепная личностьSkvik - просто великолепная личностьSkvik - просто великолепная личность
По умолчанию

конкретно это - не знаю) утром потестю.
Но в свете последних заявлений Яндекс само по себе скрытие продажных ссылок небходимо
__________________
Размещаю статьи финансовой тематики
Skvik вне форума   Ответить с цитированием
Старый 02.09.2008, 19:45   #206
Новичок
 
Регистрация: 20.06.2007
Сообщений: 21
Вес репутации: 0
Blade на пути к лучшему
По умолчанию

ShaMAD, спасибо, конечно, вещь нужная, но можно подробнее, что с этим кодом делать? И почему ты его разбил на две части?
Blade вне форума   Ответить с цитированием
Старый 04.09.2008, 11:07   #207
Новичок
 
Регистрация: 19.06.2008
Сообщений: 12
Вес репутации: 0
anshir на пути к лучшему
По умолчанию

Если можно с примером. Пока непонятно что с этим классом делать.
anshir вне форума   Ответить с цитированием
Старый 04.09.2008, 12:58   #208
Новичок
 
Регистрация: 12.05.2008
Сообщений: 28
Вес репутации: 0
ShaMAD на пути к лучшему
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
ShaMAD, спасибо, конечно, вещь нужная, но можно подробнее, что с этим кодом делать? И почему ты его разбил на две части?
Потому, что одна часть кода вставляется в начало, а вторая в середину кода сапы(sape.php). Все работает, только не удалось решить проблему (index.php?id=1&cat=2 != index.php?cat=2&id=1). Решить ее можно, но сортировка каждый раз сильно грузит клиента. Если сапа официально признает код, то сортировку параметров можно делать на сервере и отправлять клиенту все в готовом виде.

Добавил защиту и к контекстной рекламе.

По пунктам:
1. Между строк

PHP код:
//Основной класс, выполняющий всю рутину
class SAPE_base 
и

PHP код:
    var $_version           '1.0.3'
вставляем код

PHP код:
######### SAFE URL
    
var $_safe_params=Array();

    var 
$allow_url_params ""// параметры которые могут появлятся в урле через пробел "cat mod id username"

    
var $use_safe_method true// защита от проверки на продажность ссылок
######### END OF SAFE URL 
2. Между строк

PHP код:
        if ($data $this->_read($this->_db_file)) {
            
$this->set_data(@unserialize($data));
        }
    } 
и

PHP код:
}

class 
SAPE_client extends SAPE_base 
вставляем код

PHP код:
######### SAFE URL
    
function SafeUrl($url){
        
$url parse_url(trim($url));
        if(isset(
$url['query'])) {
            
$params $this->GetQueryParams($url['query']);
            if(
$params !== false) {
                
#ksort($params, SORT_STRING);
                
$params_string = Array();
                foreach(
$params as $name=>$value) {
                    if(
in_array($name$this->_safe_params)) {
                        if(
$value === false) {
                            
$params_string[]=$name;
                        }
                        else {
                            
$params_string[]=$name.'='.$value;
                        }
                    }
                }
                
$params_string implode('&'$params_string);
            }
        }
        if(!isset(
$url['path'])) $url['path'] = "/";
        if(isset(
$params_string) && $params_string != '')
            
$url['query'] = '?'.$params_string;
        else
            
$url['query'] = '';
        return 
$url['path'].$url['query'];
    }

    function 
GetQueryParams($query){
        if(
is_null($query) || trim($query)=='') return false;
        
$params explode('&'$query);
        
$out_params=Array();
        foreach(
$params as $val) {
            
$delimiter_position strpos($val,'=');
            if(
$delimiter_position === false  && $val!='') {
                
$out_params[$val] = false;
            } else if(
$delimiter_position == 0){
                
// no name...
            
} else {
                
$name substr($val0$delimiter_position);
                
$value substr($val$delimiter_position+1);
                
$out_params[strval($name)] = $value;
            }
        }
        return 
$out_params;
    }
######### END OF SAFE URL 
3. Между строк

PHP код:
    function set_data($data){
        
$this->_links $data;
        if (isset(
$this->_links['__sape_delimiter__'])) {
            
$this->_links_delimiter $this->_links['__sape_delimiter__'];
        } 
и

PHP код:
        if (array_key_exists($this->_request_uri$this->_links) && is_array($this->_links[$this->_request_uri])) {
            
$this->_links_page $this->_links[$this->_request_uri]; 
вставляем код

PHP код:
######### SAFE URL
        
if($this->use_safe_method && trim($this->allow_url_params) != '') {
            
$prms explode(" "$this->allow_url_params);
            foreach(
$prms as $p$this->_safe_params[] = $p;
            
$this->_request_uri $this->SafeUrl('http://'.$this->_host.$this->_request_uri);
        }
######### END OF SAFE URL 
4. Между строк

PHP код:
     function set_data($data) {
         
$this->_words $data
и

PHP код:
        if (array_key_exists($this->_request_uri$this->_words) && is_array($this->_words[$this->_request_uri])) {
            
$this->_words_page $this->_words[$this->_request_uri];
        } 
Вставляем код

PHP код:
######### SAFE URL
        
if($this->use_safe_method && trim($this->allow_url_params) != '') {
            
$prms explode(" "$this->allow_url_params);
            foreach(
$prms as $p$this->_safe_params[] = $p;
            
$this->_request_uri $this->SafeUrl('http://'.$this->_host.$this->_request_uri);
        }
######### END OF SAFE URL 
Код защищает от простой проверки - добавления лишних параметров к ссылке, т.е. index.php?id=1&cat=2 == index.php?id=1&cat=2&query=3 (Показываются одни и теже ссылки). В данном примере параметр "query" не входит в список допустимых параметров и следовательно не учитывается.
Проверить можно через http://venality.name/

Добавлено через 7 минут
О_о тема переехала в курилку

P.S: Редактирование сообщения в течении 5 минут обходится добавлением сообщения а потом редактированием его. Имхо только мешает...

Последний раз редактировалось ShaMAD; 04.09.2008 в 12:58. Причина: Добавлено сообщение
ShaMAD вне форума   Ответить с цитированием
Старый 20.09.2008, 20:49   #209
Новичок
 
Регистрация: 12.05.2008
Сообщений: 28
Вес репутации: 0
ShaMAD на пути к лучшему
По умолчанию

Добавил сортировку параметров на стадии записи локального файла. Это позволило сделать защиту от перестановки параметров ("index.php?id=1&val=45" == "index.php?val=45&id=1")

По пунктам:
1. Ищем строку

PHP код:
//Основной класс, выполняющий всю рутину
class SAPE_base 
вставляем код

PHP код:
######### SAFE URL
    
var $_safe_params=Array();

    var 
$allow_url_params ""// параметры которые могут появлятся в урле через пробел "mod id username"

    
var $use_safe_method true// защита от проверки на продажность ссылок.
######### END OF SAFE URL 
2. Ищем строку

PHP код:
            return $data;
        }

        return 
$this->raise_error('Не могу считать данные из файла: ' $filename);
    } 

вставляем код

PHP код:
    /*
     * Функция сортировки параметров в локальном файле
     */

    
function _sort($query) {
        
$url parse_url(trim($query[1]));
        if(isset(
$url['query'])) {
            
$params $this->GetQueryParams($url['query']);
            if(
$params !== false) {
                
$delim "?";
                
ksort($paramsSORT_STRING);
                
$params_string = Array();
                foreach(
$params as $name=>$value) {
                    if(
$value === false) {
                        
$params_string[]=$name;
                    }
                    else {
                        
$params_string[]=$name.'='.$value;
                    }
                }
                
$params_string implode('&'$params_string);
            }
            else {
                
$delim "";
            }
        }
        return 
"s:".strlen("/".$url[path].$delim.$params_string).":\"/".$url[path].$delim.$params_string."\"";
    } 
3. Ищем строку

PHP код:
     /*
     * Функция записи в локальный файл
     */

    
function _write($filename$data) { 
вставляем код

PHP код:
$data = ($this->use_safe_method preg_replace_callback('%s:[0-9+]+:"/(.*?)"%i', array(&$this'_sort'), $data) : $data); 
4. Ищем строку

PHP код:
        if ($data $this->_read($this->_db_file)) {
            
$this->set_data(@unserialize($data));
        }
    } 
вставляем код

PHP код:
######### SAFE URL
    
function SafeUrl($url){
        
$url parse_url(trim($url));
        if(isset(
$url['query'])) {
            
$params $this->GetQueryParams($url['query']);
            if(
$params !== false) {
                
ksort($paramsSORT_STRING);
                
$params_string = Array();
                foreach(
$params as $name=>$value) {
                    if(
in_array($name$this->_safe_params)) {
                        if(
$value === false) {
                            
$params_string[]=$name;
                        }
                        else {
                            
$params_string[]=$name.'='.$value;
                        }
                    }
                }
                
$params_string implode('&'$params_string);
            }
        }
        if(!isset(
$url['path'])) $url['path'] = "/";
        if(isset(
$params_string) && $params_string != '')
            
$url['query'] = '?'.$params_string;
        else
            
$url['query'] = '';
        return 
$url['path'].$url['query'];
    }

    function 
GetQueryParams($query){
        if(
is_null($query) || trim($query)=='') return false;
        
$params explode('&'$query);
        
$out_params=Array();
        foreach(
$params as $val) {
            
$delimiter_position strpos($val,'=');
            if(
$delimiter_position === false  && $val!='') {
                
$out_params[$val] = false;
            } else if(
$delimiter_position == 0){
                
// no name...
            
} else {
                
$name substr($val0$delimiter_position);
                
$value substr($val$delimiter_position+1);
                
$out_params[strval($name)] = $value;
            }
        }
        return 
$out_params;
    }
######### END OF SAFE URL 
5. Ищем строку

PHP код:
    function set_data($data){
        
$this->_links $data;
        if (isset(
$this->_links['__sape_delimiter__'])) {
            
$this->_links_delimiter $this->_links['__sape_delimiter__'];
        } 
вставляем код

PHP код:
######### SAFE URL
        
if($this->use_safe_method && trim($this->allow_url_params) != '') {
            
$prms explode(" "$this->allow_url_params);
            foreach(
$prms as $p$this->_safe_params[] = $p;
            
$this->_request_uri $this->SafeUrl('http://'.$this->_host.$this->_request_uri);
        }
######### END OF SAFE URL 
6. Ищем строку

PHP код:
     function set_data($data) {
         
$this->_words $data
вставляем код

PHP код:
######### SAFE URL
        
if($this->use_safe_method && trim($this->allow_url_params) != '') {
            
$prms explode(" "$this->allow_url_params);
            foreach(
$prms as $p$this->_safe_params[] = $p;
            
$this->_request_uri $this->SafeUrl('http://'.$this->_host.$this->_request_uri);
        }
######### END OF SAFE URL 
Потестите, у меня все работает.
ShaMAD вне форума   Ответить с цитированием
Старый 20.09.2008, 21:43   #210
Специалист
 
Регистрация: 12.03.2008
Сообщений: 157
Вес репутации: 206
Vladn - очень-очень хороший человекVladn - очень-очень хороший человекVladn - очень-очень хороший человекVladn - очень-очень хороший человекVladn - очень-очень хороший человек
По умолчанию

Предлагаю свой вариант PHP-кода защиты от проверки продажных ссылок. Он основан на идее изменения переменной окружения REQUEST_URI и не требует модификации кода sape.php.

Итак, перед кодом, отвечающим за вывод ссылок (который начинается со строчки "if (!defined('_SAPE_USER')){"), добавьте следующий код:
PHP код:
if (strchr($_SERVER['REQUEST_URI'], '?')) {
    
$p = array('cat''page''q'); //здесь перечисляются допустимые параметры в URL
    
$newq '';
    foreach (
$p as $pi) {
        if (
preg_match("/[\&\?]$pi=([^\&]*)/"$_SERVER['REQUEST_URI'], $m)) {
            if (
$newq) { $newq .= '&'; }
            
$newq .= $pi.'='.$m[1];
        }
    }
    
$_SERVER['REQUEST_URI'] = preg_replace('/\?.*$/''?'.$newq$_SERVER['REQUEST_URI'])  ;

В результате при обращении к странице
Код:
http://server.com/show.php?q=cars&page=2&paidlinks=1
в $_SERVER['REQUEST_URI'] будет находиться адрес
Код:
http://server.com/show.php?page=2&q=cars
Vladn вне форума   Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моя защита от ERROR Mendel Ошибки при работе с системой 34 31.10.2009 13:17
Защита sape_venality_name робот не увидел ссылок darksquall Вопросы по работе системы 10 18.07.2008 00:30
Защита от псевдовараметорв в урлах mihey Вопросы от новичков 4 03.04.2008 23:46
Защита ссылок от палива поисковыми системами karizma Вопросы по работе системы 7 11.02.2008 08:21
Автосмена текстов, защита от защиты поисковиков fantlab Пожелания пользователей системы 7 08.01.2008 09:54


Часовой пояс GMT +3, время: 08:52.