Что может быть shufflling мои параметры строки запроса, построенные в JavaScript?

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

Я поставляю JavaScript на стороне клиента, который анализирует определенные параметры на странице, где он встроен, использует эти параметры для создания URL-адреса и вставляет iframe, используя этот URL-адрес, на страницу, например:

var queryParams = {
  param: 'foo'
  , other: 'bar'
};

превращается в:

<iframe src="http://example.net/iframes/123?param=foo&other=bar"></iframe>

Это работает отлично, я доставляю около 1,5 миллионов запросов в день. Тем не менее, я недавно заметил, что примерно в 3.000 случаях в день значения параметров запроса перетасовываются, поэтому sth вроде этого запрашивается:

<iframe src="http://example.net/iframes/123?param=ofo&other=rba"></iframe>

Судя по журналам, это привязано к определенным пользователям, и смешение символов будет происходить заново в каждом запросе, поэтому я могу видеть такие последовательности, когда пользователь просматривает сайт с несколькими страницами с помощью script:

108.161.183.122 - - [14/Sep/2015:15:18:51 +0000] "GET /iframe/ogequl093iwsfr8n?param=3a1bc2 HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=1" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
108.161.183.122 - - [14/Sep/2015:15:19:07 +0000] "GET /iframe/ogequl093iwsfr8n?param=a21b3c HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=2" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
108.161.183.122 - - [14/Sep/2015:15:19:29 +0000] "GET /iframe/ogequl093iwsfr8n?param=ba132c HTTP/1.0" 401 11601 "http://www.example.net/gallery?page=3" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"

401 происходит специально, так как сервер ожидает param=abc123.

Я также заметил, что большинство ошибок происходит в Firefox и Safari, а Google Chrome не запрашивает ни одного ошибочного URL.

Библиотека, которую я использую для превращения объекта в строку запроса: query-string - но, глядя на исходный код, я не вижу никакого потенциала для ошибки такого рода там нет ничего, что было бы сделано для значений, которые не выполняются с ключами (которые не испорчены).

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

РЕДАКТИРОВАТЬ. Я только что обнаружил, что в настоящее время еще одна из наших служб, ориентированных на общественность, исследуется по имени "Burp Suite". Взглянув на их веб-сайт, я вижу, что у них есть инструмент под названием "Полезная нагрузка", который, как представляется, делает в значительной степени то, что описано здесь: https://portswigger.net/burp/help/intruder_gettingstarted.html или здесь: https://portswigger.net/burp/help/intruder_using.html#uses_enumerating - весь инструмент пахнет полузадачей для меня, поэтому мне это может быть интересно изучить дальше. Кто-нибудь еще слышал об этом наборе инструментов?

Ответы

Ответ 1

Как я уже упоминал здесь Перестановка событий в Google Analytics существует определенная версия (по крайней мере 1.0.37) надстройки Firefox "Cliqz", в которой встроена функция защиты от слежения.

Ответ 2

Не так много анализировать с этого момента, и так как вы ищете подсказки; это скорее длинный комментарий, чем ответ.

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

Посмотрим,

  • Настоящий пример (в комментариях) показывает, что 128-битные шестнадцатеричные ключи доступа перетасовываются. (значения accessKey param)
  • Только значения перетасовываются, а не клавиши.
  • Вы говорите, что запросы поступают от конкретных пользователей.
  • Вы говорите, что запросы поступают от конкретных клиентов браузера (Firefox и Safari).

Что проверить/сделать;

  • Проверьте правильность работы вашей системы ведения журнала. Если вы используете сторонний, настраиваемый регистратор, это может испортить ситуацию. (пример)
  • Воспроизведение: возьмите тот же самый точный набор параметров; используйте ту же версию браузера (ов) и посмотрите, совпадают ли результаты. Если это так, это может быть проблема с браузером, что маловероятно.
  • Проверьте, есть ли другие Firefox и Safari пользователи (с теми же версиями), которые выполняют НЕ.
  • Поскольку вы говорите, что это всего лишь небольшой процент запросов, проверьте, соответствуют ли соответствующие запросы сразу после другого. (Один и тот же запрос меньше чем за секунду?)
  • Попробуйте отслеживать источник запросов. Они исходят от источника, которого вы подозреваете? Можете ли вы связать информацию из разных запросов друг с другом? Несколько IP-адресов образуют подсеть? Тот же IP-адрес с использованием разных учетных записей? Такая же учетная запись использует разные IP-адреса за короткий промежуток времени?
  • Существуют такие инструменты, как apache-scalp, mod_sec, lorg, чтобы проверить/проанализировать большие файлы журналов, чтобы извлечь возможные атаки.
  • Вы также можете использовать некоторые из методов, упомянутых здесь, чтобы вручную выявлять или блокировать подозрительные запросы.

Ответ 3

Я Томас, и я инженер-программист в CLIQZ.

Мы - немецкий стартап, который интегрирует поисковые и инновационные функции конфиденциальности в браузеры. Это действительно результат нашей функции Anti-Tracking. Аналогичный вопрос также был задан в reddit и в fooobar.com/questions/333807/..., На обоих постах уже ответили, поэтому я просто процитирую здесь один и тот же ответ:

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

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

Надеюсь, это поможет.

Ответ 4

Мне кажется маловероятным, что это поведение имеет корни в вашем или коде строки запроса. Учитывая, что значения строки запроса могут быть свободно изменены, я подозреваю, что это то, что происходит - не забывайте, что это 0,2% ваших запросов.

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

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

Ответ 5

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