假設現在一個情境
物聯網裝置為Arduino+wifi模組+溫度感測器,
透過http存資料到資料庫。
請問從物聯網裝置到http這段,如何安全傳輸?
例如對以下網址進行HTTP GET,由addData.php
存資料
http://example.com/addData.php?temp=15.3
請問如何對來源做驗證?如何判斷是公司出去的產品,是像web應用一樣檢查token嗎?這樣是否在物聯網裝置內要時不時地去要token?
我知道web的session、Authentication。但這些都是有"人為"操作時會有的,例如登入動作。
但物聯網裝置應該是寫在程式內自動設定處理這些問題,所以不會有"人為"的操作,若寫死取得token的方法在物聯網裝置內,相當於原碼流出就GG了?
以上的都是自己想像的世界,懇請有經驗的各位教導相關知識。
你可以參考這篇論文
內容是關於IOT的認證機制
裡面第七頁到第八頁有講到不同層的驗證架構與方式,可以慢慢研究
https://www.mdpi.com/1424-8220/19/5/1141/pdf
基本會先檢查一下來源的標頭檔是否有存在可供辨識的參數。
在無可供辨識變數的情況下。
就只剩下ip判斷了。
提供給你參考。
有些產品會生成 Token
但也不是都有,
像是小米石頭掃地機器人就有 Token
,
如果擔心 Token
被攔截也可以加上 SSL
連線,
其實我也想知道物聯網這個部分還有什麼方法可以防範,
但目前看起來 DIY
的 Geek
們好像也只有在區網跑,
所以大多都沒有做特別的防護。
加上SSL連線防攔截是沒問題,但若真的有心人士(且很高端)逆向出程式碼,Token的產生函數可能就會流出?
讓Token有時效性,過一段時間後IOT從Server那邊重新取得
就算拿掉Token產生的函數也沒用,只有在Server端紀錄有效的Token才能存取資料
我覺得很高端的問題應該可以忽略,只要能夠防護住大部分就算成功了,硬體只要賣出去都會遇到這個問題,就像 Dongle
還沒有看過完美不被破解的。
通靈亡:
拿到Token產生的函數(跟server拿token的步驟與所需資訊)後,不是就可以偽造成IOT裝置的角色,去跟server拿token了嗎?這樣拿到的token應該也是有效的?
QQBoxy:
你說的情況我可以理解。
所以,不能每個人都可以跟Server拿Token
可以使用OpenID或其他OAuth的驗證機制達成
直接採用 MQTT 這類的協定,是不是會比較容易些? 至少有 username、password 再加上 TLS 來把關:
https://www.ibm.com/support/knowledgecenter/zh-tw/SSFKSJ_7.5.0/com.ibm.mm.tc.doc/tc00150_.htm
可以在設備呼叫API時傳入預存或可自行識別的設備碼上的TOKEN並加鹽加密,一起POST回伺服器,就不用擔心是否是其他人偷送或爬蟲所為