セキュリティのWebインターフェイスのデザイン

メインインターフェイストークン、タイムスタンプの周りのセキュリティおよびデータ・インタフェースを確保するために設計された3つのメカニズムを立ち上げた記号は、改ざんやビューの以下の特定のポイント、繰り返し呼び出されることはありません

トークン認証メカニズム

クライアントにユーザー名とパスワードサーバを使用して、ユーザーのログインには、キャッシュサーバに格納されたキーと値のペアの形でトークン(通常はUUID)、およびトークン・ユーザーIDを返します。トークン検証サービスは、要求が無効であったことを示し、何のトークンが存在しない場合は、要求の受信後に終了しました。トークンは、クライアントアクセスサーバーの資格情報です。

ログ〜

タイムスタンプタイムアウトメカニズム

時間差が所定時間(例えば、5分)よりも大きい場合、ユーザ要求がサーバに続いて現在時刻のタイムスタンプは、現在時刻のタイムスタンプの比較を受信のタイムスタンプに置かれるたびに、要求が無効であると考えられます。タイムスタンプタイムアウトメカニズムは、防衛DOS攻撃の有効な手段です。

署名機構

トークン要求パラメータ及びタイムスタンプに加えて他の次にMD5またはSHA-1アルゴリズムは、同じアルゴリズムを取得するための要求を受信した後、データは現在のサービス要求を終了、署名サインを暗号化されている暗号化(塩は、状況に応じて添加することができます)同じでない場合は、パラメータは、エラーを直接識別戻され、変更されたことを示す、現在の署名と比較する署名、および。署名メカニズムは、データが改ざんされないことを保証します。

例1

外部接続の共有を提供(URL?ShareId = 123&サイン = XXX)を、 特定のクーポンを受け取るためにクリックしてください。署名の目的は、クーポン、署名を受信するためのIDを変更するには、ユーザーを防ぐためですか。
1.署名、サイン(SHAREid)の共有IDを行い、
後端に前記署名生成要求を、
前記符号と比較のURL、同じテストが成功したチェックです。

public static String sign(Map<String, String> data) throws KmsResultNullException {
        String[] key = data.keySet().toArray(new String[data.keySet().size()]);
        Arrays.sort(key);
        String dataStr = "";
        for (int i = 0; i < key.length; i++) {
            if (data.get(key[i]) != null && !data.get(key[i]).equals("")) {
                dataStr += key[i] + "=" + data.get(key[i]) + "&";
            }
        }
        dataStr = dataStr.substring(0, dataStr.length() - 1);
        String shareKey = "XXX加盐的字符串XXX";
        String sign = DigestUtils.md5Hex(dataStr + shareKey).toLowerCase();
        return sign;
    }

例2

HTTPインターフェーストークンを取得、頻繁にユーザーの要求を防ぐために、外部提供します。タイムスタンプ+署名

/**半小时内的请求是有效的**/
 private static final Long validityPeriod = 1800000L;
boolean valid = false;
Long current = System.currentTimeMillis();    
 if(current-feedsRequest.getTimestamp() < validityPeriod && current-feedsRequest.getTimestamp() >= 0-validityPeriod){
            valid =true;
        }
String token = request.getToken();
valid =token.equalsIgnoreCase(MD5Util.encode(request.getUtmSource()+"XXX加盐的字符串XXX"+String.valueOf(request.getTimestamp())));

拒否した繰り返し呼び出し(非必須)

クライアントの最初の訪問は、キャッシュサーバに格納された署名を署名する、タイムアウトがタイムアウトタイムスタンプと一致するように設定されているときは、制限時間の面でタイムスタンプURL内または外の両方に同じ時間を保証することができ、一度だけアクセスすることができます誰かが同じURLに別の訪問を使用している場合は、キャッシュサーバを見つけた場合、すでにこの署名、サービス拒否のために存在します。故障のキャッシュ内の署名の場合は、誰かが再び同じURLを使用してアクセスした場合、タイムスタンプのタイムアウトメカニズムは、傍受されます。タイムスタンプ要求タイムアウトタイムアウトのタイムスタンプと一致し設定する理由です。他者によって傍受機構URLは、(例えば、データキャプチャとして)使用することができないことを確実にするために繰り返し呼び出しを拒否しました

次のように全体のプロセスは、次のとおりです。
1、トークンサーバ取得クライアントのユーザ名とパスワード
の一つとして2、クライアントはタイムスタンプタイムスタンプを生成し、タイムスタンプパラメータを
3、すべて自分のトークンを含むパラメータクライアント、およびタイムスタンプアルゴリズムソート暗号化署名符号得るため
4、トークン、タイムスタンプを要求は要求ごとにURLの後ろに追加のパラメータを運ばなければならない署名(HTTP:?// URL /要求は、トークン= 123&タイムスタンプ= 123&サイン= 123123123)
5、サーバー書き込みトークン用フィルタ、タイムスタンプ記号と検証のみ有効なトークンを、タイムスタンプは、キャッシュサーバサインの不在タイムアウトしていない同時に満たさ3例を、この要求は有効です。

誰かが要求をハイジャックし、リクエストパラメータが変更された場合のメカニズム中に3個以上の保護の下で、署名が渡すことはできません。誰かがURL DOS攻撃をハイジャックしている場合、サーバは、サーバがすでに存在してキャッシュしますので、サービスの署名やタイムスタンプのタイムアウト拒否、DOS攻撃が不可能であるので、それが推定されるように猿王はない来た署名アルゴリズムと、ユーザー名とパスワードが公開されている場合、その。最後に、たとえば、すべての安全対策が複雑すぎる費やす必要が、その後、時には必然的に、たとえば、あなただけの、その情報が改ざん、またはサービスを提供することを目的とすることはできません保証するために署名メカニズムを使用することができ、そのカットに応じて、実際のプロジェクトで行う必要がありますときにのみ、トークンのメカニズム。カットする方法、それはすべてのセキュリティインターフェイスの実際のプロジェクトの状況や要求に依存します

参考:
https://www.jianshu.com/p/c6518a8f4040(APIインターフェイスセキュリティ設計)
https://blog.csdn.net/jason_cuijiahui/article/details/79891742(ハッシュ塩を意味キーなど)
https://blog.csdn.net/weixin_37390956/article/details/80172233(APIインターフェイスのセキュリティおよびhttps)

おすすめ

転載: blog.csdn.net/mccand1234/article/details/90744458