Загрузка изображений — поддержка API распознавания изображений

В свете законов SESTA/FOSTA, которые фактически лишают многих владельцев веб-сайтов социальных сетей, форумов и платформ с пользовательским контентом (UGC) значительной части защиты (безопасная гавань по разделу 230), возлагая на них ответственность за действия своих пользователей, может быть разумным рассмотреть использование API распознавания изображений в качестве одного из решений для повышения уровня защиты. Это позволит автоматизировать блокировку загрузки контента откровенного характера (небезопасного, с изображением наготы, жестокости и т. д.).

Также это поможет повысить защиту от эксплойтов, связанных с загрузкой неуместных изображений в черновики, а затем их использованием через прямые ссылки в других местах, фактически превращая платформу в бесплатное анонимное хранилище изображений. Я не уверен, насколько это уязвимо в Discourse, но при настройках по умолчанию такая эксплуатация возможна в течение 180 дней после создания черновика, даже если владелец сайта не знает, что именно было загружено (например, функция удаления черновиков старше N дней).

Некоторые API:

4 лайка

Это должно начинаться с плагина, и вряд ли когда-либо станет основной функцией Discourse.

8 лайков

Было бы здорово проверять все изображения, загружаемые в Discourse через Google Cloud Vision API, чтобы оставаться в безопасности для AdSense. Мы делали это на нашем предыдущем сайте и никогда не сталкивались с загрузкой откровенно непристойных или жестоких изображений.

Google предоставляет Ruby-гем:

Потенциальный плагин должен интегрироваться в основной процесс загрузки изображений в Discourse для всех изображений (сообщения, аватары, фоны профилей и т. д.) и отклонять изображения, содержащие запрещённый контент:

  puts "Adult:    #{safe_search.adult}"  puts "Spoof:    #{safe_search.spoof}"  puts "Medical:  #{safe_search.medical}"  puts "Violence: #{safe_search.violence}"  puts "Racy:     #{safe_search.racy}"
['UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY',        'POSSIBLE', 'LIKELY', 'VERY_LIKELY']

В какую часть кодовой базы Discourse должен интегрироваться такой плагин?

Кто-нибудь заинтересован в разработке его через Marketplace?

2 лайка

Это абсолютно возможно, но, на мой взгляд, это нарушит «бесшовность» пользовательского опыта. Если бы существовал способ встроить модель прямо в плагин, это было бы здорово.

Вы использовали сам Vision API?

Вот плагин, созданный @angus, который может служить отправной точкой: GitHub - angusmcleod/discourse-machine-learning · GitHub

2 лайка

Что именно вы имеете в виду под «бесшовностью»?

1 лайк

Я имею в виду, что перед загрузкой проверка изображения путём отправки его через POST-запрос к API и получения зелёного флага займёт какое-то время, верно?

1 лайк

Ну, процесс загрузки встроенных изображений, на мой взгляд, уже асинхронный. А Google API работает очень быстро.

С другой стороны, я также был бы рад проверять изображения после того, как пользователь опубликовал новый пост, используя внешний веб-хук (Discourse API), и редактировать пост пользователя (например, удалять изображение и заменять его текстом «ИЗОБРАЖЕНИЕ УДАЛЕНО АДМИНИСТРАТОРОМ»). Эта часть, кажется, возможна через API, но я не могу найти никаких ссылок на то, как на самом деле УДАЛИТЬ «плохое» изображение через API в таком случае, потому что я даже не хочу хранить его где-то в тени.

2 лайка

Я с радостью займусь этим как платным проектом. Можете ли вы помочь с частью, касающейся API, то есть какой API используется для обнаружения оскорбительного контента и т. д.?

Всё очень хорошо документировано здесь для Ruby:

В PHP мы внедрили это в Drupal менее чем за 2 часа.

3 лайка

2 часов должно быть достаточно для этого. Стоит ли мне отправить тебе личное сообщение по этому поводу?

3 лайка

Да, пожалуйста. Это было бы здорово.

1 лайк

@Terrapop — Стоит учесть точность распознавания. Иногда полезно видеть часть заблокированного контента, чтобы убедиться, что настройки для уровней «POSSIBLE», «LIKELY» и «VERY_LIKELY» не слишком строгие. Ложные срабатывания и пропуски встречаются довольно часто.

Кажется, лучше реализовать отправку всех постов с изображениями, превышающими определённый уровень «возможной adult-контентности», в очередь на проверку. Так пост никогда не станет публичным, но вы сможете одобрить его, если распознавание оказалось неточным. Если пост будет отклонён, изображения, как я понимаю, будут удалены по истечении периода, заданного в параметре «clean_orphan_uploads_grace_period_hours».

Это позволит с большей уверенностью использовать уровень обнаружения «POSSIBLY».

2 лайка

Мы протестировали API на нашем текущем сайте и выяснили, какие уровни подходят нам лучше всего.

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

3 лайка

Вот плагин.

Мне нравится идея связать вероятность с очередями проверки, когда изображение является частью поста. Готов принять спонсорскую поддержку или PR в этом отношении. :slight_smile:

5 лайков

Если это опциональное дополнение сверху, то для меня это, конечно, приемлемо.

Мы довольно долгое время использовали API в нашем предыдущем сообществе и знаем, какие уровни для нас допустимы. В большинстве случаев API правильно отказывал, и пользователь просто загружал менее серьёзное изображение.

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

2 лайка