3

現在、私はREST APIを開発しています

私の API アクセスは、私のサーバーと私のクライアント サーバー (B2B、企業間) の間のみです。例 : myserverapi.com (My REST API サーバー) および myclientserver.com (My API にアクセスするクライアント サーバー) *3 番目の接続/アプリケーションはありません

私たちはapi_key(もちろん必須)とドメイン名を実装しています(クライアントはAPIにアクセスするドメイン名を特定するので、私のサーバーAPIはそれからのみ受け入れます)

myserverapi.com の場合、 myclientserver.com からのみ接続を受信する方法は? のみを使用してい$_SERVER['REMOTE_ADDR']ますか?それで十分 ?しかし、いくつかの場所から読んだ後、プロキシまたはロードバランサーファームの下にある場合、IPが間違っている可能性があるため、それを使用できません。解決策は何ですか?

SSL証明書をインストールした場合はどうすればよいですか?コードを変更する必要がありますか? または、サーバー側で購入してインストールすると、自動的に私のAPIが安全になりますか?

openssl-verify 関数は、アクセスが特定のサーバーからのものであるかどうかを実際に知るための唯一の安全な方法ですか? http://php.net/manual/en/function.openssl-verify.phpこのリンクhttp://3stepsbeyond.co.uk/2010/12/のように、データを暗号化および復号化するためにコードを変更する必要があるということですかopenssl-and-php-tutorial-part-two/

したがって、基本的には、myserverapi.com が myclientserver.com からのみアクセスできるようにしたいだけです。myclientserver.com は myserverapi.com からのデータのみを受け入れます。どうやってするか ?

誰かが私に良い説明をしてくれることを願っています。

ありがとうございました

4

3 に答える 3

1

できることの連続です。最もコードに依存しないのは、HTTPS クライアント証明書です。ユーザーが正確に誰であるかは気にしないが、それが許可されていることを確認したい場合は、apache に処理させます。これは構成ファイルの数行にすぎず、コードに手を加える必要はありません。

2 番目のオプションは ACL です。これは、パス レベルでも Apache 内で再び処理できます。もちろん、OS レベルでは IP やポートにも適用できます。サーバー内またはサーバーの前にあるファイアウォールにも同じことが当てはまります。

証明書または IP/ポート ファイアウォールと ACL の管理に対処したくない場合は、2 レッグ Oauth を実装できます。ライブラリはほぼすべての言語で既に存在するため、クライアントはライブラリを使用でき、サーバーのコードはそれほど複雑ではありません。

于 2012-12-09T19:00:42.423 に答える
0

SSL証明書の場合、コードを変更する必要はありません。ただし、サーバーポートを確認し、SSLでない場合は例外をスローすることをお勧めします。

if ($_SERVER['SERVER_PORT'] != 443) {
    header('405 Method Not Allowed');
    exit();
}

もちろん、ポート80でサービスを提供しないことで、Apacheを使用して同様の制限を実現できます。

IP制限については、$_SERVER['REMOTE_ADDR']ほとんどの条件下で機能するはずです。残念ながら、プロキシを回避する方法はないと思います。ただし、ほとんどのセキュリティ要件にはAPIキーで十分です。

于 2012-12-09T04:22:41.603 に答える
0

回答には少し遅れますが、プロキシ経由で送信される可能性のあるリクエストの remote_addr を確認するには、X-forwarded-for ヘッダーが設定されているかどうかを確認し、存在する場合はそれを使用します。

http://en.wikipedia.org/wiki/X-Forwarded-For

于 2013-08-03T02:45:59.757 に答える