我一直在尋找技術來保護在android/iphone應用程序或網站應用程序中使用的API。
我發現了一種我喜歡的技術,但不確定它是否是好的或者什麼是錯的(除了是一個長時間的過程)。
基於REST的API的安全性
處理(用戶側最初):
首先一個鹽通過散列用戶口令創建的。
然後通過散列請求的URL(通過查詢字符串在末尾附加用戶名)和salt來創建簽名。
最後,通過散列用戶名和簽名來創建令牌。
令牌在標頭內傳遞給服務器(每次)。
第一請求:
第一個請求必須是驗證端點幷包括DEVICE_ID作爲查詢字符串。
在服務器上完成相同的處理(如上所述),並且如果令牌與用戶發送的令牌相匹配,則將device_id存儲在數據庫中,並將其分配給該用戶名以供將來參考(設備ID在請求中找到網址),並在此後用於驗證用戶名/設備。
所有後續請求:
在用戶端和服務器端現在爲每個請求與令牌是不同的,每次(如所請求的URL變化)的處理必須發生。
未包含代碼,因爲尚未編寫代碼。
你不這樣做,你創建與鹽散列,而不是「通過散列創造鹽」。 –
@JakubKonecki好點猜測鹽應該是一個'鹽',然後用密碼散列。 –
「salt」只是在散列字符串之前由服務器向密碼添加的一串祕密隨機字節。它可以防止相同的密碼(例如'passw0rd')在任何地方產生相同的散列結果。這可以防止黑客使用彩虹表將密碼反轉回密碼。儘可能讓你的鹽儘量模糊,你甚至可以爲每個用戶名使用不同的salt值(但不要把它作爲用戶名,這太明顯了)。 –