
自 2015 年 9 月 9 日以來,我們觀察到透過 JavaScript 發送到我們系統的資料存在一些奇怪的行為。
當查詢字串發送到我們的伺服器時,問題就會出現。取得請求中包含的參數的某些值被打亂。
例如,參數“foo=bar”取得“foo=abr”或“foo=rab”。這意味著數據仍然可用,但字元的順序不再正確。這只會發生在長度超過 8 個字元的參數上。
我們根據查詢字串的 jenkins 雜湊計算校驗和。由於該字串只有 6 個字元長,因此該校驗和可以正確傳輸。計算校驗和後,GET 請求立即發送到我們的系統。這就是為什麼問題不應該出現在 javascript 中。
分析我們伺服器的存取日誌表明,參數在收到時已經被打亂了。
到目前為止,我們只能在 Mozilla Firefox 使用者代理程式與 Microsoft Windows 作業系統結合使用時觀察到此問題。昨天的錯誤請求範例顯示了以下用戶代理:
- Mozilla/5.0(Windows NT 10.0;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 10.0;WOW64;rv:38.0) Gecko/20100101 Firefox/38.0
- Mozilla/5.0(Windows NT 10.0;WOW64;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 5.1;rv:39.0) Gecko/20100101 Firefox/39.0
- Mozilla/5.0(Windows NT 5.1;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 6.0;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 6.0;WOW64;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 6.1;rv:39.0) Gecko/20100101 Firefox/39.0
- Mozilla/5.0(Windows NT 6.1;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:26.0) Gecko/20100101 Firefox/26.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:32.0) Gecko/20100101 Firefox/32.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:33.0) Gecko/20100101 Firefox/33.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:34.0) Gecko/20100101 Firefox/34.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:38.0) Gecko/20100101 Firefox/38.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:39.0) Gecko/20100101 Firefox/39.0
- Mozilla/5.0(Windows NT 6.1;WOW64;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 6.2;WOW64;rv:40.0) Gecko/20100101 Firefox/40.0
- Mozilla/5.0(Windows NT 6.3;WOW64;rv:38.0) Gecko/20100101 Firefox/38.0
- Mozilla/5.0(Windows NT 6.3;WOW64;rv:40.0) Gecko/20100101 Firefox/40.0
這些請求不太可能是任何形式的攻擊,因為這些請求來自廣泛的 IP 位址,並且佔總請求的比例非常低(低於 0.1%)。客戶的行為似乎也很正常。
有一個 reddit 帖子(https://redd.it/3lxg26)和 stackoverflow 上的貼文(https://stackoverflow.com/questions/32572264/what-might-be-shufflling-my-query-string-parameters-constructed-in-javascript)描述一個類似的問題。
有人對這個問題有什麼建議嗎?或在他們的應用程式中遇到一些類似的影響?