validar usuario solicitar programa ocultar getpass contraseña python security

usuario - solicitar contraseña en python



Ocultar una contraseña en una secuencia de comandos python(ofuscación insegura solamente) (14)

¿Conoces a pit?

https://pypi.python.org/pypi/pit (solo py2 (versión 0.3))

https://github.com/yoshiori/pit (funcionará en py3 (versión actual 0.4))

test.py

from pit import Pit config = Pit.get(''section-name'', {''require'': { ''username'': ''DEFAULT STRING'', ''password'': ''DEFAULT STRING'', }}) print(config)

Correr:

$ python test.py {''password'': ''my-password'', ''username'': ''my-name''}

~ / .pit / default.yml:

section-name: password: my-password username: my-name

Tengo un script de python que está creando una conexión ODBC. La conexión ODBC se genera con una cadena de conexión. En esta cadena de conexión, tengo que incluir el nombre de usuario y la contraseña para esta conexión.

¿Hay alguna manera fácil de ocultar esta contraseña en el archivo (solo que nadie puede leer la contraseña cuando estoy editando el archivo)?


¿Qué hay de importar el nombre de usuario y la contraseña de un archivo externo al script? De esa manera, incluso si alguien consigue el guión, no obtendría automáticamente la contraseña.


Aquí hay un método simple:

  1. Cree un módulo de python; llamémosle peekaboo.py.
  2. En peekaboo.py, incluya tanto la contraseña como cualquier código que necesite esa contraseña
  3. Cree una versión compilada - peekaboo.pyc - mediante la importación de este módulo (a través de la línea de comandos de Python, etc ...).
  4. Ahora, elimine peekaboo.py.
  5. Ahora puede importar felizmente peekaboo confiando solo en peekaboo.pyc. Como peekaboo.pyc está compilado en bytes, no es legible para el usuario casual.

Esto debería ser un poco más seguro que la decodificación base64, aunque es vulnerable a un decompilador py_to_pyc.


Coloque la información de configuración en un archivo de configuración cifrado. Consulta esta información en tu código usando una clave. Coloque esta clave en un archivo separado por entorno y no la almacene con su código.


Douglas F Shearer''s es la solución generalmente aprobada en Unix cuando necesita especificar una contraseña para un inicio de sesión remoto.
Agrega una opción --password-from-file para especificar la ruta y leer el texto sin formato de un archivo.
El archivo puede estar en el área del usuario protegida por el sistema operativo. También permite que diferentes usuarios recojan automáticamente su propio archivo.

Para las contraseñas que el usuario de la secuencia de comandos no puede conocer, puede ejecutar la secuencia de comandos con el permiso elavado y tener el archivo de contraseña propiedad de ese usuario raíz / administrador.


Este es un problema bastante común. Por lo general, lo mejor que puedes hacer es o bien

A) crear algún tipo de función de cifrado ceasar para codificar / decodificar (simplemente no rot13) o B) el método preferido es utilizar una clave de cifrado, al alcance de su programa, codificar / decodificar la contraseña. En el que puede usar la protección de archivos para proteger el acceso a la clave. En ese sentido, si su aplicación se ejecuta como un servicio / daemon (como un servidor web) puede poner su clave en un almacén de claves protegido por contraseña con la entrada de contraseña como parte del inicio del servicio. Le tomará un administrador reiniciar su aplicación, pero tendrá una pretección muy buena para sus contraseñas de configuración.


Hay varias utilidades ROT13 escritas en Python en la ''Red - solo google para ellas. ROT13 codifica la cadena sin conexión, cópiela en la fuente, descifre en el punto de transmisión.

Pero esta es una protección realmente débil ...


La mejor solución, suponiendo que el usuario no puede dar el nombre de usuario y la contraseña en tiempo de ejecución, es probablemente un archivo fuente separado que contiene solo la inicialización de la variable para el nombre de usuario y la contraseña que se importa en el código principal. Este archivo solo necesitaría edición cuando cambien las credenciales. De lo contrario, si solo te preocupan los surfistas con recuerdos promedio, la codificación de la base 64 es probablemente la solución más fácil. ROT13 es demasiado fácil de decodificar manualmente, no distingue entre mayúsculas y minúsculas y conserva mucho significado en su estado encriptado. Codifique su contraseña e ID de usuario fuera de la secuencia de comandos de python. ¿Ha decodificado secuencias de comandos en tiempo de ejecución para su uso.

Dar credenciales de scripts para tareas automatizadas siempre es una propuesta arriesgada. Su secuencia de comandos debe tener sus propias credenciales y la cuenta que utiliza no debe tener otro acceso que no sea exactamente lo que es necesario. Al menos la contraseña debe ser larga y bastante aleatoria.


Más aplicaciones propias en lugar de convertir autenticación / contraseñas / nombre de usuario en detalles encriptados. FTPLIB es solo el ejemplo. " pass.csv " es el nombre del archivo csv

Guarde la contraseña en CSV como a continuación:

user_name

contraseña de usuario

(Sin encabezado de columna)

Leyendo el CSV y guardándolo en una lista.

Usar elementos de lista como detalles de autenticación.

Código completo.

import os import ftplib import csv cred_detail = [] os.chdir("Folder where the csv file is stored") for row in csv.reader(open("pass.csv","rb")): cred_detail.append(row) ftp = ftplib.FTP(''server_name'',cred_detail[0][0],cred_detail[1][0])


Si está trabajando en un sistema Unix, aproveche el módulo netrc en la biblioteca estándar de Python. Lee las contraseñas de un archivo de texto separado (.netrc), que tiene el formato descrito here .

Aquí hay un pequeño ejemplo de uso:

import netrc # Define which host in the .netrc file to use HOST = ''mailcluster.loopia.se'' # Read from the .netrc file in your home directory secrets = netrc.netrc() username, account, password = secrets.authenticators( HOST ) print username, password


Si se ejecuta en Windows, podría considerar usar la biblioteca win32crypt. Permite el almacenamiento y la recuperación de datos protegidos (claves, contraseñas) por parte del usuario que ejecuta el script, por lo que las contraseñas nunca se almacenan en formato de texto claro u ofuscado en el código. No estoy seguro de si existe una implementación equivalente para otras plataformas, por lo que con el uso estricto de win32crypt su código no es portátil.

Creo que el módulo se puede obtener aquí: http://timgolden.me.uk/pywin32-docs/win32crypt.html


Su sistema operativo probablemente proporcione instalaciones para encriptar datos de forma segura. Por ejemplo, en Windows hay DPAPI (API de protección de datos). ¿Por qué no le pides al usuario sus credenciales la primera vez que corres y luego las arrancas encriptadas para las siguientes ejecuciones?


base64 es el camino a seguir para sus necesidades simples. No hay necesidad de importar nada:

>>> ''your string''.encode(''base64'') ''eW91ciBzdHJpbmc=/n'' >>> _.decode(''base64'') ''your string''


La codificación de Base64 está en la biblioteca estándar y hará para detener a los navegantes de hombro:

>>> import base64 >>> print base64.b64encode("password") cGFzc3dvcmQ= >>> print base64.b64decode("cGFzc3dvcmQ=") password