Заниматься чем-то, нарушающим священное волеизъявление здешних господ на контент, который и только который они хотят видеть вокруг себя — дело, конечно, неблагодарное и кармически опасное. Но гонки вооружений между блокировщиками рекламы и рекламными системами не избежать, поэтому говорить об этом нужно. Сейчас, когда общий объем вырезанного трафика крутится около 1% — всё несколько вяленько, но уже есть оглядывающиеся владельцы сайтов, недополучающие до 30% денег с рекламы. Рекламные сети начинают общаться между собой, обмениваться спецификациями, есть уже какой-то израильский стартап на эту тему — думаю, соблазнительно с минимальными усилиями увеличить доход сразу и на проценты. В российском сегменте всё пока обходится увещевательными объявлениями вида «Вы отключили рекламу — это мешает нам развиваться» или простым игнорированием факта существования таких пользователей. Надо сказать, пусть оно всё так и остается.

Здесь, исключительно в режиме минимального доказательства работоспособности — будем обходить самый распространенный тип блокировщиков рекламы — по паттерну URL. Метод должен поддерживать:

  • хранения cookie рекламных систем на стороне пользователя
  • передавать не меньшее количество информации о пользователя, чем браузер: User-Agent, IP
  • требовать минимальной настройки большинства стандартных рекламных тэгов
  • быть легко подключаемым и изменяемым для случаев, когда кто-то не поленился и всё-таки добавил кастомное правило, попавшее в мейнстрим

Для достижения результата — будем маскировать все URL рекламных сетей через своеобразное прокси между сервером издателя и рекламодателя. Метод не самый дешевый c точки зрения ресурсов, потенциально опасен и для рекламодателей: источник фрода, не обойтись без оценкци качества трафика через клики или конверсии, и для издателей — если забанит гугл, то забанит весь сайт. Соответственно требует некоторого порога доверия между ними, но это всё отдельные вопросы. Да, все совпадения или упоминания случайны, брал то, что под руку попало.

Итак, мы хотим все вызовы сайта для тех у кого детектированы блокировщики рекламы, вида
http://ads.*.ru/228129/prepareCode?pp=g&ps=bugf&p2=ezfl&pct=a&plp=a&pli=a&pop=a'

Заменить на локальные, неотличимые от свойственного сайту контента, например

/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5Pcki64JcXvjIyzlgYXerh3yMMgY8DB5vleYAkS_gbRiHDSyQHU7QscAd38-1tKyYnnLjLSlpHq6aJ4sEo

Для наглядности начну с того, что будет нужно.

1. Взять рекламный тэг, зашифровать первую точку входа (та, которая в самом рекламном тэге) вручную

<!--Тип баннера: 990x90js-->
<!--Расположение: <верх страницы>-->
<script type="text/javascript">
    <!--
    (function(){
         //var link = 'http://ads.XXXXXX.ru/228129/prepareCode?pp=g&ps=bugf&p2=ezfl&pct=a&plp=a&pli=a&pop=a',
         var link = '/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5Pcki64JcXvjIyzlgYXerh3yMMgY8DB5vleYAkS_gbRiHDSyQHU7QscAd38-1tKyYnnLjLSlpHq6aJ4sEo',
         
     params = 'phone';
     new AXXXBanner(link, params).createBanner();
     })();
    //-->
</script>

2. Чуть расширить конфигурацию сервера (в данном случае nginx), начав обрабатывать такие урлы в особом режиме и отдавая обработку запроса на откуп скрипту:

    location /meduza/2015/09/28/shapito {
        set $prefix "http://localhost:9090/meduza/2015/09/28/shapito";
        rewrite shapito(.*)$ /adbb.php?query=$1&url_mask_prefix=$prefix&ua=$http_user_agent&remote_addr=$remote_addr;
    }

Всё — после этого реклама будет показана.

Как это работает.

Отступление, выбор средств
Хотел написать всю логику на Lua, но было лень пересобирать nginx и, так как PHP потенциально ближе к сайтовладельцам — использовал его. Код тривиальный писался для proof-of-concept, в две страницы, можно воспроизвести на любом языке — приложен в конце. Есть зависимость от mbcrypt и curl.

Алгоритм работы.

1. Расшифровать переданную строку ключом из конфигурации, получив целевой URL

2. Взять оттуда домен, зашифровать его

ads.XXXXXX.ru -> pPM9l7raWppVawqO

3. По этому ключу поищем в присланных нам cookie, найдем значение вида

niFJ2HLxzm27hCLnQUvcmLx62sEU-worI4tjmSAfqxNSMR6DSZ279lampNh_CN2jlu7FXaVk0WRVt-HMxy4vdm0uEncngawC6RvcKBwRXrT0wIi0icl4BvSXPJzH99C_5-mTmneEISfz

И расшифруем его, получив исходные куки, когда-то присланные нам от этого сервера для установки.

4. Если URL содержит маркеры клика, не делаем больше ничего — просто отдаем 302 редирект и выходим.

5. Иначе делаем запрос на целевой URL, передавая cookie, исходный пользовательский User-Agent и реальный IP в X-Forwarded-For заголовке.

6. Анализируем ответ от сервера:

