【python】django實現掃碼簽到


功能分析
基礎學習
實現思路
動手

功能分析

核心需求 * 能統計到場人員情況 * 在現場的人可以證明自己在現場 * 不在現場的人不能證明自己在現場 * 系統能夠辨別和記錄收到的證明 * 系統能保存和顯示統計情況

一個基本的掃碼簽到系統:

  • 訪問指定URL能出來二維碼

    • 管理員登陸后才能訪問URL
    • 后端產生二維碼
    • 二維碼發送到前端
    • 二維碼在前端顯示出來
    • 二維碼能定時更新
  • 掃碼之后能執行一些操作

    • 用戶設備掃碼后能發出數據包
      • 構造能夠獨特標識用戶身份的數據包
      • 數據包能夠自證來源合法
    • 后端能接收、處理收到的數據包
      • 驗證數據包來源合法性,時效性
      • 提取用戶信息
      • 增刪數據庫內容,更新簽到情況
      • 給用戶的掃碼設備反饋
      • 給二維碼頁面反饋

一個實用的掃碼簽到系統:

  • 安全性
    • 不可偽造
      • 二維碼頁面的訪問控制
      • 二維碼的時效性
      • 數據包的用戶身份標識
    • 難以攻擊
      • 數據包清洗
        • 來自二維碼頁面的數據包
        • 掃碼產生的數據包
      • 惡意IP管理
  • 魯棒性
    • 同一管理員多個會話
    • 多個管理員多個會話
    • 面對大規模請求不丟包
  • 用戶體驗
    • 二維碼、簽到頁面好看、有趣、多變
    • 掃碼后的反饋頁面好看、有趣、多變
    • 掃碼后的反饋頁面響應快
    • 簽到頁面顯示已簽人數等
    • 二維碼附近顯示頁面更新倒計時
    • 簽到后可發彈幕,但可能引入更多安全性問題

基礎學習

* python基本語法 * qrcode包的使用 * django工作流程,工程和app的目錄結構 * django前后端數據如何傳輸 * django的基本命令和HttpResponse的構造 * django模板語言的語法 * django模板的編寫和調用 * django中的訪問控制和數據庫操作

實現思路

一個基本的掃碼簽到系統: * 訪問指定URL能出來二維碼 * 管理員登陸后才能訪問URL 帶cookie訪問,未登錄則重定向到登錄界面 * 二維碼的產生,傳送和顯示 用qrcode產生指定內容的二維碼。一種思路是后端把圖片寫到文件里,前端去讀取。優點是思路清晰,操作方式經典,看上去好實現;缺點是頁面更新較快,頻繁讀寫不優雅,並且因為對static文件比較懵逼導致在本地調試時圖片路徑搞不清楚,頁面總是顯不出圖。另一種思路是不讀寫文件,而是把二維碼以某種數據結構直接傳給前端。優點是不讀寫磁盤,滿足了有點強迫症的心理,缺點是不知道怎么搞。然后想到ctf里把圖片按base64編碼的小trick,再加上這些二維碼數據量都不大,於是決定就這么干。測試后發現`img=qrcode.make(token);buf=StringIO();img.save(buf);imgdata=bug.getvalue();`后這個imgdata就是個字符串,那就`data=base64.b64encode(imgdata);`一下,用`render()`傳給前端的img作src,即` `。 * 二維碼能定時更新 想過用ajax,但不懂的東西有點多,就先用` `替代了

to be continued...


  • 掃碼之后能執行一些操作
    • 用戶設備掃碼后能發出數據包
      • 構造能夠獨特標識用戶身份的數據包
      • 數據包能夠自證來源合法
    • 后端能接收、處理收到的數據包
      • 驗證數據包來源合法性,時效性
      • 提取用戶信息
      • 增刪數據庫內容,更新簽到情況
      • 給用戶的掃碼設備反饋
      • 給二維碼頁面反饋

一個實用的掃碼簽到系統:

  • 安全性
    • 不可偽造
      • 二維碼頁面的訪問控制
      • 數據包的用戶身份標識
    • 難以攻擊
      • 數據包清洗
        • 來自二維碼頁面的數據包
        • 掃碼產生的數據包
      • 惡意IP管理
  • 魯棒性
    • 同一管理員多個會話
    • 多個管理員多個會話
    • 面對大規模請求不丟包
  • 用戶體驗
    • 二維碼、簽到頁面好好看、有趣、多變
    • 掃碼后的反饋頁面好看、有趣、多變
    • 掃碼后的反饋頁面響應快
    • 簽到頁面顯示已簽人數等
    • 二維碼附近顯示頁面更新倒計時
    • 簽到后可發彈幕,可能引入更多安全性問題

動手


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM