楊武帥 萬啟元 桑賢伯
摘 要:針對目前日益增多的智能設備提出了兼容性好,穩(wěn)定性高,易于管理的管理系統(tǒng)的設計方法。在服務器端使用Python和Django框架進行與設備的數據交互及設備管理網站的構架,以手表為例說明整個管理系統(tǒng)的設計。
關鍵詞:Python;物聯(lián)網;Django;智能設備
中圖分類號:TP311 文獻標志碼:A
Abstract: In view of the increasing number of intelligent equipment, the design method of the management system with good compatibility, high stability and easy management is put forward. At the server side, we use Python and Django framework to interact with device and manage the website of device management. We take watch as an example to illustrate the design of the whole management system.
Keywords:Python;Internet of things;Django;intelligent equipment
1 編程語言與開發(fā)框架
1.1 Python介紹
Python是一種廣泛使用的高級編程語言,其擁有可讀性強、語法簡潔和跨平臺等特點。支持包括面向對象、命令式、函數式和過程式編程等編程范式。同時Python是社區(qū)驅動的開源編程語言。Python程序可讀性高,開發(fā)周期短,可靠性強,適于網絡通信需要。同時Python開發(fā)的程序具有很強的可移植性,可以在很多不同發(fā)行版本的Linux、Windows、Mac OS X等操作系統(tǒng)間完美移植,使用Python可以很大幅度地增強服務器程序的適應性,使服務器程序能最大限度地在現(xiàn)有的服務器上運行而不需要更換服務器操作系統(tǒng)。
1.2 Django介紹
Django是一個由Python編寫的開源Web應用框架,它采用模型(Model),視圖(View)和模板(Template)即MVT開發(fā)模式,支持眾多中間件并有豐富的內建應用。Django使原本復雜的網站后臺開發(fā)和維護變得更簡單,并在執(zhí)行效率、安全性等方面有很大提升。
1.3 版本選擇
基于以上,管理系統(tǒng)使用Python語言和Django框架開發(fā)。經過版本比較,最終使用了目前發(fā)行的最新穩(wěn)定版本,即Python3.6.4與Django2.0.1。為了使最終的設備管理終端可以適用于各種平臺并便于維護(如:Android、MAC OS X等移動平臺或PC平臺)管理系統(tǒng)采用B/S模式,即客戶使用瀏覽器通過網頁管理智能設備。
在開發(fā)時整個系統(tǒng)被劃分為設備接口部分、數據庫部分,數據處理與加密算法部分、管理網頁部分。每個部分分別開發(fā)。
2 設備接口部分
2.1 設備接口部分簡介
設備接口部分主要提供服務器與智能設備間的數據交互接口。智能設備通過網絡訪問服務器的設備接口來進行。在手表端手表需要實時上傳使用者的運動及健康數據,并且服務器可能會不定時地向手表發(fā)送信息,通知手表使用者一些消息,手表管理者也會通過服務器向手表發(fā)送命令或者消息。
2.2 實施方案
基于以上所述數據交互模式,只能選用便于隨時互相發(fā)送可靠數據的TCP長連接。TCP長連接占用服務器資源較大,但是數據發(fā)送靈活,可靠性高。在手表的應用中手表的管理者可以隨時向手表發(fā)送身體狀態(tài)查詢的命令和通知信息,并且當手表使用者身體有恙時手表可以迅速地將身體狀況信息發(fā)送到服務器,通知手表管理者,快速響應手表使用者的身體狀況以便采取相應措施。
2.3 設備接口的安全性
對于設備接口可能遭受的TCP長連接洪水攻擊,設備接口的TCP連接有相應的鑒權掉線機制。在每次商定密鑰后手表與服務器之間會相互鑒權,手表中的客戶與服務器鑒權密碼是根據手表的序列號和當前固件自帶的健全密鑰算法得出。在服務器對手表鑒權前,服務器會發(fā)送針對該手表的服務器鑒權密碼讓手表對服務器鑒權,防止攻擊者偽造服務器騙取手表鑒權密碼。手表與服務器的鑒權通信是協(xié)商密鑰并加密后進行的,所以通信中的密鑰不會受到中間人攻擊。在固件升級時服務器鑒權密碼與手表鑒權密碼算法均改變,既防止了由于手表固件太過陳舊導致的功能問題,又防止使用同一鑒權密碼時間太長導致的安全隱患。
3 數據處理與加密算法部分
3.1 數據處理與加密部分簡介
數據處理部分是位于接口部分之后,處理手表發(fā)送到服務器的數據或者打包服務器向手表發(fā)送的數據。
為了保證手表用戶數據安全,防止健康數據位置數據等隱私的泄露,服務器必須采取加密措施。在與手表通信時加密,在與手表管理者通信時加密,在數據庫中存儲加密。
3.2 數據處理部分實施方案
在數據處理部分中要將數據打包解包發(fā)送到設備接口或者存入數據庫,要使用便于發(fā)送,便于調試,不易出錯的打包解包方案,于是選用JSON數據交換方式。JSON是一種輕量級數據交換格式,它語言簡潔,層次清晰,實現(xiàn)簡單,便于在嵌入式設備中操作。JSON生成的字符串極具可讀性,很大程度上方便了調試。手表制作時采用了JSON的數據交換格式,所以在手表與服務器傳遞數據時,數據處理部分將傳遞的信息以JSON打包(解包)來進行數據傳遞。
3.3 加密部分實施方案
在與手表的數據交互中需要采取加密防止中間人攻擊等攻擊方式導致的使用者信息泄露。在手表這樣的嵌入式設備中運行復雜的加密算法無疑是非常耗時的,而添加硬件加密模塊會增大手表的體積影響便攜性,所以采用了TEA加密算法,TEA算法實現(xiàn)簡單,消耗資源少,極其容易通過軟件實現(xiàn)。于是在服務器端,與手表通信的數據也采用了TEA加密技術,并確定加密輪數為32輪。存入數據庫的密碼類數據也是需要加密的,防止拖庫帶來的用戶信息泄露。存入數據庫的數據并不需要完整,只需要通過驗證即可,因此采用了MD5摘要算法,因為用戶名不可更改并與密碼一一對應,于是取用戶名為鹽值添加到密碼后面整體進行MD5運算,如圖1所示。
3.4 加密密鑰的確定
在與手表通信時加密需要約定密鑰才能完成。在每次發(fā)起長連接時發(fā)起交換密鑰來約定密鑰,每次更換密鑰,使通信具有前向安全性。在每次密鑰交換時,先進行RSA協(xié)商來協(xié)商兩個素數,再通過DH交換來交換通信密鑰。在TCP長連接握手后發(fā)送RSA素數協(xié)商,每次RSA協(xié)商由服務器發(fā)起先由服務器發(fā)送公鑰給手表。服務器等待手表返回加密后的素數,返回并用私鑰解密后服務器發(fā)起DH密鑰協(xié)商,服務器將對數明文發(fā)送到手表并等待手表返回對數,當手表返回明文對數后服務器經過運算取得密碼。
4 數據庫部分
Django 默認數據庫是SQLite3數據庫,于是項目采用SQLite3數據庫。
4.1 數據庫各項關系
數據庫中的用戶分為3種:普通用戶、網站管理員、超級管理員。
普通用戶具有其唯一ID、用戶名、密碼、注冊時間、郵箱。
每個手表設備具有唯一序列號、持有者。
每個手表會不定時返回心率、血壓、坐標。
每個手表會在使用者運動狀態(tài)改變時返回運動狀態(tài)改變情況。
管理員具有唯一管理員ID、用戶名、密碼。
超級管理員只有一位,具有用戶名和密碼。
具體數據庫設計如圖2所示。
經驗證,該數據庫設計滿足巴斯范式,在正常使用中不存在插入異常、刪除異常和修改異常。
5 管理網頁部分
5.1 管理網頁部分介紹
管理網頁部分是手表使用者的家人查看手表使用者的健康情況,發(fā)送消息給手表使用者時使用的,能將數據庫中對應手表的數據圖形化輸出到網頁上。網頁有登陸、綁定手表,查看已綁定手表返回的各項信息與發(fā)送信息到已綁定手表功能。
5.2 網頁前端
人性化的圖形界面有助于用戶更方便地管理手表的信息。在網頁前臺使用了HTML5和Bootstrap開源前端來組織頁面。Bootstrap更強調響應式設計,會根據不同設備的視窗寬度來組織頁面,使頁面可以同時適用于移動終端與PC終端,減少客戶端開發(fā)成本,增強易維護性。
5.3 網站后臺
網站后臺使用Django框架開發(fā),Django框架可以與Python開發(fā)的其他部分無縫結合,與其他部分共用數據庫,縮減開發(fā)時間,降低維護成本。
網站后臺承擔著管理網站和其他部分之間的交互工作。在網頁登陸時后臺會根據數據庫判斷用戶名密碼是否正確,向用戶發(fā)送包含SessionID的Cookie使用戶可以保持登陸。并根據用戶當前所綁定的手表向用戶提供該手表返回的使用者信息。
5.4 網站安全性
網站可以查看手表使用者的健康狀態(tài)、位置等數據,網站需要擁有足夠的安全性保證用戶的數據不泄露。在登陸時添加圖形驗證碼和IP黑名單機制防止分布式碰撞攻擊。在操作數據庫的接口加入字符串格式化防止SQL注入攻擊。利用Django本身防止XSS注入攻擊和防止CSRF跨站攻擊的特性防止相應攻擊。需要加密的數據也會提交到處理與加密部分減少由于數據泄露造成的二次危害。
結語
本文結合了Python以及Django框架開發(fā)了一個B/S結構的物聯(lián)網設備管理系統(tǒng)。在功能方面完全滿足智能手表管理的需求,并能很方便地移植到其他的物聯(lián)網智能設備上。希望在未來管理系統(tǒng)可以改進并管理多種不同的設備,并能承載更大的壓力。
參考文獻
[1]王冉陽.基于Django和Python的Web開發(fā)[J].電腦編程技巧與維護,2009(2):56-58.
[2]劉志凱.基于Web的Python編程環(huán)境研究[D].新疆農業(yè)大學,2015.
[3]羅霄,任勇,山秀明.基于Python的混合語言編程及其實現(xiàn)[J].計算機應用與軟件,2004(12):17-18,112.