Не позволяя сценаристам захлопнуть ваш сайт

Поскольку я не нашел jQuery-бесплатный ответ, который я мог бы скопировать / вставить, вот решение, которое я использовал:

function clickEvent(e) {
  // e = Mouse click event.
  var rect = e.target.getBoundingClientRect();
  var x = e.clientX - rect.left; //x position within the element.
  var y = e.clientY - rect.top;  //y position within the element.
}

JSFiddle полного примера

486
задан 14 revs, 6 users 53% 4 May 2018 в 17:37
поделиться

125 ответов

Важная вещь здесь состоит в том, чтобы изменить систему, чтобы удалить загрузку из Вашего сервера, препятствовать тому, чтобы боты выиграли мешок дерьма, не позволяя botlords знать, что Вы играете их, или они пересмотрят свою стратегию. Я не думаю, что существует любой способ сделать это без некоторой обработки в Вашем конце.

, Таким образом, Вы записываете хиты на своей домашней странице. Каждый раз, когда кто-то поражает страницу, что соединение сравнивается со своим последним хитом, и если это было слишком быстро затем, это отправляется версию страницы без предложения. Это может быть сделано своего рода механизмом выравнивания нагрузки, который отправляет ботов (хиты, которые слишком быстры) к серверу, который просто служит кэшированным версиям Вашей домашней страницы; настоящие люди отправляются на хороший сервер. Это берет загрузку от основного сервера и заставляет ботов думать, что они все еще подаются страницы правильно.

Еще лучше, если предложение может быть отклонено в некотором роде. Затем можно все еще сделать предложения относительно декоративного сервера, но когда бот заполняет форму, говорят "Извините, что Вы не были достаточно быстры" :) Затем они будут определенно думать, что находятся все еще в игре.

2
ответ дан Chris Latta 5 May 2018 в 03:37
поделиться

Наиболее чисто технические решения были уже предложены. Я поэтому предложу другое представление проблемы.

Насколько я понимаю, боты настраиваются людьми действительно попытка купить сумки, которые Вы продаете. Проблема -

  1. Другие люди, которые не управляют ботами, заслуживают шанса купить, и Вы предлагаете ограниченную сумму сумок.
  2. Вы хотите притянуть людей на свой сайт и просто продать сумки.

Вместо того, чтобы стараться избегать ботов, можно позволить потенциальным покупателям сумки подписаться на электронное письмо или даже обновление SMS, быть уведомленными, когда продавание произойдет. Можно даже дать им минуту или два преимущества (специальный URL, где продавание запускается, случайным образом сгенерированный и отправленный с ПОЧТОЙ/SMS).

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

бегуны ботов могли бы все еще запустить ботов на Вашем уведомлении для окончания покупки быстрее. Некоторые решения этого могут предлагать покупку с одним щелчком.

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

В сущности то, что я предлагаю, пытаются посмотреть на проблему как на социальную, а не техническую.

Asaf

3
ответ дан Asaf R 5 May 2018 в 03:37
поделиться
  • 1
    Прохладное спасибо в течение Вашего времени. – JasonG 6 March 2013 в 02:02

Прикрепите 5-минутную задержку на все объявления продукта для незарегистрированных пользователей. Обычные пользователи действительно не заметят это, и неслучайные пользователи будут зарегистрированы во всяком случае.

4
ответ дан Brian 5 May 2018 в 03:37
поделиться
  • 1
    Как @umbyslipknot упомянутый, это только работало на меня, когда я переместил банку в вершину порядка & список экспорта. Хороший спасибо совет. – justinkoh 10 October 2013 в 14:36

Запишите обратный прокси на апачском сервере перед Вашим приложением, которое реализует Tarpit (Статья Википедии) для наказания ботов. Это просто управляло бы списком IP-адресов, которые соединились за последние несколько секунд. Вы обнаруживаете пакет запросов от единственного IP-адреса и затем экспоненциально задерживаете те запросы перед ответом.

, Конечно, несколько человек могут произойти из того же IP-адреса, если бы они находятся на сетевом соединении NAT'd, но маловероятно, что человек возражал бы против Вашего времени отклика, идя для 2 мс в 4 мс (или даже 400 мс), тогда как боту будет препятствовать увеличивающаяся задержка довольно быстро.

5
ответ дан Denis Hennessy 5 May 2018 в 03:37
поделиться
  • 1
    Это имело бы смысл, если бы это была внешняя библиотека, но это - класс, который определяется встроенное право. Таким образом, нет никаких внешних зависимостей проекта. Посмотрите, как PlaceUnitListener объявляется выше конструктора. – b-ryce 9 February 2013 в 02:35

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

Вот являются некоторые идеями мешать писать ботов:

  • Требуют выполнения функции JavaScript. JavaScript делает это намного больше боли для записи бота. Возможно, потребуйте капчи, если они не запускают JavaScript, чтобы все еще позволить фактическим (минимальным) пользователям не-JavaScript.

  • Время нажатия клавиш при вводе в форму (снова с помощью JavaScript). Если это не человекоподобно, затем отклоняют его. Это - боль для имитации человеческого ввода в боте.

  • Пишут Ваш код для обновления полевой ежедневной газеты идентификатора с новым случайным значением. Это вынудит их ежедневно обновлять своего бота, который является болью.

  • Пишут Ваш код для переупорядочивания полей ежедневно (очевидно, в некотором роде, это не случайно пользователям). Если они будут полагаться на полевой порядок, то это собьет их с толку и снова вызовет ежедневное обслуживание к их коду бота.

  • Вы могли пойти еще больше и использовать содержание Flash. Flash является полностью болью для записи бота против.

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

