Frias
Frias

Reputation: 11281

What is the best way of hide a password?

I have a Python script that is connecting to the database. To that, obviously, I need the password. I need to hide it somewhere.

My problem is that this code is stored in a folder that everybody who has access to the server can look. So, if I write this password encrypted in a file, in the code will appear the key to discover it and people can figured it out.

So, please, if anyone has an idea..

Upvotes: 13

Views: 9826

Answers (5)

Michael Lorton
Michael Lorton

Reputation: 44376

Just to reinforce what Brian said, if a program runs automatically (i.e., without the opportunity to prompt the user for a password), any program that runs under the same user authority has the same access to any password. It's not clear what else you could do. Perhaps if the (trusted) operating system on the client machine could certify to the host that it was being accessed by a program run from a particular path, the host could be told "Only open the database to /var/lib/tomcat/bin/tomcat on appserver.example.com". If you accomplish all that, an attacker would have to compromise the tomcat executable to get to the database.

Upvotes: 0

Spyros
Spyros

Reputation: 48596

A more advanced idea is to do the mysql authentication manually. That is, learn the mysql protocol (it's a standard handshake with a challenege and a response) and do the procedure yourself. This way, you never send the password directly.

Upvotes: -1

Daniel Pryden
Daniel Pryden

Reputation: 60917

Don't store the database connection credentials in the Python file at all. Instead, store them in a secure place, readable only by the user account that the script will run under.

For example, create a user account for running this job, and create a file in that user account's home directory (readable only by that user) called database.ini and put the database connection string and password there. Then use the Python ConfigParser class in the standard library to read the file in.

Then the job can be always run under that user account. You can also run it under your account by putting a database.ini file in your home directory with the correct credentials, but anyone who doesn't have the credentials cannot run it.

Upvotes: 7

Jon Egerton
Jon Egerton

Reputation: 41539

Check out this question. They suggest encoding the password in base64 (outside of the script) then including that string in the script and converting it back before you make the connection

Upvotes: 1

Brian Roach
Brian Roach

Reputation: 76888

You're using a scripting language and accessing a database directly with a password. No matter what you do, at some level that password is going to be easily accessible. Obscuring it doesn't really buy you much.

You have to rely on the machine's security and permissions, and perhaps the database (restricting access from that particular machine and user).

Upvotes: 10

Related Questions