1、需求描述
一个页面中包含两部分内容,一块内容是本系统中的页面,要展示一些本系统中后端接口返回的数据的内容,一块完全是另一个项目的页面,但这个页面是需要认证信息才能打开的,因此会涉及到跨域信息传递的问题,iframe 引入的页面能拿到主站页面传递给它的认证信息,然后正常展示出来页面。
2、解决思路
实现的时候考虑使用iframe引入第三方页面的方式。
1) 传递认证信息的方式—postMessage
对于主站向iframe引入的页面传递认证信息,可以通过 postMessage 来进行,但是要能够 postMessage 传递认证信息的前提是iframe 引入的页面能够正常显示,但是事实上没有认证信息,iframe引入的页面是不能正常显示的,这貌似就陷入了一个死循环。
2)传递认证信息—cookie
另一个想到的方法就是 cookie 传递信息了,这个引入的页面和当前的主站页面有一个关系就是,引入的页面是主站的子域,那么写cookie的时候有一个规则,cookie 的 domain 写成 aaacom写到主站,那么 testaaacom 和aaacom 页面都可以获取到cookie信息并利用起来。
上面的第二种方法是已经经过实践检验的,在打开主站的情况下,cookie 的domain设置成xxxcom的方式,浏览器打开子域的页面,子域页面中是可以拿到这个cookie的信息的。
但是当前的问题并不是直接在浏览器中打开页面,而是在主站中以 iframe 的方式引入页面,这样也能看到吗??
3、实践
有句话是这么说的,实践是检验真理的唯一标准,经过实践检验后,第二种方法是可行的,在浏览器中保存过一个页面的cookie之后,无论是直接打开一个页面,还是别的页面通过 iframe 引入该页面,cookie都是可以被利用到的。
4、思考
所以 cookie 其实是存在浏览器中的,只要浏览器中的这个cookie 文件保存,并且cookie是有效的,那么在当前页面引入与本页面无关的页面,都是可以的,csrf 跟这个有什么关系呢?
其实觉得自己写了一堆智障的东西,以后还是要多写,多研究,才能真正知道自己有多浅薄。
由于安全问题,cookie只能访问对象只能来自同一个域。
所以,你需要将获取cookie的代码放在同一个域。
或者通过修改表头信息来hack到,这种方法麻烦,而且是黑客技术,出于法律相关,我不能向你说更多。
另外,如果你使用的是chrome或者类似的支持插件的浏览器,可以通过contentScript来实现,这是一个大内容。具体可以参考相关的官方文档。
cookie是加密的信息,你获取来意义不大,它的验证方法会把相关信息发到服务器,一旦不符合就不符合了。
如果不是同一个站点,而且你记录了cookie或本地存储,实际存储的站点名称不相同,所以会取不到本地存储的数据。可以看你的使用环境需要哪些数据,获取的数据是否正常。
360浏览器有谷歌内核和ie内核,如果是谷歌内核而且版本一致就应该是和谷歌浏览器打开是一样的。
分析到之后,再次 请求就是了。 要你再次登录,说明你没有递交session(cookie)
你的采纳是我前进的动力,还有不懂的地方,请继续“追问”。
如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助。
iframe父子级页面保证ip和域名一致。cas集成使用iframe的时候(父和子iframe的用的是单点登陆),一般不要单独的配置cookie信息集成到cas管理器中,用默认的即可,否则在ie中iframe共享不到父页面的cookie信息,即会出现单点登陆了父但是iframe子中的页面还是会被cas拦截,要求重新登陆(火狐,chrome,父iframe子可以自动公用cookie),iframe父子级页面保证ip和域名一致可避免iframe使用父页面的cookie。iframe是内联框架的简称,是一种允许外部网页嵌入到HTML文档中的HTML元素。与传统的用于创建网页结构的框架不同,iframe可以插入网页布局中的任何位置。
以上就是关于利用iframe引入需要认证的跨域页面全部的内容,包括:利用iframe引入需要认证的跨域页面、如何使用嵌入在第三方页面的代码获取自己站点的cookie信息、谷歌浏览器 iframe打开url会先跳转登录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)