在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
文件夹具有正确的完整性级别 ,并且DOMStore
registry值是正确的 ,请运行以下命令重新注册configuration文件中的IE:
32位操作系统:
C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
64位操作系统:
C:\WINDOWS\system32\ie4uinit.exe -BaseSettings C:\Windows\SysWOW64\ie4uinit.exe -BaseSettings
有关更多详细信息,请参阅IE MSDN博客 。