Entrada a los programas, visibilidad y posibilidades de espiar
En Why you should use STDIN to read your program arguments nos recordaban hace unas semanas que la lectura de parámetros para un programa es más segura si se hace desde la entrada estándar que desde variables de entorno o parámetros de la línea de órdenes.
STDIN is more secure than environment variables or command-line arguments
Algunas razones son que los parámetros de la línea de órdenes son visibles cuando se ejecuta la instrucción ps
, lo que significa que cualquier usuario local podría verlos y, por lo tanto, obtener información útil.
When you pass command-line arguments to a program, they are visible to anyone who can run the ps command. Allowing others to read arguments is a security risk if the arguments contain sensitive information like passwords or API keys.
Por otra parte, cuando hablamos de las variables de entorno también son accesibles para alguien que pueda ejecutar ps
(ps eww <PID>
), y además son visibles para el programa y, por lo tanto, cualquier parte de nuestra aplicación podría tener acceso a ellas.
Environment variables are also visible to anyone who can run the ps command. They are also globally visible to the program, so any arbitrary code in your application can extract the environment variables.
Sin embargo, si usamos STDIN, lo que hay allí no es visible para ps
, y tampoco es visible de manera global para todo el programa.
STDIN is more secure because it is not visible to the ps command and is not globally visible to the program. Thus, only the parts of the program that explicitly read from STDIN can access this data.
Luego da algún ejemplo sobre la forma de hacerlo en Go, y cómo integrarlo con otros mecanismos para guardar información.