HTTP 不安全?
HTTP报文在客户端与服务器之间传输的形式是明文,在传输的过程中,HTTP报文会经过很多网络节点,首先是局域网的路由器(例如家庭的路由器),然后是运营商的交换机或路由器,接着到目标服务器所在局域网的路由器,最终到达目标服务器,被它接收。
之所以说HTTP不安全,是因为传输的数据是明文,在客户端与服务器之间传输的过程中,也就是明文经过中间的网络节点时,存在被嗅探的风险。
攻击方式:
(1)在运营商的交换机或路由器上嗅探流量。(不知道有没有发生过这种事=.=)
(2)WiFi劫持,假WiFi中间人。
HTTPS比HTTP安全?
HTTPS的 "S" 是 "SSL",在HTTP的基础上再增加一个协议,这个协议用于协商加密算法,位于传输层与应用层之间,在应用层的数据(例如 HTTP 报文)往下传给传输层之前,SSL对数据进行加密,然后再把密文封装到传输层协议中。
HTTP报文被加密后,即使攻击者在传输过程中捕获到报文,也无法解密成明文。攻击者无法理解报文的内容,也就无法窃取或篡改数据。这就保证了数据的保密性和完整性。
HTTP & 口令MD5
假设网站的前端与后端的通信协议是 HTTP ,在传输用户的登录口令时,可以在传输之前,前端计算口令的 MD5 值,然后再发送给服务器,这样可以尽可能地保证口令被窃取后不被破解。
重放攻击
攻击者可以截获报文,例如一个登录的请求报文,然后再发送一次给服务器,从而成功登录受害者的账号。
要防御这种攻击,可以在请求报文中加一个随机值(或者 salt),这个随机值可以和口令一起计算 MD5 值,也可以用一个独立的参数存储,被请求报文携带,发送到服务器上。在服务器上,也存储相同的随机值,用于验证从客户端发送过来的随机值。
最重要的一点是,这个随机值最好是一次性的,即使用一次就失效。这样的一次性正好挫败了重放攻击的重复性,也就防御了攻击。