4
ответ дан jwanagel 5 May 2018 в 03:37
поделиться
  • 1
    Если бы они находятся в зависимостях знатока...., можно было бы ожидать, что они будут в пути сборки.. вздох. Спасибо @CodeNoob – Shehaaz 19 April 2013 в 03:06
  1. Продают товар к несценариям людей.

  2. Поддерживают сайт в рабочем состоянии на скорости, которую не замедляют боты.

  3. не изводят 'нормальных' пользователей ни с какими задачами завершиться, чтобы доказать, что они являются человеческими.

Вы, вероятно, не хотите слышать, что это, но № 1 и № 3 являются взаимоисключающими.

On the Internet, nobody knows you're a dog

ну, никто не знает, что Вы - бот также. Нет никакого программного способа сказать, существует ли человек на другом конце соединения, не требуя, чтобы человек сделал что-то. Препятствование тому, чтобы сценарии/боты делали материал в сети, является целой причиной, КАПЧИ были изобретены. Это не похоже, это - некоторая новая проблема, которая не видела большое усилие, израсходованное на него. Если бы был лучший способ сделать это, то, которое не включило стычку реальным пользователям, которых делает КАПЧА, то все уже использовали бы ее.

я думаю, что необходимо считаться с фактом, что, если Вы хотите сохранить ботов от своей страницы упорядочивания, хорошая КАПЧА является единственным способом сделать это. Если спрос на Ваше случайное дерьмо достаточно высок, что люди готовы перейти к этим длинам для получения его, законные пользователи не собираются быть испуганными КАПЧОЙ.

15
ответ дан 2 revs 5 May 2018 в 03:37
поделиться

Необходимо изобразить способ заставить ботов купить материал, который в широком масштабе переоценен: 12-миллиметровая крыльчатая гайка: 20$. Посмотрите, на сколько накидываются боты, прежде чем сценаристы решают, что Вы играете их.

Использование прибыль для покупки большего количества серверов и платы за пропускную способность.

190
ответ дан Christopher Mahan 5 May 2018 в 03:37
поделиться

Хорошо, таким образом, спаммеры отсутствуют, конкурируя обычные люди для завоевания "трясины дерьма" аукцион? Почему бы не заставить следующий аукцион быть литеральным "мешком дерьма"? Спаммеры добираются для оплаты, хорошие деньги для сумки, полной собачки, делают, и все мы смеемся над ними.

2
ответ дан 1800 INFORMATION 5 May 2018 в 03:37
поделиться

Мой подход должен был бы сфокусироваться на нетехнологических решениях (иначе, Вы вводите гонку вооружений, которую Вы потеряете или по крайней мере проведете много времени и денег на). Я сфокусировался бы на частях тарификации/отправки - можно найти ботов или находящий несколько доставок к тому же адресу или несколькими зарядами к методу единовременного платежа. Можно даже сделать это через объекты за несколько недель, поэтому если пользователь получил предыдущий объект (путем ответа действительно действительно быстро), ему можно присвоить своего рода "препятствие" на этот раз.

Это также имело бы побочный эффект (выгодный, я буду думать, но я мог быть неправильно мудрым маркетингом для Вашего случая), возможно, расширения круга людей, которые становятся удачливыми и добираются для покупки woot.

3
ответ дан Shachar 5 May 2018 в 03:37
поделиться

В первую очередь, по определению, невозможно поддерживать т.е. действительно анонимные, транзакции не сохраняющие состояние в то время как также способность разделить ботов от законных пользователей.

, Если мы можем принять предпосылку, что мы можем наложить некоторую стоимость на brand-spanking-new woot посетитель на его первом хите (хитах) страницы, я думаю, что у меня есть возможное решение. Из-за отсутствия лучшего имени я собираюсь свободно назвать это решение "Посещением DMV".

Скажем, что существует автомобильное представительство, которое предлагает другой новый автомобиль каждый день, и что в несколько дней, можно купить экзотический спортивный автомобиль за 5$ каждый (ограничивают 3), плюс целевой заряд за 5$.

выгода, представительство требует, чтобы Вы посетили представительство и показали действительные водительские права, перед разрешением войти через дверь для наблюдения то, что автомобиль в продаже. Кроме того, Вы, должно быть, сказали, что действительные водительские права для создания покупки.

Так, новому посетителю (позволяют нам назвать его Bob) этому автодилеру отказывают во въезде и относят в офис DMV (который удобно расположен право по соседству) получить водительские права.

Другие посетители с действительными водительскими правами позволен войти, после предъявления его водительских прав. Человек, который делает неприятность из себя путем слоняния без дела весь день, приставания к продавцам, захвата брошюр и освобождения дополнительного кофе и cookie, будет в конечном счете отклонен.

Теперь, назад Bob без лицензии - все, что он должен сделать, выносят посещение DMV однажды. После этого он может посетить представительство и купить автомобили каждый раз, когда ему нравится, если он случайно не оставил свой кошелек дома, или его лицензия является otherwised, уничтоженным или отменяемым.

водительские права в этом мире почти невозможно подделать.

посещение DMV включает сначала получение анкеты в, "Запускают Здесь" очередь. Bob должен взять заполненное заявление к окну № 1, где первый из многих неприветливых государственных служащих возьмет его приложение, обработает его, и если все в порядке, штампуйте приложение для окна и отправьте его в следующее окно. И так, Bob идет от окон до окна, ожидающего каждого шага его приложения для прохождения через, пока он наконец не добирается в конец и получает лицензию своего drivere.

