zoukankan      html  css  js  c++  java
  • 一道关于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加密过的,因此能在一定程度上保证了信息安全。

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

  • 相关阅读:
    install_bugzilla
    R610 & R710 网卡问题
    总结开发者在合作过程中的典型交流方式
    vnc报错 font catalog is not properly configured
    eclipse插件安装
    extjs 点击链接到另一个页面 并激活另一个页面的指定tab
    centos c++ 找不到头文件mysql.h
    升级struts 2
    oracle 删除用户报错
    mysql 创建用户及授权
  • 原文地址:https://www.cnblogs.com/jiji262/p/2681485.html
Copyright © 2011-2022 走看看