5.1. Если были присланы Set-Cookie — перепаковываем их (ключ — зашифрованный домен, значение — зашифрованное Set-Cookie из результатов вызова), и устанавливаем их, получится что-то вроде

Set-Cookie:oI5upmClXJaq6DY4QWT5g5ZsvQ=niFJ3pLNsqSh0x19ux1HB-3XQiMb3XDhuJC5Byrefm_xOIDJBlZ2FL5q2zvyVtPcNOimtTk-lfoY; expires=Mon, 28-Dec-2015 08:23:57 GMT; Max-Age=7776000

5.2. Если content-type не содержит text или javascript — например, изображения, gif-пиксели — отдаем контент as-is, настроив кэширование по вкусу (но лучше не надо). И выходим

5.3. Для всех остальных content-type ищем в теле ответа URL по паттерну, шифруем каждый, и используя переданный от сервера префикс, заменяем вызовы на замаскированные, то есть, места вида

object_1986381203 += '<a href="http://ads.XXXXX.ru/228129/goLink?pr=gleurtb&p5=dcxnh&p1=bohgi&p2=ezfl" target="_blank"><img src="http://content.XXXXX.ru/150924/XXXX/507850/1421973.jpg" width="990" height="90" alt="" border=0></a>';

Будут отданы так:

object_1986381203 += '<a href="/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5P" target="_blank"><img src="/meduza/2015/09/28/shapitorbFgFQ4Y7_Z3jaPSRix09Pn5VyrnV5Pcki64JcXvjIyzlgYXerh3yMMgY8DB5vleYA" width="990" height="90" alt="" border=0></a>';

Отдаем измененный контент и выходим.

6. Браузер сам сделает нужные вызовы, для каждого из которых будет пройдено всё с п.1

Секция конфигурации скрипта

$CONF = array(
	'mask_urls' => array(
		'prefix' => '/meduza/2015/09/28/shapito', //default, will be overriden by `url_mask_prefix`
		'url_search_patterns' => array(
			'@https?://[^\\\'\"\n\r\?]+@i',
		),
	),

	'redirect_if_contains' => array(
		'/click', '/reference', '/link', '/goLink'
	),

	'encrypt' => array (
		'iv' => '2uV17Dil',
		'key' => 'JbaSyaXwD46qIlKdt8mJ4',
		'cipher' => MCRYPT_GOST, 
		'mode' => MCRYPT_MODE_CFB
	),

	'cookie' => array(
		'expire' => 90*24*60*60,
	),

	'url_call' => array(),
);

Ещё раз, это концепт — использовать его в продакшн нельзя! Он сделает из вашего сервера анонимный прокси

adbb.php
<?php 

$CONF = array(
	'mask_urls' => array(
		'prefix' => '/meduza/2015/09/28/shapito', //default could be taken from `url_
		'url_search_patterns' => array(
			'@https?://[^\\\'\"\n\r\?]+@i',
		),
	),

	'redirect_if_contains' => array(
		'/click', '/reference', '/link', '/goLink'
	),

	'encrypt' => array (
		'iv' => '2uV17Dil',
		'key' => 'JbaSyaXwD46qIlKdt8mJ4',
		'cipher' => MCRYPT_GOST, 
		'mode' => MCRYPT_MODE_CFB
	),

	'cookie' => array(
		'expire' => 90*24*60*60,
	),

	'url_call' => array(),
);

require_once __DIR__."/adbb_functions.php";

if (   !array_key_exists('query', $_REQUEST) or !$query = $_REQUEST['query']) return;


adbb_debug_log('Request params', $_REQUEST);

$extra_query = '';
if (($delpos = strpos($query, '&')) !== false) {
	adbb_debug_log('Extra parameters passed, getting encypted part only. @ position ', $delpos);	
	$extra_query = substr($query, $delpos);
	adbb_debug_log('Extra query ', $extra_query);	
	$query = substr($query, 0, $delpos);
	adbb_debug_log('Encrypted query after cut ', $query);	
}

adbb_debug_log('We should have successfully decrypted url with the key for all further logic, decrypting...');

if (  !$url = adbb_decrypt($query, $CONF['encrypt']) )   { 
	adbb_debug_log('Failed. Exiting');	
	return;	
}

adbb_debug_log('Decrypted URL', $url);

if (array_key_exists('url_mask_prefix', $_REQUEST)) {

	adbb_debug_log('Overriding initial url_mask_prefix ['.$CONF['mask_urls']['prefix'].'] to', $_REQUEST['url_mask_prefix']);
	$CONF['mask_urls']['prefix'] = $_REQUEST['url_mask_prefix'];

}

$extra_args = $_REQUEST;
unset($extra_args['query'], $extra_args['ua'], $extra_args['remote_addr'], $extra_args['url_mask_prefix']);

$url_to_call = $url . (strpos($url, '?') === false ? '?' : '&' ) . http_build_query($extra_args).'&'.$extra_query;


adbb_debug_log('Looking for cookies to send to remote host...');
$domain_cookies = ''; 
$parse = parse_url($url_to_call);
$domain_to_call = $parse['host'];

