私のアプリケーションのユーザーが自分のWebサイトにコードを配置し、jsonpリクエストを介してサーバーと最小限に対話できるようにしたいと思います。ただし、私が特に許可しているリモートサイトからのみリモートリクエストを送信できるようにしたいのです。基本的に、ユーザーは私のアプリケーションのアカウントを持っている必要があります。
セキュリティのために、私の計画は次のとおりです。
- ドメインを保存するために、リクエストは、サイトにコードを配置することが許可される前に送信されます。
- サーバーはリモートリクエストを受信すると、リクエストからドメイン名を取得し、データベースと照合します。
- ドメインが一致する場合、リクエストは検証され、データなどとともに返されます。異なる場合は、ある種のXSS攻撃を想定してリクエストを拒否し、リモートにエラーを返します。
リクエストの送信元のドメインを取得するにはどうすればよいですか?開発ボックスでテストするために、別のポートで実行される別の静的Webサイトをセットアップしました
Server domain: localhost:8090
Remote domain: localhost:8095
getRemoteHostを使用すると、127.0.0.1が返されるようです。実際の状況では、これはリモートドメインのIPであり、そのIPから人間が読める形式のドメイン名を見つけることは可能ですか?私のサービスに接続しようとしているリモートサイトが動的IPから提供されているかどうかわからないため、IPを保存して照合することはおそらく良い考えではありません...
たぶん私はここで間違ったアプローチを取っているので、私が間違っている場合は私を訂正してください。リモートサイトのユーザーは実際のアカウントを持っていないため、ユーザー名とパスワードを要求することはできません。
おそらく、ドメインではなく、ある種の暗号化されたトークンをデータベースに保存するのがより良い方法です。ユーザーにサイトに配置するコードスニペットを与えると、この暗号化されたバージョンを含む非表示の入力が含まれる可能性があります。各リクエストで渡されるトークン?ただし、この場合、ページソースを表示して非表示の要素をコピーし、サーバーに同じようにアクセスできる人はいないでしょうか。