¿Cómo borrar de forma segura los parámetros de JavaScript después de su uso? [duplicar]

0

Cuando paso una contraseña como parámetro a una función, supongo que terminará en una pila o montón.

Cuando esta función vuelva, espero que mi contraseña aún esté en la memoria en algún lugar hasta que sea recogida de basura y, con suerte, eliminada antes de ser liberada.

¿Qué pueden hacer los desarrolladores para borrar de forma segura estos parámetros tan pronto como ya no sean necesarios o cuando se devuelva la función?

¿La asignación de "some string" o {dumb: "object"} a un parámetro logra esto?

    
pregunta philcolbourn 27.08.2018 - 13:05
fuente

1 respuesta

1

Su sugerencia, sobrescribir asignando un nuevo valor a la variable, no funcionará (al menos no en ninguna implementación de JS en uso en los navegadores comunes). Las cadenas de JavaScript son inmutables, lo que significa que cuando asignas un nuevo valor a una variable de cadena, se crea una nueva cadena en algún lugar del montón. No sobrescribe la anterior. Envolverlo en un objeto, como en el segundo ejemplo, no cambia esto.

El recolector de basura en JavaScript se extrae, y no hay API para que interactúes con él. Por lo tanto, no puede controlar directamente lo que hace o decirle que elimine un valor de la memoria de una vez.

Puede haber algún tipo de truco inteligente / truco feo en el que puedes intentar influir en el comportamiento del GC, pero dudo que valga la pena el esfuerzo. Le recomiendo que piense sobre la amenaza contra la que está tratando de defenderse y considere si realmente es un problema para usted que la contraseña permanezca en la memoria.

Editar: Como dandavis se resalta correctamente en los comentarios, hay tipos de JavaScript que puede ser sobrescrito, por ejemplo arrays mecanografiados. Sin embargo, aún necesita obtener los datos confidenciales en uno de ellos sin que todos estén almacenados en una variable "ordinaria". Si solo lo copia de input.value no ha ganado nada. No sé cómo hacerlo y, sinceramente, no me molestaría en intentarlo.

    
respondido por el Anders 27.08.2018 - 15:33
fuente

Lea otras preguntas en las etiquetas