我開發了一個API來獲取所有數據。基於用戶IP地址的API
該網站沒有用戶註冊系統或任何標識調用API的用戶。如果我能夠識別撥打電話的用戶,每當有人濫用或攻擊API時,我甚至可能會禁止他的IP。
我正在考慮根據用戶IP或MAC地址生成一個API密鑰,但安全嗎?還有其他建議嗎?
我開發了一個API來獲取所有數據。基於用戶IP地址的API
該網站沒有用戶註冊系統或任何標識調用API的用戶。如果我能夠識別撥打電話的用戶,每當有人濫用或攻擊API時,我甚至可能會禁止他的IP。
我正在考慮根據用戶IP或MAC地址生成一個API密鑰,但安全嗎?還有其他建議嗎?
首先,你不會得到最終用戶的MAC地址。即使您讀取傳入數據包的MAC地址,您也只能獲得路由器的MAC地址(您絕對不想禁止該地址)。
用戶IP很容易更改和/或惡搞(惡意軟件或混淆,例如,副Javascript)。阻止那些發出錯誤請求的請求仍然是一個好主意,但您絕對不希望將它們用於身份驗證。
您應該考慮HTTP請求(路徑,頭部等)中的幾乎所有攻擊者控制的輸入,並且絕對不會僅基於其中包含的信息進行身份驗證決策。
你提到你有一個PHP後端。爲什麼不建立一個系統來生成API密鑰?
假設PHP後端API沒有使用UDP,攻擊者將無法在SYN洪水DOS攻擊之外欺騙IP地址。 –
除了幾個有趣的TCP序列號攻擊之外,當然你是對的。但是,在受感染的主機上使用惡意軟件很容易從新IP請求API密鑰 - 僵屍網絡一直都在使用該密鑰。這就是我的意思。 –
這是絕對錯誤的,你不能得到用戶的MAC地址,也沒有從JS/PHP的方式
NAT後面很多用戶都會對你有相同的IP地址,這樣你就不能區分它們
出於多種原因禁止IP地址並不是一個好主意。無論如何,黑客可以欺騙IP地址,所以這種技術是無用的。
你可以做的是根據IP限制API調用。即限制每秒每IP的呼叫數量。
你可能會有所幫助:http://blog.programmableweb.com/2007/04/02/12-ways-to-limit-an-api/
你說有沒有用戶註冊系統,那麼爲什麼你會生成API密鑰?
你不能擁有兩個世界。要麼是匿名請求,要麼是用戶註冊,在這種情況下,您可以提供API密鑰(最好使用HTTPS,這樣密鑰不會被盜),並且可能會根據您的使用情況進一步限制IP地址範圍。
其他人已經回答說,MAC地址只能在同一個物理網絡上使用。他們不通過路由器,所以他們不上網。除非您編寫了收集它的自定義應用程序(以及可能被欺騙的應用程序),否則除了物理網絡之外,您無法訪問任何人的MAC地址。
IP地址可以是動態的,有些人可以根據地理位置,ISP,運營商或業務共享IP地址。此外,我們很多人都可以輕鬆更改我們的IP地址,所以很難通過IP地址來管理訪問。
存在一些缺陷,需要額外的時間來管理公共API。儘管您可能會與濫用者同時阻止無辜和正直的用戶,但您必須願意關閉IP地址或IP地址範圍。如果你的申請是免費的,它可以給你更多的自由,因爲沒有預期的服務水平和合同,但你可能想要保護自己的法律協議。
許多公共API仍然通過IP地址進行跟蹤並實施tarpits來簡化放慢似乎濫用系統的任何IP地址的請求。這樣,來自同一IP地址的合法用戶仍然可以繼續,儘管速度較慢。
一般來說,如果您的服務足夠流行以至於有人想要攻擊它,那通常是一個好兆頭,所以不要太早擔心它,但要確保它在前面。您不希望應用程序失敗的原因是因爲用戶厭倦了在慢速服務器上等待。
您的其他選擇是讓用戶註冊,因此當您發現濫用情況時,您可以通過憑證而不是IP地址進行阻止。
什麼爲您的後端服務? API可以訪問什麼? –
你將無法訪問MAC地址,所以忘記了。客戶端的IP地址可能會被ISP更改,或者被具有NAT或代理服務器的路由器屏蔽,因此您不能依賴它的準確性。你需要考慮其他事情。 – 2013-10-19 00:25:50
@ChristianTernus後端基於PHP,API只能訪問所有文章。 –