2016-09-29 2 views
0

Как разместить конфиденциальные учетные данные в браузере, чтобы они могли быть доступны через javascript на веб-странице, но не сервером или другими веб-сайтами?Хранить конфиденциальные данные в браузере, поэтому он недоступен другим сайтам.

Я создаю веб-сайт, на котором отображаются зашифрованные сообщения AES для пользователей. Сообщение извлекается через API и хранится на моем сервере. Пользователь может войти и ввести свой ключ для расшифровки в браузере, например:

$(document).on("submit", "#decryption_form", function(e) { 
    e.preventDefault(); 
    var key  = $("#key").val();         // The key is retrieved through a form input div 
    var iv  = key.substring(32);        // The initialization vector is a part of the key submitted by the user 
    var encrypted = $("#message").attr("encrypted");     // The encrypted message that was fetched from the server was added as an attribute to a div 
    var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv }); // The message is decrypted 
    $("#message").html(decrypted);         // The decrypted message is displayed to the user 
}); 

Я заметил, что ProtonMail - ноль знаний поставщик услуг электронной почты, кто то поставить PGP ключей в браузере должна быть расшифрована с вашим учетные данные - могут сохранять конфиденциальные учетные данные даже при обновлении веб-страницы или копировать/вставлять URL-адрес в одну и ту же вкладку браузера (но не вставлять URL-адрес в новую вкладку). Их исходный код open source, но слишком сложный для меня, чтобы понять.

Это заставляет меня думать, что я должен как-то быть в состоянии защитить конфиденциальные учетные данные и даже сохранить данные для пользователей, которые перемещаются между моими веб-страницами на той же вкладке браузера (без необходимости отправлять ее через мой сервер).

This post обсуждает тему, но без канонических/конкретных ответов. Существует также this 3 year old post, но в основном комментарии касаются того, почему OP необходимо хранить в браузере данные о часах.

+0

Ваши основные варианты [хранения сессий] (https://developer.mozilla.org/en- US/docs/Web/API/Window/sessionStorage) и файлы cookie. Обратите внимание, что пользователь браузера может получить доступ к ключам, но это, вероятно, хорошо в вашем случае. – Pointy

+0

Может быть, с маркером внутри печенья? – Hackerman

+0

Вы должны хранить конфиденциальную информацию в зашифрованном формате, и пока вы не поделитесь своим личным ключом, никто не сможет его расшифровать. –

ответ

2

Хранилище веб-сайтов (spec, MDN) является изначальный. Если мое происхождение хранит данные там, ваш не может прочитать его оттуда (ошибки в модуле браузера).

Куки-файлы также зависят от конкретного сайта (и могут быть специфичными для конкретных маршрутов), но файлы cookie передаются по кабелю, а веб-хранилище очень хорошо поддерживается (и с гораздо более лучшим API), нет настоящая причина использовать файлы cookie для чего-то вроде этого и по крайней мере пары действительно хороших причин.

Обратите внимание, что ничто не мешает конечному пользователю просматривать вещи в веб-хранилище или файлы cookie через встроенные инструменты разработчика Dev. Но, как вы сказали, эти ключи являются собственностью пользователя, по-видимому, это только проблема, если кто-то получает доступ к своей машине ...

+0

Спасибо за ответ. Вы обращаетесь к веб-хранилищу, но, читая его, существуют различные типы веб-хранилища. Ваша ссылка MDN специально предназначена для LocalStorage, и так ли это? И если да, можете ли вы представить несколько строк кода для справки? Как я читал, это можно сделать с помощью 'localStorage.setItem (« ключ »,« 123 »);' и 'localStorage.getItem (« ключ »);', но я должен быть уверен, что это правильный подход. – ChristofferJoergensen

+0

@ChristofferJoergensen: Хранилище Web состоит из 'localStorage' и' sessionStorage'. Единственное различие между ними - истечение срока действия: 'sessionStorage' истекает в конце сеанса (см. Спецификацию для сеанса),' localStorage' не работает. За то, о чем вы говорите, я подозреваю, что вы хотите «localStorage». –

+0

@ T.J.Crowder, благодарю вас за отличную игру! Один быстрый вопрос. Что относительно расширений браузера? Они могут получить доступ к веб-хранилищу любой страницы.Таким образом, если пользователь устанавливает вредоносное расширение, его данные, сохраненные в веб-хранилище, могут быть доступны с помощью расширения. Я прав? Есть ли какое-нибудь обходное решение? –

0

Данные, хранящиеся в файлах cookie, сеансе, локальном хранилище, доступны пользователям средствами отладки или другим способом.

У вас есть возможность сильного шифрования только которое трудно расшифровать (но возможно в некоторых случаях) :-)

+0

Пожалуйста, объясните: «трудно расшифровать (но возможно в некоторых случаях)». – zaph

Смежные вопросы