Всем доброго времени суток, скриншот выше сделан как раз перед публикацией статьи, о нём сегодня и пойдёт речь.
В процессе создания и публикации статей на Хабре, я заметил одну очень интересную особенность работы счетчика просмотров. Заключалась она в том, что каждый раз при любом редактировании статьи, которая ещё не опубликована и сохранена как черновик, счётчик каждый раз увеличивается на +1.

Получалось, что к примеру к моменту публикации, статья уже могла иметь от 1 до N просмотров. Я решил проверить свою догадку, и создал тестовую статью, которую сохранил как черновик:



Вносим несколько изменений, каждый раз сохраняя статью, чтобы удостовериться в том, что счетчик просмотров действительно увеличивается:



Хорошо, а что если создать скрипт, который будет делать тоже самое, но без участия пользователя? Наиболее простым вариантом тут было бы использовать JavaScript и запустить исполнение прямо в браузере. Скачав плагин Tampermonkey, я набросал в нём небольшой скрипт:

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://habrahabr.ru/*
// @grant        none
// ==/UserScript==

var postID = 322272;

(function() {
    'use strict';
    // Your code here...
    setInterval(fakeEdit, 1000);
})();

function fakeEdit() {
    if (location.href.indexOf('post/' + postID.toString()) > 0)
        location.href = 'https://habrahabr.ru/topic/edit/' + postID.toString() + '/';
    else {
        text = document.getElementById('text_textarea');
        text.value = Math.random().toString(36).substring(2) +'\n'+ Math.random().toString(36).substring(2);
        to_draft = document.getElementsByName('draft')[0];
        to_draft.click();
    }
}

Что тут происходит:

  1. Мы запускаем бесконечный цикл с интервалом итерации в 1 секунду, цикл в свою очередь выполняет функцию fakeEdit
  2. Функция fakeEdit проверяет текущий адрес страницы:
    2.1. если на данный момент это страница редактирования, то мы изменяем содержимое поля text_textarea, в котором как раз расположен текст статьи, затем имитирует сохранение, путём клика по кнопке «В черновики»;
    2.2. если адрес текущей страницы содержит post, то переходим к редактированию статьи

Таймаут тут нужен, для того, чтобы после загрузки страницы, все элементы успели прогрузиться. Запускаем и оставляем его на несколько дней. В результате через небольшой промежуток времени получаем примерно вот такой результат:



Я не считаю описанное выше мной — уязвимостью, но всё же перед публикацией этой статьи, уведомил администрацию Хабра о таком нестандартном поведении счётчика, и вот их ответ:
Здравствуйте!
Приносим извинения за задержку с ответом. Счетчик просмотров, действительно, считает не только уникальные просмотры (собственно, как и подобные счетчики на большинстве ресурсов в сети Интернет). До вашего обращения нам не приходило в голову рассматривать это как уязвимость, ведь злоупотребить этим в нашем сообществе довольно трудно: если плохой материал попадет в «самое читаемое», то привлечет внимание большого числа пользователей, которые, в свою очередь, «сольют» рейтинг материала и карму автора, так что он сам себя накажет, а если попадет хороший, то и не жалко.

