Всем доброго времени суток, скриншот выше сделан как раз перед публикацией статьи, о нём сегодня и пойдёт речь.
В процессе создания и публикации статей на Хабре, я заметил одну очень интересную особенность работы счетчика просмотров. Заключалась она в том, что каждый раз при любом редактировании статьи, которая ещё не опубликована и сохранена как черновик, счётчик каждый раз увеличивается на +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 секунду, цикл в свою очередь выполняет функцию fakeEdit
- Функция fakeEdit проверяет текущий адрес страницы:
2.1. если на данный момент это страница редактирования, то мы изменяем содержимое поля text_textarea, в котором как раз расположен текст статьи, затем имитирует сохранение, путём клика по кнопке «В черновики»;
2.2. если адрес текущей страницы содержит post, то переходим к редактированию статьи
Таймаут тут нужен, для того, чтобы после загрузки страницы, все элементы успели прогрузиться. Запускаем и оставляем его на несколько дней. В результате через небольшой промежуток времени получаем примерно вот такой результат:
Я не считаю описанное выше мной — уязвимостью, но всё же перед публикацией этой статьи, уведомил администрацию Хабра о таком нестандартном поведении счётчика, и вот их ответ:
Здравствуйте!
Приносим извинения за задержку с ответом. Счетчик просмотров, действительно, считает не только уникальные просмотры (собственно, как и подобные счетчики на большинстве ресурсов в сети Интернет). До вашего обращения нам не приходило в голову рассматривать это как уязвимость, ведь злоупотребить этим в нашем сообществе довольно трудно: если плохой материал попадет в «самое читаемое», то привлечет внимание большого числа пользователей, которые, в свою очередь, «сольют» рейтинг материала и карму автора, так что он сам себя накажет, а если попадет хороший, то и не жалко.
Конечно каждый решает сам, использовать полученные знания или нет, но главное помнить, что у всего есть последствия. Я решил остановить скрипт на 40000 просмотрах, но вопрос о том есть ли предел, всё ещё остаётся, а так же что произойдёт при превышении этого передела?
Комментарии (37)
kafeman
26.02.2017 16:30+18Не хочу вас разочаровывать, но вы открыли Америку…
Накрутчик существует уже больше годаGH0st3rs
26.02.2017 16:42+1Ну если на то пошло, то способ накручивания путём открытия over9999 соединений через прокси, для уже опубликованной статьи существует довольно давно. Тут речь именно об увеличении значения счётчика ещё до момента публикации статьи.
kafeman
26.02.2017 16:47+12По-моему, это всегда было очевидно для любого, кто хоть раз пользовался функцией черновиков. А таких тут, наверное, большинство.
kafeman
26.02.2017 16:50+2Если бы вы повозились с этой страницей еще, и не сейчас, а на пару лет раньше, то обнаружили бы, что за посты в черновиках можно было голосовать.
Зачем это нужно? Создаете over 9000 черновиков и просите друга их плюсануть. У вас растет рейтинг, а количество публикаций нет ;-)
wzrd
26.02.2017 17:02Интересно на эту статью тоже накрутили?:) 40к просмотров за 2 часа в выходной день
NLO
26.02.2017 17:27НЛО прилетело и опубликовало эту надпись здесь
bravo-ej
26.02.2017 18:05Может быть так и есть. Но пожалуй единственная полезная лазейка с этим счётчиком — помочь статье получить реальные просмотры и отзывы. Ведь многие читают только топ или отдельные хабы… Статья написанная для узкой аудитории, не попавшая в самое читаемое, останется без фидбэка автору, потому что прочитают её 500 пользователей (если вообще прочитают, а не просто окинут взглядом, потому что тема то не их, а зашли посмотреть на картиночки).
NLO
26.02.2017 19:26НЛО прилетело и опубликовало эту надпись здесь
bravo-ej
26.02.2017 19:32Просмотры не реальные, да, пока статья не попадёт в топ. Дальше же её увидит большая часть аудитории (которая не увидела бы её, если бы статья не преодолела планочку до «самого популярного». А отзывы почему не реальные?
Да и в случае с просмотрами, я сам так не стал бы так упарываться. Всё таки чит. Это было просто, как альтернативное мнение. Вы же слишком, кмк, вдаётесь в крайности. Наверное так же, как те, кто вам минус сделал, без комментариев.
kafeman
26.02.2017 19:51+1-2 к карме, только за то, что написал человек который в этом реально смыслит?
Никто вашу карму не трогал.
KorP
26.02.2017 18:10+6А в чём смысл накручивать просмотры? Если статья плохая — от этого пострадает только автор, получив бОльшее кол-во минусов в итоге, если статья хорошая — её прочитает больше людей. Кто в итоге в проигрыше? Другой вопрос если все начнут этим пользоваться и в топе будут каша…
Я лично смотрю на счётчик просмотров только у своих публикаций, для чужих мне это как то совершенно не важно.Maklaud
26.02.2017 18:46+2Хотел задать аналогичный вопрос и имею аналогичный ответ. У своих публикаций смотрю, потому что хочется у знать, скольким людям они приглянулись. У чужих статей — даже не знал, что этот счетчик на что-то может повлиять.
kafeman
26.02.2017 19:04Это имело смысл год или два назад, когда Хабрахабр заменил блок «Лучшее за 24 часа» на «Самое читаемое» и ваш пост висел на каждой странице на самом видном месте.
teknik2008
26.02.2017 21:57По мне можно счетчик апнуть, добавить учет просмотров зарегистрированными пользователями. По отношению чисел можно примерно оценить возможность накрутки. Это все философия, я читаю что мне интересно и не важно в топе это или нет, тк за частую сморю или ленту или прихожу из поиска.
netgoblin
26.02.2017 22:14+2Тут выше упоминались рекламные статьи. На них можно заработать продавая количество просмотров? (или как-то так) Тогда такой счетчик явно уязвимость. В любом случае авторитет разработчиков в глазах пользователей может пострадать из-за такого непродуманного функционала.
Analitik_Telecom
27.02.2017 07:43-3А вы не страдаете от неправильного употребления терминов?
netgoblin
27.02.2017 15:12-2А с каких пор мы перешли из области программирования в область физики/математики?
Analitik_Telecom
27.02.2017 18:56Жду ссылку на определение функционала в программировании.
ad1Dima
28.02.2017 07:43В более широком смысле функционалом называется любое отображение из произвольного множества в произвольное (не обязательно числовое) кольцо.
В общем-то осталось определить операции сложения, вычитания и умножения над фичами приложения.
rPman
26.02.2017 22:35+3просмотры нужно делать уникальными для одного пользователя, т.е. один пользователь может добавить к статье только 1 просмотр.
зарегистрированного пользователя идентифицировать по tm id
остальных пользователей идентифицировать методами, используемыми тут же рекламными площадками, даже наверное скрипты можно их же использовать.vladimirkolyada
27.02.2017 09:14+1Можно, но нужно ли? Процесс подсчета количества просмотров обрастает дополнительной логикой, которая требует к себе внимания, вплоть до потребления электричества. Это потенциальные опасности с производительностью, параллельностью… Все из-за «двух» человек, которых можно забанить, а можно не трогать, ведь сообщество кармой, в большинстве случаев, выполнит свое предназначение. Экономически не оправдано.
pragmatik
03.03.2017 15:54Счетчики уникальных посетителей, точно так же, ничего не говорят о том, кого из загрузивших страницу интересовал конкретный материал, а кто из посетителей случайно попал на нее по битой ссылке или поисковому запросу, не имеющему никакого отношения к ее содержанию (взять хотя бы историю про самую популярную статью в научном журнале) и сразу закрыл страницу. Т.е. оба рассматриваемых подхода не объективны. В чем тогда смысл использовать более ресурсоемкий?
antonksa
если там integer обычный то зае;%%сь крутить
kafeman
Вы не учли, что обычный integer со знаком (в большинстве языков).
worldxaker
в таком случае аж в два раза меньше, что тоже достаточно много
SKolotienko
2млрд это как раз предел для знакового целого
https://ru.wikipedia.org/wiki/Limits.h
u007
У миллиона приматов «с пишущими машинками», впрочем, однажды получилось.
> 1579258-Gangnam-Style-slomal-schetchik-YouTube