跨域localStorage的iframe出现(铬)(Cross-domain localStora

2019-06-24 19:39发布

我试图存储在使用iframe(实际上,我使用了XAUTH库在另一个域的值http://xauth.org/info/ )。 然而,当我尝试存储使用Chrome任何东西,它回来了“QUOTA_EXCEEDED_ERR:DOM异常22”,我已经逐渐认识到作为一个访问错误。 我嘲笑了以下几个非常简单的网页复制的效果:

文件1.HTML:

<html>
<head/>
<iframe src='http://127.0.0.1/2.html' />
</html>

文件2.HTML:

<html>
<head/>
<script>
console.log(localStorage);
localStorage.setItem('test', '123');
</script>
</html>

如果我把这两对我的本地服务器和接入本地主机/ 1.HTML它嵌入从127.0.0.1一个框(浏览器认为一个单独的域),我也得到相同的访问错误之上。 在猜测,看起来即使我从另一个域嵌入一个iframe,并且iframe中的脚本正确引用该域的localStorage的(因为我可以用的console.log(LocalStorage)刊登线看),权限用于写入的localStorage从页面顶部的网域。

总之,它看起来像没有IFRAME可以写信给localStorage的Chrome浏览器。 有谁知道如果有解决这个特殊的安全“功能”的方法吗? 还是我做错了什么?

Answer 1:

那么, localStorage是基于域的,并没有任何理由为你的示例代码失败。 什么它实际上是在设置test项目为123 127.0.0.1,而这将离开本地主机localStorage空。

这可能不是回答你的QUOTA_EXCEEDED_ERR的首要问题,而只是尝试切换到在Chrome隐私浏览(按Ctrl + Shift + N),看看您是否仍然有错误。 如果没有你最初做什么进一步的信息,我不能告诉很多,但我相信,超过配额,意味着这是什么意思?

我认为,Chrome的份额为2.5MB不像FF其中有配额的localStorage的5MB。



Answer 2:

只有当第三方cookie被禁用时出现问题。 Firefox和Opera的新版本也被阻止。 在IE和边缘仍然有可能,尽管第三方cookie被禁用。 如果localStorage的不会在iframe中被封锁,网络跟踪器可以简单地包括iframe中,读取cookie,将其发送到父脚本,然后将其发送到服务器。

这是为什么不阻止在IE和边缘的原因是,这些浏览器允许虽然第三方Cookie被封锁的网站发送第三方Cookie,这在以前设置为第一方Cookie,到服务器。 例如,如果定期用户访问Facebook的,他得到第一方Cookie来自Facebook。 当他再访问其他网站与Facebook的分享按钮,Facebook能够跟踪他虽然第三方cookie被禁用。 我真的不知道为什么IE和边缘不会阻止第三方cookie的发送,但我不会无论如何使用这些浏览器。

这些错误的浏览器显示当第三方cookie被禁用:

Chrome和Opera: Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

火狐: SecurityError: The operation is insecure.

IE与边缘:没有错误,访问localStorage的iframe中可能虽然第三方cookie被禁用。

所以在最后,它是不可能绕过这个安全功能(在Chrome,火狐,Opera)的,这是为了确保用户的隐私不错。



文章来源: Cross-domain localStorage with iframes (Chrome)