нет никакого смысла в попытке "сорвать" DMV. Если формы не заполнены правильно в трех экземплярах, или никакие неправильные ответы, данные ни в каком окне, приложение разорвано, и несчастного клиента передают обратно запуску.

Интересно, неважно, то, как полный или освобождают офис, он берет о том же количестве времени, которое будет обслуживаться в каждом последовательном окне. Даже когда Вы - единственный человек в строке, кажется, что персоналу нравится заставлять Вас ожидать минута позади желтой строки перед произнесением, "Затем!"

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

немного больше технического объяснения:

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

Этот подход, вероятно, требует AJAX-y клиентская обработка. brand-spanking-new посетителю woot дают страницу "Welcome New User!", полную текста и графики, которая (соответствующей регулировкой серверной стороны) занимает несколько секунд для загрузки полностью. В то время как это происходит (и посетитель, по-видимому, занят, читая страницу (страницы) приветствия), его маркер идентификации медленно собирается.

Скажем, для обсуждения, маркер (иначе "водительские права) состоит из 20 блоков. Для получения каждого последовательного блока клиентский код должен отправить допустимый запрос к серверу. Сервер включает преднамеренную задержку (скажем, 200 миллисекунд), прежде, чем отправить следующий блок наряду со 'штампом' должно было выполнить следующий запрос блока (т.е. штампы должны были пойти от одного окна DMV до следующего). Все сказали, приблизительно 4 секунды должны протечь для окончания, chunk-challenge-response-chunk-challenge-response-...-chunk-challenge-response-completion обрабатывают.

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

На стороне сервера, Вы только принимаете просмотры страницы от клиентов, которые имеют допустимый маркер. Или, если важно, чтобы все могли в конечном счете видеть страницу, поместить штраф времени на запросы, который пропускает допустимый маркер.

Теперь, чтобы это было relatiely мягкий законному посетителю - человеку, t заставляют маркерный процесс издания произойти относительно ненавязчиво в фоновом режиме. Следовательно потребность в странице приветствия с интересной копией и графикой, которая сознательно замедлена немного.

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

4
ответ дан Toybuilder 5 May 2018 в 03:37
поделиться

Метод использование Woot для борьбы с этой проблемой изменяет игру - буквально. Когда они представляют чрезвычайно желательный объект для продажи, они заставляют пользователей играть в видеоигру для упорядочивания его.

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

Это все еще распродает очень быстро, но я думаю, что решение хорошо - переоценка проблемы и изменение параметров, ведомых к успешной стратегии, где строго технические решения просто не существовали.

<час>

Ваша вся бизнес-модель на основе "первого, прибывают, сначала подаваемые". Вы не можете сделать то, что радиостанции сделали (они больше не делают первую вызывающую сторону победителем, они делают 5-е или 20-й или 13-й вызывающей стороной победитель) - это не соответствует Вашей основной функции.

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

Скажем, Вы реализуете всю эту тактику. Если я решу, что это важно, то я просто заставлю 100 человек работать со мной, мы создадим программное обеспечение, чтобы работать над нашими 100 отдельными компьютерами и поразить Ваш сайт 20 раз в секунду (5 секунд между доступами для каждого ПОЛЬЗОВАТЕЛЯ/COOKIE/УЧЕТНОЙ ЗАПИСИ/IP-АДРЕСА).

у Вас есть два этапа:

  1. первая полоса Наблюдения
  2. Упорядочивание

Вы не можете поместить блокирование капчи № 1 - это собирается потерять настоящих клиентов ("Что? Я должен решить капчу каждый раз, когда я хочу видеть последний woot?!?").

Так мои небольшие часы группы, синхронизированные вместе, таким образом, мы получаем приблизительно 20 проверок в секунду, и кто бы ни видит, изменение сначала предупреждает все другие (автоматически), кто загрузит первую полосу еще раз, перейдет по ссылке порядка и выполнит транзакцию (который может также произойти автоматически, если Вы не реализуете капчу и изменяете ее для каждого wootoff/boc).

можно поместить капчу перед № 2, и в то время как Вы, ненавидят, чтобы сделать это, который может быть единственным способом удостовериться, что, даже если боты наблюдают первую полосу, реальные пользователи получают продукты.

, Но даже с капчой моя небольшая полоса 100 все еще имела бы значительное первое преимущество двигателя - и нет никакого способа, которым можно сказать, что мы не люди. Если бы Вы начинаете синхронизировать наши доступы, мы просто добавили бы некоторое дрожание. Мы могли случайным образом выбрать, какой компьютер должен был обновиться так, порядок доступов постоянно изменяется - но все еще походит достаточно на человека.

Первый, избавьтесь от простых ботов

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

Это должно значительно отбросить Ваш трафик и изменить тактику, которую используют пользователи бота.

111-секундный, сделайте сервер ослепительно быстро.

Вы действительно не хотите слышать это..., но...

я думаю, в чем Вы нуждаетесь, полностью настраиваемое решение с самого начала.

Вы не должны смешивать со стеком TCP/IP, но Вы, возможно, должны разработать очень, очень, очень быстро пользовательский сервер, который является целью, созданной, чтобы коррелировать пользовательские соединения и реагировать соответственно на различные нападения.

Apache, lighthttpd, и т.д. является всем великим для того, чтобы быть гибким, но Вы выполняете единственный веб-сайт цели, и действительно необходимо смочь обоим, делают больше, чем текущие серверы способны к выполнению (и в обработке трафика, и в соответственно сражающихся ботах).

Путем обслуживания в основном статической веб-страницы (обновляет каждые 30 секунд или так) на пользовательском сервере необходимо не только смочь обработать 10x количество запросов и трафика (потому что сервер ничего не делает кроме получения запроса и читать страницу из памяти в буфер TCP/IP), но это также предоставит Вам доступ к метрикам, которые могли бы помочь Вам замедлить ботов. Например, путем корреляции IP-адресов можно просто заблокировать больше чем одно соединение в секунду на IP. Люди не могут пойти быстрее, чем это, и даже люди, использующие тот же IP-адрес NATed, будут только нечасто блокироваться. Вы хотели бы сделать, медленный блок - оставляет соединение в покое в течение целой секунды прежде официально завершить сессию. Это может питаться в брандмауэр, чтобы дать долгосрочные блоки особенно вопиющим преступникам.

, Но действительность то, что независимо от того, что Вы делаете, нет никакого способа сказать человеку кроме бота, когда бот сделан на заказ человеком для единственной цели. Бот является просто прокси для человека.

Заключение

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

можно добавить блоки для простых ботов, которые поднимут планку и меньше людей с беспокойством с ним. Это может быть достаточно.

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

Вы могли бы рассмотреть установку ловушки и маркировку учетных записей пользователей как пользователи бота, но это будет иметь огромную отрицательную общественную обратную реакцию.

Каждый раз я думаю "хорошо, что относительно того, чтобы делать это..." Я могу всегда отвечать его подходящей стратегией бота.

Даже при создании первой полосы капчой для получения до страницы упорядочивания ("Кнопка упорядочивания этого объекта является синим с розовыми блесками, где-нибудь на этой странице") боты будут просто открывать все ссылки на странице и использовать, какой бы ни каждый приезжает назад со страницей упорядочивания. Это не просто никакой способ выиграть это.

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

-Adam

13
ответ дан 2 revs 5 May 2018 в 03:37
поделиться

Q: Как Вы мешали бы сценаристам хлопнуть Вашим сайтом сотни времен в секунду?
А: Вы не делаете. Нет никакого пути к , предотвращают это поведение внешними агентами.

Вы могли использовать обширный массив технологии, чтобы проанализировать входящие запросы и эвристическим образом попытаться определить, кто и не человек..., но она перестала бы работать. В конечном счете, если не сразу.

единственное жизнеспособное долгосрочное решение к , изменяют игру так, чтобы сайт не был благоприятен для бота, или был менее привлекателен для сценаристов.

Как дела это? Ну, это - другой вопрос! ;-)

