localStorage, чтобы сохранить объект, не имея возможности прочитать его содержимое? - PullRequest
0 голосов
/ 13 октября 2011

Я нашел хорошую функцию "localStorage" в HTML5. Как я понял, он позволяет сохранять только строки, поэтому нам нужно использовать eval () / JSON для сохранения объектов / функций.

Теперь я хочу знать, возможно ли сохранить строку, которая может быть выполнена с помощью eval (), но не может быть прочитана.

Поэтому я хочу использовать localStorage.setItem только один раз, полностью отключить localStorage.getItem и заменить его чем-то вроде «localStorage.evalItem».

Это был бы безопасный способ против XSS / MITM (после сохранения функций).

EDIT:

Подробности: идея состояла в том, чтобы сохранить что-то похожее на:

function aes_encode(string) {
   var salt='unique_salt';
   // aes encoding...
   return salty_encoded_string
}

в не читаемом (исходном) хосте хранилища на стороне посетителя.

А так как уникальная соль создается один раз для каждого посетителя, можно будет проверить данные клиента.

Но, как сказали Джеймс и Нуэллком (спасибо!), Невозможно избежать чтения источника.

Я не думаю, что отрицательное голосование является правильным, или вопрос был так неясен?!

1 Ответ

0 голосов
/ 13 октября 2011

Как правило, для предотвращения XSS не доверяйте данным, поступающим от клиентов.

Сюда входит все, что находится в локальном хранилище.LocalStorage не имеет флага HTTPOnly, как куки, чтобы сделать его недоступным для Javascript.Даже если это так, пользователь может использовать инструмент отладки для его изменения.По этой причине я бы рекомендовал не использовать eval() для всего, что вы получаете из localStorage.Я рекомендую вам использовать JSON sans eval для чтения объектов JSON и вообще не использовать его для функций.Вы должны быть в состоянии выполнить все, что сможете, поместив функции в localStorage, вместо этого используя соответствующее кэширование и автономные приложения .

В сторону, как вы описали это

localStorage.evalItem(key).toSource() == localStorage.getItem(key);

Так что я не верю, что ваш подход мог бы помешать кому-либо читать, если бы он мог вычислить.

...