我目前正在构建通过Mongolabs使用外部MongoDb的Web应用程序。 api基于在URL中使用的个人密钥。正如文档所说:
以下是完整资源网址的示例:
https://api.mongolab.com/api/1/databases?apiKey=的 2E81PUmPFI84t7UIc_5YdldAp1ruUPKye 所以问题是如何安全地存储这样的api密钥 2E81PUmPFI84t7UIc_5YdldAp1ruUPKye
阅读关于跨站点请求伪造的Django文档但是stil不明白密钥的记录位置。
答案 0 :(得分:1)
有两种方法可以做到这一点。
一种方法是将local_settings.py
文件导入主settings.py
文件并放入.gitignore
,以便它不在git中。然而,有些人认为这不是一种好的做法,因为它可能会在VCS中放置复杂的东西,因此人们有效地拥有不同的环境。然而,我很好。
try:
from local_settings import *
except ImportError:
pass # No local_settings file
另一种方式(由第一种方式的不喜欢者推荐)是通过环境变量设置它,并在settings.py
中读取它们。
MONGO_API_KEY = os.environ['MONGO_API_KEY']
然后你必须以某种方式传递环境变量。例如。通过uwsgi的环境设置,或通过导出或其他方式在bash中设置它。
答案 1 :(得分:0)
我会在设置文件中执行此操作并从环境变量加载它。看看Django Settings
答案 2 :(得分:0)
一种选择是使用库django-fernet-fields,该库使用库加密。
用法非常简单。在模型中,您需要添加新字段:
from django.db import models
from fernet_fields import EncryptedTextField
class MyModel(models.Model):
apikey = EncryptedTextField()
默认情况下,将使用您设置中的SECRET_KEY对字段进行加密。因此,如果您更改或丢失它,则将无法访问您的数据。
为了提高安全性,可以将SECRET_KEY保存为环境变量,然后将其传递到设置文件。
import os
SECRET_KEY = os.environ.get('APP_SECRET_KEY', 'unsafe-secret-key')