すべてのデータを取得するための API を開発しました。
このサイトには、API を呼び出すユーザーを識別するためのユーザー登録システムや何かがありません。呼び出しを行っているユーザーを特定できれば、誰かが API を悪用したり攻撃したりするたびに、そのユーザーの IP を禁止することさえできます。
ユーザーの IP または MAC アドレスに基づいて API キーを生成することを考えていますが、そうしても安全ですか? 他の提案はありますか?
まず、エンドユーザーの MAC アドレスを取得できません。着信パケットの MAC アドレスを読み取ったとしても、ルーターの MAC アドレスしか取得できません (絶対に禁止したくありません!)。
ユーザー IP は、簡単に変更および/またはスプーフィングされます (たとえば、マルウェアまたは混乱した代理 Javascript)。不正な要求を行うものをブロックすることは依然として良い考えですが、それらを認証に使用したくないことは間違いありません。
HTTP 要求 (パス、ヘッダーなど) の攻撃者が制御する入力のほとんどすべてを考慮する必要があり、そこに含まれる情報のみに基づいて認証を決定することは絶対に避けてください。
あなたはPHPバックエンドを持っていると言います。そこからAPIキーを生成するシステムを構築してみませんか?
ユーザー登録制度がないというのに、なぜAPIキーを生成するのですか?
両方の世界を持つことはできません。リクエストが匿名であるか、ユーザーが登録している場合は、API キーを提供でき (キーが盗まれないように HTTPS を使用することをお勧めします)、ユースケースに応じて IP アドレス範囲によってさらに制限される可能性があります。
他の人が答えたように、MAC アドレスは同じ物理ネットワークでのみ使用できます。ルーターを経由しないため、インターネットを経由しません。MAC アドレスを収集するカスタム アプリケーションを作成しない限り、物理ネットワークの外部にいるユーザーの MAC アドレスにアクセスすることはできません (そしてそれらはスプーフィングされる可能性があります)。
IP アドレスは動的である可能性があり、地域、ISP、通信事業者、またはビジネスに基づいて IP アドレスを共有する人もいます。その上、私たちの多くは IP アドレスを簡単に変更できるため、IP アドレスでアクセスを管理することは困難です。
いくつかの落とし穴があり、パブリック API の管理には余分な時間がかかります。悪用者と同時に無実で誠実なユーザーをブロックしている可能性があるという事実にもかかわらず、IP アドレスまたは IP アドレス範囲を遮断することをいとわない必要があります。アプリケーションが無料の場合、期待されるレベルのサービスや契約がないため、より多くの自由が得られるかもしれませんが、法的な合意で自分自身を守りたいと思うかもしれません.
多くのパブリック API は依然として IP アドレスで追跡し、ターピットを実装して、システムを悪用していると思われる IP アドレスからの要求を単純に遅くしています。このように、同じ IP アドレスからの正当なユーザーは、速度は遅くなりますが続行できます。
一般に、あなたのサービスが誰かがそれを攻撃したいと思うほど人気がある場合、それは通常良い兆候です。アプリケーションの失敗の理由を、ユーザーが低速のサーバーで待機することにうんざりしたためにしたくはありません。
もう 1 つのオプションは、ユーザーを登録させることです。これにより、不正行為を発見したときに IP アドレスではなく資格情報でブロックできます。
それは絶対に間違っています。ユーザーの MAC アドレスを取得できません。JS/PHP からは方法がありません。
NAT の背後にある多くのユーザーが同じ IP アドレスを持っているため、それらを区別することはできません。
多くの理由から、IP アドレスを禁止することはお勧めできません。とにかく、ハッカーは IP アドレスを偽装できるため、この手法は役に立ちません。
できることは、IP に基づいて API 呼び出しを調整することです。つまり、1 秒あたりの IP あたりの呼び出し数を制限します。
これが役立つかもしれません: http://blog.programmableweb.com/2007/04/02/12-ways-to-limit-an-api/