if ($domain_to_call) {
	$domain_cookie_key = adbb_encrypt($domain_to_call, $CONF['encrypt']);
	
	adbb_debug_log('Will look for cookies for domain ['.$domain_to_call.'], key', $domain_cookie_key);
	if (isset($_COOKIE) and array_key_exists($domain_cookie_key, $_COOKIE) and $_COOKIE[$domain_cookie_key]) {

		adbb_debug_log('Found something, will try to decrypt cookie value ', $_COOKIE[$domain_cookie_key]);
		if ($json_encoded_cookies = adbb_decrypt($_COOKIE[$domain_cookie_key], $CONF['encrypt'])
			and $cookies = @json_decode($json_encoded_cookies) ) {

			adbb_debug_log('Going to send cookies decrypted', $cookies);
			$domain_cookies = implode('; ', $cookies);

		}
	}
}

adbb_debug_log('Checking if redirect is needed...');

foreach ($CONF['redirect_if_contains'] as $needle) {

	if (strpos($url_to_call, $needle) !== false ) {

		$url_to_call .= '&cookies='.urlencode($domain_cookies);
		adbb_debug_log('URL contains '.$needle.' going to redirect to ', $url_to_call);
		
		header('Location: '.$url_to_call);
		exit;
	}
}

adbb_debug_log('About to call remote URL ', $url_to_call);
adbb_debug_log('With User-Agent ', $_REQUEST['ua']);
adbb_debug_log('With X-Forwarded-For ', $_REQUEST['remote_addr']);
adbb_debug_log('With Cookie  ', $domain_cookies);

$result = adbb_call_url(
	$url_to_call, '', $_REQUEST['ua'], 
	array(
		'X-Forwarded-For' => $_REQUEST['remote_addr'],
		'Cookie' => $domain_cookies
	)
);

if ($result) {
	adbb_debug_log('Call successfull.');		
	$info = $result['info'];
	$header = $result['header'];
	$content = $result['content'];

	adbb_debug_log('Remote response info', $info);
	adbb_debug_log('Remote response headers', $info);

	$parse = parse_url($url);
	$domain = $parse['host'];

	if (array_key_exists('Set-Cookie', $header[count($header)-1])) {

		adbb_debug_log('Found Set-Cookie in response, taking last one');
		$domain_set_cookies = $header[count($header)-1]['Set-Cookie'];

		$domain_cookies = adbb_translate_cookie_values($domain_set_cookies);
		adbb_debug_log('Translated domain cookies', $domain_cookies);

		$json_encoded_cookies = json_encode($domain_cookies);
		adbb_debug_log('Json encoded cookies', $json_encoded_cookies);

		$encrypted_cookies_domain = adbb_encrypt( $domain, $CONF['encrypt'] ) ;
		$encrypted_cookies_values = adbb_encrypt( $json_encoded_cookies, $CONF['encrypt'] ) ;
		adbb_debug_log('About to set encrypted cookie for domain ['.$domain.'] as ['.$encrypted_cookies_domain.'] with value ', $encrypted_cookies_values);

		setcookie($encrypted_cookies_domain, $encrypted_cookies_values, time()+$CONF['cookie']['expire']);

	}

	if (strpos($info['content_type'], 'text') === false and strpos($info['content_type'], 'javascript') === false ) {

		adbb_debug_log('Non-text content type '.$info['content_type'].', passing as is. Cache headers not implemented');
		header('Content-Type: '.$info['content_type']);
		echo $content;

	} else {

		adbb_debug_log('Initial content in remote response', $content);
		$new_content = adbb_mask_urls($content, $CONF['mask_urls'], $CONF['encrypt']);
		echo $new_content;	
	}

}



adbb_functions.php
<?php 

function adbb_encrypt($data, $encrypt_conf) {
	$iv = $encrypt_conf['iv'];

  	return rtrim(strtr(
  			base64_encode(mcrypt_encrypt($encrypt_conf['cipher'], $encrypt_conf['key'], $data, $encrypt_conf['mode'],$iv)),
  			 '+/', '-_'),
  		'='); 

} 

function adbb_decrypt($data, $encrypt_conf) {

	$encrypted = base64_decode(str_pad(strtr( $data, '-_', '+/'), strlen( $data ) % 4, '=', STR_PAD_RIGHT));

	return mcrypt_decrypt(
		$encrypt_conf['cipher'], $encrypt_conf['key'], $encrypted, $encrypt_conf['mode'], $encrypt_conf['iv']
	);
} 

function adbb_translate_cookie_values($set_cookies) {
	$keys = array();
	foreach ($set_cookies as $sc)   {
		if ($pos = strpos($sc, ';')) {
			$keys[] = substr($sc, 0, $pos);
		} else {
			$keys[] = $sc;
		}
	}

	return $keys;
}

function adbb_get_headers_from_curl_response($headerContent)
{

    $headers = array();

    // Split the string on every "double" new line.
    $arrRequests = explode("\r\n\r\n", $headerContent);

    // Loop of response headers. The "count() -1" is to 
    //avoid an empty row for the extra line break before the body of the response.
    for ($index = 0; $index < count($arrRequests) -1; $index++) {

        foreach (explode("\r\n", $arrRequests[$index]) as $i => $line)
        {
            if ($i === 0)
                $headers[$index]['http_code'] = $line;
            else
            {
                list ($key, $value) = explode(': ', $line);
                if (array_key_exists($key, $headers[$index])) {
                	if (is_array($headers[$index][$key])) {
                		$headers[$index][$key][] = $value;
                	} else {
                		$t = $headers[$index][$key];
                		$headers[$index][$key] = array( $t );
                		$headers[$index][$key][] = $value;

                	}
                } else {
                	$headers[$index][$key] = $value;	
                }
            }
        }
    }

    return $headers;
}

