Chr*_*ris 6 javascript iframe google-chrome local-storage
我正在尝试使用iframe将值存储在另一个域上(实际上,我正在使用http://xauth.org/info/上的xauth库).但是,当我尝试使用Chrome存储任何内容时,它会返回"QUOTA_EXCEEDED_ERR:DOM Exception 22",我将其视为访问错误.我在下面嘲笑了几个非常简单的页面来复制效果:
文件1.html:
<html>
<head/>
<iframe src='http://127.0.0.1/2.html' />
</html>
Run Code Online (Sandbox Code Playgroud)
文件2.html:
<html>
<head/>
<script>
console.log(localStorage);
localStorage.setItem('test', '123');
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
如果我将这两个放在我的本地服务器上并访问localhost/1.html,它会嵌入127.0.0.1(Chrome认为是一个单独的域)的帧,并且我得到与上面相同的访问错误.猜测,看起来即使我从另一个域嵌入iframe,并且iframe中的脚本正确引用该域的localStorage(我可以通过console.log(localStorage)行看到),权限写入localStorage的内容来自首页的域名.
简而言之,似乎没有iframe可以在Chrome中写入localStorage.有没有人知道是否有办法绕过这个特定的安全"功能"?或者我做错了什么?
只有在禁用第三方 cookie 时才会出现此问题。较新版本的 Firefox 和 Opera 也阻止了它。在 IE 和 Edge 中,尽管禁用了第三方 cookie,但仍然可以使用。如果 localStorage 不会在 iframe 中被阻止,Web 跟踪器可以简单地包含一个 iframe,读取 cookie,将其发送到父脚本,然后将其发送到服务器。
这在 IE 和 Edge 中没有被阻止的原因是这些浏览器允许网站将第三方 cookie 发送到服务器,尽管第三方 cookie 被阻止,但以前设置为第一方 cookie。例如,如果用户定期访问 facebook,他会从 facebook 获取第一方 cookie。当他随后通过 facebook 的分享按钮访问其他网站时,尽管第三方 cookie 被禁用,facebook 仍可以跟踪他。我真的不知道为什么 IE 和 Edge 不阻止第三方 cookie 发送,但我无论如何都不会使用这些浏览器。
禁用第三方 cookie 时浏览器显示的错误:
铬和歌剧: Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
火狐: SecurityError: The operation is insecure.
IE 和 Edge:没有错误,尽管禁用了第三方 cookie,但可以访问 iframe 中的 localStorage。
所以总而言之,绕过这个安全功能是不可能的(在 Chrome、Firefox、Opera 中),这是很好的,以确保用户的隐私。
嗯,localStorage是基于域的,您的示例代码没有理由失败。它实际上所做的是将127.0.0.1 的test项目设置为123,而它将 localhost 留空localStorage。
这可能不是您最初的 QUOTA_EXCEEDED_ERR 问题的答案,但只需尝试在 Chrome 上切换到隐私浏览 (Ctrl+Shift+N) 看看是否仍然存在该错误。如果没有关于您最初在做什么的进一步信息,我无法透露太多,但我相信超出配额意味着什么......
我认为 Chrome 的配额是 2.5mb,而 FF 的 localStorage 配额是 5mb。
| 归档时间: |
|
| 查看次数: |
10441 次 |
| 最近记录: |