senhas - Ocultar uma senha em um script python(apenas insegurança ofuscante)




script para descobrir senhas (11)

A melhor solução, assumindo que o nome de usuário e a senha não podem ser dados em tempo de execução pelo usuário, é provavelmente um arquivo de origem separado contendo apenas a inicialização da variável para o nome de usuário e senha importados para o código principal. Este arquivo só precisaria ser editado quando as credenciais forem alteradas. Caso contrário, se você está preocupado apenas com surfistas de ombro com memória média, a codificação de base 64 é provavelmente a solução mais fácil. O ROT13 é muito fácil de decodificar manualmente, não diferencia maiúsculas de minúsculas e retém muito significado em seu estado criptografado. Codifique sua senha e id de usuário fora do script python. Ele tem o script decodificado em tempo de execução para uso.

Dar credenciais de scripts para tarefas automatizadas é sempre uma proposta arriscada. Seu script deve ter suas próprias credenciais e a conta usada não deve ter acesso diferente do que é necessário. Pelo menos a senha deve ser longa e bastante aleatória.

Eu tenho um script python que está criando uma conexão ODBC. A conexão ODBC é gerada com uma cadeia de conexão. Nesta cadeia de conexão eu tenho que incluir o nome de usuário e senha para esta conexão.

Existe uma maneira fácil de obscurecer essa senha no arquivo (só que ninguém pode ler a senha quando estou editando o arquivo)?


Aproximação mais caseira em vez de converter autenticação / senhas / nome de usuário em detalhes criptografados. FTPLIB é apenas o exemplo. " pass.csv " é o nome do arquivo csv

Salvar senha no CSV, como abaixo:

user_name

senha do usuário

(Sem cabeçalho de coluna)

Lendo o CSV e salvando-o em uma lista.

Utilizando elelments de lista como detalhes de autenticação.

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])

Base64 é o caminho a percorrer para as suas necessidades simples. Não há necessidade de importar nada:

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

Coloque as informações de configuração em um arquivo de configuração criptografado. Consultar esta informação no seu código usando uma chave. Coloque essa chave em um arquivo separado por ambiente e não a armazene com seu código.


Este é um problema bastante comum. Normalmente, o melhor que você pode fazer é

A) criar algum tipo de função de cifra ceasar para codificar / decodificar (apenas não rot13) ou B) o método preferido é usar uma chave de criptografia, ao alcance de seu programa, codificar / decodificar a senha. Em que você pode usar proteção de arquivos para proteger o acesso a chave. Nesse sentido, se seu aplicativo for executado como um serviço / daemon (como um servidor da Web), você poderá colocar sua chave em um keystore protegido por senha com a entrada de senha como parte da inicialização do serviço. Será necessário um administrador para reiniciar o aplicativo, mas você terá uma boa aparência para as senhas de configuração.


Existem vários utilitários ROT13 escritos em Python no 'Net - apenas google para eles. ROT13 codifica a string offline, copia na fonte, decodifica no ponto de transmissão.

Mas isso é realmente uma proteção fraca ...


O Douglas F Shearer's é a solução geralmente aprovada no Unix quando você precisa especificar uma senha para um login remoto.
Você adiciona uma opção --password-from-file para especificar o caminho e ler o texto sem formatação de um arquivo.
O arquivo pode então estar na área do usuário protegida pelo sistema operacional. Também permite que usuários diferentes selecionem automaticamente seu próprio arquivo.

Para senhas que o usuário do script não tem permissão para saber - você pode executar o script com permissão elavada e ter o arquivo de senha de propriedade daquele usuário root / admin.


Se estiver executando no Windows, você pode considerar o uso da biblioteca win32crypt. Ele permite o armazenamento e a recuperação de dados protegidos (chaves, senhas) pelo usuário que está executando o script, portanto, as senhas nunca são armazenadas em texto não criptografado ou em formato ofuscado em seu código. Não tenho certeza se existe uma implementação equivalente para outras plataformas, portanto, com o uso estrito do win32crypt, seu código não é portátil.

Eu acredito que o módulo pode ser obtido aqui: http://timgolden.me.uk/pywin32-docs/win32crypt.html


Seu sistema operacional provavelmente fornece recursos para criptografar dados com segurança. Por exemplo, no Windows há DPAPI (API de proteção de dados). Por que não perguntar ao usuário suas credenciais na primeira vez que você executa e, em seguida, as criptografa para executar posteriormente?


Você conhece pit?

https://pypi.python.org/pypi/pit (somente py2 (versão 0.3))

https://github.com/yoshiori/pit (funcionará no py3 (versão atual 0.4))

test.py

from pit import Pit

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

Corre:

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

~ / .pit / default.yml:

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

A codificação Base64 está na biblioteca padrão e fará para impedir os surfistas de ombro:

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




security