Поиск роботов нажатием моей кнопки...? Могу ли я предотвратить это?
У меня есть сайт с контентом, который можно "понравиться". Для этого не используется 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, он начинает новый сеанс. Когда он отключает куки-файлы навсегда (некоторые пользователи делают это), он создает новый сеанс для каждого запускаемого им запроса.
Вещь, чтобы попробовать:
- По умолчанию кнопка HTML отключена. Это предотвратит нажатие на него любых ботов, если они просто захватят HTML. Таким образом, они не могут нажать кнопку, если они не интерпретируют Javascript.
- При обработке загрузки страниц Javascript включите кнопку.
- Когда кнопка нажата, Javascript отключает ее немедленно (локально). Это должно предотвратить или, по крайней мере, уменьшить возможность многократного нажатия на него подряд.
- Продолжайте использовать свой серверный код для фильтрации посторонних нажатий кнопок, которые проходят другим способом.