python驗證 Python API簡單驗證

2021-10-12 01:16:45 字數 1989 閱讀 9880

前言

因為cmdb內部的需求,需要乙個api進行資料傳輸,用來傳遞需要抓取的服務端資訊資訊給抓取的autoclient,autoclient抓取好之後再通過api傳輸到伺服器,儲存到資料庫。但是為了防止惡意的api訪問,需要做乙個驗證。

設想一可以在客戶端跟服務端都規定好一串隨機字串做驗證,只有當帶著這串驗證的請求傳送過來的時候,才讓其進行訪問。

如果學過了爬蟲,大家很容易就發現,這串隨機字串在瀏覽器裡面是可以監聽的,多觀察幾次總是會發現的。而且無論通過如何的方式,只要暴露在外面,都是會被察覺的。此時,就需要對其進行加密。

設想二既然隨機字串在web傳輸中是明文狀態,那我們試著將其轉換成密文的,轉換下思路,如果每次的請求都是隨機字串配合一串一直變動的值進行md5加密,此時,產生的驗證字串也應該變成動態密文。用什麼做動態字串來配合約定好的字串進行md5加密呢?既然是動態的,時間戳,是最好的選擇。

此時一切看著都很完美,但是,忽略了一點,無論是不是加密的字串,http請求的時候都是可以監聽到的,所以即使加密,即使不知道怎麼加密的,依舊可以直接拿著這串字串直接進行驗證訪問。尷尬。。。

設想三其實上面的設想二已經做到了動態,思路上只要改一點就立刻變成可行的了。在http請求的時候,即使是在相當糟糕的網路環境裡,也不會需要傳送非常長的時間,因此,卡住時間便可以實現。

在拿到client的時間戳是,伺服器段只需要跟當前時間戳進行比對,如果時間間隔小於10秒就當作正常訪問。就可以了。

上面的設計思路完美的解決了動態的問題,此時不免還有疑問,如果真的會在10s內盜取到字串直接訪問呢?

完善思路

基於上面的問題,可以再多加非同步驗證,寫乙個列表,訪問過的字串都放在列表裡,後面的訪問都跟此列表比對下,如果在此列表內,就拒絕訪問。

如上的設計思路就可以解決問題。

優化最後的設計思路肯定能解決問題,但是也存在乙個問題,就是,隨著時間進度的推移,訪問列表一定會越來越大,始終是不友好的一點。肯定需要給字串設計乙個超時時間。

visited_list = ['28g12b12128912e2kj|127381237812391', '829312g12be120e102ej12je91|12312984123123',....]

如果以上述的方式取跟系統時間比較當然是一件很費事的工作,占用很多的io,可以使用redis來輕鬆實現這個功能。

cbv通過此類裝飾方式實現驗證

驗證**

python驗證 python驗證登入

乙個web2.0時代的 自然少不了使用者註冊,登入,驗證的功能,那麼python可以怎樣實現登入驗證呢 這裡我們使用裝飾器來做登入驗證 構成 假設我們有這樣乙個 是乙個類似與這種多個使用者的 每個使用者都又乙個自己的管理介面,內部也應該有乙個管理員系統 未登入使用者 登入的普通使用者,就是我們 管理...

python安裝驗證 如何驗證python安裝成功

windows系統,執行 cmd,進入dos視窗,輸入python,安裝成功的話可以看到版本資訊並進入程式設計模式,如下圖 我安裝的版本是python 2.7.13 輸入 print hello world 按回車。成功列印。沒有報錯,說明python已經成功安裝了。內容擴充套件 什麼是乙個好的方法...

python表單驗證 表單驗證

django有乙個form類為我們提供了強大的表單驗證提交。1 建立form from django import forms class commentform forms.form name forms.charfield label 您的姓名 max length 100 email form...