...

хорошо, некоторые опции были даны (и отклонены), выше. Я не глубоко знаком с Вашим сайтом, посмотрев на него только однажды, но так как люди могут прочитать текст в изображениях, и боты не могут легко сделать этого, изменить объявление, чтобы быть изображением. Не КАПЧА , просто изображение -

  • генерирует изображение (кэшируемый, конечно), когда страницу требуют
  • , сохраняют имя источника изображения тем же, так, чтобы не давал игру далеко
  • большую часть времени, изображение будет иметь обычный текст в нем и будет выровненное, чтобы казаться, быть частью встроенной страницы HTML
  • , когда игра будет 'включена', изменения образа к тексту объявления
  • , текст объявления показывает URL и/или код , который должен быть вручную введен для получения приза. КАПЧА код, если Вам нравится, но это, вероятно, не необходимо.
  • для дополнительной безопасности, код может быть одноразовым маркером, сгенерированным специально для запроса/IP/агента, так, чтобы повторные запросы сгенерировали различные коды. Или можно предварительно генерировать набор случайных кодов (шифр Вернама), если поколение по запросу является слишком налоговым.

гонки на время Выполнения настоящих людей, отвечающих, это, и игнорирует ('ой, ошибка произошла, извините! попробуйте еще раз'), ответы быстрее, чем (говорят) половину этого времени. Это событие должно также инициировать предупреждение разработчикам, что по крайней мере один бот выяснил код/игру, таким образом, пора изменить код/игру.

Продолжают изменять игру периодически так или иначе, даже если никакие боты не инициировали ее, только для траты времени сценаристов. В конечном счете сценаристы должны утомиться игрой и пойти в другое место... мы надеемся ;-)

Одно заключительное предложение: когда запрос на Вашу основную страницу входит, помещает его в очередь и отвечают на запросы в порядке в отдельном процессе (Вам, вероятно, придется взломать/расширить веб-сервер, чтобы сделать это, но это будет, вероятно, стоить). Если другой запрос от того же IP/агента входит, в то время как первый запрос находится в очереди, проигнорируйте его. Это должно автоматически потерять загрузку из ботов.

РЕДАКТИРОВАНИЕ: другая опция, кроме использования изображений, состоит в том, чтобы использовать JavaScript для заполнения buy/no-buy текста; боты редко интерпретируют JavaScript, таким образом, они не видели бы его

44
ответ дан 4 revs 5 May 2018 в 03:37
поделиться

Возможное решение целей, не обязательно заголовок вопроса:

