Доступ запрещен для localstorage в IE10
Вчера я установил Windows 8 и теперь пытаюсь понять, почему я получаю сообщение "Отказано в доступе" при доступе к localstorage. Страница выполняется на том же ПК с браузером (http://localhost). Я чувствую, что один из параметров безопасности в IE 10 ошибочен, но я не понял, какой из них.
Строка кода JavaScript, вызывающая ошибку:
if(window.localStorage.getItem('phone') == null)
Код работает отлично в последней версии Chrome.
Ответы
Ответ 1
У наших пользователей возникли проблемы с веб-сайтами, используя функцию LocalStorage (включая Twitter) в Windows 8 с IE 10. При открытии одного из этих сайтов с помощью инструментов разработки 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, который мы развернули на наших рабочих станциях. Для других, у которых возникла проблема, мои исследования показали, что использование утилиты "очиститель системы" может быть виноватой.
Ответ 2
Попробуйте включить расширенный защищенный режим в настройках IE на вкладке "Дополнительно" в подменю "Безопасность". Это позволяет использовать фильтр Microsoft XSS. У меня были подобные проблемы при входе в SE, а также при получении уведомлений Google +, и в моем первом обходном пути был запущен IE с правами администратора. Но я думаю, что режим EP будет делать трюк в вашем случае.
Ссылки по теме: Общие сведения об улучшенном защищенном режиме
Ответ 3
Марк Руссинович всегда говорит: "Если у вас есть сомнения, используйте " Монитор процессов":
localStorage данные хранятся в файлах XML в следующей папке:
C:\Users\[USERNAME]\AppData\Local\Microsoft\Internet Explorer\DOMStore
Профиль активности файла при воспроизведении проблемы может сообщить вам, возникла ли проблема из-за отсутствия прав доступа к файлу или, возможно, даже антивирусной программы.
Я могу воспроизвести ошибку, добавив атрибут "только для чтения" в "DOMStore\container.dat". Вы должны проверить правильность установки всех прав доступа и атрибутов файлов/папок. На моей машине администраторы и моя учетная запись имеют полное разрешение для указанной папки.
Ответ 4
Несомненно, может быть много причин тех же самых симптомов, но вот что исправило эту проблему для меня.
У меня был только один из многих ПК с Windows 7 с IE11, демонстрирующий симптом "Отказано в доступе" при попытке любого JavaScript, включающего window.localStorage
, с других авторитетных и хорошо управляемых веб-сайтов. Использование Process Explorer показало, что проксимальная причина была ACCESS DENIED, когда taskhost.exe(действуя от имени Internet Explorer) попытался открыть DOMStore\container.dat
для Generic Read-Write. На самом деле это было хуже: если я удалил 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
вследствие чего запросы локального хранилища с низкой степенью целостности направлялись в регионы с высокой степенью целостности дискового хранилища 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
и не следует изменять.
Ответ 5
Перейдите в раздел "Инструменты/Свойства Интернета/Дополнительно" и в разделе "Безопасность" установите флажок "Включить хранилище DOM". Это должно устранить проблему.
Ответ 6
Я добавил сайты, вовлеченные в раздел надежных сайтов IE, и еще не получил ошибку.
Ответ 7
Эта проблема также может быть вызвана отсутствием или повреждением записей реестра. Если a reset не устраняет проблему, папка LocalLow
имеет правильную целостность уровень и DOMStore
значение реестра верное, выполните приведенные ниже команды, чтобы перерегистрировать IE в профиле:
32-битная ОС:
C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
64-битная ОС:
C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
C:\Windows\SysWOW64\ie4uinit.exe -BaseSettings
Подробнее см. блог IE MSDN.