アプリはどのようにしてパケットキャプチャを防止しますか

オファーが届きました。友達を掘って受け取りましょう!私は2022年春の採用チェックインイベントに参加しています。クリックしてイベントの詳細を表示します。

序文

アプリのセキュリティ、特にデータのセキュリティは非常に重要です。ただし、Charlesなどのツールがアプリのネットワークリクエストのパケットをキャプチャできることはわかっています。データが暗号化されていない場合、この情報は削除および抽出され、犯罪者によって使用されます。データのセキュリティを確保する方法はたくさんありますが、今日は、いくつかの簡単な手順でパケットのキャプチャを防ぐ方法について簡単に説明します。

文章

ネットワークリクエストを行う場合、通常、URLのopenConnectionを介して接続を確立します。コードは次のとおりです。

URLConnection conn = url.openConnection()
复制代码

実際、プロキシオブジェクトを渡すことができるバージョンのopenConnection関数もあります。コードは次のとおりです。

public URLConnection openConnection(Proxy proxy)
    throws java.io.IOException
复制代码

このように、この関数を介して接続を確立するときにProxy.NO_PROXYを渡すと、パケットキャプチャを防止する効果が得られます。たとえば、Charlesなどのパケットキャプチャツールはリンク情報を表示できません。コードは次のとおりです。

URLConnection conn = url.openConnection(Proxy.NO_PROXY)
复制代码

Proxy.NO_PROXYの公式の説明は次のとおりです。

/**
 * A proxy setting that represents a {@code DIRECT} connection,
 * basically telling the protocol handler not to use any proxying.
 * Used, for instance, to create sockets bypassing any other global
 * proxy settings (like SOCKS):
 * <P>
 * {@code Socket s = new Socket(Proxy.NO_PROXY);}
 *
 */
public final static Proxy NO_PROXY = new Proxy();

// Creates the proxy that represents a {@code DIRECT} connection.
private Proxy() {
    type = Type.DIRECT;
    sa = null;
}
复制代码

NO_PROXYは、実際にはタイプ属性がDIRECTであるプロキシオブジェクトであることがわかります。このタイプには次の3つのタイプがあります。

  • 直接
  • HTTP
  • 靴下

公式の説明は次のとおりです。

public enum Type {
    /**
     * Represents a direct connection, or the absence of a proxy.
     */
    DIRECT,
    /**
     * Represents proxy for high level protocols such as HTTP or FTP.
     */
    HTTP,
    /**
     * Represents a SOCKS (V4 or V5) proxy.
     */
    SOCKS
};
复制代码

これは、直接接続であるため、プロキシがないためです。したがって、Charlesなどのツールはパケットをキャッチできず、データのセキュリティがある程度確保されます。

もちろん、この方法ではプロキシを介してパケットをキャプチャすることはできませんが、ルーティングを介して直接パケットをキャプチャすることは可能です。

おすすめ

転載: juejin.im/post/7078077090506997767