Разоблачение приватных переменных в Javascript - PullRequest
1 голос
/ 03 ноября 2010

У меня вопрос по поводу защищенной памяти javascript. Если у меня есть функция, выполненная следующим образом:

var obj = function(){
    var secret = "secret",
        super_secret = "my super secret string";   
    return {
        get_secret: function() {
            return secret;
        }()
    }
}();

Возможно ли получить строку из super_secret любым способом?

Я видел некоторый эксплойт, который использовал throw () и Error (), чтобы получить переменную из функции. Однако это не было сделано с закрытием. Все отзывы и «догадки» очень приветствуются. Я планирую проект, в котором я должен быть уверен, что не существует какого-либо известного способа извлечь или изменить переменную super_secret.

Ответы [ 3 ]

2 голосов
/ 03 ноября 2010

Предполагая, что это в конечном итоге запустится в браузере, кто-то может просто просмотреть исходный код и скопировать его (вы сказали «любые средства»: -).

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

1 голос
/ 03 ноября 2010

Практически нет возможности сделать это.Даже если вы загрузите данные с какого-либо сервера, которого нет на странице, я могу легко открыть firebug и начать отладку, чтобы найти значение.Если вы должны иметь безопасность, то не подвергайте данные.Даже шифрование данных не поможет, потому что ключ, вероятно, будет где-то в JavaScript.

Может быть, если вы поделитесь своей проблемой, тогда мы сможем придумать лучшее решение.Javascript, вероятно, не ваш лучший вариант здесь.

Редактируйте, используя отладчик, вы можете делать все что угодно!Вот скриншот alt text

0 голосов
/ 03 ноября 2010

Единственное, что вы действительно можете сделать, это зашифровать и расшифровать super_secret на стороне сервера.Если вы отправляете незашифрованные данные клиенту или предоставляете ему средства для расшифровки ваших данных, ваши данные доступны клиенту, и вы не должны полагаться на то, что они скрыты.

...