2015-09-04 5 views
1

Позвольте мне объяснить название.Можно ли безопасно разыменовать строку

Скажем, у нас есть строка, содержащая пароль, когда мы отправили этот pw, например, в BE hashed и salted, мы хотели бы избавиться от ценности когда-либо.

Так сказать, это не представляется возможным:

var pw = 'somePw'; 
// later 
pw = 'someGarbage'; 

Строки неизменны, поэтому мы не будем переписывать значение в памяти, но создание нового и старое значение по-прежнему присутствует в памяти, но разыменовываются поэтому free'd от GC, мы можем немедленно избавиться от него -> небезопасно.

Как я могу преодолеть эту проблему ?!

+0

Какая проблема вы пытаетесь решить? Только тот, кто имеет доступ к машине, сможет сбросить свою память. – Barmar

+3

У вас нет проблем, вы слишком сложны. – Tomalak

+0

Я не думаю, что есть доступ к необработанной памяти механизма Javascript. – Barmar

ответ

0

Я не уверен, как работает внутренняя часть JavaScript, и это, вероятно, зависит от реализации, но, возможно, вы можете сохранить это значение как свойство объекта, а затем просто удалить свойство. Поскольку удаление свойства помещает его в сборку мусора, а затем free'd, но я не знаю, будет ли значение по-прежнему где-то в памяти.

var passwordObject = { pass: "somepass" }; 

delete passwordObject.pass; 
+0

Спасибо, я тоже подумал, может, это сработает, но я не уверен. Что означает использование delete? Означает ли это, что он удалит область памяти или будет ли она обозначать ее как «бесплатную GCd»? –

+0

прочитал мои последние изменения ... – thephpdev

0

Вы можете сохранить pw в объекте и использовать на нем оператор удаления по завершении.

var user = { 
    password: "pw" 
} 

delete user.password 

Вы также можете установить pw = null

Оба способа освободить место в памяти после того, как цикл сбора мусора имеет место.

Douglas crockford предпочитает более поздний метод, а не первый http://javascript.crockford.com/memory/leak.html , поскольку он объясняет некоторые проблемы с утечкой памяти, связанные с первым методом. Однако я не думаю, что это все еще проблема в современных браузерах.

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