什么可能会打乱我在 JavaScript 中构造的查询字符串参数?

What might be shufflling my query string parameters constructed in JavaScript?

所以这可能是一个很长的机会,但我完全不知道是什么导致了这个问题:

我正在提供一个客户端 JavaScript,它解析页面上嵌入它的某些参数,使用这些参数构建一个 URL 并使用该 [=46= 注入一个 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 - 但是查看源代码我看不到任何潜在的此类错误,没有任何东西是对未对键(未弄乱)完成的值进行处理。

有没有人遇到过类似的事情?这是一些奇怪的浏览器扩展吗?这是我的脚本与另一个扩展原型的库的冲突吗?这是恶意软件吗?这是我完全不知道的事情吗?如果有任何提示,我将不胜感激,因为我真的一无所知,这真的让我发疯。

编辑:我刚刚发现我们的另一个 public 面向服务目前正在被名为 "Burp Suite" 的某物探测。看看他们的网站,我发现他们有一个名为 "Payload fuzzing" 的工具,它似乎可以完成此处描述的大部分工作:https://portswigger.net/burp/help/intruder_gettingstarted.html or here: https://portswigger.net/burp/help/intruder_using.html#uses_enumerating - 整个工具对我来说闻起来有点腥,所以我可能是值得进一步研究的东西。还有其他人听说过这个工具集吗?

在我看来,这种行为根源于您的代码或查询字符串代码的可能性很小。鉴于可以自由更改查询字符串值,我怀疑这就是正在发生的事情 - 请记住,这是您请求的 0.2%。

我要检查几件事。您是否知道这些请求是来自其他网站、您自己的网站还是直接提出的?您是否知道任何源 IP 是否对应于已知的机器人或网络爬虫?这些请求是来自各种来源还是一小部分重复访问者?

机器人或网络爬虫可能 "lightly probing your site" 或正在测试重复页面或误导性参数。

从这一点上分析不多,因为您正在寻找提示;这更像是一个长评论而不是一个答案。

客户端浏览器(或机器)或您的网络服务器上的恶意软件;或者未知的爬虫可能导致这种情况,这是不太可能的。在我看来,您的应用程序似乎受到了攻击。

让我们看看;

  • 真实示例(在评论中)显示 128 位十六进制 访问密钥 正在改组。 (accessKey 参数的值)
  • 只有值会被打乱,键不会。
  • 你说,请求来自特定用户
  • 你说,请求来自特定的浏览器客户端(Firefox 和 Safari)。

什么check/do;

  • 检查您的日志系统是否正常工作。如果您使用的是第三方可配置记录器,这可能会把事情搞砸。 (example)
  • Reproduce:取完全相同的一组参数;使用相同版本的浏览器,看看结果是否相同。如果是这样,则可能是浏览器版本问题,这种可能性很小。
  • 检查是否有 其他 Firefox 和 Safari 用户(相同版本)NOT体验这个。
  • 既然你说的只是一小部分请求,请检查相应的请求是否接踵而至。 (同类请求不到一秒?)
  • 尝试追踪请求的来源。它们是否来自您怀疑的来源?您能否将来自不同请求的信息相互关联?多个IP组成一个子网?同一个IP不同账号?同一个账号短时间内使用不同的IP?
  • apache-scalp, mod_sec, lorg 到 check/analyze 大日志文件等工具来提取可能的攻击。
  • 您还可以使用提到的一些技术 here 手动发现或阻止可疑请求。

有些机器人抓取您的网站,这是很正常的。如果你不想让他加载你的服务器,就屏蔽请求IP。

正如我在这里提到的 有一个特定版本(至少 1.0.37)的 Firefox 附加组件 "Cliqz" 具有内置的反跟踪功能。

我是 Tomas,我是 CLIQZ 的一名软件工程师。

我们是一家德国初创公司,正在将搜索和创新的隐私功能集成到浏览器中。这确实是我们的反跟踪功能的结果。 reddit and in 上也有人提出了类似的问题。两个帖子都已经回答了,所以我在这里只引用相同的答案:

CLIQZ Anti Tracking is not designed to block tracking in general, but rather only the tracking of individual users — which we consider a violation of our users’ privacy, and therefore inappropriate. Unlike other anti-tracking systems, ours doesn’t block the signals completely; thus, website owners are able to get data for legitimate uses, such as counting visits.

To prevent the identification of users (e.g. by using JavaScript hashes), CLIQZ Anti Tracking does in fact permute strings. . Whenever a new tracker shows up in our data, our system initially treats it as a user-identifying tracker and changes the string to preventively protect our users. Our system uses so called k-anonymity techniques. If it sees the same string for an event with multiple users showing up independently over the course of several days, it puts it on a whitelist of legitimate, non-identifying trackers. Once a tracker is whitelisted, it remains unmodified and website-owners see the original string. In other words, CLIQZ Anti Tracking limits the functionality of legitimate trackers only temporarily. As soon as it becomes clear that a tracker doesn’t violate our user’s privacy, everything works as usual. Privacy is extremely important to us and we believe this technology is necessary to protect our users from snooping.

希望对您有所帮助。