Выставление частных переменных в JavaScript
-
28-09-2019 - |
Вопрос
У меня вопрос о защищенной памяти JavaScript. Если у меня есть функция, сделанная подобная это:
var obj = function(){
var secret = "secret",
super_secret = "my super secret string";
return {
get_secret: function() {
return secret;
}()
}
}();
Можно ли получить строку из Super_Secret любыми средствами?
Я видел некоторую эксплуатацию, который использовал бросок () и ошибку (), чтобы получить переменную вне функции. Однако это не было сделано с закрытием. Все входные и «грешники» очень приветствуются. Я планирую проект, где мне нужно быть уверенным, что нет никакого известного способа извлечения или модификации переменной Super_Secret.
Решение
Там почти нет способа сделать это. Даже если вы загружаете данные с некоторых серверов, которые не находятся на странице, чтобы начать, я могу легко открыть Firebug и начните отладку, чтобы найти значение. Если вы должны иметь безопасность, то не подвергайте данные. Даже шифрование данных не поможет, потому что ключ, вероятно, будет где-то в JavaScript.
Может быть, если вы поделитесь тому, что ваша проблема тогда мы можем подумать о лучшем решении. JavaScript, вероятно, не ваш лучший вариант здесь.
Редактировать, используя отладчик, вы можете сделать что-нибудь! Вот скриншот
Другие советы
Предполагая, что это будет в конечном итоге работать в браузере, кто-то может просто просматривать источник и скопировать - вставить его (вы говорили «любые средства» :-).
Кроме того, если кто-то может получить произвольный JavaScript для работы на вашем сайте, сохраняя ключ в секрете, является наименьшим количеством ваших проблем.
Единственное, что вы можете сделать, это шифруйте и расшифруете Super_Secret, Server-Side. Если вы отправляете незашифрованные данные клиенту или предоставьте его средства для расшифровки ваших данных, ваши данные доступны клиенту, и вы не должны полагаться на его скрытие.