Поиск роботов нажатием моей кнопки...? Могу ли я предотвратить это?

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

Теперь у меня есть счетчик просмотров на каждой странице загрузки и кнопка "Мне нравится". После нажатия кнопки "лайк" она отключается для любых последовательных лайков в течение жизненного цикла этой страницы.

Я испытываю проблему, когда мои симпатии - это больше, чем мои взгляды... которые теоретически не должны иметь место. С тех пор я реализовал некоторый Java-код для отмены подключения кнопки (в основном скрываем элемент), а также добавил некоторый код на стороне сервера для роботов, которые игнорируют Java.

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

Я получил максимум до двух или трех событий, которые запускаются, когда я быстро нажимаю на кнопку, чтобы пройти назад. Только после 2-го /3-го прогона прошло достаточно времени для распознавания переменной сеанса, и код события игнорируется. До моего трюка с сессией вы могли быстро нажать кнопку 10 раз, и это увеличило бы 10 лайков до того, как страница в конце концов вернулась и отключила кнопку.

Итак, до 2 или 3 неплохо, но я постоянно получаю больше лайков, чем просмотров какого-то контента.

  • Мои взгляды считаются хорошими, я дважды проверил это.
  • Мои лайки определенно ловят только первый триггер / событие disable / session var после пары нежелательных событий... (быстрый щелчок)
  • Я подозреваю, что его поисковые системы, возможно, следующие ссылки...?

Дополнительная информация: отключение кнопки jquery:

<script type ="text/javascript">
    function pageLoad() {
        $('#<%=vidUpB.ClientID%>').click(function () {
            $(this).css("display","none")
        });
    }
</script>

Есть идеи?

2 ответа

Решение

Когда боты находят POST-запрос к некоторому URL-адресу, им нравится отправлять GET-запрос туда, чтобы заглянуть. Если им нравится то, что они видят, ссылка может кэшироваться, и вы можете время от времени получать дополнительные запросы GET для этого URL. Вредные боты не следуют robots.txt, единственный способ справиться с ними - это поместить немного ненавязчивой капчи на их пути - например, потребовать, чтобы аналогичный запрос был запросом POST, и проверить, что скрытое поле ввода остается пустым.

<asp:TextBox ID="txtKeepEmpty" runat="server" style="display:none" />
<asp:Button runat="server" OnClick="btnLike_Click" Text="Like" />

protected void btnLike_Click(object sender, EventArgs e) {
  if (IsPostBack && 
    Request.HttpMethod == "POST" && 
    string.IsNullOrEmpty(txtKeepEmpty.Text)) {
    // update
  }
}

Также хранение сессии основано на ключе сессии - который является куки. Каждый раз, когда пользователь удаляет сессионный cookie, он начинает новый сеанс. Когда он отключает куки-файлы навсегда (некоторые пользователи делают это), он создает новый сеанс для каждого запускаемого им запроса.

Вещь, чтобы попробовать:

  1. По умолчанию кнопка HTML отключена. Это предотвратит нажатие на него любых ботов, если они просто захватят HTML. Таким образом, они не могут нажать кнопку, если они не интерпретируют Javascript.
  2. При обработке загрузки страниц Javascript включите кнопку.
  3. Когда кнопка нажата, Javascript отключает ее немедленно (локально). Это должно предотвратить или, по крайней мере, уменьшить возможность многократного нажатия на него подряд.
  4. Продолжайте использовать свой серверный код для фильтрации посторонних нажатий кнопок, которые проходят другим способом.
Другие вопросы по тегам