function adbb_call_url($url, $cookie, $ua, $headers) {
	$ch = curl_init();

	$curlopt_headers = array();

	foreach ($headers as $k => $v) $curlopt_headers[] = $k.': '.$v;

	$options = array(
		CURLOPT_URL => $url, 
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_FOLLOWLOCATION => true,
		CURLOPT_USERAGENT => $ua,
		CURLOPT_CONNECTTIMEOUT => 5,
		CURLOPT_TIMEOUT => 5,
		CURLOPT_MAXREDIRS => 5,
		CURLOPT_SSL_VERIFYHOST => 0,
		CURLOPT_COOKIE => $cookie,
		CURLOPT_HTTPHEADER => $curlopt_headers,

		CURLOPT_VERBOSE => 1,
		CURLOPT_HEADER => 1,
	);

	curl_setopt_array($ch, $options);

	$response = curl_exec($ch);

	if (!$response) return false;

	$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
	$header = adbb_get_headers_from_curl_response(substr($response, 0, $header_size));
	$content = substr($response, $header_size);


	$info = curl_getinfo($ch); 

	return array(
		'header' => $header,
		'content' => $content,
		'info' => $info 
	);

}

function adbb_mask_urls($content, $mask_conf, $encrypt_conf) {
	$prefix = $mask_conf['prefix'];

	$url_search_patterns = $mask_conf['url_search_patterns'];

	foreach ($url_search_patterns as $pattern) {
		$matches = array();
		if (preg_match_all($pattern, $content, $matches)) {
			adbb_debug_log('Url matches ',$matches);
			foreach ($matches[0] as $m) {
				$encrypted_url = adbb_encrypt($m, $encrypt_conf);
				$content = str_replace($m, $prefix.$encrypted_url, $content);
			}
		}
	}

	return $content;
}


function adbb_debug_log($message, $obj = false) { 
	// $s = $message.($obj ? ' ( '.(is_string($obj) ? $obj : var_export($obj,true) ) . ' )' : '' )."\n";
	// static $f = null; 
	// if (!$f and $f = @fopen("/tmp/adbb_tmp_log".date("Ymd"),"a+")) {
	// 	fputs($f, "== New call ==");
	// }
	// if ($f) {
	// 	fputs($f, $s);
	// }
	//echo  $s ;  
} 



Для получения самой ссылки первичного входа, выполните с той же конфигурацией

adbb_encrypt('http://ads.XXX.ru/XXXX/prepareCode?pp=g&ps=bugf&p2',  $CONF['encrypt']);


Спасибо за внимание.

