一道关于https进行登录验证的前端面试题

问题:

假设目前网站的登录实现是,在http协议下,使用XHR方式调用http协议下的后端接口实现登录。现需求变更如下:
为了提高站点登录的安全性,登录接口要修改为ssl加密方式,请简述修改会带来的问题并出实现方案(要求:实现方案需兼容所有主流浏览器)。

补充说明: 请从浏览器的同源策略及HTTP安全角度作答。

答案:

既然是前端面试题,答案的范围自然就限定在了前端领域。

浏览器的同源策略要求当前域和被请求域的域名、端口和协议必须相同,其中有一点不同就会认定为跨域,因此,题目的一方面其实是考察前端开发中比较经典的跨域问题,这里是协议不同,属于完全跨域。

前端开发中跨域问题的解决,想必各位同仁都有一定的了解,像JSONP、iframe跨子域、Window name传输、postMessage方法等等,当然不同的方案会有不同的适用情形。

在题目里,需求的变更是为提高登录的安全性,由XHR的同域HTTP更换为SSL方式,即接口协议要换成HTTPS(它如何保证安全性,请自行Google),JSONP不具有安全性,首先排除掉。题目属于完全跨域,跨子域的方案自然是行不通的,因此把关注点放在postMessage和window name跨域上面。

postMessage属于浏览器的新特性,目前(IE8+、chrome、safari、
Firefox、Opera)等浏览器均已支持这一特性,可以用postMessage实现主页面和iframe的通信(完全跨域也是可以的),可以考虑使用postMessage在iframe和主页面之间实现相互通信。具体实现:在接口服务器(HTTPS)部署一个代理文件proxy.htm,这个HTTPS协议的代理页面就可以用XHR方式和同源的HTTPS协议的接口通信了。至此,较先进的浏览器中的这个问题得到解决。

但是,目前国内IE6、IE7及相应内核的浏览器,依然占据着很大的浏览器市场份额,对于这部分浏览器,考虑采用window name传输的方式,来实现主页面和iframe的通信了,具体window name的实现细节,在这里就不再描述了,大家可以参考怿飞的博文《使用 window.name 解决跨域问题》http://www.planabc.net/2008/09/01/window_name_transport/,

主页面和iframe之间的通信能保证相对安全性,真正和服务器之间的通信是经过HTTPS加密过的,因此能在一定程度上保证了信息安全。

至此,问题得到了解决,欢迎大家的任何意见和建议。

posted @ 2012-09-12 11:28  令狐葱★  阅读(964)  评论(0编辑  收藏  举报