浅聊HTTP协议安全验证
HTTP协议是不安全的,如果没有SSL做底层支持,用HTTP Basic Authentication很容易让攻击者监听并获取到用户名和密码的信息。有人说用Base64做encode,这是没用的,攻击者获取到用户名密码后用Base64来decode一下就好了,那么为什么大多数情况我们传输的时候都要用Base64来encode呢?按照wiki上的说法:编码这一步骤的目的并不是安全与隐私,而是为将用户名和口令中的不兼容的字符转换为均与HTTP协议兼容的字符集。
那么我们怎么做呢,其他的登录情况还好说,改用正常的登录验证就好,难道做API的也要用其他方式而放弃HTTP Basic Authentication这么方便的方式么,那这个东西弄出来干吗?答案有好多种,我现在认为最好的方式是其他的都不用变,直接给服务端加SSL,请求由HTTP变成HTTPS请求。
SSL协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTP、FTP、Telnet等等)能透明的建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
这样就能保证发送的明文用户名密码不会被攻击者截取并破译。有效实现了验证的最终目的。如果我有哪里说的不对的地方,请大家指正。
(马俊)