Комментарии (57)


  1. Pomidoroff
    29.09.2015 12:57
    +22

    Навязчивая реклама в моем понимании есть антиреклама. Мигающие баннеры, вываливающиеся сообщения и окна перекрывающие экран — безвкусица и отсутствие элементарного такта. Также как отвлекающая реклама на дорогах, выноски перегородившие тротуар, люди пристающие к прохожим со своими заученными фразами и фальшивой доброжелательностью — все это должно пресекаться как хамство. Человек хватающий вас за руки зазывая зайти в новый магазин как и реклама на экране монитора перегораживающая страницу должны расцениваться как вторжение в личное пространство.

    Тут нужна культура которую сформируют дружное негативное мнение. Реклама должна быть и мене вульгарной.


    1. xobotyi
      29.09.2015 13:35
      +2

      То есть реклама перед видео на видео-хостинге есть зло и хостер обязан предоставлять вам доступ к контенту за просто так? Спуститесь на землю, уверен вы на работу не за спасибо ходите.


      1. Anton_Boroda
        29.09.2015 13:40
        +7

        Непропускающийся ролик длинной в 5 минут, без возможности отключить звук, который сам останавливается при снятии фокуса с вкладки? Да, зло. Во всем нужно знать меру.


        1. xobotyi
          29.09.2015 13:42

          Ну, такого ада я не встречал, в таком контексте — да. Обычно если до 20 сек, то пропустить нельзя, свыше — можно, если брать ютуб и рекламу в московском метро, например.


        1. Shoohurt
          29.09.2015 13:43
          +1

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


          1. Anton_Boroda
            29.09.2015 13:45
            -2

            В данном примере я утрирую. Мой главный посыл — нужно знать меру, во всем. Тогда не будет AdBlock'ов и «недополученной» прибыли рекламодателей.


            1. Starche
              29.09.2015 14:23
              +5

              Тут есть проблема.
              Есть вагон сайтов, на которых творится ад. Именно из-за таких сайтов люди ставят адблоки.
              Но есть сайты, которые производят хороший контент, а живут исключительно за счёт рекламы. И даже если там реклама не бросается в глаза и не разрывает вошедшего на части, то юзер всё равно этого не узнает — адблок уже установлен.
              Если бы адблок надо было активировать на каждом сайте отдельно, тогда бы таких статей не возникало я думаю. Потому что люди бы просто не включали его там, где их ничего не раздражает.
              Таким «хорошим» сайтам приходится мучаться — обходить блокировки, просить юзеров занести их в белый список, и так далее.
              В общем, сложная ситуация.


              1. Anton_Boroda
                29.09.2015 14:36
                +1

                Согласен. В таком случае, я думаю, в блокировщик просто нужно добавить рейтинг сайтов за который люди будут голосовать отключая или включая рекламу. То есть, по умолчанию, реклама везде режется и сайты, на которых резка отключается пользователем получают баллы и при достижении определенного порога, сайт добавляется в белый список всем. Пользователь может сам включить резку назад если реклама ему все таки не нравится. При этом сайт пойдет вниз в рейтинге и у конкретного пользователя реклама на этом сайте появляться более не будет, даже если сайт будет в белом списке у остальных.
                Хотя я думаю в таком способе можно тоже найти море изъянов. Просто мысли вслух.


          1. script88
            29.09.2015 14:11
            +2

            ivi, megogo.
            У иви рекламных роликов было порядка 3-4 и каждый ролик был около 30-40 секунд.


            1. Shoohurt
              29.09.2015 14:19
              +1

              Да, действительно, у IVI помню такое. Но справедливости ради надо заметить, что я их там видел только в бесплатно доступных фильмах, что вполне справедливо: если за кино не плачу я, за него платить рекламодатель.


            1. Assada
              29.09.2015 15:23

              сейчас такое с fs.to


              1. esc
                29.09.2015 15:36

                И будет много где еще, если с 2016 года цены не пойдут вверх, т.к. многие площадки в 2015 стабильно убыточны из-за низких цен на рекламу, навязанных телевизором. За год доходы сайтов упали в 3 раза.

                На fs.to видимо тоже все с рекламными доходами печально т.к. удалось их уговорить заняться адблоком. Раньше этого вообще никого не волновало (в том числе и меня, когда я занимался этим сайтом), сейчас сами обратились и еще 4 крупных сайта на очереди.


            1. TheRaven
              29.09.2015 15:33

              Рутуб туда же, меня как-то занесло на него с новостного сайта. В общем 10 сек смотрим и закрываем вкладку.


      1. Metus
        29.09.2015 13:46
        +4

        Реклама рекламе рознь.


      1. Pomidoroff
        29.09.2015 14:15
        +2

        Я не против рекламы, я против раздражающих и вульгарных её проявлений. Осуждая человека за хамство я не предлагаю уничтожать человечество.

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

        Рекламные блоки на телевидении меня не раздражают хотя я их и перематываю в онлайн трансляциях.


        1. xobotyi
          29.09.2015 14:27
          +1

          Окей, как ютубу зарабытвать? =)


          1. Pomidoroff
            29.09.2015 15:24
            +3

            Может так-же как и на поиске?

            Представите, вы ищите в поисковике новости про крушение самолета. Первая ссылка на фоторепортаж с места событий, вы переходите. Заголовок как полагается — «Крушение в индийском океане» далее идет крупная фотография кроссовок Найк и текст о том что удобней бегать в специальной обуви… вы с недоумением смотрите ниже, там та-же лабуда про спортивные результаты, пытаетесь промотать страницу ниже… не тут то было, перемотка не работает, появляется счетчик с 10 секундным обратным отсчетом. Ждите. Ненавидте. Уходите.

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


          1. jaguard
            29.09.2015 16:48
            +1

            Ютубу? Да элементарно! Есть триллион денег в сфере предложения нужных роликов нужным людям — например, обзор игры геймеру, который пойдет и скачает/купит ее. Или обзор гаджета, или услуги, или еще чего-нибудь такого — в скромном блоке up next, справа от текущего видео.
            Главное, чтобы предложение было релевантно. Естественно, продавать выгодные места для твоих видео-роликов можно и в поиске, и при простом заходе на сайт, и еще много где.


          1. dns78
            30.09.2015 16:36
            +2

            а может быть, никак не зарабатывать? ну, не будет его — и ладно. придет кто-нибудь другой, с адекватной безрекламной моделью монетизации. а не придет — ну и, опять же, ладно. невелика потеря.

            я совершенно не понимаю этих терзаний — ах, не будет рекламы — сделаем платную подписку!!!

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


            1. Zergboy
              06.10.2015 19:47

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

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

              моя жена поняла пользу блокировщика, когда спустя год использования я переустанавливал ей систему и забыл его установить снова. Ну и жена зашла на какой-то привычный для нее сайт с mp3 музыкой… шок был еще тот (реально порно реклама).

              опять же, сравнение вот такой рекламы с оплатой за предоставляемые услуги некорректно. Когда я оплачиваю услуги — я отдаю деньги. Это прогнозируемо. Когда я попадаю на сайт с навязчивой рекламой, у меня нет даже шанса избежать «осквернения». Она просто на меня вываливается.

              так что я блокировал и буду блокировать


      1. lightman
        29.09.2015 16:04
        -2

        То есть реклама перед видео на видео-хостинге есть зло и хостер обязан предоставлять вам доступ к контенту за просто так?
        Не обязан. Так же как он не обязан поддерживать свой сервис, если им не пользуются так, как он того желает, пусть закрывает.

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

        Не в идеале имеем что имеем.


        1. xobotyi
          29.09.2015 16:10
          +2

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

          Вот это вы загнули =)
          1. Это коммерческий проект, он не будет оплачиваться из налогов.
          2. Даже если он и будет оплачиваться из налогов, то он по определению не будет свободным и без цензуры, ибо будет принадлежать какому-либо государству и как следствие оплачиваться из налогов граждан этого государства, а значит он будет как минимум содержать цензуру, как максимум доступен только гражданам того гос-ва. *щас представился квиток, в котором один из пунктов «обслуживание портала youtube.com за текущий месяц» :D*


        1. Klaster
          29.09.2015 17:42
          -4

          >> профессионалами,
          >>из наших налогов,
          В России взаимоисключающие параграфы, можно в принципе не рассматривать такую возможность, так как из области мира с розовыми единорогами. Особенно сервис с видео. Даст бог внуки смогут бесплатно декларацию на сайте налоговой заполнить и загрузить.


      1. iamwizard
        29.09.2015 21:37
        +2

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


    1. robertd
      29.09.2015 14:19
      +1

      Вы правы, некая культура должна быть, но навязчивость рекламы и этическая сторона — это всё-таки отдельный вопрос. Сейчас под гребенку адблоков попадают и хорошие, нужные и контенто-богатые сайты, у которых реклама — единственный источник дохода. Блокировщики рекламы по ним пока несильно, но всё-таки бьют и какой-то объем у проблемы есть, если они заморачиваются и ставят задачи разработчикам о специальных уведомлениях для людей с блокировщиками рекламы (см. шапку Хабра). Это было первое.

      Второе — нельзя умалчивать о проблемах технологических меньшинств. Конечно, проблемы индейцев здешних шерифов не волнуют, но эти меньшинства вообще могут сделать правилом лишение контента, пока не будет сделано исключение или сделать рекламу неотъемлемой, как раз навязчивой частью своего сайиа. Это другая крайняя и, наверное, нежелательная сторона, и думаю какое-то универсальное решение грядет, просто не скооперировались ещё.

      Третье, все-таки блокировка рекламы — явление с обратной связью. Сейчас adblock позволяет избежать вульгарной и навязчивой рекламы, но при этом отбирает часть заработка у хороших сайтов. Как только этот объем превысит некий порог, неизбежно появится технология которые надежно избавит сайтовладельце от этой головной боли ей тут же воспользуются всякие и реклама вернётся в еще большем виде.

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


      1. Rivethead
        29.09.2015 15:17
        +2

        Несколько раз вырубал Адблок на хабре/гк, просто принципиально выключаю на сайтах которые хочу поддержать, но блин, как же это недолго продолжается. Каждый раз через какое-то время всплывает реклама моргающая, которая просто отвлекает меня от чтения, и я снова включаю Адблок. Меня, честно говоря, самого уже задолбали эти свистопляски с включить/отключить, но других вариантов я пока не вижу.


      1. lightman
        30.09.2015 07:49

        Сейчас под гребенку адблоков попадают и хорошие, нужные и контенто-богатые сайты, у которых реклама — единственный источник дохода.
        Подскажите, если знаете (вопрос ко всем хабровчанам): в каком процентном соотношении распределяется реклама по сайтам, допустим, в рунете:

        1. Для получения автором денег достаточно лишь просмотра рекламы
        2. На рекламу необходимо кликнуть
        3. Необходимо не только кликнуть, но и сделать после перехода что-то ещё (зарегистрироваться/лайкнуть/купить/etc)


        1. esc
          30.09.2015 09:34

          Пункт один важен всегда, без него не будет остальных двух. Ну и считают обычно или цену за 1000 показов или рассчетную цену за 1000 показов т.к. показы — тот инвентарь, который у сайта есть и его объемы понятны, а остальное зависит от многого и его нельзя рассчитать заранее.


  1. esc
    29.09.2015 15:32

    Зашифровать URL идея правильная, но в таком виде не сработает. Для крупных сайтов очень быстро подберут конкретную регулярку, которая заблокирует нужное. Следовательно, нужно еще грузить что-то очень важное для сайта с помощью точно таких же ссылок, неотличимых на уровне регулярного выражения.

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

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


    1. robertd
      29.09.2015 16:13

      «Но вообще направление движения правильное»

      Да, спасибо, я тоже так считаю.

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

      В общем да, но улучшить метод несложно — можно базовую часть урла (ie /read/something/2015/) генерировать каждый день или вообще алгоритмически. У меня в личке спрашивали почему не base64 или XOR, я отвечал что как раз для усложения необходимых сигнатур. А ключ, который используется в шифровании — можно опять же генерировать алгоритмически регулярно или по какому-то принципу — это копеешная операция, и тогда все урлы, если сравнивать ежедневно вообще будут слабо отличаться от белого шума. Сажать по человеку на каждый сайт анализировать контент — дорого. Делать статистический или полуавтоматический контентный анализ — можно, но такие ребята в адблоках не засидятся.

      Далее, есть проблема отображения. Даже, если реклама загрузится, ее потом можно вырезать средствами css

      Да, такое есть, и в некотором роде сложнее. Это опять же требует человеческого внимание для каждого сайта. Но легко может попасть в апстрим адблоков, настроенная правильно. Я хотел посвятить этому следующую практическую статью (метод №2).


      1. esc
        29.09.2015 17:49
        +1

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


        1. robertd
          29.09.2015 18:31

          Я с вами не спорю, панацеи нет вообще. Просто один из 3 как минимум методов (помимо глубокого встраивания в сайт)

          Несколько слов про форум адблока для истории. Форум живой и да, реагируют, простые случаи добавляют сразу. И да, думаю, если какой-то подход станет ощутимой проблемой уже для них, то они возьмутся всерьёз (так, они активно встраивают всевозможные деобфускации и JS движки). Но не сказать, что там моментальная реакция, в некоторых ветках истории по полгода и более.

          Забавно, что заметная часть сообщений в последнее время «Сайт определяет adblock и не показывает ничего/открывает блокирующее окно и тп.»

          Более того, нередко обсуждения заканчиваются как-то так: «Выяснить, что нужно для нормального отображения и добавить это в белый список. К сожалению, это может быть один из тех случаев, когда вы не можете заблокировать рекламу не заблокировав контент»

          (ориг. Figure out what file needs to be whitelisted for those API calls to no longer fail, and then whitelist it; unfortunately, this may be one of those cases where you can't block the ads without also blocking the content. :( )


          1. esc
            29.09.2015 19:38

            Самый активный форум тут, именно туда ведет пользователей сам адблок, когда они хотят пожаловаться на незаблокированную рекламу. Можете почитать как там процесс идет;)

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


    1. Zergboy
      06.10.2015 19:58

      до тех пор, пока у владельцев сайтов будет отношение к пользователям, как к дойным коровам (извините за резкость, но это по-другому не назвать), я как пользователь буду просто из принципа переводить деньги на поддержку таких проектов, как АдБлок и ни копейки — сайтовладельцем
      либо сайтовладельцы будут искать путь уважения к пользователю и учитыванию его интересов, и тогда есть шанс выхода из тупика, либо пользователи будут «зеркалить» это же самое хамство в обратном направлении.


      1. esc
        06.10.2015 20:19

        Либо сайты будут бороться/договариваться с адблоком;)


  1. maaGames
    29.09.2015 18:16
    +3

    Хочется взять и заминусовать.

    В интернете нет столь значимого сайта (с навязчивой рекламой), от которого нельзя отказаться и использовать альтернативный сайт. Поэтому, если с AdBlock'om борятся более агрессивными методами, чем хабр или дэвианарт какой-нибудь, я просто этот сайт закрываю.


    1. robertd
      29.09.2015 18:35
      +1

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

      Вот например, если вместо маленького уведомления «Отключите адблок» на хабре, будет такого же размера немигающая реклама, проходящая все ваши фильтры — вы сочтете это более агрессивным методом? И в этом случае статья была бы скорее позитивной или негативной?


      1. Zergboy
        06.10.2015 20:01

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


        1. esc
          06.10.2015 20:21

          если реклама перестанет блокироваться, то включатся рыночные механизмы. Пользователи просто будут перетекать туда, где рекламы нормальное количество и большая часть сайтов начнет им в этом потакать, улучшая качество рекламных блоков (в том числе в смысле привлекательности их для пользователя). А сейчас особо разницы нет, хорошая у тебя реклама или нет, многие ее все равно заблокируют. Потому многие сайты на этот счет не парятся и фигачат рекламные видео с автостартом и звуком в статьи и т.д.


    1. esc
      29.09.2015 19:38

      А чего взять и не пойти на другой сайт?


      1. Zergboy
        06.10.2015 20:02

        именно


  1. michael_vostrikov
    29.09.2015 20:42
    +3

    Заниматься чем-то, нарушающим священное волеизъявление здешних господ на контент, который и только который они хотят видеть вокруг себя… уже есть оглядывающиеся владельцы сайтов, недополучающие до 30% денег с рекламы…

    Никогда не понимал такую логику. Извините, мне какая разница, как владелец деньги зарабатывает? И почему я должен ему в этом помогать?
    Сайт поддержать? Обычно есть альтернативы. Почему сразу на другой сайт не пошел? Да потому что этот сайт в поиске первым был, а тот десятым. На тех сайтах, у которых аналогов нет, и реклама особо не мешает.
    На большинство сайтов я захожу через выдачу поисковика по вполне определенному запросу. Мне не нужна информация, не соответствующая этому запросу, и к тому же я не собираюсь в момент просмотра сайта что-то покупать или подписываться на какие-то услуги. Если вдруг понадобится, я поищу информацию об этом отдельно, сравню варианты и выберу то, что мне больше подойдет по цене/качеству.

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

    Отдельный вопрос это содержимое рекламы. Допустим, я зашел на некоторый сайт посмотреть новую серию сериала за чашечкой чая, а там надпись «ШОК! Грибок можно вылечить простым средством...». С фотографиями и анимацией. Пока что блокировщик помогает, но если не будет, я просто не буду посещать такой сайт.

    Я разделяю общее мнение, что реклама не должна быть навязчивой. И это не отдельный вопрос, а прямая причина. Хорошие методы обхода блокировки будут применять не только «хорошие, нужные и контенто-богатые сайты, у которых реклама — единственный источник дохода», но и все остальные. Так что в целом ситуация не изменится, разве что технические решения будут сложнее.

    Пусть реклама висит себе сбоку, пока не мешает. А еще было бы неплохо, если бы она показывалась, к примеру, 1 раз из 10. Чтобы не отвлекать от основного контента. Тогда можно было бы и глянуть иногда, что там интересного есть. Но это уже так, мелочи и хотелки…

    Также хотел бы написать по технической части. Зачем писать статью с примером, который нельзя использовать? Раз уж подняли такую тему, то показали бы сразу рабочее решение с описанием всех нюансов, кому надо допилит сам. Тем более что есть другие проблемы — скрытие средствами CSS, блокировка баннеров определенного размера. Еще бывают рекламные скрипты, которые URL генерируют кодом.


    1. Zergboy
      06.10.2015 20:05

      я регулярно посещаю форум по обработке металлов. там реклама — сварочное оборудование и все по теме. как-то они так сделали, что стандартные фильтры адблока ее сразу не зарезали. но меня это вообще не раздражает и я не отключаю эту рекламу, хотя и могу.
      и не надо быть умным чтобы понять почему я делаю такое «удивительное» исключение


  1. Zezst
    30.09.2015 09:37

    Самое забавное, что у тех, на кого реклама может подействовать adblock и так не установлен.


    1. esc
      30.09.2015 15:25

      Реклама действует на всех. Просто не вся, а какой-то небольшой процент из увиденного за день (скажем). Более 90% рекламы в конкретный момент вам нерелевантна, потому вам так и кажется, что на вас не действует.
      95% людей думает схожим образом, что на них не действует реклама. Остальные связаны с рекламным рынком и видят данные исследований и прочие признаки, говорящие о том как и на кого что действует.


      1. Zezst
        30.09.2015 16:14

        А… эмм… ну да. Все верно.
        Мне кажется.


      1. Metus
        01.10.2015 12:27

        А вот это на самом деле жутко. И именно поэтому не любят рекламу и режут её.


        1. esc
          01.10.2015 12:41

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

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

          Девочки знают из чего выбрать себе косметику, не потерявшись в сотнях наименований.

          В общем, это как информирование по рынку. Но т.к. информация требуется часто до осознания потребности, то потребителя нужно как-то зацепить, потому в рекламе есть креатив (ну или мигающие блоки для тех, кто идет по легкому пути).


          1. Metus
            01.10.2015 16:06

            Про всех, может я и погорячился.
            Но лично мне не хочется, чтобы мне в мозг пихали непонятную мне информацию, при этом когда я до конца и не осознаю что именно туда запихнули.


            1. esc
              01.10.2015 16:09

              Что значит «в мозг пихали непонятную мне информацию, при этом когда я до конца и не осознаю что именно туда запихнули»? Вы считаете что кто-то вас зомбирует и это мотивирует срываться с места и покупать ненужным вам йогурт? Может еще 25й кадр применяют?=)


              1. Metus
                01.10.2015 16:57

                Знаете как бывает — услышал глупую песенку и она привязывается, хотя от слов и музыки может вообще тошнит.
                Реклама направлена на то, чтобы привязаться.
                И между прочим, такие песенки очень часто как раз из рекламы.


                1. esc
                  01.10.2015 17:00

                  и что? какая разница, песенка из реклаы привязалась или просто по радио услышали?


                  1. Metus
                    01.10.2015 17:03

                    Разница в том, что в случае рекламы привязаться — это и есть цель, единственное назначение.
                    В случае музыки — нет.


  1. XanderBass
    01.10.2015 11:29
    +1

    Х.З… Как говорили выше, реклама рекламе рознь. Есть сайты с интеллигентной рекламой, например, Хабр. Реклама тут есть, её немало, но она хоть глаза не режет. А самое главное, здешняя реклама вписывается в дизайн сайта. Рекламу на видеохостингах в принципе можно понять. Главное, чтобы не перебарщивать. Смотреть 5 минут рекламы ради просмотра 30 секунд «прикольной видюшки» лично я не стану. Так что секунд 10-15 на ролик и исключительно в самом начале. А то я уже несколько раз сталкивался с рекламой через каждые минут 10 видео. Плюс многочисленные гифки, которые грузят страницу по самое «не-хочу». К слову сказать использование блокировщиков зачастую обуславливается желанием просто нормально сёрфить вместо минут ожидания, пока страница прогрузится вместе с тоннами рекламы.

    Общий тезис: реклама должна быть ненавязчивой и гармонично вписываться в проект. Тогда и блокировщики начнут отмирать.


    1. esc
      01.10.2015 12:43

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


      1. Zergboy
        06.10.2015 20:08

        не согласен с вами, если реклама на сайте напрямую связана с темой сайта, я ее не блокирую (выше уже приводил пример с форумом по обработке металла). Но если на сайте по программированию мне рекламируют присыпку — то резал и буду резать


        1. esc
          06.10.2015 20:23
          -1

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