javascript - 什么可能在 JavaScript 中改组我的查询字符串参数构造函数?

标签 javascript firefox safari query-string browser-extension

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

我正在提供一个客户端 JavaScript,它解析嵌入它的页面上的某些参数,使用这些参数构建一个 URL 并将使用该 URL 的 iframe 注入(inject)页面,如:

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 - 但是查看源代码,我看不到任何可能存在此类错误的可能性,没有对键(没有弄乱)未完成的值进行任何操作。

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

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

最佳答案

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

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

让我们看看;

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

检查/做什么;

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

关于javascript - 什么可能在 JavaScript 中改组我的查询字符串参数构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32572264/

相关文章:

javascript - 当浏览器失去焦点时,Chrome(也许是 Safari?)在输入字段上触发 "blur"两次

iphone - 在 iOS 应用程序中使用 OpenID 登录时,使用 Safari 登录然后重定向回应用程序是否更好?

javascript - 文本区域中空格后@的正则表达式

javascript - 如何知道 Canvas 是普通 Canvas 还是webgl Canvas

java - 为什么我的 Selenium 测试代码单步运行成功,但使用 Run 时却失败了?

javascript - 火狐插件 : quit-application observer not working

css - 带有边框半径和 overflow hidden 的变换转换在 Safari 中不起作用

javascript - AWS Lambda 函数未写入 DynamoDB

javascript - Angular 2 多个模块,名称仅在外壳上不同

javascript - 如何从事件选项卡(在热键之后)获取后台脚本中的选定文本?