Конечно каждый решает сам, использовать полученные знания или нет, но главное помнить, что у всего есть последствия. Я решил остановить скрипт на 40000 просмотрах, но вопрос о том есть ли предел, всё ещё остаётся, а так же что произойдёт при превышении этого передела?
Поделиться с друзьями
-->

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


  1. antonksa
    26.02.2017 16:14
    +2

    Я решил остановить скрипт на 40000 просмотрах, но вопрос о том есть ли предел, всё ещё остаётся, а так же что произойдёт при превышении этого передела?

    если там integer обычный то зае;%%сь крутить


    On 32-bit system, this would normally be 2147483647 (2.1 109). On a 64-bit system, it would usually be 9223372036854775807 (9.2 1018).


    1. kafeman
      26.02.2017 16:32
      -2

      Вы не учли, что обычный integer со знаком (в большинстве языков).


      1. worldxaker
        26.02.2017 19:17
        -1

        в таком случае аж в два раза меньше, что тоже достаточно много


      1. SKolotienko
        27.02.2017 14:52

        2млрд это как раз предел для знакового целого
        https://ru.wikipedia.org/wiki/Limits.h


    1. u007
      27.02.2017 17:22

      зае;%%сь крутить

      У миллиона приматов «с пишущими машинками», впрочем, однажды получилось.

      > 1579258-Gangnam-Style-slomal-schetchik-YouTube


  1. kafeman
    26.02.2017 16:30
    +18

    Не хочу вас разочаровывать, но вы открыли Америку…

    Накрутчик существует уже больше года
    image


    1. GH0st3rs
      26.02.2017 16:42
      +1

      Ну если на то пошло, то способ накручивания путём открытия over9999 соединений через прокси, для уже опубликованной статьи существует довольно давно. Тут речь именно об увеличении значения счётчика ещё до момента публикации статьи.


      1. kafeman
        26.02.2017 16:47
        +12

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


      1. kafeman
        26.02.2017 16:50
        +2

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

        Зачем это нужно? Создаете over 9000 черновиков и просите друга их плюсануть. У вас растет рейтинг, а количество публикаций нет ;-)


  1. wzrd
    26.02.2017 17:02

    Интересно на эту статью тоже накрутили?:) 40к просмотров за 2 часа в выходной день


    1. wscms
      26.02.2017 17:55
      +3

      Ну если бы Вы посмотрели postID со скрипта ТСа и ID этой статьи, то такой вопрос бы не возник )


      1. wzrd
        26.02.2017 17:59

        Да, в самом деле, не обратил внимания:)


    1. Sersoftin
      27.02.2017 13:08

      В конце же автор написал об этом сам)


  1. NLO
    26.02.2017 17:27

    НЛО прилетело и опубликовало эту надпись здесь


    1. bravo-ej
      26.02.2017 18:05

      Может быть так и есть. Но пожалуй единственная полезная лазейка с этим счётчиком — помочь статье получить реальные просмотры и отзывы. Ведь многие читают только топ или отдельные хабы… Статья написанная для узкой аудитории, не попавшая в самое читаемое, останется без фидбэка автору, потому что прочитают её 500 пользователей (если вообще прочитают, а не просто окинут взглядом, потому что тема то не их, а зашли посмотреть на картиночки).


      1. NLO
        26.02.2017 19:26

        НЛО прилетело и опубликовало эту надпись здесь


        1. bravo-ej
          26.02.2017 19:32

          Просмотры не реальные, да, пока статья не попадёт в топ. Дальше же её увидит большая часть аудитории (которая не увидела бы её, если бы статья не преодолела планочку до «самого популярного». А отзывы почему не реальные?
          Да и в случае с просмотрами, я сам так не стал бы так упарываться. Всё таки чит. Это было просто, как альтернативное мнение. Вы же слишком, кмк, вдаётесь в крайности. Наверное так же, как те, кто вам минус сделал, без комментариев.


          1. NLO
            26.02.2017 19:46

            НЛО прилетело и опубликовало эту надпись здесь


            1. kafeman
              26.02.2017 19:54

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


        1. kafeman
          26.02.2017 19:51
          +1

          -2 к карме, только за то, что написал человек который в этом реально смыслит?
          Никто вашу карму не трогал.


          1. NLO
            26.02.2017 20:00

            НЛО прилетело и опубликовало эту надпись здесь


            1. kafeman
              26.02.2017 20:25
              +1

              Это рейтинг комментария. Он позволяет вам узнать мнение остальных.

              На функционал сайта даже рейтинг –100500 никак не влияет.


  1. KorP
    26.02.2017 18:10
    +6

    А в чём смысл накручивать просмотры? Если статья плохая — от этого пострадает только автор, получив бОльшее кол-во минусов в итоге, если статья хорошая — её прочитает больше людей. Кто в итоге в проигрыше? Другой вопрос если все начнут этим пользоваться и в топе будут каша…
    Я лично смотрю на счётчик просмотров только у своих публикаций, для чужих мне это как то совершенно не важно.


    1. Maklaud
      26.02.2017 18:46
      +2

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


    1. kafeman
      26.02.2017 19:04

      Это имело смысл год или два назад, когда Хабрахабр заменил блок «Лучшее за 24 часа» на «Самое читаемое» и ваш пост висел на каждой странице на самом видном месте.


  1. Bbl1
    26.02.2017 21:57
    -24

    Топикстартеру +100 в карму, статью в топ, а автору — заслуженный бан за использование накрутки. Ой, автор и топикстартер совпадают…


    1. Bbl1
      26.02.2017 22:05
      -21

      Минусуйте-минусуйте, это добавит вам чувства юмора, мой неизвестный друг.


      1. ad1Dima
        27.02.2017 04:26
        +6

        Спасибо, у нас свое.


  1. teknik2008
    26.02.2017 21:57

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


  1. netgoblin
    26.02.2017 22:14
    +2

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


    1. Analitik_Telecom
      27.02.2017 07:43
      -3

      А вы не страдаете от неправильного употребления терминов?


      1. netgoblin
        27.02.2017 15:12
        -2

        А с каких пор мы перешли из области программирования в область физики/математики?


        1. Analitik_Telecom
          27.02.2017 18:56

          Жду ссылку на определение функционала в программировании.


          1. ad1Dima
            28.02.2017 07:43

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

            В общем-то осталось определить операции сложения, вычитания и умножения над фичами приложения.


  1. rPman
    26.02.2017 22:35
    +3

    просмотры нужно делать уникальными для одного пользователя, т.е. один пользователь может добавить к статье только 1 просмотр.
    зарегистрированного пользователя идентифицировать по tm id
    остальных пользователей идентифицировать методами, используемыми тут же рекламными площадками, даже наверное скрипты можно их же использовать.


    1. vladimirkolyada
      27.02.2017 09:14
      +1

      Можно, но нужно ли? Процесс подсчета количества просмотров обрастает дополнительной логикой, которая требует к себе внимания, вплоть до потребления электричества. Это потенциальные опасности с производительностью, параллельностью… Все из-за «двух» человек, которых можно забанить, а можно не трогать, ведь сообщество кармой, в большинстве случаев, выполнит свое предназначение. Экономически не оправдано.


    1. pragmatik
      03.03.2017 15:54

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