Я создаю форум для веб-сайта и планирую реализовать функцию «Сообщить об этом содержании».

Честно говоря, я не уверен, насколько полезной (буквально необходимой) будет эта функция, поскольку для публикации потребуется учетная запись пользователя (созданная администратором), но решение меня интересует.

Вкратце, это сценарий:

Для всех пользователей будет доступ только для чтения ко всему (неограниченному) контенту на форуме. Для неопознанных пользователей будет кнопка ответа с сообщением о наличии этой кнопки содержимого. Первый будет требовать входа в систему, в то время как я планировал, что второй не будет, чтобы любой мог пометить подозрительный или оскорбительный контент.

Проблема, с которой я столкнулся, в основном заключается в «щелчках роботов» или, скорее, в том, как реализовать систему, чтобы ее не обманули «щелчки роботов».

На ум приходят несколько методов:

1) Пользовательский агент
2) Требуется несколько флагов (в заранее определенный промежуток времени?), Прежде чем реагировать каким-либо образом
3) robots.txt
4) Требование участия человека во второй форме (капча или «укажите причину»)

Что я о них думаю:

1) Ненадежно (как единственное решение)
2) Для этого требуется масса пользователей, что может привести к тому, что событие никогда не сработает
3) Это, вероятно, "правильный" путь, но он будет работать только для тех, кто его уважает
4) Я ненавижу капчу, и требование объяснения может поднять планку слишком высоко, чтобы функция оставалась полезной.

Какие методы (высоко просвещенное) сообщество должно было бы поделиться со мной?

0
nikc.org 1 Фев 2010 в 16:05

3 ответа

Лучший ответ

Вы можете добавить «сообщить об этом» <form> в DOM с помощью javascript appendChild();.

Это предотвратит рассылку большого количества спама.

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

window.onload = function() {
    var f = document.createElement('FORM');
        f.method = 'post';
        f.action = 'report.cgi';

    var b = document.createElement('INPUT');
        b.type = 'submit';
        b.value = 'Report this';


        f.appendChild(b);
        document.body.appendChild(f);
 }

Примечание.
Атрибут rel="nofollow" гарантирует, что поисковые системы не «подсчитывают» ссылку, но переходят по ней (да, название предполагает иное).

Если вы хотите, чтобы поисковые системы не касались определенного файла, используйте robots.txt

Примечание 2:
Сообщение о чем-либо - это действие, которое что-то «меняет» на сервере. Таким образом, это не должен быть запрос GET. Вместо этого должен быть запрос POST. Другими словами: не используйте <a href"">, а вместо этого отправьте <form> с его аргументом method, установленным на "post".

1
Jacco 1 Фев 2010 в 16:58
Хорошая точка зрения на запрос POST. Как роботы (милые) реагируют на формы? Очевидно, что спам-сканеры отправляют формы, поэтому проблема все еще сохраняется.
 – 
nikc.org
1 Фев 2010 в 17:13
Если вы добавите форму в DOM с помощью javascript, сканер должен будет поддерживать сценарии, чтобы даже заметить, что форма есть.
 – 
Jacco
1 Фев 2010 в 17:35
«Хорошие» краулеры никогда не будут делать POST-запросы, так как это противоречит спецификациям.
 – 
Jacco
1 Фев 2010 в 17:37
Разумеется, меня беспокоят не «хорошие» краулеры. (Во всяком случае, столько же. Я уверен, что в этой партии тоже есть непреднамеренно небрежные.) Внедрение JS DOM + требуемый ввод действительно выглядит как хороший выход.
 – 
nikc.org
1 Фев 2010 в 17:55

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

1
Thorsten Dittmar 1 Фев 2010 в 16:09
Да, я думал об этом (возможно, редактировал свой вопрос, пока вы отвечали), но я бы не стал туда идти, если нет лучшего решения.
 – 
nikc.org
1 Фев 2010 в 16:12
Но на самом деле, если бы причиной была форма с множественным выбором, возможно, это не было бы таким сдерживающим фактором. Но как это будет с пауками?
 – 
nikc.org
1 Фев 2010 в 16:17
1
Обязательно укажите опцию «указать причину». Что-то может показаться невинным вне контекста. Кроме того, назовите поле нестандартным способом («f0878»), затем добавьте скрытое (с помощью CSS) фиктивное поле с именем по умолчанию («ответ»). Любое уведомление, которое отправляет непустое поле «ответ», является спамом, заполненным спам-ботом.
 – 
SF.
1 Фев 2010 в 16:43

Вы пропустили, чтобы ссылка была nofollow, но я бы выбрал комбинацию, требующую участия человека (причина, сведения о заявителе) для противодействия роботам и требования ряда флагов, чтобы люди не могли просто помечать людей, с которыми они не согласны / не согласны нравится на форуме.

1
Rowland Shaw 1 Фев 2010 в 16:11
У меня есть rel="nofollow", но роботы все равно следят за ними, просто они по-другому относятся к ранжированию страниц. en.wikipedia.org/wiki/…
 – 
nikc.org
1 Фев 2010 в 16:15