Вместо того, чтобы подать специальное предложение всем, служите ему случайным наборам IP-адресов за один раз. Например, разделите пространство IP в 256 уникальных блоков, и в time=0, только позвольте людям с IP-адресами в первом блоке, и в time=5 секунды, позвольте людям от первого блока и второго блока..., пока прошлый временной интервал не наступает, и позвольте всем видеть соглашение. Одна идея рандомизировать его состояла бы в том, чтобы взять младшие значащие биты md5/sha их IP плюс немного соли на основе соглашения.

Это позволило бы сценаристам все еще иметь преимущество в том, что у них есть почти нулевое время отклика и сила при наличии нескольких IP-адресов, но это означало бы, что данный бот не будет иметь преимущество перед другим клиентом, который был 'более удачливым', чем они из-за их IP-адреса.

Объединение этого с некоторыми из других идей походит на хорошую идею.

-1
ответ дан FryGuy 5 May 2018 в 03:37
поделиться
  • 1
    Право, но выполнение " под hood" идет в лучше, чем выполнение его сверху капота, для продолжения аналогии. – Mark Rogers 15 April 2009 в 01:46

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

Вы уже используете флэш-память на своем сайте итак, почему бы не использовать управление флэш-памятью для помощи с, или форма отправляют? Управление могло сделать, некоторые зашифровали comms с веб-сервером с парой ключей или некоторым другим алгоритмом к значениям хэш-функции?

я предполагаю, что целая форма могла быть во флэш-памяти? Лично я использовал бы апплеты Java, потому что это - мой любимый язык.

-1
ответ дан mxc 5 May 2018 в 03:37
поделиться
  • 1
    @m4bwav - Чувак, что Вы думаете свои языки OO, делает под капотом? Высказывание хороших языков OO может избавить от необходимости генерацию кода, похож на высказывание, что хороший автомобиль может избавить от необходимости механизмы. – MarkusQ 15 April 2009 в 01:26

Как предложено выше, я сделал некоторую работу над формами некапчи при помощи предрасчетного хеша математического ожидания результата, сохраненного в форме. Идея работает на два Wordpress плагины против спама: WP-морф и WP-HashCash. Единственный недостаток является клиентским браузером, имеющим необходимость смочь интерпретировать JavaScript.

1
ответ дан Diego Sevilla 5 May 2018 в 03:37
поделиться
  • 1
    Существует ли способ достигнуть того же самого с child.fork ()? – Guy Korland 31 May 2013 в 06:44

Попытка предназначаться для самих БОТОВ никогда не будет решать проблему - кто бы ни пишет им, выяснит новый путь вокруг того, что Вы поместили на месте. Однако вынуждая пользователя думать, прежде чем покупка была бы намного более эффективным решением. Лучший способ сделать это, что я могу думать, выполняется голландский аукцион. Запустите цену высоко (2x, для чего Вы покупаете ее в магазине), и уменьшайте ее со временем. Первый человек, который совершит нападки, покупает, получает его. Я не думаю, что любой бот достаточно интеллектуален к тренировке, что самая выгодная цена для объекта.

0
ответ дан Wairapeti 5 May 2018 в 03:37
поделиться

Таким образом, Вашей проблемой является слишком много бизнеса? Люди стреляют из укрытия Ваши продажи? Это предполагает, что эти сценаристы генерируют квалифицированные продажи? И проблема, они накидываются на весь Ваш продукт, прежде чем все остальные сделают?

Как насчет Вас делают полный веб-сервис API для 'сценаристов' для взаимодействия через интерфейс с. Затем предложите небольшую скидку или некоторую привилегию, чтобы заставить их играть по Вашим правилам. Удвойте свой бизнес и имейте Ваши веб-продажи и продажи API.

Или это или просто получает ПУТЬ больше материально-технических ресурсов - Вы не можете бороться, это - обнимается и адаптируется к нему.

1
ответ дан dfasdljkhfaskldjhfasklhf 5 May 2018 в 03:37
поделиться
  • 1
    @GuyKorland, Конечно, просто добавьте - отладка = {порт} к параметрам командной строки Вашего дочернего процесса. – Miroslav Bajtoš 31 May 2013 в 17:25

, Как Вы знаете, существуют сценаристы, размещающие заказы?

затруднение Вашей проблемы - то, что Вы не можете разделить сценаристов от законных пользователей и поэтому не можете заблокировать их, поэтому как получается, что Вы знаете, что существуют сценаристы вообще?

, Если у Вас есть способ ответить на этот вопрос, затем у Вас есть ряд характеристик, которые можно использовать для фильтрации сценаристов.

2
ответ дан Bret Walker 5 May 2018 в 03:37
поделиться
  • 1
    Я не знал об установке символов Условной компиляции под вкладкой Build. That' s точно, что я искал!Спасибо! +1 для объяснения, как установить символы. – Johnie Karr 22 December 2012 в 00:35

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

, Возможно, Вы могли:

Просто проверяют "победителя" путем проверки, что это - IP, разоблачает меньше, чем значение определенного порога в журналах (я использую "grep | туалет-l" для получения количества). Если это по Вашему порогу, временно блок что IP (час или так?).

Дисквалифицируют любого "победителя" с тем же адресом поставки или информацией об оплате как "последний" победитель, или это победило в течение определенного периода времени для распространения "победы" вокруг.

боты не получат их всех тот путь.

Для раздражения дерьма из скребков: , Когда "случайное дерьмо" объект повышается, работает, вывод HMTL для этого пролистывают "код obfuscator"..., который не изменяется, "дисплей" страницы... просто скремблирует код со случайным образом сгенерированным Ids и т.д.

Более коварный:

