3

ドメインのみがアクセスできるようにし、スプーフィングされたリクエストが送信されないようにする REST API があります。そうするために、私の頭に浮かんだ唯一のことは、リファラーをチェックすることでした$_SERVER['HTTP_REFERER']。ただし、ドキュメントには次のように記載されています。

ユーザー エージェントを現在のページに参​​照させたページ (存在する場合) のアドレス。これは、ユーザー エージェントによって設定されます。すべてのユーザー エージェントがこれを設定するわけではなく、機能として HTTP_REFERER を変更する機能を提供するユーザー エージェントもあります。要するに、本当に信用できない。

それでは、メインの API リクエスト/ゲート ファイルが次のようになっているとします。

www.example.com/api/gate.php

自分のドメインからのリクエストのみが処理され、他のすべてが無視されるようにするにはどうすればよいですか。http認証と秘密鍵または秘密の設定について少し読んだことがありますが、自分のドメインだけがそのファイルに要求を送信できるようにする簡単な方法を探しています。ありがとう

4

4 に答える 4

5

すでに述べたように、HTTP_REFERRERなりすましREMOTE_ADDRの可能性があるため、上記の機能の実装を信頼することはできません。また、共有ホスティングコンテキストでは、同じサーバー内の他のアカウントも同じIPを持っていることに注意してください。

簡単な解決策は、基本認証を使用してAPIへの要求を認証することです。これはIPまたはリファラーURL/IPでフィルタリングしませんが、リクエストが信頼できるソースからのものであることを保証します。

Apache環境では、基本認証の設定は、ファイル.htaccess.htpasswdファイルを作成し、それらをAPIのルートディレクトリに配置するのと同じくらい簡単です。

次のジェネレーターを使用して両方のファイルを作成できます。.htaccess
ジェネレーター
.htpasswdジェネレーター

基本認証を設定した後、PHPでのリクエストの認証は、次の方法でAPIにアクセスするのと同じくらい簡単です。

username:password@example.com

したがって、リクエストを認証するためのヘッダーを設定するために追加のコードを開発する必要はありません。URLにアクセスする人は誰でも資格情報の入力を求められ、認証が失敗した場合はアクセスを拒否します。

ここに画像の説明を入力してください

于 2012-04-09T15:42:33.257 に答える
2

localhostへのアクセスを許可するpublic_html/apiサブフォルダー内の単純な.htaccessは、トリックを実行するだけではないでしょうか。

order deny,allow
deny from all
allow from 127.0.0.1

または、gate.phpファイルにのみアクセスし、フォルダ内の他のファイルにアクセスできるようにする必要がある場合は、1つのファイルのみをターゲットにすることができます。

<files "gate.php">
    order deny,allow
    deny from all
    allow from 127.0.0.1
</files>
于 2012-04-09T18:14:46.597 に答える
2

とはリクエストヘッダーで送信されるだけなので、なりすましの可能性があるHTTP_REFERRERと思います。REMOTE_ADDRサイトがインターネット上にあり、アクセスを制限したい場合、これは適切な方法ではありません。クレデンシャルを使用した完全な認証が必要です。

認証やキーを設定したくない場合は、会社の LAN でホストすることができます。

于 2012-04-09T15:20:30.473 に答える
0

なりすましの可能性が低い $_SERVER['REMOTE_ADDR'] もあります。

$_SERVER['REMOTE_ADDR'] を信頼しても安全ですか?

于 2012-04-09T15:17:50.880 に答える