Rikaido 你到底有多懂我?
· 2 min read
一早醒來
今天醒來,發現大家限動都在發這個連結 RIKAIDO.ME 這是一個測驗遊戲,大家可以點進去看看
總之就是你先答完題目,再給你朋友填,讓他猜你的答案是什麼,分數越高就越懂你的一個遊戲
坐車
下午坐車時,我就在想這遊戲可以怎麼做到滿分?
就做兩次啊!呵呵呵 然後我又睡了
後來實在太無聊,開電腦點了某一位朋友的測驗連結,點網頁顯示器 想說看一下後台,結果發現了這遊戲居然 API沒加密!這是資安低級錯誤欸!
答案
直接和大家說哪裡看得到答案
我是用safari瀏覽器,如果你用其他瀏覽器可能會不太相同,但找一找應該就會看到了
首先
- 打開左上角「開發」選單中的「顯示網頁檢閱器」
- 開發者面板跳出來後,找到「網路」接著按 command + R 重整頁面
- 找到 documents:batchGet 點進去
- 嗯 然後你就會看到答案了 AABBABABAB這東西就是答案
解答怎麼會洩漏?
API沒加密
API這東西就是網頁的前端、後端之間的橋樑,就你點擊連結時,前端也就是你手機或電腦,會向API發請求:「給我這份測驗的資料」
然後問題就來了!
API直接把這份測驗的所有欄位,題目、選項、創作者選好的解答 ,一並打包成JSON資料,丟給前端
雖然只要「前端畫面不把答案顯示在螢幕,使用者就看不到」,but查看API回傳的原始封包,解答就一覽無遺了
前端信任陷阱
「永遠別信任前端」
這是網路安全中的經典觀念
畢竟前端(瀏覽器、app)是運行在使用者的設備上,使用者對自己的手機、電腦,擁有最高權限,只要運用 開發者工具或抓包工具,裡面藏的所有原始碼都看得到
正確做法
- API再回傳資料時,應該過濾答案欄位,只回傳題目和選項
- 使用者答完後,前端把「使用者選了什麼」傳給後端,伺服器在後端比對資料庫後,只回傳「對/錯」「得分」
這樣 真正答案 只會留在後台,前端無法偷看