Let’s take a look at an easy module today – the Python-dotenv module. A lot of the time on a website, you might wonder as to how the security of this website could be threatened as some aspects of the code are bound to have to receive information from an endpoint or a particular domain.
A good example of this would be the utilization of SECRET_KEYS in GitHub, or the usage of them in Django projects.
While it might be fine to have these keys/secrets exposed during development, it’s quite risky to continue to let them stay out in the open even in the production stage when it’s open to everyone.
This might lead to a lot of issues with malicious people trying to DDoS attack, or retrieve vital information from your website or application.
So, you might ask, what’s the solution to this, and how do I keep my credentials safe?
Well, fortunately, we have the python-dotenv module that can help us work with SECRETS and KEYS without exposing them to the outside world, and keep them safe during development too!
1.0 How does python-dotenv work?
To simply answer your question, it’s by introducing the concept of a file that contains all of the credentials in one place.
We’ll be using this file everywhere, whenever we need the credentials, but, without exposing any of the keys themselves, as the file only exists on the development system, or the hosting system, and is not available as a part of the code itself.
1.1 What’s the name of this file?
The file is named with a
.env extension in most places, and is named as such even in this article.
1.2 Accessing this file in the code?
We’ll be using a handy module called the
python-dotenv module in order to use these SECRET_KEYS, in the code.
python-dotenv module is configured in the
settings.py file in the project, and is done in such a way that we can access keys pretty discretely.
It’s a pretty simple idea and you’ll know what I mean by the time we’re done, so, let’s get to working with it!
The installation of the
python-dotenv module is pretty straightforward and can be achieved through a simple command, for the
pip install -U python-dotenv
Using the python-dotenv module
If you’re done installing it, let’s get to setting up the rest of the code so that you never have to worry about exposing your credentials again.
2.1 Setting up .env
Before you go ahead with trying to use credentials in your project files, it is important to note that you first need to have details recorded in your
.env file to be able to use them.
So, let’s create a
.env file, and input some credentials into it, which we will be using in the project.
# .env file
We’ve inserted our randomly generated SECRET_KEY, DOMAIN, and EMAIL, into the
.env file, and that’s about enough for now.
2.2 Working with settings.py to parse credentials
A large number of projects use the
settings.py file in order to specify settings that are particular to their project.
In the Django Framework, the
settings.py file is used to record information regarding the components of the project that are used, as well as specifications that are crucial to connecting the project together.
There is a similar reasoning behind the creation of the
settings.py in the Flask Framework as well.
As such, we’re going to create our own
settings.py which can help us use the
python-dotenv module to work with SECRETS in our projects, as an example.
## importing the load_dotenv from the python-dotenv module
from dotenv import load_dotenv
## using existing module to specify location of the .env file
from pathlib import Path
env_path = Path('.')/'.env'
# retrieving keys and adding them to the project
# from the .env file through their key names
SECRET_KEY = os.getenv("SECRET_KEY")
DOMAIN = os.getenv("DOMAIN")
EMAIL = os.getenv("EMAIL")
In case you wish to follow along or edit an existing
settings.py, feel free to do so, as the procedure is quite simple and does not pose a risk.
- Importing the python-dotenv module
In this code, we import the
python-dotenv for the
load_dotenv functionality, which sets the environment variable keys for us to work with. This means that all the SECRETS in the
.env file, can now be accessed as environment variables for this project.
We import the
Path function from the
pathlib module to access the
.env file, and the
os module to work with the environment variable keys that are created due to the
- The env_path variable
We use the env_path as a means to specify the directory in which the
.env file is stored.
In this example, the file is stored in the same directory as the
settings.py, and so the current directory is specified.
- The os.getenv function
This is the function that is used to retrieve the environment variable keys, if they exist.
We use this function to retrieve the keys that we need from the
2.3 Suggestions for distributed development of applications
During the development stage, it is a good idea to keep your team informed about the required credentials and provide them with their own copies of the
.env file. This way, they can work on the project, test, and debug without any issue.
Keep in mind that there’s an option to generate a new secret key in the case that you’ve accidentally exposed it, so, there’s no need to panic.
Plus, it’s generally a good idea to generate a new key before deployment as a safety measure!
A large number of security vulnerabilities can be resolved by taking care of leaked credentials, and the
python-dotenv helps in developing a safer project environment to work with, both, during and after development as well.
Overall, there’s quite the sense of being able to sleep at night comfortably, knowing that people won’t be able to get their hands on your copy of the
Here’s to a more secure system, Cheers!