2016-11-28 2 views
0

LocalStorage обычно используется приложениями. Разве это не означает, что ваши ценности могут быть изменены или удалены другими приложениями? Или используется какое-то пространство имен, чтобы значения сохранялись на основе каждого домена и не подвергались риску вмешательства? Подсказки будут оценены.LocalStorage обычно используется приложениями, поэтому как избежать случайного удаления данных?

+1

* "Не имеет что означает, что ваши ценности могут быть изменены или удалены другими приложениями?«* - Учитывая, что он уникален для каждого домена, различные приложения в домене могут обмениваться данными друг с другом (возможно, случайно, если большая компания имела несколько групп разработчиков, работающих на разных приложениях/страницах в одном домене). – nnnnnn

+0

@ nnnnnn. Для сайта, такого как 'github.com', если бы я мог запускать JS в своей области https://github.com/sideshowbarker/GitHub и используемом локальном хранилище или где бы то ни было, я мог бы связываться с данными на стороне клиента еще с учетной записью GitHub было какое-то приложение в их хранилище, и они могли общаться с любыми данными на стороне клиента, которые я сохранил из своей области, потому что мы оба будем запускать приложения под тем же 'https: // github.com' и спецификации для локального API хранилища и, в основном, всех других клиентских API для веб-платформы, не мешают этому. Потому что все они для каждого источника. – sideshowbarker

+0

Ладно, спасибо. Не могли бы вы предложить добавить идентификатор приложения для каждого значения localStorage, связанного с моим pp? – Grateful

ответ

3

localStorage уникален для каждого происхождения, поэтому является защищенным и не может вмешиваться другими веб-сайтами или приложениями.

spec специфически говорит

Объект LocalStorage обеспечивает Storage объект для происхождения.
Агенты пользователя должны иметь набор локальных областей хранения, по одному для каждого источник.

Потребители должны иметь доступ к данным из локальных областей хранения только для причинам безопасности или по запросу пользователя.
Пользовательские агенты всегда должны избегать удаления данных во время сценария, который мог получить доступ к , что данные запущены.

Когда атрибут LocalStorage доступен, агент пользователя должен запустить следующие шаги, которые известны как этапы инициализации объекта хранения :

  1. Агент пользователя может бросить «SecurityError» DOMException и abort эти шаги вместо того, чтобы возвращать объект хранения, если запрос нарушает политические решения (например, если пользовательский агент настроен на , чтобы страница не сохранялась).

  2. Если источник документа является непрозрачным источником, затем выбросьте DOMException "SecurityError" и прервите эти шаги.

  3. Проверьте, чтобы увидеть, если агент пользователя выделил локальную область хранения данных для происхождение документа Window объекта, на котором был доступ атрибут .
    Если это не так, создайте новую область хранения для этого происхождения.

  4. Верните объект хранения, связанный с местным хранилищем этого источника .
    Каждый объект Document должен иметь отдельный объект для своего атрибута localStorage Window.

Обратите внимание, что "an origin" довольно конкретно определен, но для локального хранения это означает протокол, домен и порт должен соответствовать для двух конечных точек считать одного и того же происхождения

+0

Почему факт, что это свойство «окна», обязательно означает, что он уникален по происхождению? Гипотетический объект 'sharedStorage' также может принадлежать' window', не так ли? (Конечно, вы правы, что 'localStorage' * уникально по происхождению, я не пытаюсь оспаривать это.) – nnnnnn

+0

@nnnnnn - конечно, это возможно, но в целом' window' является глобальным, ни одно из его свойств разделены между другими «окнами», но я отредактировал ответ. – adeneo

+0

Ну, '.localStorage' * * делится на несколько окон из того же домена, поэтому ... Во всяком случае, я просто придирчивы к формулировке, а отредактированная версия Это хорошо. – nnnnnn