2016-04-19 13 views
2

私は、ユーザーの携帯電話番号に送信するワンタイムパスワードに基づいて、自分のサイトにログインできるようにしています。javascript:パブリックAPIの悪用を防ぐ方法

私の問題は、jquery ajaxを使用してユーザーの携帯電話番号にotpを送信するApiコールを実行していることです。誰もがapiの呼び出しを見ることができ、すぐに私のSMSのパックを失効させる私のサーバーに無限のAPIの要求を行うことができます。

API呼び出しの乱用を避けるにはどうすればよいですか?

+1

トラックの提出をして、適切な –

+0

http://blog.geneticcoder.com/2015/08/24/としてスロットリング制限を適用throttling-requests-server-side/ –

答えて

0

サーバーへのAPIリクエストを認証する必要があります。私はあなたの制御下にあるサーバーをasumingしています。

ひとつのアイデアは、使用するかもしれません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トークンは1つのリクエストに対してのみ有効です – 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は、リスクベースの取引に一般的に使用されます。リスクは、ユーザー情報リスクまたは金融取引リスクです。そのステップの前に通常のログイン/パスワード認証が役立ちます。 –