Итак, это может быть длинный, длинный, но я полностью завис над тем, что может вызвать эту проблему:
Я поставляю 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 - весь инструмент пахнет полузадачей для меня, поэтому мне это может быть интересно изучить дальше. Кто-нибудь еще слышал об этом наборе инструментов?