Bot watchers — свобода комментирования

в 7:51, , рубрики: chrome, chrome extensions, github api, javascript, информационная безопасность, метки: , , ,

Введение

Комментирование статей в СМИ и блогах давно вошло в привычку.
Комментарии — это удобный инструмент для обмена мнениями между читателями, установления обратной связи с автором и возможность отразить альтернативные точки зрения и т.п. Отдельно стоит отметить, что комментарии оказывают существенное влияние на восприятие и оценку информации, приведённой в статье.
Всё это работает при условии что в процессе участвуют на равных условиях адекватные пользователи уважающие мнение друг друга.
Однако, есть личности которые не готовы играть по общим правилах. Они не готовы ужиться с тем, что нормальные пользователи мирно обмениваются мнениями и информацией. Эти личности также обладают достаточными ресурсами для нарушения равновесия. Они натравливают ботов и Путин-югенд на мирных комментаторов. Баланс таким образом нарушается. За счёт материальных ресурсов, тот кто обладает одним голосом получает возможность значительно большего влияния на общественное мнение.

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

Описание

Приложение реализовано в виде расширения для браузера Chrome/Chromium. В данный момент поддерживается только livejournal.com. Приложение загружает список индексов созданных пользователями из центрального репозитория. Пользователь может выбрать индекс из списка на основании приведённого описания. Выбранный список загружается из репозитория пользователя. Список является текстовым документом в формате json.
Парсер анализирует комментарии на странице. При совпадении со списком комментарий маркируется.
На данный момент для хранения индексов поддерживается только github. Понятно что этого не достаточно для обеспечения надёжной работы и устойчивости к атакам. Однако на примере реализации для github можно разработать поддержку других репозиториев.
Пользователь может создать собственный индекс ботов. На созданный индекс автоматически генерируется pull request для добавления в общий список индексов.

Примеры

Расширение предлагает ряд инструментов для идентификации подозрительных комментаторов. Этот инструментарий легко расширить собственным алгоритмом.

Для этого в файле handler/ljsitehandler.js сначала необходимо добавить кнопку с вызовом функции фильтрации

Пример:

this.addControl("action_quick_comments_sum_60", "∑☃=60 sec", this, this.filterTooQuickCommentesSum, 60);

Где:
«action_quick_comments_sum_60» — id Кнопки
"∑☃= 60 sec" — Лэйбл кнопки
this — scope
this.filterTooQuickCommentesSum — функция фильтрации
60 — параметр передаваемый в функцию фильтрации (опционально)

Пример функции фильтрации:

filterTooQuickCommentesSum: function (delay) {
	var commentsMap = this.buildUsersGroups();
	this.suspects = [];
	//calculate elapsed time for comments 
	for(var uname in commentsMap) {
		var ctime_ts = commentsMap[uname];
		if (ctime_ts.length > 1){
			var sum = 0;
			var lastComment = ctime_ts[0];
			for (var i = 0; i < ctime_ts.length; i++){
				sum += ctime_ts[i] - lastComment;
				lastComment = ctime_ts[i];
			}
			if ((sum/ctime_ts.length) < delay){
				if (!_.contains(this.suspects, uname)){
	                this.suspects.push(uname);
				}
			}
		}
	};
	console.log("list of suspects:" + this.suspects);
	this.markSelectedUsers(this.suspects);
}

Сохраняем, перезагружаем расширение в chrome://chrome/extensions/, тестируем. Если хотите поделиться с другими делаем fork/pull request.

Как сказано выше приложение в данный момент поддерживает только ЖЖ. Но это тоже легко изменить.

В файле manifest.json добавляем страницу поддержку которой вы хотите добавить

...
"content_scripts": [
...
    "matches": ["http://*.livejournal.com/*", "http://*.ваш.любимый.сайт/*"],
...

Берём ljsitehandler.js как шаблон копируем и вносим изменения для поддержки вашей любимой страницы. Для этого придётся переписать jQuery селекторы

В файле content_script.js в строке 11 добавляем возможность выбора парсера на основании адреса загружаемой страницы.

В manifest.json в разделе content_scripts/js добавляем новый парсер. Перезагружаем расширение в chrome://chrome/extensions/, тестируем.

Готовы попробовать?
Приложение лежит тут xreader.github.com/Bot_watchers/. Там же можно найти подробную пошаговую инструкцию для инсталляции.
P.S. JS не мой родной язык прошу за снисходительность.

Автор: xreader

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js