首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mb增加关闭iframe跨域检查功能

mb增加关闭iframe跨域检查功能

作者头像
龙泉寺扫地僧
发布2019-02-20 09:54:09
1.6K0
发布2019-02-20 09:54:09
举报
文章被收录于专栏:盟主来了盟主来了

在主frame,使用

var frame = document.getElementById("login_frame");

console.log('haha2:' + dom.contentWindow);

这种方式访问子frame,存在跨域问题。

那么怎么在chromium里去掉这个检查呢。经过调试,发现仅仅去掉SecurityOrigin::canAccess之类还是不行,

原因是如下堆栈:

blink::V8Window::namedPropertyGetterCustom blink::DOMWindowV8Internal::namedPropertyGetterCallback v8::internal::PropertyCallbackArguments::Call v8::internal::`anonymous namespace'::GetPropertyWithInterceptorInternal v8::internal::JSObject::GetPropertyWithInterceptor v8::internal::Object::GetProperty v8::internal::JSReceiver::GetProperty v8::internal::Object::GetMethod v8::internal::JSReceiver::ToPrimitive v8::internal::Object::ToPrimitive v8::internal::Object::Add v8::internal::BinaryOpIC::Transition

v8::internal::Runtime_BinaryOpIC_Miss

会去取Symbol.toPrimitive,

关键就是这个Object::GetProperty,会调用it->HasAccess()去请求是否有访问权限。

it->HasAccess()里的逻辑是先检查

Context::cast(receiver_context)->security_token() ==  native_context->security_token()

再检查v8windows里设置的

DOMWindowV8Internal::securityCheck。

所以只要在WindowProxy::setSecurityToken里

把所有SecurityToken都用context->SetSecurityToken

设置成一样的,v8就全都放行了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档