Методы сокращения сбора данных из услуг AJAX/JSON

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

Мне кажется, что проблема не так сложна, если вы сказали, что клиент Flash использует данные. Затем вы можете отправить зашифрованные данные клиенту, который будет знать, как его расшифровать. Тот же метод кажется невозможным с AJAX, хотя из-за открытой природы источника Javascript.

Кто-нибудь реализовал здесь умную технику?

Независимо от метода, он все равно должен позволить подлинной функции AJAX потреблять данные.

Заметьте, что я действительно не говорю о защите "чувствительной" информации здесь, утечка нечетной записи - это не проблема. Скорее, я думаю о прекращении ситуации, когда вся БД взлетели ботами (либо в одно время, либо постепенно со временем).

Спасибо.

Ответ 1

Во-первых, я хотел бы прояснить это:

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

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

Если данные действительно имеют значение, о котором вы думаете, вы можете рассчитывать на выше.

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

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

Ответ 2

Первое, что не позволяет ботам украсть ваши данные, не является технологическим, это законно. Во-первых, убедитесь, что у вас есть правильный язык на вашем сайте "Условия использования", что то, что вы пытаетесь предотвратить, на самом деле запрещено и защищено с юридической точки зрения. Во-вторых, убедитесь, что вы разрабатываете свою техническую стратегию с учетом юридических вопросов. Например, в США, если вы поместили данные за барьер аутентификации, и злоумышленник его украл, вероятно, это нарушение закона DMCA. В-третьих, найдите адвоката, который может посоветовать вам по вопросам IP и DMCA... приятных людей на StackOverflow недостаточно.: -)

Теперь о технологии:

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

Этот подход, конечно, уязвим для сложных ботов, которые автоматически подписывают новых "пользователей", но с достаточно хорошей реализацией CAPTCHA довольно сложно построить такого типа бота. (см. раздел "обход" в http://en.wikipedia.org/wiki/CAPTCHA)

Если вы пытаетесь защитить общедоступные данные (без проверки подлинности), ваши варианты гораздо более ограничены. Как отмечалось в других ответах, вы можете использовать ограничения на основе IP-адресов (и запускать крупных корпоративных пользователей-прокси), но сложные злоумышленники могут обойти это, распределив нагрузку. Там также похоже сложное программное обеспечение, которое отслеживает такие вещи, как запрос времени, шаблоны запросов и т.д., И пытается обнаружить ботов. Покерные сайты, например, тратят на это много времени. Но не ожидайте, что эти системы будут дешевыми. Один из простых вещей, который вы можете сделать, это открыть свои веб-журналы (например, используя Splunk) и найти верхние N IP-адресов, попавших на ваш сайт, и затем выполните обратный IP-поиск. Некоторые из них будут законными корпоративными или прокси-провайдерами. Но если вы признаете доменное имя compeitor среди списка, вы можете заблокировать свой домен или следить за своими адвокатами.

В дополнение к защите перед кражей вы также можете подумать о вставке "медового горшка": преднамеренно подделать информацию, которую вы можете отслеживать позже. Так, например, производители карт ловят плагинизм: они вставляют поддельную улицу в свои карты и видят, какие другие карты показывают одну и ту же фальшивую улицу. Хотя это не мешает решительным людям высасывать все ваши данные, это позволяет вам позже узнать, кто повторно использует ваши данные. Это можно сделать, вставив уникальные текстовые строки в ваш текстовый вывод, а затем поискать эти строки в Google позже (при условии, что ваши данные будут повторно использоваться на другом общедоступном веб-сайте). Если ваши данные являются HTML или изображениями, вы можете включить изображение, которое указывает на ваш сайт, и вы можете отслеживать, кто его загружает, и искать шаблоны, которые вы можете использовать, чтобы разрушить freeloaders.

Обратите внимание, что метод шифрования javascript, отмеченный в одном из других ответов, не будет работать для сеансов без аутентификации - злоумышленник может просто загрузить javascript и запустить его точно так же, как обычный браузер. Мораль истории: общедоступные данные по существу незаменимы. Если вы хотите сохранить защиту данных, поставьте ее за барьер аутентификации.

Это очевидно, но если ваши данные доступны для поиска в поисковых системах, вам также понадобится решение, отличное от AJAX (Google не будет читать ваши данные ajax!), и вы захотите отметить эти страницы NOARCHIVE, чтобы ваши данные не отображались в кеше Google. Вероятно, вам также понадобится белый список поисковых запросов для поисковых роботов, которые вы разрешаете на своих страницах с поисковым движком (вы можете работать с Google, Bing, Yahoo и т.д., Чтобы получить их), в противном случае злонамеренные боты могли бы просто выдать себя за руки Google и получить ваши данные.

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

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

Ответ 3

Если у вас есть внутреннее поле Memcached, вы можете рассмотреть возможность использования метода, в котором вы создаете запись для каждого IP-адреса, который попадает на ваш сервер с истечением часа. Затем увеличивайте это значение каждый раз, когда IP попадает на конечную точку AJAX. Если значение превышает определенный порог, обжарьте соединение. Если значение истекает в Memcached, вы знаете, что он не "откидывается".

Ответ 4

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

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

Я с kdgergory, хотя, похоже, ваши данные слишком открыты.

Ответ 5

Некоторые методы перечислены в Дальнейшие мысли о препятствиях на скрипинге экрана.

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

Блог Incredibill дает полезные советы, списки диапазонов User-agents/IP для блокировки и т.д.

Ответ 6

Вот несколько предложений:

  • Выданные жетоны, необходимые для выкупа вместе с каждым запросом AJAX. Истекает токены.
  • Отслеживать, сколько запросов поступает от каждого клиента, и чрезмерно использовать дросселирование на основе ожидаемого нормального использования вашего сайта.
  • Ищите шаблоны в использовании, такие как последовательные запросы, всплески в запросах или запросы, которые происходят быстрее, чем человек может вести.
  • Проверка пользовательских агентов. Многие боты не полностью реплицируют информацию о пользовательском агенте в браузере, и вы можете исключить программную очистку своих данных с помощью этого метода.
  • Измените внешний интерфейс вашего веб-сайта, чтобы перенаправить на captcha (или какой-либо другой механизм проверки человека) после превышения порога запроса.
  • Измените свою логику, чтобы данные respsonse были возвращены несколькими способами, чтобы усложнить код, необходимый для синтаксического анализа.
  • Настройте свой javascript на стороне клиента.
  • Блокировать IP-адреса оскорбительных клиентов.

Ответ 7

Боты обычно не анализируют Javascript, поэтому ваш аякс-код не будет немедленно выполнен. И если они даже делают, боты обычно не поддерживают сеансы/файлы cookie. Зная это, вы можете отклонить запрос, если он вызывается без действительного сеанса/файла cookie (который, очевидно, задан на стороне сервера заранее по запросу на родительской странице).

Это не защищает вас от опасности для человека. Самый безопасный способ - ограничить доступ пользователей с помощью логина/пароля. Если это не ваше намерение, ну, тогда вам нужно жить с тем, что это приложение public. Конечно, вы можете сканировать журналы и черные списки чернил с IP-адресами и useragents, но это экстремально.