ホームページ  >  に質問  >  本文

java - 如何确保服务端的接口调用安全?

服务端提供各种功能接口供客户端调用,那么怎样才能确保请求是来自合法的客户端,而不是非法的请求呢?

ringa_leeringa_lee2742日前864

全員に返信(5)返信します

  • 阿神

    阿神2017-04-18 10:57:00

    トークンを検証するか、サーバー側でOAuth2フレームワークを使用します

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 10:57:00

    合法と違法をどのように定義しますか? SSO フレームワークでは、トークンを持っている場合は、必ず appid と appsecret が必要になります。認可が必要な場合は、AccessToken も必要になります。最も簡単な方法は、信頼できる IP のみの通過を許可する IP インターセプターを作成することですが、これは一般的に、相手がトークンまたはアプリ シークレットを提供する場合に使用されます。合法ですよね?

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 10:57:00

    API を設計するとき、RESTful API のセキュリティを確保するには、次の 3 つの主要な側面を考慮する必要があります。

    1. 制限付きリソースのログイン認証

    2. リクエストの ID 認証
    3.
    1. 制限付きリソースのログイン認証

    このプロセスはこの記事の焦点では​​ないため、詳細は説明しません。基本的なプロセスは次のとおりです。


    クライアントはアカウント情報 (ユーザー名 + パスワード) をサーバーに送信します

    1. サーバーは正常に検証し、ストレージ用に AccessToken をクライアントに返します

      3. 制限されたリソースにアクセスする場合、クライアントは AccessToken を持ち込むことでアクセスできます。

    2. 2. 認証のリクエスト

      リクエストが署名および認証されていない場合は、fiddler などのツールを使用してデータを簡単に取得し、改ざんして送信し、大規模なバッチ呼び出しを行うことができます。これにより、システムが大量のジャンクデータとシステムリソースが大量に消費され、通常使用することさえできないため(もちろん、GateWay を通じて電流を制限できます)、リクエストに対して署名認証を実行する必要があります。
    URL形式

    URL:schema://domain/path?query&imei×tamp&sign

    パラメータの説明

    署名メソッド
    sign=signature(path?query&imei×tamp&SIGN_KEY)

    検証プロセス
    認証ロジック
    1. 最初に、サーバーは各アプリバージョンのSIGN_KEYを持ち、クライアントは対応するバージョンのSIGN_KEYを持ちます

    2. リクエストを送信する前に、署名メソッドを通じて暗号化して署名を取得します

    3.リクエストを送信するとき、サーバーは、最初にタイムスタンプが有効かどうかを検証します。次に、5 分前のサーバー タイムスタンプを受け取ります。署名を検証するための SIGN_KEY の対応するバージョンは合法ですか? 6. リプレイ攻撃を防ぐために、署名が redis に保存されているかどうかを確認する必要があります。存在しない場合は、redis に保存します (5 分間キャッシュします)。
    データの改ざんを防ぐ方法
    署名パラメータには元のリクエストのすべてのパラメータが含まれており、パラメータが変更されると、符号の値が異なるため、改ざんすることはできません。

    リプレイ攻撃を防ぐ方法
    署名アルゴリズムにはimei(固有のデバイスID)とタイムスタンプパラメータもあり、署名アルゴリズムは不可逆アルゴリズム(md5やsha1など)であるため、通常のリクエストごとに符号値が繰り返されることはありません。現時点では、サーバーはリプレイ攻撃中の検証とフィルタリングのために 5 分の符号値を保存でき、5 分を超えるリクエストはタイムスタンプ検証によって直接フィルタリングされます。

    まとめ

    このように、データの改ざんやリプレイ攻撃を防ぐためにリクエスト認証が実現されますが、アプリキー(SIGN_KEY)の安全な保管を確保する必要があるため、理解と実装が簡単であるという利点があります。欠点は、キーの安全な保管と定期的な更新の負担が必要なことです。


    3. 機密データの暗号化

    1) SSL インフラストラクチャ (つまり HTTPS) を導入し、機密データの送信はすべて SSL に基づいて行われます。

    2) 一部の機密データ (アカウント番号 + パスワードなど) のみを暗号化し、データの改ざんを防ぐために暗号化ソルトとして乱数を追加します。

    返事
    0
  • PHPz

    PHPz2017-04-18 10:57:00

    リクエストデータのすべてのパラメータがjsonに変換され、サーバーのRSA証明書を使用してjsonが暗号化され、サーバーの秘密キーが復号化されます。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:57:00

    oauth2 または同様のトークンを使用します

    返事
    0
  • キャンセル返事