OVH Cloud OVH Cloud

password = '*******' comment procéder ?

3 réponses
Avatar
ctobini
Bonjour,

J'utilise un script se connectant =E0 une base de donn=E9es, ce script
permet de demander le login et mot de passe =E0 cette base.

Pour un certain besoin, je souhaite rentrer directement dans le script
les infos login, serveur et mot de passe dans ce script afin qu'il s'y
connecte automatiquement.

Je voudrais savoir si un module existe pour qu'une variable stockant le
mot de passe soit repr=E9sent=E9e par des =E9toiles (ou autres) afin qu'il
soit illisible y compris pour les personnes ayant acc=E8s en lecture au
script :

password =3D '*****' par exemple

Merci.

C=2E Tobini

3 réponses

Avatar
Laurent Pointal
ctobini wrote:
Bonjour,

J'utilise un script se connectant à une base de données, ce script
permet de demander le login et mot de passe à cette base.

Pour un certain besoin, je souhaite rentrer directement dans le script
les infos login, serveur et mot de passe dans ce script afin qu'il s'y
connecte automatiquement.

Je voudrais savoir si un module existe pour qu'une variable stockant le
mot de passe soit représentée par des étoiles (ou autres) afin qu'il
soit illisible y compris pour les personnes ayant accès en lecture au
script :

password = '*****' par exemple

Merci.

C. Tobini



Si ton programme a le moyen de le décrypter sans aide extérieure et que
tu le mets dans ton source... alors ce n'est IMHO pas possible.

Mais si tu veux 'masquer' ton mot de passe:
"The great password".encode("rot13")
'Gur terng cnffjbeq'



"The great password".encode("zip")
'xx9cx0bxc9HUH/JM,Q(H,..xcf/Jx01x00>x96x06xe8'



'Gur terng cnffjbeq'.decode("rot13")
u'The great password'



'xx9cx0bxc9HUH/JM,Q(H,..xcf/Jx01x00>x96x06xe8'.decode("zip")
'The great password'




(tu peux utiliser tout autre codec réversible)

Essaie de ne pas appeler ta variable *password*.

A+

Laurent.



Avatar
Olivier
Je voudrais savoir si un module existe pour qu'une variable stockant le
mot de passe soit représentée par des étoiles (ou autres) afin qu'il
soit illisible y compris pour les personnes ayant accès en lecture au
script :


Je ne crois vraiment pas que ce soit possible. Un fichier texte est un
fichier texte, il n'y a pas de mystères.

Les gens sérieux te diront que tu as sans doute un problème de sécurité
dans ta base de données, avec des droits d'accès qui sont mal réglés, et
qu'il n'est pas sain de laisser un script se connecter automatiquement.

Mais si tu ne trouves pas de bonne solution à tout problème, en voici
une mauvaise :

Crée un script avec une fonction translate et une fonction reverse qui
fait l'aller-retour entre ton mot de passe en clair et ton mot de passe
codé.
Exemple :

translate.py:
def translate(mstr):
"""
transforme 'mypasswd' en '109.121.112.97.115.115.119.100'
"""
return ".".join([str(ord(x)) for x in list(mstr)])

def reverse(mstr):
return "".join([chr(int(x)) for x in mstr.split(".")])

def test(passw):
print passw
y = translate(passw)
print reverse(y)


Importe ce module dans ton script de connexion et utilise la fonction
reverse dans ta chaîne de connexion.

connect.py:
importe translate

fake_passwd = "109.121.112.97.115.115.119.100"
passwd = translate.reverse(fake_passwd)
db.connect(user="username", passwd = passwd, server = "localhost")


translate.py sera compilé en translate.pyc, fichier binaire suffisamment
illisible pour un utilisateur non-averti, plus hermétique en tout cas
qu'une fonction de codage genre rot13 que tu appellerais directement
dans ton script de connexion.


Ensuite, protège translate.py en lecture, déplace-le ou détruis-le,
python n'a besoin que du .pyc

Tu peux bien sûr raffiner, rajouter du fud dans les fonctions, les
écrire en c et en faire un .pyd...


Olivier

Avatar
Laurent Pointal
Olivier wrote:
translate.py sera compilé en translate.pyc, fichier binaire suffisamment
illisible pour un utilisateur non-averti, plus hermétique en tout cas
qu'une fonction de codage genre rot13 que tu appellerais directement
dans ton script de connexion.


Ensuite, protège translate.py en lecture, déplace-le ou détruis-le,
python n'a besoin que du .pyc

Tu peux bien sûr raffiner, rajouter du fud dans les fonctions, les
écrire en c et en faire un .pyd...


Tiens, au passage, voir peut-être à coder ça en Pyrex, ça fera un module
compilé en natif... encore moins lisible.

http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/

[mais tout ça n'empèchera l'accès au mot de passe qu'a un utilisateur
lambda - pas un petit bidoulleur]