Python API簡單驗證

2022-08-18 10:42:16 字數 3027 閱讀 3792

因為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 API簡單驗證

前言 因為cmdb內部的需求,需要乙個api進行資料傳輸,用來傳遞需要抓取的服務端資訊資訊給抓取的autoclient,autoclient抓取好之後再通過api傳輸到伺服器,儲存到資料庫。但是為了防止惡意的api訪問,需要做乙個驗證。設想一可以在客戶端跟服務端都規定好一串隨機字串做驗證,只有當帶著...

gearman 從安裝到python API測試

一 安裝 作業系統 redhat 5.7 1.安裝gearman 首先,我們需要安裝gearmand,在centos和rhel環境下,我們只需執行以下命令 yum install gearmand y 注意 如果不希望通過yum的方式來安裝gearmand,可以通過原始碼編譯安裝,具體安裝方法可以參...

QGIS中PythonAPI配置問題

qgis內建python console pyqgis環境配置 ref最近實驗室科研需要用到gis,arcgis太大又由版權問題,於是開始研究qgis,需要用到二次開發,於是毫不猶豫選擇了python。安裝後,開啟qgis發現已經內建python console 利用qgis自帶的python co...