前言
App安全非常重要,尤其是数据安全。但是我们知道通过Charles等工具可以对App的网络请求进行抓包,如果我们的数据没有进行加密,这样这些信息就会被清楚的提取出来,会被不法分子进行利用。保证数据安全有很多种方法,今天简单聊一聊如何通过简单几步防止抓包。
正文
当我们进行网络请求的时候,一般通过URL的openConnection来建立连接,代码如下:
URLConnection conn = url.openConnection() 复制代码
其实openConnection这个函数还有一个版本,可以传入一个proxy对象,代码如下:
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实际上就是type属性为DIRECT的一个Proxy对象,这个type有三种:
- DIRECT
- HTTP
- SOCKS
官方描述如下:
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等工具就抓不到包了,这样一定程度上保证了数据的安全。
当然这种方式只是通过代理抓不到包,如果直接通过路由还是可以抓包的。