这可能是一个很长很大的挑战,但我完全被困扰住了,不知道是什么原因导致了这个问题:
我正在提供客户端JavaScript代码,在嵌入它的页面上解析特定参数,使用这些参数构造一个URL,并将使用该URL插入一个iframe。
var queryParams = {
param: 'foo'
, other: 'bar'
};
被转换为:
<iframe src="http://example.net/iframes/123?param=foo&other=bar"></iframe>
我的系统目前运行得非常好,每天处理大约150万个请求。但是我最近发现,在每天的大约3,000个案例中,查询参数的值会被打乱,因此会请求类似于这样的内容:
<iframe src="http://example.net/iframes/123?param=ofo&other=rba"></iframe>
从日志来看,这与特定用户有关,而每次请求时字符混淆都会重新发生,因此当用户使用脚本浏览具有多个页面的网站时,我可以看到像这样的序列:
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 - 但是查看源代码后,我没有发现任何可能导致此类错误的问题,对值做的任何事情都对键(未被搞砸的键)进行了处理。
有人遇到过类似的情况吗?这是一种奇怪的浏览器扩展程序吗?这是我的脚本与另一个扩展原型的库冲突吗?这是恶意软件吗?这是我完全不知道的东西吗?如果有任何提示,我会非常感激,因为我真的很无助,这让我很疯狂。
编辑:我刚刚发现我们的另一个公共服务正在被称为“Burp Suite”的工具探测。看一下他们的网站,我看到他们有一个名为“Payload fuzzing”的工具,似乎可以做到这里描述的事情:https://portswigger.net/burp/help/intruder_gettingstarted.html 或这里:https://portswigger.net/burp/help/intruder_using.html#uses_enumerating - 整个工具对我来说有点可疑,所以我认为这可能是值得进一步调查的事情。有其他人听说过这个工具集吗?
acdeeaa9c89ef9b63cdf62810c25d32c
,在请求iframed文档时会被洗牌成2a0edd3a6f93ae2c21cc5b9c86dc8e9f
。请参见此fiddle:http://jsfiddle.net/tvjzsvnq/,以证明它是相同的一组字符。 - m90