我是后端新手,以前從未使用過它。
我想添加到我的應用程式身份驗證系統:客戶端向服務器詢問唯一 ID,服務器生成大約 5-6 個符號 ID 并將其回傳給客戶端。用戶可以使用此 ID,以便其他人可以通過它找到他的設備。經過一些延遲(如幾個小時)后,服務器會洗掉唯一 ID,因此客戶端必須要求另一個 ID 才能繼續使用服務器服務。
對于我的應用程式,這應該是一種舒適的方式 - 沒有任何 oauth 系統。但是,如果有人想更改客戶端代碼,以便同一個客戶端向服務器發送數千個請求以為其創建唯一 ID,該怎么辦?服務器的資料庫聽起來真的很不安全,它可以填充同一設備的假 ID。
我的問題是 - 是否可以像服務器檢查該用戶之前是否已經要求提供 ID 以拒絕此請求一樣更安全地提出創建 ID 的請求?也許我可以檢查諸如客戶端 IP/MAC 地址之類的東西?模擬問題的最佳實踐是什么?
有關更詳細的背景關系,我正在使用 Spring、Android SDK、Retrofit。對不起英語,我不是母語人士。
uj5u.com熱心網友回復:
基本上,您是在詢問是否有一種方法可以讓服務器以一種可行的方式(總是或大部分時間)識別客戶端的機器。
答:不,沒有辦法做到這一點。
你能得到的最好的就是你可以從Socket物件、HTTPRequest物件或其他東西中得到的(假定的)客戶端 IP 地址。例如,如果客戶端通過代理或 NAT 服務器或 Tor / Onion 路由器連接,則 IP 地址將是其 IP 地址。
那么解決方案是什么?
沒有什么能阻止所有形式的虐待,但這里有一些可以提供幫助的想法:
您可以簡單地引入延遲;即在回應每個令牌請求之前等待(比如說)5 秒。這會將單個客戶端限制為(例如)每分鐘 12 個令牌,這應該會減少資料庫條目的數量。(但這也有不利的一面,DDOSer 可以利用這一點來發揮自己的優勢。)
基于(觀察到的)客戶端 IP 地址的速率限制;例如,如果您在一分鐘內(例如)看到(例如)10 個令牌請求,則在(例如)10 分鐘內忽略來自該 IP 的所有進一步請求。
將資料庫條目保留更短的時間。
只需使用更大的資料庫。如果您有千兆位元組的資料庫存盤,那么每秒數百或數千個令牌并不是很多。特別是如果您要洗掉舊條目。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524679.html
標籤:爪哇安卓春天改造2
