目前大多数网站和app的接口都是采用http协议,但是http协议很容易就通过抓包工具监听到内容,甚至可以篡改内容,为了保证数据不被别人看到和修改,可以通过以下几个方面避免。
重要的数据,要加密,比如用户名密码,我们需要加密,这样即使被抓包监听,他们也不知道原始数据是什么(如果简单的md5,是可以暴力破解),所以加密方法越复杂越安全,根据需要,常见的是 md5(不可逆),aes(可逆),自由组合吧,你还可以加一些特殊字符啊,没有做不到只有想不到, 举例:username = aes(username), pwd = MD5(pwd + username);。。。。。
非重要数据,要签名,签名的目的是为了防止篡改,比如http://www.xxx.com/getnews?id=1,获取id为1的新闻,如果不签名那么通过id=2,就可以获取2的内容等等。怎样签名呢?通常使用sign,比如原链接请求的时候加一个sign参数,sign=md5(id=1),服务器接受到请求,验证sign是否等于md5(id=1),如果等于说明正常请求。这会有个弊端,假如规则被发现,那么就会被伪造,所以适当复杂一些,还是能够提高安全性的。
登录态怎么做,http是无状态的,也就是服务器没法自己判断两个请求是否有联系,那么登录之后,以后的接口怎么判定是否登录呢,简单的做法,在数据库中存一个token字段(名字随意),当用户调用登陆接口成功的时候,就将该字段设一个值,(比如aes(过期时间)),同时返回给前端,以后每次前端请求带上该值,服务器首先校验是否过期,其次校验是否正确,不通过就让其登陆。(redis 做这个很方便哦,key有过期时间)
aes:https://blog.csdn.net/qq_28205153/article/details/55798628
2、http与https区别
区别:
1、加密:http协议对传输的数据不进行加密;https协议对传输的数据使用SSL安全协议进行加密,https加密需要CA签发的证书。
2、端口:http协议使用TCP的80端口;https协议使用TCP的443端口
3、网络分层模型:http可以明确是位于应用层;https是在http的基础上加上了SSL安全协议,而SSL是运输层协议,所以https是应用层和传输层的结合(我不同意网上将https粗暴地归为运输层的说法)
https如何保障安全
https使用SSL安全协议来保障安全性。具体体现在密钥和证书验证上。
密钥:
1、服务端生成一对公钥和私钥,将公钥和证书发送给客户端;
2、客户端验证证书通过后生成一个对称加密的密钥,并使用服务器生成的公钥加密,发送给服务器;
3、服务器使用私钥解密获得对称加密密钥。
4、客户端和服务器相互发送消息认可对称加密密钥,至此加密通道建立。
5、开始数据传输,在检验数据完整性的基础上,使用对称加密密钥进行加密解密。
证书验证:
一般来说浏览器都内置了权威CA的根证书,客户端使用根证书的密钥对服务器发来的证书进行解密验证,若域名、有效期、签发机关等验证项符合则通过,否则认定证书无效,断开连接。
HTTP协议简介
HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)
- 协议
协议规定了通信双方必须遵循的数据传输格式,这样通信双方按照约定的格式才能准确的通信。
-
无状态
无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息。 -
客户端/服务端模型
网络层级
应用层 —————— HTTP
传输层 —————— TCP UDP
网络层 —————— IP
数据链路层 ————数据链路
物理层 ——————物理介质
URL构成
用了这么久,你注意过吗?
协议内容
请求(Request)
客户端发送一个HTTP请求到服务端的格式:
-
请求行
-
请求头
-
请求体
-
响应(Response)
服务端响应客户端格式:
-
状态行
-
响应头
-
响应体
状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
更详细的状态码可查看 HTTP状态码
但一般我们只需要知道几个常见的就行,比如 200,400,401,403,404,500,502.
请求方法
截止到HTTP1.1共有下面几种方法:
请求和响应常见通用头