在IE10中访问拒绝本地存储

昨天我安装了Windows 8,现在正试图理解为什么当访问localstorage时我得到“拒绝访问”消息。 该页面正在与浏览器(http:// localhost)在同一台PC上提供。 我的感觉是,在IE 10的安全设置之一是错误的,但我还没有想出哪一个。

触发错误的JavaScript代码行是:

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

该代码在最新版本的Chrome中正常工作。

我们的用户在使用IE 10的Windows 8上使用LocalStoragefunction(包括Twitter)时遇到了问题。当打开F12 Developer Tools访问其中一个站点时,控制台上出现一个SCRIPT5: Access is denied消息。

在使用Microsoft支持之后,我们确定了原因。 原来,用户configuration文件中的C:\Users\username\Appdata\LocalLow文件夹中的设置存在问题。

计算机上的每个文件夹都具有完整性设置。 有关此设置的用途的更多信息在这里: http : //msdn.microsoft.com/en-us/library/bb625964.aspx

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

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

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

至于这个设置是如何改变的? 在我们的例子中,这是由我们部署到我们工作站的定制Windows 8映像中的一个问题引起的。 对于那些有这个问题的人来说,我的研究表明,使用“系统更清洁”的工具可能是责任。

尝试在安全子列表的高级选项卡下的IE设置中启用增强保护模式。 这使Microsoft XSS筛选器。 我loginSE时遇到类似的问题,并获取谷歌通知,我的第一个解决方法是用pipe理员权限启动IE浏览器。 但是我认为EP模式也可以解决你的问题。

相关链接: 了解增强保护模式

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

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

重现问题时文件活动的configuration文件可以告诉您问题是由于缺less文件访问权限还是甚至是反病毒程序造成的。

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

毫无疑问,可能有相同的症状,许多原因,但这是什么解决这个问题给我。

在IE11中,只有一台IE11出现“访问被拒绝”的症状,其中一个是涉及window.localStorage JavaScript,其他信誉良好的网站也是如此。 使用Process Explorer时,显示近端原因是当taskhost.exe(代表Internet Explorer)试图打开DOMStore\container.dat进行通用读写时ACCESS DENIED。 事实上,它比这更糟糕:如果我删除了container.dat ,发生了同样的ACCESS DENIED,即使通过该文件不再存在。 而且,如果我删除了(隐藏的) DOMStore文件夹,当taskhost.exe试图重新创build它时,也会收到ACCESS DENIED。

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

registry项:

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

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

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

当它应该是:

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

结果是低完整性localStorage请求被引导到AppData磁盘存储的中等完整性区域,从而产生ACCESS DENIED错误,并且导致使用JavaScript window.localStorage

这个registry条目多年来一直是错误的:也许是热衷于采用错误的平台预览等等的副作用。 完全移除和重新安装IE11后,这个错误仍然存​​在。

中等完整性caching有一个类似外观的registry项:

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

并且正确地保留为:

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

不应该改变。

转到工具/ Internet选项/高级,并在“安全”下select“启用DOM存储”checkbox。 这应该解决这个问题

我将涉及的网站添加到IE的可信站点部分,并没有再次收到错误。

此问题也可能是由于缺less或损坏的registry项造成的。 如果重置不能解决问题, LocalLow文件夹具有正确的完整性级别 ,并且DOMStoreregistry值是正确的 ,请运行以下命令重新注册configuration文件中的IE:

32位操作系统:

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

64位操作系统:

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

有关更多详细信息,请参阅IE MSDN博客 。