Увеличение цена взимала за "выигранный" объект на основе того, сколько раз IP победы разоблачает в журналах. Затем, даже если боты побеждают, вы тоже. :-)

0
ответ дан 2 revs, 2 users 94% 5 May 2018 в 03:37
поделиться

Ограничивают времена, в которые Вы выпускаете предложения: , Например: только с без 7 минут 8 минуты мимо запуска часа. Не отклоняйтесь от этого и давайте штрафы на порядке пары секунд к дюйм/с, которые проверяют много в полчаса перед временем выпуска. Это затем становится выгодным, чтобы владельцы ботов только экранировали царапанье в течение пары минут каждый час вместо всех. время. Кроме того, потому что нормальный человек может проверить сайт один раз в час, но не каждую секунду, Вы помещаете нормальных людей на намного более ровную опору с ботами.

Cookie: Использование cookie отслеживания, состоявший только из уникального идентификатора (ключ для таблицы базы данных). Дайте "задержки выпуска" с клиентами без cookie, недопустимых cookie, клиенты, которые используют тот же cookie от нового IP или cookie, используемые с высокой частотой.

Определяют вероятных ботов: Cookie заставят ботов запрашивать несколько cookie на каждый IP, которым они управляют, который является поведением, которое может быть прослежено. Дюйм/с только с единственным выпущенным cookie является наиболее вероятными нормальными клиентами. Дюйм/с со многими выпущенными cookie является или большими сетями редактора NAT или ботом. Я не уверен, как Вы отличили бы их, но компании более вероятно, будут, вероятно, иметь вещи как серверы DNS, веб-страница и вещи той природы.

0
ответ дан Craig Gidney 5 May 2018 в 03:37
поделиться

Почему бы не сделать содержание КАПЧОЙ?

На страница, где Вы отображаете приз, всегда имейте файл изображения в том же месте с тем же именем, когда сумка o загаженная продажа идет, динамично генерируйте и загрузите изображение текстом, и т.д. рекламирующим приз, когда никакая продажа не идет, просто имеют некоторое изображение по умолчанию, которое интегрируется хорошо с сайтом. Кажется, что это - то же понятие как КАПЧА..., если бот не может выяснить значение изображения, они не смогут "выиграть" его, если они могут они мочь выяснить Ваши Капчи так или иначе.

1
ответ дан user6288 5 May 2018 в 03:37
поделиться

Я в согласии с OP здесь - никакая капча - это не очень woot способ сделать вещи.

Во-первых поставил несколько капканов бота. Я упоминал бы BOC чаще на домашней странице, для захвата ботов во взгляд, поскольку боты не интеллектуальны, поэтому снова формулируя отличающийся каждый раз, например, "жалобы BOC!" - таким образом, боты, просто сканируя для ключевых слов будут захвачены.

Однако я думаю, что реальная проблема здесь является двукратной, во-первых проблемы производительности, что у Вас есть потребность, которая будет обращена, сегодня это - боты, вызывающие проблему, но она указывает мне, что существует проблема производительности, которая будет обращена.

, Во-вторых, это - бизнес-возможность сместить немного реального дерьма с прибылью. Таким образом, я оставался бы с полным стилем woot и состоянием, "мы проверяем на ботов. Если мы будем думать, что Вы - бот, то Вы получите поле botcrap".

проверка бота была бы сделана офлайн когда-то после того, как продажа была сделана, с помощью прерываний бота, IP-адресов, cookie, сессий, строки браузера и т.д. Делают некоторый серьезный анализ с данными, которые Вы имеете покупателей для решения, кто получает botcrap. Если Вы решаете поставить botcrap - затем можно освободить немного нормального дерьма, чтобы продать кому-то еще.

1
ответ дан Richard Harrison 5 May 2018 в 03:37
поделиться

Я соглашаюсь с плакатом выше, кто сказал об иногда продаже, действительно 'гадят' мешки дерьма.

Вы, кажется, придумали бизнес-модель, которая является serverly, ограниченным технологией, через которую Вы пытаетесь поставить его. Все же как настроенные люди большей части технологии (не crticism, в конце концов, который является, для какого этот сайт) Вы пытаетесь предложить техническое решение. НО ЭТО - БИЗНЕС-ПРОБЛЕМА. Это вызывается отказом в технологии, но это не означает, что технология является ответом. И большинство всех решений, которые любой предлагает (и будет много опций) будет в конце обойденным полными решимости 'автокупить' (из-за отсутствия лучшего краткого описания) Ваши 'мешки дерьма'.

, по моему скромному мнению, Вы задаете неправильным людям неправильный вопрос, и Вы пропадаете зря много времени и ресурса на неверном решении.

1
ответ дан Charlie 5 May 2018 в 03:37
поделиться

Я не знаю, было ли это предложено уже, а скорее, чем хранение списка IP ботов, которых необходимо было бы просканировать через по каждому запросу страницы, почему бы не установить cookie или var сессии для отслеживания ботов? Вот пример в PHP:

<?php
// bot check
$now = microtime(true);
// bot counter var
$botCounter = 0;
if (array_key_exists('botCheck_panicCounter', $_REQUEST))
{
  $botCounter = $_REQUEST['botCheck_panicCounter'];
}

// if this seems to be a bot
if ($botCounter > 5)
{
  die('Die()!!');
}

