Как накрутить 40к просмотров на Хабрахабр. Баг или фича?

73b5556ca04e4251a78499b8ce706aa9.png

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

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

Хорошо, а что если создать скрипт, который будет делать тоже самое, но без участия пользователя? Наиболее простым вариантом тут было бы использовать 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, то переходим к редактированию статьи

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

Я не считаю описанное выше мной — уязвимостью, но всё же перед публикацией этой статьи, уведомил администрацию Хабра о таком нестандартном поведении счётчика, и вот их ответ:

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

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

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

  • 26 февраля 2017 в 16:14

    0

    Я решил остановить скрипт на 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).
    • 26 февраля 2017 в 16:32 (комментарий был изменён)

      0

      Вы не учли, что обычный integer со знаком (в большинстве языков).
  • 26 февраля 2017 в 16:30

    0

    Не хочу вас разочаровывать, но вы открыли Америку…
    Накрутчик существует уже больше года
    image

© Habrahabr.ru