2009-09-10 8 views
12

皆さん、私は画像ホスティングウェブサイトを運営しており、私はそのためのAPIを設計しています。APIを不正使用から保護するにはどうすればよいですか?

while(true) { 
    Upload(); 
} 

やスパム/ DoS攻撃サイト:私の関心は、私は誰もがような何かを行うことができるようにしたくないということです。

私の現在の解決策は、すべてのIPアドレスを1日あたりのアップロード量に制限することです。私はこれがAPIを使用するデスクトップアプリケーションでうまくいくと考えていますが、使用したいWebサイトではすべてのユーザーが同じIP(サーバー)を使用します。

APIを使用して認証したユーザーアカウントを使用し、不正使用した場合は各アカウントを禁止するのが最善の解決策です。この問題は、私のサイトにユーザーアカウントがまったくないことです。完全に匿名です。

他に何ができますか?可能な限りオープンなものを維持したいと同時に、明らかにサービスを悪用しているユーザー/ IPを禁止する機能があります。

+0

サードパーティ製の共同サイトで、X_FORWARDED_FOR HTTPヘッダーのように元のIPでリクエストを飾ることができますか? –

+0

アンチDoS機能は、Webサーバに組み込まれている(設定可能)かもしれないので、Webアプリケーションに組み込まれている必要はないでしょうか? – ChrisW

+0

ChrisW:いいえ、DoSはアプリの複数のレベルで発生する可能性があります。すべてのユーザーアカウントをロックするなどと言うことができます。このレベルで食事を提供する必要があります。 –

答えて

4

OAuthを参照してください。

9

ユーザーアカウントを実装したくない場合は、apiキー/シークレットに登録する方法について説明します。これを使用してレート制限できます。

+1

+1です。 – LiraNuna

+0

LiraNuna:あなたもOAuthを調べることをお勧めします。このすべて(APIキーなど)を正しく処理するための仕様です。 –

+0

OAuthはAPIキーを実装する方法です。 OPは彼のためにそれをするサービスを求めるのではなく、それを管理する方法のアイデアを求めたので、これはより良い答えだと私は信じています。 – LiraNuna

2

私が勤めていた会社では、支払いを受けていないすべての顧客に対して、APIエンドポイントごとに理論的に構成可能な1日のリクエスト数の制限があります。各リクエストでアプリケーションキーとして一意のIDを指定する必要がある場合は、軽量API用のQueryStringまたは複雑なAPI用のPOSTリクエストXMLで指定します。パブリックAPIを使用していないエンドユーザーの場合は、代わりに認証トークンを渡すことができます。

何らかの認証や認可を必要とせずにパブリックAPIを提供する場合は、IPアドレスベースのスロットルに頼る必要があります。しかし、軽量なプロビジョニングWebページを作成して、人々がAPIアクセスにサインアップすることは難しくありません。

あなたのアプリケーションロジックは、私たちのようなリクエスト数やFlickrのような毎日の帯域幅に基づいて調整できます。

0

アップロードするトークンを要求し、CAPTCHAでトークンを制限します。コードのようなものになるだろう消費:他の人がこのスレッドに述べたように

// 1st request 
var uploadToken = api.RequestToken(sessionIdFromUser); 
if (uploadToken.RequireChallenge) { 
    // requires challenge due to per IP limiting 
    // uploadToken.Captcha could be a URL 
    DisplayView(uploadToken.Captcha, uploadToken.SessionId); 
    return; 
} 
api.Upload(uploadToken, captchaFromUser, byte[]); 
1

、APIキーは、多くの場合、このような状況で移動するための方法です。あなたのサイトにユーザーアカウントがないという事実は重要ではありません.APIキーはアプリケーションを表し、ユーザーはではありません。 (実際には、サイトにユーザーがいた場合は、APIコールでアプリとユーザーを識別するためのメカニズムが別々に必要です.OAuthは非常に役に立ちます)。

独自の開発者登録プロセス、APIキー発行プロセス、スロットルコードなどを作成したくない場合は、私の会社、WebServius(www.webservius.com)、あなたが提供するAPIの上にホストされたAPI管理レイヤーを提供します。

3

apiGroveのようなオープンソースのAPI管理ツールをチェックしてください。 apiGrove.netまたはGitHub(apigrove.github.com/apigrove) apiGroveは、IPホワイトリストやキーによる承認など、API保護に対するさまざまなアプローチをサポートしています。

関連する問題