2016-04-19 424 views
2

我允許用戶根據一次性密碼發送給用戶的手機號碼登錄我的網站。javascript:如何防止濫用公共api

我的問題是,我正在做Api調用發送otp到用戶的手機號碼使用jQuery的Ajax。現在任何人都可以看到api調用,並向我的服務器發出無限api請求,這會立即使我的短信包過期。

我該如何避免濫用API調用?

+1

軌道意見書(或者,如果他們進行身份驗證的用戶詳細信息),並應用節流限制在適當 –

+0

http://blog.geneticcoder.com/2015/08/24/ throttling-requests-server-side/ –

回答

0

您應該向服務器驗證API請求。我假裝服務器在你的控制之下。

一個想法可能是使用JWT =>https://jwt.io/

,當然還有使用HTTPS服務器上。

0

導軌已經有CSRF protection。您需要爲您的AJAX請求啓用它們。當您啓用它們時,沒有其他人可以在沒有爲每個Web請求重新生成的CSRF令牌的情況下重複您的AJAX調用。

其他選項包括使用rack-attack對來自同一IP的API請求進行速率限制。

+0

但攻擊者可以輕鬆地複製authenticity_token字段並使用它來進行API調用。請解釋crf保護如何保護api濫用的濫用行爲。 – user2274074

+0

CSRF令牌僅對一個請求有效 – emaillenin

+0

我在新選項卡中打開了一個表單,並將舊的authenticity_token粘貼到此表單中並提交了表單。在這種情況下創建記錄。但是當我在新的隱身窗口或另一個瀏覽器中打開相同的表單並再次粘貼相同的真實性標記時,它會給出錯誤信息爲「InvalidAuthenticityToken」錯誤。這是否意味着一個瀏覽器的authenitcity_token不能在另一個瀏覽器中使用?鋼軌在哪裏存儲真實性標記? – user2274074

0

提供一些認證機制應該工作。這樣,任何試圖訪問API的人都必須登錄。將身份驗證令牌存儲在會話中並在服務器端進行驗證。 也有其他技術,如使用API​​的祕密/密鑰。 請檢查下面的鏈接:從IP地址 https://stormpath.com/blog/secure-your-rest-api-right-way/

+0

這現在對我來說很有用,因爲我想防止濫用我自己提供認證機制的API。 –

+0

在SMS OTP之前必須登錄/密碼或證書認證。 OTP通常用於基於風險的交易。風險可能是用戶信息風險或金融交易風險。在該步驟之前進行正常的登錄/密碼認證應該有幫助。 –