更多全球網絡安全資訊盡在E安全官網www.easyaq.com
最近朋友圈很火的左右腦年齡測試小程序,參與測試的人數顯示有2390萬在測,不知道這個數據是實時的,還是累計的,不過也足以說明大家對類似測試的興趣以及微信朋友圈的傳播速度。
寫這篇文章算是幫該小程序正個名吧,首先測試之後有兩個結論:
1,該小程序左右腦年齡測試的結果並不是隨機給出的;
2,一些大v公眾號的文章應該是實習生寫的,應該是沒有進行測試就得出了「隨機給出測試結果」這個結論。
在朋友圈看到很多人都在用這個小程序測試,禁不住好奇也測試了一把,測試完之後感覺還挺準確的,發完朋友圈之後,在幾個微信群裡就看到了一段代碼的截圖,其中有段標紅的關鍵代碼是:
var ansrandom2=Math.ceil(Math.random()*10)
其中Math.ceil()函數是執行向上捨入,即它總是將數值向上捨入為最接近的整數;Math.random()函數是取從0至1之間的隨機數,乘10以後就是取0到10之間的隨機數。相關的2張截圖:
回到正題,看完微信群中發的代碼截圖之後,沒有看上下文,就覺得這個小程序測試結果應該是隨機生成的,然後就發了個朋友圈吐槽被忽悠這個小程序給套路了,沒想到的是現在要寫這篇文章打自己的臉。之後看到很多大v、小v公眾號也發了文章質疑這個微信小程序的測試結果是隨機生成的,比如差評君、雲頭條。
仔細看截圖中的代碼發現ansrandom2參數值的代碼片段前面有注釋「顯示底部廣告」,並且在後段「輸出測試結果「代碼段並沒有看到這個參數值跟結果的生成有直接關係,其中有關係的一個參數值是ansrandom,兩個參數值是差一個數字2的。雖然截圖中代碼片段不全,根據注釋等差不多就能知道很多吐槽文章中說該小程序測試結果是隨機生成的,顯然是錯誤的。可能很多寫文章的人也沒有進行測試,照抄加工寫出的一篇文章吧,連代碼片段截圖都是微信群及朋友圈流傳的那2張。
既然發現結果有可能不是隨機生成的,實在忍不住就找了個在線的網站測試了一下,抓包並沒有發現相關的js代碼片段,結果生成也不是通過前端來處理判斷的,抓包到的關鍵請求如下:
POST /api/quiz/answer HTTP/1.1Host: cn.qinpiam.cnquiz_id=276&user_choice_list=%7B%221843%22%3A%7B%22id%22%3A5549%7D%2C%221844%22%3A%7B%22id%22%3A5551%7D%2C%221845%22%3A%7B%22id%22%3A5555%7D%2C%221846%22%3A%7B%22id%22%3A5557%7D%2C%221847%22%3A%7B%22id%22%3A5561%7D%2C%221848%22%3A%7B%22id%22%3A5565%7D%2C%221849%22%3A%7B%22id%22%3A5567%7D%2C%221850%22%3A%7B%22id%22%3A5571%7D%2C%221851%22%3A%7B%22id%22%3A5575%7D%7D&user_id=&csrfmiddlewaretoken=XeeJznpgdm8Q4GQGU8SAKeEJczFRC6iE&fr_token=
其中user_choice_list參數的值就是用戶選擇答案,該請求提交到服務端之後會獲取如下請求回顯:
{"result_wait": 3, "user_id": "anonymous:c1491c60-1eb3-44c8-b626-690aa7471d5c", "user_upload_img_url": "", "fr_token": "k8rXiLH8ZrWk2EOk", "hashed_ids": "OoLqdPzrsKzXal4G", "answer_id": 3068}
如圖:
注意請求回顯中的兩個標紅參數值,最終生成的結果查看url是由上圖中標紅的兩個欄位參數值拼接而成的,具體url:
http://cn.qinpiam.cn/f/PGEjb27Ofp2MdVNW/r/juVnk1szc7aTx2jo
user_choice_list的值不變,對該請求進行多次重放,發現生成的結果卻是不一樣的:
{"result_wait": 3, "user_id": "anonymous:c1491c60-1eb3-44c8-b626-690aa7471d5c", "user_upload_img_url": "", "fr_token": "k8rXiLH8ZrWk2EOk", "hashed_ids": "OoLqdPzrsKzXal4G", "answer_id": 3068}
{"result_wait": 3, "user_id": "anonymous:3ba1447a-d090-4161-a1a9-f9f89e3dcc72", "user_upload_img_url": "", "fr_token": "9OEKT70uujxAUR5Y", "hashed_ids": "6x01dNYpH0kybX7W", "answer_id": 3066}
{"result_wait": 3, "user_id": "anonymous:acfc6743-6e7a-46e8-9a04-bc2531105aa5", "user_upload_img_url": "", "fr_token": "hGYUipEqzoyFSSCO", "hashed_ids": "P3RBe3yOupgybLJr", "answer_id": 3122}
可以得出結論:該在線網站測試結果確實是隨機生成的,結果並不是在前端代碼中驗證隨機生成的,而是從服務端獲取的。僅靠那段流傳的js代碼片段來吐槽小程序的結果,顯然是有毛病的。一些公眾號測試用的在線網站跟我測試用的在線網站應該是一樣的,百度結果能搜到的就那麼幾個,並且得出的左右腦年齡結果截圖跟我這篇文章中的截圖是一樣的,特點是有「YES」、「NO」這兩個按鈕,跟微信小程序中測試結果圖是有明顯區別的。差評君文章中用到的截圖也是通過在線網站測試得出的結果,但是經過我的測試確實沒有發現前文中的js代碼片段。
再看看微信中的小程序到底是如何生成結果的,雖然微信屏蔽了該小程序的掃碼入口,但是可以通過搜索帳號主體」實用心理測試大全「來進入,如圖:
費了九牛二虎之力,成功抓到了小程序的請求數據包,涉及到的幾個請求如下:
抓到的請求中用的域名跟"實用心理測試大全"這個小程序的帳號主體介紹中的域名一致,如圖:
抓到的該小程序涉及到的請求中有如下一個:
https://api10.menglechong.net/data/1249.json
訪問可以查看到json文件的代碼:
從上面兩張圖中可以看到,每道題目的答案都有對應的一個store分數,最終根據九道題目得到的分數總和的範圍來得出結果和對應的分享用的圖片,一共有6個結果。
沒有抓到微信小程序獲取結果的請求,不知道是不是獲取結果請求沒有走http、https的原因,但是可以得出一個結論:該左右腦年齡測試小程序的測試結果並不是隨機的;該小程序的代碼中並沒有流傳的兩張圖片中的代碼段。小程序的測試結果年齡數字是寫死到json文件中的,而前文中多個公眾號引用的那個代碼片段圖中年齡是獲取的result[index].name.one的參數值,說明那張前端代碼截圖跟該微信小程序是沒有關係的。
根據這次的事情,吸取的經驗教訓就是不要輕易下結論,很容易導致自己打自己的臉,另外就是大v們寫的文章也不一定是權威的。
本文轉自公眾號:聚沙安全黑板報
▼點擊「閱讀原文」 查看更多精彩內容