// if this user visited before
if (array_key_exists('botCheck_lastVisit', $_REQUEST))
{
  $lastVisit = $_SESSION['botCheck_lastVisit'];
  $diff = $now - $lastVisit;

  // if it's less than a second
  if ($diff < 1)
  {
    // increase the bot counter
    $botCounter += 1;
    // and save it
    $_REQUEST['botCheck_panicCounter'] = $botCounter;
  }
}

// set the var for future use
$_SESSION['botCheck_lastVisit'] = $now;

// ---------------
// rest of the content goes here
?>

Я не проверял на синтаксические ошибки, но Вы получаете идею.

1
ответ дан Aistina 5 May 2018 в 03:37
поделиться

Не полная фиксация, но я еще не видел его здесь.

Дорожка "хлопающие" адреса, и поднятый правовая оговорка, говоря, что BOC / объекты не будет поставлен ни в какой адрес, который не следует за Вашим TOS.

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

0
ответ дан StingyJack 5 May 2018 в 03:37
поделиться
  • 1
    ха-ха - хорошо да я don' t потребность так очень биты, но that' s хороший для знания.Спасибо! – Stefan 14 January 2014 в 16:14

Вот мое взятие. Нападите на ROI владельцев ботов, так, чтобы они вместо этого сделали законную вещь, которую Вы хотите, чтобы они сделали вместо обмана. Давайте посмотрим на него с их точки зрения. Каковы их активы? По-видимому, неограниченное количество доступных машин, IP-адресов и возможно даже большого количества людей низкой квалификации, готовых сделать глупые задачи. Что они хотят? Чтобы всегда получать специальное предложение, Вы предлагаете, прежде чем другие законные люди получают его.

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

первый шаг должен сделать Ваше понятие недвоичного файла аутентификации, которым я подразумеваю, что для любого данного пользователя Вам присвоили вероятность им, что они - живой человек или бот. Можно использовать много подсказок для создания этой вероятности, многие из которых уже были обсуждены на этом потоке: подозрительное действие уровня, IP-адреса, геолокация иностранного государства, cookie, и т.д. Мой фаворит должен просто обратить внимание на точную версию окон, которые они используют. Что еще более важно, можно дать долгосрочным клиентам ясный способ пройти проверку подлинности с сильными подсказками: путем привлечения с сайтом, создания покупок, содействия форумам, и т.д. Не требуется, что Вы делаете те вещи, но если Вы сделаете затем, то у Вас будет небольшое преимущество, когда это прибудет время для наблюдения специальных предложений.

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

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

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

Так для любого, который Вы знаете, что видели прежде (общий IP, сессия, cookie, и т.д.) у Вас есть способ выполнить каждый немного более дорогой запрос. Это означает, что мошенники захотят всегда подарить Вам Ваш самый твердый случай - совершенно новая компьютерный/браузер/IP комбинация, которую Вы никогда не видели прежде. Но путем помещения некоторой дополнительной работы в способность даже знать, есть ли у них работающий правильно бот, Вы вынуждаете их потратить впустую много этих драгоценных ресурсов. Хотя у них может действительно быть бесконечное число, генерирование их не бесплатно, и снова Вы подвозите часть стоимости их уравнения ROI. В конечном счете для них будет более прибыльным просто сделать то, что Вы хотите :)

Hope, это полезно,

Eric

1
ответ дан Eric Ries 5 May 2018 в 03:37
поделиться

Как насчет этого: Создайте форму для получения электронного письма, если новый объект в продаже, и добавьте захватывающую систему, которая будет служить тому же содержанию любому обновляющемуся меньше чем через X секунд.

Этот путь Вы выигрываете весь escenarios: Вы избавляетесь от скребков (они могут очистить свой почтовый ящик), и Вы даете шанс людям, которых привычку кодируют что-то только для покупки в сайте! Я уверен, что получил бы электронную почту в своем мобильном телефоне и вошел бы в систему, покупают что-то, если я действительно хотел.

1
ответ дан DFectuoso 5 May 2018 в 03:37
поделиться

Я не на 100% уверен, что это работало бы, по крайней мере, не без попытки.

, Но кажется, как будто это должно быть возможно, хотя технически бросив вызов, чтобы записать серверной стороне скремблер HTML/CSS, который берет в качестве его входа нормальную страницу HTML + связанные файлы, и производит более или менее пустую страницу HTML, наряду с запутываемым файлом JavaScript, который способен к восстановлению страницы. JavaScript не мог только распечатать простые узлы DOM, конечно..., но он мог выложить сложный набор наложения, абсолютно расположенных отделений и абзацев, каждый содержащий одну букву, таким образом, он выходит совершенно читаемый.

Боты не смогут считать его, если они не будут иметь, используют полный механизм визуализации и достаточно AI для восстановления то, что видел бы человек.

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

Предоставленный, пишущий такой obfuscater было бы трудным, и вероятно не стоил бы того. Но это - мысль.

0
ответ дан levand 5 May 2018 в 03:37
поделиться

В первую очередь, не пытайтесь использовать технологию для нанесения поражения технологии.

Ваши проблемы:

  1. Удобство использования сайта
  2. Список, делающий возбуждение сайта и забаву
  3. , Нагрузка на сервер вызывается сценаристами.

Ваши Цели:

  1. Поддерживают сайт в рабочем состоянии на скорости, которую не замедляют боты.
  2. Продают товар к несценариям людей.
  3. не изводят 'нормальных' пользователей ни с какими задачами завершиться, чтобы доказать, что они являются человеческими.

Цель № 1: Поддерживайте сайт в рабочем состоянии на скорости, которую не замедляют боты.

