七、确保Web安全的HTTPS
HTTP主要有这些不足:
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
通信的加密:和SSL组合使用的HTTP被称为HTTPS
内容的加密:客户端和服务端需要加密和解密
如何防止篡改:常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。
HTTPS = HTTP + 加密 + 认证 + 完整性保护
经常会在Web的登录页面和购物结算界面等使用HTTPS通信
八、确认访问用户身份的认证
何为认证:客户端需要自报家门,HTTP/1.1使用的认证方式如下:
BASIC认证(基本认证):不常用
DIGEST认证(摘要认证):不怎么用
SSL客户端认证:虽具有高度的安全等级,但需要费用,尚未普及
FormBase认证(基于表单认证):客户端发送登录信息
基于表单认证:一般会使用Cookie来管理Seesion
步骤1:客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。
步骤2:服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端。向客户端返回响应时,会在首部字段Set-Cookie内写入Session ID(如PHPSESSID=028a8c...)。你可以把Session ID想象成一种用以区分不同用户的等位号。然而,如果Session ID被第三方盗走,对方就可以伪装成你的身份进行恶意操作了。因此必须防止Session ID被盗,或被猜出。为了做到这点,Session ID应使用难以推测的字符串,且服务器端也需要进行有效期的管理,保证其安全性。另外,为减轻跨站脚本攻击(XSS)造成的损失,建议事先在Cookie内加上httponly属性。
步骤3:客户端接收到从服务器端发来的Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID也随之发送到服务器。服务器端可通过验证接收到的Session ID识别用户和其认证状态。
通常对密码加盐(salt)的方式增加额外信息,再使用散列(hash)函数计算出散列值后保存。