【问题标题】:Access Denied for localstorage in IE10IE10 中的本地存储访问被拒绝
【发布时间】:2012-10-17 14:46:39
【问题描述】:

昨天我安装了 Windows 8,现在我试图了解为什么我在访问本地存储时收到“拒绝访问”消息。该页面通过浏览器 (http://localhost) 在同一台 PC 上提供服务。我的感觉是IE 10中的安全设置之一是错误的,但我还没弄清楚是哪一个。

触发错误的JavaScript代码行是:

if(window.localStorage.getItem('phone') == null)

该代码在最新版本的 Chrome 中运行良好。

【问题讨论】:

  • 不能重复,在这里工作得很好。您可以尝试在jsfiddle 上进行演示吗?
  • 我觉得由于不同的安全设置,它可能对您有用?在进行演示之前,我将尝试更多地摆弄我的东西。如果您的设置不同,那么演示很可能也适合您。如果我发现答案,我会发布它。
  • 我把事情缩小了一点。当我在localhost 上使用 F12 开发人员工具时,输入对 window.localStorage 的监视会发出拒绝访问错误。在公开网站 (microsoft.com) 上执行此操作会显示一个存储对象。因此,jsfiddle 上的演示很可能无法运行,因为那是一个公共站点。我将尝试在 Internet 和本地 Intranet 之间的 IE10 安全设置中四处寻找,看看是否有什么不同。
  • 我注意到 window.localStorage 发出拒绝访问错误,但 window.sessionStorage 没有。在这种情况下,无论如何我都应该使用 sessionStorage,所以我将改造应用程序。但是,了解正在发生的事情仍然会很好。该代码在 Win7/IE9 中运行良好。
  • 我不知道 SuperUser 网站。看起来像是添加到工具包中的一个不错的工具。我确实意识到最初的问题是面向用户而不是面向代码,但是由于我编写的代码而发生了问题。通过这种推理,我认为其他人编写相同的代码也可能会在 StackOverflow 上查看。

标签: javascript local-storage access-denied internet-explorer-10


【解决方案1】:

尝试在 IE 设置中的“高级”选项卡下的“安全”子列表中启用增强保护模式。这将启用 Microsoft XSS 筛选器。我在登录 SE 并获取 google+ 通知时遇到了类似的问题,我的第一个解决方法是使用管理员权限启动 IE。但我认为 EP 模式也可以解决您的问题。

相关链接:Understanding Enhanced Protected Mode

【讨论】:

    【解决方案2】:

    Mark Russinovich 总是说:“如有疑问,请使用Process Monitor”:

    localStorage 数据存储在以下文件夹中的 XML 文件中: C:\Users\[用户名]\AppData\Local\Microsoft\Internet Explorer\DOMStore

    重现问题时的文件活动配置文件可以告诉您问题是由于缺少文件访问权限还是由防病毒程序引起的。

    我可以通过将只读属性添加到“DOMStore\container.dat”来重现该错误。您应该检查所有文件/文件夹权限和属性是否设置正确。在我的机器上,管理员和我自己的帐户对上述文件夹拥有完全权限。

    【讨论】:

    • 不幸的是,我的计算机在 Internet Explorer 文件夹中甚至没有 DOMStore 文件夹。您是否在 Windows 8 中运行 IE10?它必须是 Metro/Modern 版本,因为它可以与 Legacy 版本配合使用。
    • 哦,你从来没有提到过使用沉浸式模式。我在 Win8 Enterprise 上运行 IE10。请改为检查此文件夹:C:\Users\[USERNAME]\AppData\Local\Packages\windows_ie_ac_001\AC\Microsoft\Internet Explorer\DOMStore
    • 我在 Internet Explorer 文件夹中找到的唯一文件夹是 iconcache。
    • 确保您可以see hidden files and folders 并让我知道是否仍然缺少 DOMStore。
    • DOMStore 文件夹有一个系统属性(对我来说)。您可能需要清除“隐藏受保护的操作系统文件(推荐)文件夹”才能看到它。
    【解决方案3】:

    我们的用户在使用带有 IE 10 的 Windows 8 上使用 LocalStorage 功能(包括 Twitter)的网站时遇到问题。在打开 F12 开发人员工具的情况下访问其中一个网站时,控制台上会出现 SCRIPT5: Access is denied 消息。

    在与 Microsoft 支持人员合作后,我们确定了原因。结果是他们用户配置文件中C:\Users\username\Appdata\LocalLow 文件夹的设置有问题。

    您计算机上的每个文件夹都有一个完整性设置。有关此设置用途的更多信息,请点击此处:http://msdn.microsoft.com/en-us/library/bb625964.aspx

    每个用户配置文件中AppData\LocalLow 文件夹(及其子文件夹)的完整性设置应该设置为“低”(因此得名)。在我们的例子中,该文件夹的完整性级别设置不正确。要解决此问题,请在命令提示符窗口中运行以下命令:

    icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L

    (如果计算机上有多个用户帐户并且其他用户有相同的问题,则需要在每个受影响用户的帐户下运行该命令。)

    至于这个设置最初是如何改变的?在我们的案例中,它是由我们部署到工作站的自定义 Windows 8 映像中的问题引起的。对于其他遇到此问题的人,我的研究表明,使用“系统清洁器”实用程序可能是罪魁祸首。

    【讨论】:

    • 确保在运行 IICS 之前关闭 IE
    • 如果您想重现该错误,请运行icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)H。 H 将完整性模式设置为“高”(无论这意味着什么),然后 IE 将对 localStorage 进行分析。
    • 要重现,就像@skrebbel 建议的那样,以管理员身份运行 CMD。 (开始>搜索“cmd”>右键>以管理员身份运行>icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)H
    • 好话题!我想你可能会觉得这个链接也很有趣。问题不仅在 IE11 answers.microsoft.com/en-us/ie/forum/ie10-windows_7/…
    【解决方案4】:

    转到工具/Internet 选项/高级,然后在“安全”下选择“启用 DOM 存储”复选框。这应该可以解决问题

    【讨论】:

      【解决方案5】:

      毫无疑问,可能有很多原因导致相同的症状,但这是为我解决此问题的方法。

      我只有一台装有 IE11 的 Windows 7 PC 在尝试任何涉及 window.localStorage 的 JavaScript 时出现“访问被拒绝”的症状,这些 JavaScript 来自其他信誉良好且行为良好的网站。 Process Explorer 的使用表明,最近的原因是当 taskhost.exe(代表 Internet Explorer)试图打开 DOMStore\container.dat 进行通用读写时访问被拒绝。事实上,更糟糕的是:如果我删除了container.dat,同样的 ACCESS DENIED 也会发生,即使文件已经不存在了。而且,如果我删除了(隐藏的)DOMStore 文件夹,当 taskhost.exe 尝试重新创建它时,它也会收到 ACCESS DENIED。

      追了两天假线索,最终的解决办法是这样的:

      注册表项:

      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\LowCache\Extensible Cache\DOMStore\CachePath
      

      (请注意该字符串中的LowCache)被错误地设置为:

      %USERPROFILE%\AppData\Local\Microsoft\Internet Explorer\DOMStore
      

      什么时候应该:

      %USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore
      

      导致低完整性 localStorage 请求被定向到 AppData 磁盘存储的中等完整性区域,从而产生 ACCESS DENIED 错误,并终止 JavaScript window.localStorage 的使用。

      这个注册表项多年来一定是错误的:也许是热心接受有缺陷的平台预览等的副作用。此错误在完全删除和重新安装 IE11 后仍然存在。

      中等完整性缓存有一个外观相似的注册表项:

      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Extensible Cache\DOMStore\CachePath
      

      正确地保留为:

      %USERPROFILE%\AppData\Local\Microsoft\Internet Explorer\DOMStore
      

      并且不应更改。

      【讨论】:

      • Extensible Cache下缺少DOMStore文件夹怎么办?
      【解决方案6】:

      我将涉及的网站添加到 IE 的受信任站点部分,但没有再次收到错误消息。

      【讨论】:

        【解决方案7】:

        此问题也可能是由于注册表项丢失或损坏造成的。如果a reset 不能解决问题,LocalLow folder has the correct integrity levelDOMStore registry value is correct,请运行以下命令在配置文件中重新注册 IE:

        32 位操作系统:

        C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
        

        64 位操作系统:

        C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
        C:\Windows\SysWOW64\ie4uinit.exe -BaseSettings
        

        有关详细信息,请参阅IE MSDN blog

        【讨论】:

        • C:\Windows\SysWOW64\ie4uinit.exe -BaseSettings 未找到,MSDN 博客链接失效。
        • @PhillipRemaker,不确定。由于它仍然存在于本机位(system32)中,我可能假设不再需要单独调用 SysWow64。
        • 我更新了链接以包含 MSDN 帖子的存档版本。我猜 32 位版本在现代 64 位 Windows 上运行良好。它没有解决我的问题,这是“%LOCALAPPDATA%\Microsoft\Internet Explorer”中莫名其妙的权限损坏 - 我对此添加了一个答案。
        【解决方案8】:

        除了这里已经很好的答案之外,我想补充一点。在我的例子中,Windows %LOCALAPPDATA% 目录结构的 NTFS 权限被某种方式破坏了。

        诊断此问题。我创建了一个新的 Windows 帐户(配置文件),它与 localStorage 配合得很好,所以我煞费苦心地遍历了各自的 %LOCALAPPDATA%\Microsoft\Internet Explorer 树寻找差异。

        我找到了这个宝石:

        C:\Users\User\AppData\Local\Microsoft>icacls "Internet Explorer"
        Internet Explorer Everyone:(F)
        

        我不知道权限是如何被完全开放的!

        更糟糕的是,所有子目录都关闭了所有权限。难怪 DOMStore 无法访问!

        另一个帐户的工作权限是:

         NT AUTHORITY\SYSTEM:(OI)(CI)(F)
         BUILTIN\Administrators:(OI)(CI)(F)
         my-pc\test:(OI)(CI)(F)
        

        与父目录的权限匹配。

        因此,出于懒惰,我通过将所有目录设置为“Internet Explorer”并继承权限来解决问题。正确的做法是手动应用每个权限,而不是依赖继承函数。但是,如果您遇到此问题,需要检查的一件事是 %LOCALAPPDATA%\Microsoft\Internet Explorer 的 NTFS 权限。如果 DOMStore 的权限被破坏,所有访问 localStorage 的尝试都将被拒绝访问。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-10
          • 2013-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多