Это на самом деле довольно просто. Сделайте, чтобы кто-то еще разместил страницу. Вместо первой полосы, размещаемой на Ваших серверах, имейте Amazon S3 / Akamai размещают страницу. Большая часть страницы 'статична' во всяком случае. Повторно создавайте страницу каждые 5 минут или таким образом, более динамические объекты обновляются. (Черт, повторно создайте его каждая 1 минута, если Вы хотите). Но теперь боты не поражают Ваш сервер - они поражают CDN Akamai, который может, конечно, взять загрузку.

, Конечно, делают это для каналов RSS также. Нет никакой причины, почему некоторый другой сервис не может взять пропускную способность / хит загрузки для Вас. На связанной ноте все изображения служили Akamai, и т.д. Почему получают удар?

Цель № 2: Продайте товар к несценариям людей

, я в согласии с другими который, поскольку, которые говорят, делают его так, чтобы сценарии не давали реального преимущества. Однако сценарии являются также знаком влюбленного woot клиента, таким образом, Вы не хотите быть a*hole также.

, Таким образом, как я сказал бы, позволяют им купить, но заставить их заплатить расширенную сумму (или более предпочтительно) просто, замедляют их так, чтобы у других был шанс.

Так каждый раз, когда пользователь совершает нападки, сайт предлагают мешок дерьма на уровне 29,99$ и имеют таймер на случайной скорости, отбрасывают или повышают цену. Имейте изображение или некоторый другой индикатор, который говорит людям, если цена понизится, если они будут терпеливы.

у пользователя есть кнопка "Buy now!", которую они нажимают, когда они видят, что price/# объекты тем, что они хотят.

Пример:

Пользователь:

  • 0 секунд 29,99$ (1 объект) в Изображении говорится: "Ожидайте за более низкую цену!"
  • 7 секунд 31,99$ (1 объект) в Изображении говорится: "Ожидайте за более низкую цену!"
  • 13 секунд 27,99$ (1 объект) в Изображении говорится: "Держите пари, что можно добиться большего успеха!"
  • 16 секунд 1,99$ (0 объектов) в Изображении говорится: "Вы были бы гаек, чтобы ни за что заплатить нам что-то!"
  • 21 секунда 4,99$ (два объекта) в Изображении говорится: "Улучшение Thats!"
  • 24 секунды 4,99$ (пробует itemos) в Изображении говорится: "Это не добирается немного лучше, чем это!"
  • 26 секунд 8,99$ (2 объекта) в Изображении говорится: "Держите пари, что можно добиться большего успеха!"

повторение....

на постепенно напрягающемся цикле, который удлинит время корректные "4,99$ (пробует itemos)" отображен

, Если хиты бота обновляют затем перезапуски цикла. Если пользователь, пропускает и выбирает несправедливость # объектов / цена - решает, хотите ли Вы позволить им купить по той цене.

, Если они "сорят деньгами", например, они платят 24,99$ за 3 объекта, и woot только собирался заряжать их, 4,99$ для 3 объектов затем включают купон за 20$ от их следующей покупки woot.

Цель № 3: не изводите 'нормальных' пользователей ни с какими задачами завершиться, чтобы доказать, что они являются человеческими.

Вы делаете логическую ошибку здесь. Вы предполагаете, что любой Тест Тьюринга ( http://en.wikipedia.org/wiki/Turing_test) должен быть раздражающим. Это не верно!

Вот некоторые идеи:

  1. Создают игру. Вознаграждение за то, что играли в игру - 5$ от купона на следующем порядке.
  2. Разделяют на пары 2 случайных пользователей и сделали, чтобы они болтали друг с другом. Каждому пользователю говорят ответить на 2 вопроса другому пользователю: "Спросите, какой цвет является Вашими волосами?" и, "Что Вы собираетесь сделать в следующие выходные?" Некоторые пользователи соединяются с woot случайным генератором предложения. Каждого пользователя затем спрашивают, является ли другой пользователь человеком. Если пользователь говорит, что woot случайный генератор предложения является человеческим, затем отвечают "Нет, что я не и могу быть Вами, с Марса также. Вы хотите попробовать еще раз?"
  3. Простая флеш-игра, которая требует, чтобы пользователь маневрировал через курс препятствия для получения дисконтного купона.
  4. Спрашивают, в каком городе они находятся. Реверс геокодирует IP-адрес, чтобы видеть, ли они близко к тому, чтобы быть корректным.
  5. Задают глупые вопросы - "Вы думаете, что John McCain является великим президентом?" "Чье изображение находится на Ваших водительских правах?"

Только спрашивают 3 раза, так как все, что Вы действительно хотите сделать, замедляют сценарий kidees.

1
ответ дан Pat 5 May 2018 в 03:37
поделиться

Давайте перевернем проблему с ног на голову - у Вас есть боты, покупая материал, который Вы хотите, чтобы настоящие люди купили, как насчет того, чтобы делать реальный шанс, что боты купят материал, который Вы не делаете , хотят настоящие люди купить.

Имеют случайный шанс для некоторых не отображенный HTML, что боты очистки будут думать, реальная ситуация, но настоящие люди не будут видеть (и не забывайте, что среди настоящих людей слепые, поэтому рассмотрите программы для чтения с экрана и т.д. также), и это перемещается до покупки что-то непомерно дорогое (или не делает фактическую покупку, но заставляет детали оплаты для Вас ставить banlist).

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

2
ответ дан Cebjyre 5 May 2018 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: